Compare commits

...

17 Commits

Author SHA1 Message Date
d597af9e1e Remove pro_micro.h (#8374)
* Remove pro_micro.h

* Include quantum.h
2020-03-14 15:31:15 +00:00
03ed819717 format code according to conventions [skip ci] 2020-03-14 14:08:48 +00:00
141535c9db Realign dynamic macros with recent SEND_STRING changes (#8407) 2020-03-14 13:35:12 +00:00
a92947fcdb added olkb_style layout for XD75 (#8409)
* added olkb_style layout for XD75

* removed unnecessary config.h

* cleaned up empty functions

* refactored fuction type for clarity

* renamed the layout
2020-03-14 13:32:26 +00:00
cde5237a88 fix two links on docs/other_eclipse.md (#8417) 2020-03-14 13:25:21 +00:00
dc79792ab4 Add Portuguese keymap and sendstring lookup tables (#8390)
* Add Portuguese keymap and sendstring lookup tables

* Update quantum/keymap_extras/keymap_portuguese.h

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update quantum/keymap_extras/keymap_portuguese.h

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update quantum/keymap_extras/keymap_portuguese.h

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update quantum/keymap_extras/keymap_portuguese.h

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update quantum/keymap_extras/keymap_portuguese.h

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update quantum/keymap_extras/keymap_portuguese.h

Co-Authored-By: Ryan <fauxpark@gmail.com>

Co-authored-by: Ryan <fauxpark@gmail.com>
2020-03-13 17:21:00 -07:00
e6a9f700de Update link for Learn Plover google site (#8410) 2020-03-14 11:06:54 +11:00
0fdd37ee19 [Keymap] ninjonas keymap updates (#8373)
* [keymap(ninjonas)] ninjonas keymap updates

* [refactor] switching encoder rotation logic. recent pull seems to have flipped encoder stuff

* [keymap(lily58)] added chrome change profile key on RAISE

Co-authored-by: Jonas Avellana <jonas.avellana@workday.com>
2020-03-13 16:56:21 -07:00
40e8d60ecd Fix bootloader for Maypad (#8411) 2020-03-13 23:44:43 +00:00
f81b0e35a6 Add decorators for determining keyboard and keymap based on current directory (#8191)
* Use pathlib everywhere we can

* Improvements based on @erovia's feedback

* rework qmk compile and qmk flash to use pathlib

* style

* Remove the subcommand_name argument from find_keyboard_keymap()

* add experimental decorators

* Create decorators for finding keyboard and keymap based on current directory.

Decorators were inspired by @Erovia's brilliant work on the proof of concept.
2020-03-13 15:47:04 -07:00
5e98eaaaff format code according to conventions [skip ci] 2020-03-13 18:44:56 +00:00
9e8767917d Fix pressing two keys with the same keycode but different modifiers (#2710)
* Fix extra keyboard report during test_fixture teardown

* Add tests for pressing two keys with only different modifers

* Fix #1708

When two keys that use the same keycode, but different modifiers were
pressed at the same time, the second keypress wasn't registered. This is
fixed by forcing a key release when we detect a new press for the same
keycode.

* Fix the NKRO version of is_key_pressed

* Fix uninitalized loop variable

Co-authored-by: Jack Humbert <jack.humb@gmail.com>
2020-03-13 14:09:38 -04:00
f89439ae09 format code according to conventions [skip ci] 2020-03-13 17:24:38 +00:00
3cd2a27ac0 Decouple mouse cursor and mouse wheel in accelerated mode (#6685)
* Decouples mouse cursor and mouse wheel movements in accelerated mode.

* Fixed comment indentation.

* Updated docs

Co-authored-by: Francis LAN <francislan@google.com>
2020-03-13 12:49:44 -04:00
28d94b7248 [Keyboard] Add Wallaby (#8398)
* Add wallaby

* Update readme.md

* Update keyboards/wallaby/keymaps/default/keymap.c

* Update keyboards/wallaby/rules.mk
2020-03-12 19:30:59 -07:00
abd8e75cb7 [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
2020-03-12 19:22:27 -07:00
9046107183 Restore getting_started_github.md doc 2020-03-12 17:24:07 -07:00
74 changed files with 2172 additions and 730 deletions

View File

@ -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).

View File

@ -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

View 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":
![Fork on Github](http://i.imgur.com/8Toomz4.jpg)
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:
![Download from Github](http://i.imgur.com/N1NYcSz.jpg)
And be sure to select "HTTPS", and select the link and copy it:
![HTTPS link](http://i.imgur.com/eGO0ohO.jpg)
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:
![New Pull Request](http://i.imgur.com/DxMHpJ8.jpg)
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":
![Create Pull Request](http://i.imgur.com/Ojydlaj.jpg)
After submitting, we may talk to you about your changes, ask that you make changes, and eventually accept it! Thanks for contributing to QMK :)

View File

@ -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
View 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
View 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
View 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

View 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}
]
}
}
}

View 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;
}
}

View 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.

View File

@ -0,0 +1,15 @@
# Abacus
![abacus](https://i.imgur.com/IFtuWaK.jpg)
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
View 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

View File

@ -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();

View File

@ -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

View File

@ -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
}

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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

View File

@ -16,7 +16,7 @@
#pragma once
#define TAPPING_TERM 300
#define TAPPING_TERM 200
#ifdef OLED_DRIVER_ENABLE
#define OLED_DISPLAY_128X64

View File

@ -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

View File

@ -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
// `----------------------------------------' `----------------------------------------'

View File

@ -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());
}

View File

@ -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

View File

@ -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

View File

@ -1 +1,2 @@
OLED_DRIVER_ENABLE = yes
LINK_TIME_OPTIMIZATION_ENABLE = yes

View File

@ -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