Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
d597af9e1e | |||
03ed819717 | |||
141535c9db | |||
a92947fcdb | |||
cde5237a88 | |||
dc79792ab4 | |||
e6a9f700de | |||
0fdd37ee19 | |||
40e8d60ecd | |||
f81b0e35a6 | |||
5e98eaaaff | |||
9e8767917d | |||
f89439ae09 | |||
3cd2a27ac0 | |||
28d94b7248 | |||
abd8e75cb7 | |||
9046107183 |
@ -58,6 +58,8 @@ This is the default mode. You can adjust the cursor and scrolling acceleration u
|
||||
|`MOUSEKEY_INTERVAL` |50 |Time between cursor movements |
|
||||
|`MOUSEKEY_MAX_SPEED` |10 |Maximum cursor speed at which acceleration stops |
|
||||
|`MOUSEKEY_TIME_TO_MAX` |20 |Time until maximum cursor speed is reached |
|
||||
|`MOUSEKEY_WHEEL_DELAY` |300 |Delay between pressing a wheel key and wheel movement |
|
||||
|`MOUSEKEY_WHEEL_INTERVAL` |100 |Time between wheel movements |
|
||||
|`MOUSEKEY_WHEEL_MAX_SPEED` |8 |Maximum number of scroll steps per scroll action |
|
||||
|`MOUSEKEY_WHEEL_TIME_TO_MAX`|40 |Time until maximum scroll speed is reached |
|
||||
|
||||
@ -66,6 +68,7 @@ Tips:
|
||||
* Setting `MOUSEKEY_DELAY` too low makes the cursor unresponsive. Setting it too high makes small movements difficult.
|
||||
* For smoother cursor movements, lower the value of `MOUSEKEY_INTERVAL`. If the refresh rate of your display is 60Hz, you could set it to `16` (1/60). As this raises the cursor speed significantly, you may want to lower `MOUSEKEY_MAX_SPEED`.
|
||||
* Setting `MOUSEKEY_TIME_TO_MAX` or `MOUSEKEY_WHEEL_TIME_TO_MAX` to `0` will disable acceleration for the cursor or scrolling respectively. This way you can make one of them constant while keeping the other accelerated, which is not possible in constant speed mode.
|
||||
* Setting `MOUSEKEY_WHEEL_INTERVAL` too low will make scrolling too fast. Setting it too high will make scrolling too slow when the wheel key is held down.
|
||||
|
||||
Cursor acceleration uses the same algorithm as the X Window System MouseKeysAccel feature. You can read more about it [on Wikipedia](https://en.wikipedia.org/wiki/Mouse_keys).
|
||||
|
||||
|
@ -51,7 +51,7 @@ On the display tab click 'Open stroke display'. With Plover disabled you should
|
||||
|
||||
## Learning Stenography
|
||||
|
||||
* [Learn Plover!](https://sites.google.com/site/ploverdoc/)
|
||||
* [Learn Plover!](https://sites.google.com/site/learnplover/)
|
||||
* [QWERTY Steno](http://qwertysteno.com/Home/)
|
||||
* [Steno Jig](https://joshuagrams.github.io/steno-jig/)
|
||||
* More resources at the Plover [Learning Stenography](https://github.com/openstenoproject/plover/wiki/Learning-Stenography) wiki
|
||||
|
65
docs/getting_started_github.md
Normal file
65
docs/getting_started_github.md
Normal file
@ -0,0 +1,65 @@
|
||||
# How to Use Github with QMK
|
||||
|
||||
Github can be a little tricky to those that aren't familiar with it - this guide will walk through each step of forking, cloning, and submitting a pull request with QMK.
|
||||
|
||||
?> This guide assumes you're somewhat comfortable with running things at the command line, and have git installed on your system.
|
||||
|
||||
Start on the [QMK Github page](https://github.com/qmk/qmk_firmware), and you'll see a button in the upper right that says "Fork":
|
||||
|
||||

|
||||
|
||||
If you're a part of an organization, you'll need to choose which account to fork it to. In most circumstances, you'll want to fork it to your personal account. Once your fork is completed (sometimes this takes a little while), click the "Clone or Download" button:
|
||||
|
||||

|
||||
|
||||
And be sure to select "HTTPS", and select the link and copy it:
|
||||
|
||||

|
||||
|
||||
From here, enter `git clone --recurse-submodules ` into the command line, and then paste your link:
|
||||
|
||||
```
|
||||
user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
|
||||
Cloning into 'qmk_firmware'...
|
||||
remote: Enumerating objects: 9, done.
|
||||
remote: Counting objects: 100% (9/9), done.
|
||||
remote: Compressing objects: 100% (5/5), done.
|
||||
remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
|
||||
Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
|
||||
Resolving deltas: 100% (119972/119972), done.
|
||||
...
|
||||
Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
|
||||
Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
|
||||
Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
|
||||
Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
|
||||
Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
|
||||
```
|
||||
|
||||
You now have your QMK fork on your local machine, and you can add your keymap, compile it and flash it to your board. Once you're happy with your changes, you can add, commit, and push them to your fork like this:
|
||||
|
||||
```
|
||||
user@computer:~$ git add .
|
||||
user@computer:~$ git commit -m "adding my keymap"
|
||||
[master cccb1608] adding my keymap
|
||||
1 file changed, 1 insertion(+)
|
||||
create mode 100644 keyboards/planck/keymaps/mine/keymap.c
|
||||
user@computer:~$ git push
|
||||
Counting objects: 1, done.
|
||||
Delta compression using up to 4 threads.
|
||||
Compressing objects: 100% (1/1), done.
|
||||
Writing objects: 100% (1/1), 1.64 KiB | 0 bytes/s, done.
|
||||
Total 1 (delta 1), reused 0 (delta 0)
|
||||
remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
|
||||
To https://github.com/whoeveryouare/qmk_firmware.git
|
||||
+ 20043e64...7da94ac5 master -> master
|
||||
```
|
||||
|
||||
Your changes now exist on your fork on Github - if you go back there (`https://github.com/<whoeveryouare>/qmk_firmware`), you can create a "New Pull Request" by clicking this button:
|
||||
|
||||

|
||||
|
||||
Here you'll be able to see exactly what you've committed - if it all looks good, you can finalize it by clicking "Create Pull Request":
|
||||
|
||||

|
||||
|
||||
After submitting, we may talk to you about your changes, ask that you make changes, and eventually accept it! Thanks for contributing to QMK :)
|
@ -17,7 +17,7 @@ Note that this set-up has been tested on Ubuntu 16.04 only for the moment.
|
||||
|
||||
# Prerequisites
|
||||
## Build Environment
|
||||
Before starting, you must have followed the [Getting Started](news_getting_started.md) section of the Tutorial. In particular, you must have been able to build the firmware with [the `qmk compile` command](news_building_firmware#build-your-firmware).
|
||||
Before starting, you must have followed the [Getting Started](newbs_getting_started.md) section of the Tutorial. In particular, you must have been able to build the firmware with [the `qmk compile` command](newbs_building_firmware.md#build-your-firmware).
|
||||
|
||||
## Java
|
||||
Eclipse is a Java application, so you will need to install Java 8 or more recent to be able to run it. You may choose between the JRE or the JDK, the latter being useful if you intend to do Java development.
|
||||
|
File diff suppressed because it is too large
Load Diff
17
keyboards/abacus/abacus.c
Normal file
17
keyboards/abacus/abacus.c
Normal file
@ -0,0 +1,17 @@
|
||||
/* Copyright 2020 nickolaij
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "abacus.h"
|
41
keyboards/abacus/abacus.h
Normal file
41
keyboards/abacus/abacus.h
Normal file
@ -0,0 +1,41 @@
|
||||
/* Copyright 2020 nickolaij
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "quantum.h"
|
||||
#define XXX KC_NO
|
||||
|
||||
|
||||
/* This is a shortcut to help you visually see your layout.
|
||||
*
|
||||
* The first section contains all of the arguments representing the physical
|
||||
* layout of the board and position of the keys.
|
||||
*
|
||||
* The second converts the arguments into a two-dimensional array which
|
||||
* represents the switch matrix.
|
||||
*/
|
||||
#define LAYOUT( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38 \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
|
||||
{ k30, k31, k32, k33, XXX, XXX, k34, XXX, k35, k36, k37, k38} \
|
||||
}
|
133
keyboards/abacus/config.h
Normal file
133
keyboards/abacus/config.h
Normal file
@ -0,0 +1,133 @@
|
||||
/*
|
||||
Copyright 2020 nickolaij
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x0000
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER nickolaij
|
||||
#define PRODUCT abacus
|
||||
#define DESCRIPTION A first attempt at a custom keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 12
|
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments
|
||||
*
|
||||
* Change this to how you wired your keyboard
|
||||
* COLS: AVR pins used for columns, left to right
|
||||
* ROWS: AVR pins used for rows, top to bottom
|
||||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||
*
|
||||
*/
|
||||
#define MATRIX_ROW_PINS { D3, D2, D4, C6 }
|
||||
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, D7, B3, E6, B2, B4, B6, B5}
|
||||
#define UNUSED_PINS {B0}
|
||||
|
||||
#define DIP_SWITCH_PINS { D0 }
|
||||
|
||||
#define ENCODERS_PAD_A { F1 }
|
||||
#define ENCODERS_PAD_B { F0 }
|
||||
#define ENCODER_RESOLUTION 4
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
#define RGB_DI_PIN D1
|
||||
|
||||
#ifdef RGB_DI_PIN
|
||||
# define RGBLED_NUM 17
|
||||
# define RGBLIGHT_HUE_STEP 8
|
||||
# define RGBLIGHT_SAT_STEP 8
|
||||
# define RGBLIGHT_VAL_STEP 8
|
||||
# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
|
||||
# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||
/*== choose animations ==*/
|
||||
# define RGBLIGHT_EFFECT_BREATHING
|
||||
# define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||
# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||
# define RGBLIGHT_EFFECT_SNAKE
|
||||
# define RGBLIGHT_EFFECT_KNIGHT
|
||||
# define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||
/*== customize breathing effect ==*/
|
||||
/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
|
||||
# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
|
||||
/*==== use exp() and sin() ====*/
|
||||
# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
|
||||
# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
|
||||
#endif
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
|
||||
/* disable these deprecated features by default */
|
||||
#ifndef LINK_TIME_OPTIMIZATION_ENABLE
|
||||
#define NO_ACTION_MACRO
|
||||
#define NO_ACTION_FUNCTION
|
||||
#endif
|
||||
/*
|
||||
* MIDI options
|
||||
*/
|
||||
|
||||
/* Prevent use of disabled MIDI features in the keymap */
|
||||
//#define MIDI_ENABLE_STRICT 1
|
||||
|
||||
/* enable basic MIDI features:
|
||||
- MIDI notes can be sent when in Music mode is on
|
||||
*/
|
||||
//#define MIDI_BASIC
|
||||
|
||||
/* enable advanced MIDI features:
|
||||
- MIDI notes can be added to the keymap
|
||||
- Octave shift and transpose
|
||||
- Virtual sustain, portamento, and modulation wheel
|
||||
- etc.
|
||||
*/
|
||||
//#define MIDI_ADVANCED
|
||||
|
||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
62
keyboards/abacus/info.json
Normal file
62
keyboards/abacus/info.json
Normal file
@ -0,0 +1,62 @@
|
||||
{
|
||||
"keyboard_name": "Abacus",
|
||||
"url": "https://www.github.com/nickolaij",
|
||||
"maintainer": "nickolaij",
|
||||
"width": 12.75,
|
||||
"height": 4,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"key_count": 45,
|
||||
"layout": [
|
||||
{"label":"k00", "x":0, "y":0, "w":1},
|
||||
{"label":"k01", "x":1, "y":0, "w":1},
|
||||
{"label":"k02", "x":2, "y":0, "w":1},
|
||||
{"label":"k03", "x":3, "y":0, "w":1},
|
||||
{"label":"k04", "x":4, "y":0, "w":1},
|
||||
{"label":"k05", "x":5, "y":0, "w":1},
|
||||
{"label":"k06", "x":6, "y":0, "w":1},
|
||||
{"label":"k07", "x":7, "y":0, "w":1},
|
||||
{"label":"k08", "x":8, "y":0, "w":1},
|
||||
{"label":"k09", "x":9, "y":0, "w":1},
|
||||
{"label":"k0a", "x":10, "y":0, "w":1},
|
||||
{"label":"k0b", "x":11, "y":0, "w":1.75},
|
||||
|
||||
{"label":"k10", "x":0, "y":1, "w":1.25},
|
||||
{"label":"k11", "x":1.25, "y":1, "w":1},
|
||||
{"label":"k12", "x":2.25, "y":1, "w":1},
|
||||
{"label":"k13", "x":3.25, "y":1, "w":1},
|
||||
{"label":"k14", "x":4.25, "y":1, "w":1},
|
||||
{"label":"k15", "x":5.25, "y":1, "w":1},
|
||||
{"label":"k16", "x":6.25, "y":1, "w":1},
|
||||
{"label":"k17", "x":7.25, "y":1, "w":1},
|
||||
{"label":"k18", "x":8.25, "y":1, "w":1},
|
||||
{"label":"k19", "x":9.25, "y":1, "w":1},
|
||||
{"label":"k1a", "x":10.25, "y":1, "w":1},
|
||||
{"label":"k1b", "x":11.25, "y":1, "w":1.5},
|
||||
|
||||
{"label":"k20", "x":0, "y":2, "w":1.75},
|
||||
{"label":"k21", "x":1.75, "y":2, "w":1},
|
||||
{"label":"k22", "x":2.75, "y":2, "w":1},
|
||||
{"label":"k23", "x":3.75, "y":2, "w":1},
|
||||
{"label":"k24", "x":4.75, "y":2, "w":1},
|
||||
{"label":"k25", "x":5.75, "y":2, "w":1},
|
||||
{"label":"k26", "x":6.75, "y":2, "w":1},
|
||||
{"label":"k27", "x":7.75, "y":2, "w":1},
|
||||
{"label":"k28", "x":8.75, "y":2, "w":1},
|
||||
{"label":"k29", "x":9.75, "y":2, "w":1},
|
||||
{"label":"k2a", "x":10.75, "y":2, "w":1},
|
||||
{"label":"k2b", "x":11.75, "y":2, "w":1},
|
||||
|
||||
{"label":"k30", "x":0, "y":3, "w":1.25},
|
||||
{"label":"k31", "x":1.25, "y":3, "w":1},
|
||||
{"label":"k32", "x":2.25, "y":3, "w":1},
|
||||
{"label":"k33", "x":3.25, "y":3, "w":2.75},
|
||||
{"label":"k34", "x":6, "y":3, "w":2.75},
|
||||
{"label":"k35", "x":8.75, "y":3, "w":1},
|
||||
{"label":"k36", "x":9.75, "y":3, "w":1},
|
||||
{"label":"k37", "x":10.75, "y":3, "w":1},
|
||||
{"label":"k38", "x":11.75, "y":3, "w":1}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
148
keyboards/abacus/keymaps/default/keymap.c
Normal file
148
keyboards/abacus/keymaps/default/keymap.c
Normal file
@ -0,0 +1,148 @@
|
||||
/* Copyright 2020 nickolaij
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// wait DELAY ms before unregistering media keys
|
||||
#define MEDIA_KEY_DELAY 10
|
||||
|
||||
// Defines names for use in layer keycodes and the keymap
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_UPPER,
|
||||
_LOWER
|
||||
};
|
||||
|
||||
// Defines the keycodes used by our macros in process_record_user
|
||||
enum custom_keycodes {
|
||||
NICKURL = SAFE_RANGE,
|
||||
ALTTAB
|
||||
};
|
||||
|
||||
enum unicode_names {
|
||||
LOVEEYES,
|
||||
THINK,
|
||||
UPSIDEDOWN,
|
||||
NOMOUTH,
|
||||
PARTY,
|
||||
HEART,
|
||||
EGGPLANT,
|
||||
PEACH,
|
||||
EMOJI100,
|
||||
EMOJIB
|
||||
};
|
||||
|
||||
const uint32_t PROGMEM unicode_map[] = {
|
||||
[LOVEEYES] = 0x1f60d,
|
||||
[THINK] = 0x1f914,
|
||||
[UPSIDEDOWN] = 0x1f643,
|
||||
[NOMOUTH] = 0x1f636,
|
||||
[PARTY] = 0x1f973,
|
||||
[HEART] = 0x1f495,
|
||||
[EMOJI100] = 0x1f4af,
|
||||
[PEACH] = 0x1f351,
|
||||
[EGGPLANT] = 0x1f346,
|
||||
[EMOJIB] = 0x1f171
|
||||
};
|
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Base */
|
||||
[_BASE] = LAYOUT(
|
||||
KC_ESCAPE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPACE,
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_BSLASH,
|
||||
KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_UP, KC_DELETE,
|
||||
KC_LCTRL, KC_LGUI, MO(_UPPER), KC_SPACE, KC_ENTER, MO(_LOWER), KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
[_UPPER] = LAYOUT(
|
||||
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
|
||||
ALTTAB, _______, _______, _______, _______, _______, _______, _______, KC_LBRACKET, KC_RBRACKET, KC_QUOTE, KC_SLASH,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MINUS, KC_EQUAL, _______, _______,
|
||||
KC_LALT, _______, _______, _______, _______, _______, KC_HOME, _______, KC_END
|
||||
),
|
||||
[_LOWER] = LAYOUT(
|
||||
NICKURL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
|
||||
_______, 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,
|
||||
_______, X(LOVEEYES), X(THINK), X(UPSIDEDOWN), X(NOMOUTH), X(PARTY), X(PEACH), X(HEART), X(EGGPLANT), X(EMOJI100), X(EMOJIB), RGB_HUI,
|
||||
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
|
||||
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case NICKURL:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("https://www.github.com/nickolaij");
|
||||
} else {
|
||||
tap_code(KC_ENTER);
|
||||
}
|
||||
return true;
|
||||
break;
|
||||
|
||||
case ALTTAB:
|
||||
if (record->event.pressed) {
|
||||
tap_code16(A(KC_TAB));
|
||||
}
|
||||
return true;
|
||||
break;
|
||||
|
||||
default:
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dip_switch_update_user(uint8_t index, bool active) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
if(active) {
|
||||
switch(get_highest_layer(layer_state)) {
|
||||
case _BASE:
|
||||
tap_code16(LCTL(KC_F));
|
||||
break;
|
||||
case _UPPER:
|
||||
tap_code(KC_MUTE);
|
||||
break;
|
||||
case _LOWER:
|
||||
tap_code(KC_MEDIA_PLAY_PAUSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
set_unicode_input_mode(UC_WINC);
|
||||
}
|
||||
|
||||
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||
|
||||
switch(get_highest_layer(layer_state)) {
|
||||
case _BASE:
|
||||
clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP);
|
||||
break;
|
||||
case _UPPER:
|
||||
clockwise ? tap_code(KC_VOLU) : tap_code(KC_VOLD);
|
||||
break;
|
||||
case _LOWER:
|
||||
clockwise ? tap_code(KC_MEDIA_NEXT_TRACK) : tap_code(KC_MEDIA_PREV_TRACK);
|
||||
break;
|
||||
}
|
||||
}
|
4
keyboards/abacus/keymaps/default/readme.md
Normal file
4
keyboards/abacus/keymaps/default/readme.md
Normal file
@ -0,0 +1,4 @@
|
||||
# The default keymap for Abacus
|
||||
|
||||
This is made based on my first few days of playing with it and honing in on what feels right.
|
||||
I've repurposed the DIP switch function for the encoder switches and added some functionality for multiple layers also effecting the encoders output.
|
15
keyboards/abacus/readme.md
Normal file
15
keyboards/abacus/readme.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Abacus
|
||||
|
||||

|
||||
|
||||
A first attempt at a PCB design for a mechanical keyboard. Includes rotary encoder and RGB underglow.
|
||||
|
||||
* Keyboard Maintainer: [nickolaij](https://github.com/nickolaij)
|
||||
* 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)
|
||||
* Hardware Availability: [Abacus PCB Github](https://github.com/nickolaij/Abacus_Rev2)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make abacus:default
|
||||
|
||||
See 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).
|
36
keyboards/abacus/rules.mk
Normal file
36
keyboards/abacus/rules.mk
Normal file
@ -0,0 +1,36 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
|
||||
MOUSEKEY_ENABLE = no # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = no # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||
MIDI_ENABLE = no # MIDI support
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
|
||||
UNICODEMAP_ENABLE = yes
|
||||
ENCODER_ENABLE = yes
|
||||
DIP_SWITCH_ENABLE = yes
|
||||
LTO_ENABLE = yes
|
@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@ -102,9 +102,10 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@ -189,10 +190,10 @@ int serial_transaction(int master_changed) {
|
||||
int ret=serial_update_buffers();
|
||||
#endif
|
||||
if (ret ) {
|
||||
if(ret==2) RXLED1;
|
||||
if(ret==2) writePinLow(B0);
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
memcpy(&matrix[slaveOffset],
|
||||
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
||||
return 0;
|
||||
@ -241,7 +242,7 @@ uint8_t matrix_master_scan(void) {
|
||||
if( serial_transaction(mchanged) ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@ -254,7 +255,7 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#define TAPPING_TERM 300
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
#define MASTER_LEFT
|
||||
|
||||
|
@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@ -96,37 +96,38 @@ uint8_t matrix_cols(void)
|
||||
void tx_rx_leds_init(void)
|
||||
{
|
||||
#ifndef NO_DEBUG_LEDS
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
#endif
|
||||
}
|
||||
|
||||
void tx_led_on(void)
|
||||
{
|
||||
#ifndef NO_DEBUG_LEDS
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
#endif
|
||||
}
|
||||
|
||||
void tx_led_off(void)
|
||||
{
|
||||
#ifndef NO_DEBUG_LEDS
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
#endif
|
||||
}
|
||||
|
||||
void rx_led_on(void)
|
||||
{
|
||||
#ifndef NO_DEBUG_LEDS
|
||||
RXLED1;
|
||||
writePinLow(B0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void rx_led_off(void)
|
||||
{
|
||||
#ifndef NO_DEBUG_LEDS
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -29,24 +29,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#include "serial.h"
|
||||
|
||||
// from pro_micro.h
|
||||
#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0)
|
||||
|
||||
#ifndef DISABLE_PROMICRO_LEDs
|
||||
#define TXLED0 PORTD |= (1<<5)
|
||||
#define TXLED1 PORTD &= ~(1<<5)
|
||||
#define RXLED0 PORTB |= (1<<0)
|
||||
#define RXLED1 PORTB &= ~(1<<0)
|
||||
#else
|
||||
#define TXLED0
|
||||
#define TXLED1
|
||||
#define RXLED0
|
||||
#define RXLED1
|
||||
#endif
|
||||
|
||||
#ifndef DEBOUNCE
|
||||
# define DEBOUNCE 5
|
||||
#endif
|
||||
@ -108,11 +94,12 @@ void matrix_init(void) {
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
|
||||
#ifdef DISABLE_PROMICRO_LEDs
|
||||
PORTD |= (1<<5);
|
||||
PORTB |= (1<<0);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
#endif
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
@ -158,10 +145,14 @@ int serial_transaction(void) {
|
||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||
int ret=serial_update_buffers();
|
||||
if (ret ) {
|
||||
if(ret==2)RXLED1;
|
||||
#ifndef DISABLE_PROMICRO_LEDs
|
||||
if(ret==2) writePinLow(B0);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
#ifndef DISABLE_PROMICRO_LEDs
|
||||
writePinHigh(B0);
|
||||
#endif
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
||||
}
|
||||
@ -197,8 +188,10 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
|
||||
if( serial_transaction() ) {
|
||||
#ifndef DISABLE_PROMICRO_LEDs
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
#endif
|
||||
|
||||
error_count++;
|
||||
|
||||
@ -210,8 +203,10 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
#ifndef DISABLE_PROMICRO_LEDs
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
#endif
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
@ -29,8 +29,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "config.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_I2C
|
||||
# include "i2c.h"
|
||||
@ -100,7 +100,8 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@ -201,7 +202,7 @@ uint8_t matrix_scan(void)
|
||||
if( serial_transaction() ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@ -214,7 +215,7 @@ uint8_t matrix_scan(void)
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
@ -29,7 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@ -99,9 +99,10 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@ -180,10 +181,10 @@ int serial_transaction(void) {
|
||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||
int ret=serial_update_buffers();
|
||||
if (ret ) {
|
||||
if(ret==2)RXLED1;
|
||||
if(ret==2) writePinLow(B0);
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
||||
}
|
||||
@ -235,7 +236,7 @@ uint8_t matrix_master_scan(void) {
|
||||
if( serial_transaction() ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@ -248,7 +249,7 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
@ -29,8 +29,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "config.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@ -100,7 +100,8 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@ -201,7 +202,7 @@ uint8_t matrix_scan(void)
|
||||
if( serial_transaction() ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@ -214,7 +215,7 @@ uint8_t matrix_scan(void)
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@ -100,9 +100,10 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@ -185,10 +186,10 @@ int serial_transaction(int master_changed) {
|
||||
int ret=serial_update_buffers();
|
||||
#endif
|
||||
if (ret ) {
|
||||
if(ret==2) RXLED1;
|
||||
if(ret==2) writePinLow(B0);
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
memcpy(&matrix[slaveOffset],
|
||||
(void *)serial_slave_buffer, sizeof(serial_slave_buffer));
|
||||
return 0;
|
||||
@ -239,7 +240,7 @@ uint8_t matrix_master_scan(void) {
|
||||
if( serial_transaction(mchanged) ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@ -252,7 +253,7 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
@ -9,7 +9,7 @@ MCU = atmega32u4
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = atmel-dfu
|
||||
BOOTLOADER = caterina
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#define TAPPING_TERM 300
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
#ifdef OLED_DRIVER_ENABLE
|
||||
#define OLED_DISPLAY_128X64
|
||||
|
@ -1,84 +0,0 @@
|
||||
/* Copyright 2020 ninjonas
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "ninjonas.h"
|
||||
|
||||
#ifdef ENCODER_ENABLE
|
||||
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||
if (index == 0) {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _LOWER:
|
||||
if (clockwise) {
|
||||
tap_code16(SGUI(KC_TAB));
|
||||
} else {
|
||||
tap_code16(LGUI(KC_TAB));
|
||||
}
|
||||
break;
|
||||
case _RAISE:
|
||||
if (clockwise) {
|
||||
tap_code(KC_PGUP);
|
||||
} else {
|
||||
tap_code(KC_PGDN);
|
||||
}
|
||||
break;
|
||||
case _ADJUST:
|
||||
if (clockwise) {
|
||||
rgblight_increase_hue();
|
||||
} else {
|
||||
rgblight_decrease_hue();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (clockwise) {
|
||||
tap_code(KC_BRIU);
|
||||
} else {
|
||||
tap_code(KC_BRID);
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else if (index == 1) {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _LOWER:
|
||||
if (clockwise) {
|
||||
tap_code(KC_UP);
|
||||
} else {
|
||||
tap_code(KC_DOWN);
|
||||
}
|
||||
break;
|
||||
case _RAISE:
|
||||
if (clockwise) {
|
||||
tap_code16(LCTL(KC_TAB));
|
||||
} else {
|
||||
tap_code16(LCTL(LSFT(KC_TAB)));
|
||||
}
|
||||
break;
|
||||
case _ADJUST:
|
||||
if (clockwise) {
|
||||
rgblight_increase_val();
|
||||
} else {
|
||||
rgblight_decrease_val();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (clockwise) {
|
||||
tap_code(KC_VOLU);
|
||||
} else {
|
||||
tap_code(KC_VOLD);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||
_____________________QWERTY_L2______________________, _____________________QWERTY_R2______________________,
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||
_____________________QWERTY_L3______________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________QWERTY_R3______________________,
|
||||
_____________________QWERTY_L3______________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________QWERTY_R3______________________,
|
||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||
// `----------------------------------------' `----------------------------------------'
|
||||
@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||
_____________________DVORAK_L2______________________, _____________________DVORAK_R2______________________,
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||
_____________________DVORAK_L3______________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________DVORAK_R3______________________,
|
||||
_____________________DVORAK_L3______________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________DVORAK_R3______________________,
|
||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||
// `----------------------------------------' `----------------------------------------'
|
||||
@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||
_____________________COLEMAK_L2_____________________, _____________________COLEMAK_R2_____________________,
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||
_____________________COLEMAK_L3_____________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________COLEMAK_R3_____________________,
|
||||
_____________________COLEMAK_L3_____________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________COLEMAK_R3_____________________,
|
||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||
// `----------------------------------------' `----------------------------------------'
|
||||
|
@ -105,8 +105,12 @@ void oled_white_space(void){
|
||||
oled_write_P(PSTR(" "), false);
|
||||
}
|
||||
|
||||
void oled_slash_separator(void){
|
||||
oled_write_P(PSTR(" / "), false);
|
||||
}
|
||||
|
||||
void render_layout_state(void) {
|
||||
oled_write_P(PSTR("\nLayout: "), false);
|
||||
oled_write_P(PSTR("Layout: "), false);
|
||||
switch (biton32(default_layer_state)) {
|
||||
case _COLEMAK:
|
||||
oled_write_P(PSTR("Colemak"), false);
|
||||
@ -121,6 +125,37 @@ void render_layout_state(void) {
|
||||
oled_write_ln_P(PSTR("Undefined"), false);
|
||||
}
|
||||
}
|
||||
#ifdef ENCODER_ENABLE
|
||||
static void render_encoder_state(void) {
|
||||
oled_write_P(PSTR("\nEnc: "), false);
|
||||
bool lower = layer_state_is(_LOWER) & !layer_state_is(_ADJUST);
|
||||
bool raise = layer_state_is(_RAISE) & !layer_state_is(_ADJUST);
|
||||
bool adjust = layer_state_is(_ADJUST);
|
||||
|
||||
if(lower){
|
||||
oled_write_P(PSTR("APPSW"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("UPDN"), right_encoder_rotated);
|
||||
} else if(raise){
|
||||
oled_write_P(PSTR("PGUD"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("TABSW"), right_encoder_rotated);
|
||||
} else if(adjust){
|
||||
oled_write_P(PSTR("RHUE"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("RBRI"), right_encoder_rotated);
|
||||
} else {
|
||||
oled_write_P(PSTR("BRI"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("VOL"), right_encoder_rotated);
|
||||
}
|
||||
|
||||
if (timer_elapsed(encoder_rotated_timer) > 200) {
|
||||
left_encoder_rotated = false;
|
||||
right_encoder_rotated = false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void render_layer_state(void) {
|
||||
oled_write_P(PSTR("\nLayer:"), false);
|
||||
@ -156,6 +191,9 @@ void render_mod_state(uint8_t modifiers) {
|
||||
static void render_status(void) {
|
||||
render_qmk_logo();
|
||||
render_layout_state();
|
||||
#ifdef ENCODER_ENABLE
|
||||
render_encoder_state();
|
||||
#endif
|
||||
render_layer_state();
|
||||
render_mod_state(get_mods()|get_oneshot_mods());
|
||||
}
|
||||
|
@ -3,5 +3,4 @@ ENCODER_ENABLE = yes # Enables the use of one or more encoders
|
||||
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||
LINK_TIME_OPTIMIZATION_ENABLE = yes
|
||||
|
||||
SRC += encoder.c \
|
||||
oled.c
|
||||
SRC += oled.c
|
@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
XXXXXXX, XXXXXXX, _____________MOUSE_1______________, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, _____________MOUSE_2______________, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
__________________________________, __________________________________
|
||||
__________________________________, _______, _______, _______, K_CPRF
|
||||
),
|
||||
|
||||
/* ADJUST
|
||||
|
@ -1 +1,2 @@
|
||||
OLED_DRIVER_ENABLE = yes
|
||||
LINK_TIME_OPTIMIZATION_ENABLE = yes
|
@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@ -101,9 +101,10 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@ -188,10 +189,10 @@ int serial_transaction(int master_changed) {
|
||||
int ret=serial_update_buffers();
|
||||
#endif
|
||||
if (ret ) {
|
||||
if(ret==2) RXLED1;
|
||||
if(ret==2) writePinLow(B0);
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
memcpy(&matrix[slaveOffset],
|
||||
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
||||
return 0;
|
||||
@ -240,7 +241,7 @@ uint8_t matrix_master_scan(void) {
|
||||
if( serial_transaction(mchanged) ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@ -253,7 +254,7 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user