Find a file
Sergey Vlasov 459ccb681f
OLED driver fixes (#10377)
* Fix dirtying in oled_write_pixel()

Set the dirty bit for the block only if oled_write_pixel() actually
changed the buffer state.  Without this check oled_write_pixel() could
not be used inside the oled_task_user() code using the “redraw always”
style, because the blocks touched by oled_write_pixel() would always
appear dirty, and oled_render() would not proceed beyond the first such
dirty block.

* Fix oled_write_pixel() with 90/270 degree rotation

Use oled_rotation_width instead of OLED_DISPLAY_WIDTH, so that a rotated
display would be handled correctly.

* Fix compilation with custom OLED_BLOCK_COUNT and OLED_BLOCK_SIZE

Some OLED sizes (e.g., 64×48) may require a nonstandard value of
OLED_BLOCK_COUNT.  The documentation says that this value may be
redefined in config.h, but actually trying to redefine it caused a
compile error, because the macro was redefined in oled_driver.c.
Make the OLED_BLOCK_COUNT definition in oled_driver.c respect any
user override, and do the same for OLED_BLOCK_SIZE just in case.

* Fix handling of out-of-range bits in oled_dirty

If a custom OLED_BLOCK_COUNT value is specified, some bits in oled_dirty
may not correspond to existing blocks; however, if those bits are set
somewhere (e.g., by code with sets oled_dirty to ~0 or even -1),
oled_render() would try to handle them and could access memory beyond
oled_buffer and perform hardware operations with out of range values.
Prevent this by masking off unused bits in oled_render(), and also avoid
setting those bits in other functions.

* Fix potentially wrong dirtying in oled_write_char()

oled_write_char() tried to mark the position just beyond the written
character as dirty; use (OLED_FONT_WIDTH - 1) to dirty the last position
still belonging to the character instead.

* Fix `#define OLED_BLOCK_TYPE uint32_t` on AVR

Using uint32_t as OLED_BLOCK_TYPE did not work properly on AVR, because
some bit shifts were performed using 16-bit int.  Add explicit casts to
OLED_BLOCK_TYPE to those shifts.
2020-10-04 05:44:19 +11:00
.github Update file changes action (#10245) 2020-09-05 14:37:25 +01:00
.vscode [Keyboard] add rhymestone by marksard (#9708) 2020-09-04 04:14:34 -07:00
bin Move everything to Python 3.6 (#8835) 2020-04-18 22:00:56 +02:00
docs Mark 'key_count' as optional within info.json docs (#10513) 2020-10-03 00:42:11 +01:00
drivers OLED driver fixes (#10377) 2020-10-04 05:44:19 +11:00
keyboards add info.json for XD75 keyboard (#10523) 2020-10-03 15:43:36 +01:00
layouts Add ddeklerk split_3x6_3 layout (#10470) 2020-10-01 22:14:46 +01:00
lib Consolidate udev rules into a single file (#9693) 2020-09-27 20:36:33 +10:00
platforms/chibios Remove unused CORTEX_VTOR_INIT (#10053) 2020-08-29 14:30:02 -07:00
quantum Fix SPLIT_KEYBOARD compilation for ATMega*U2, which doesn't have VBUS/OTG control (#10460) 2020-10-02 04:17:03 +10:00
tests format code according to conventions [skip ci] 2020-03-13 18:44:56 +00:00
tmk_core Add description in Bluetooth docs for requiring NKRO to be disabled (#10359) 2020-09-22 22:31:37 +10:00
users [Keymap] coppertop and spotpuff keymaps for DZ60 (#10216) 2020-09-17 14:55:19 -07:00
util MSYS2: Switch to arm-none-eabi-gcc package (#10421) 2020-10-01 04:10:02 +10:00
.clang-format fix indent size 2019-06-11 01:51:40 -07:00
.editorconfig QMK CLI and JSON keymap support (#6176) 2019-07-15 12:14:27 -07:00
.gitattributes Set eep files to binary mode 2016-08-27 18:37:28 +03:00
.gitignore Allow for user song list (#9281) 2020-07-16 16:45:50 +10:00
.gitmodules 2020 May 30 Breaking Changes Update (#9215) 2020-05-30 13:14:59 -07:00
.travis.yml Attempt to fix CI for non-master branches. (#9308) 2020-08-29 14:30:02 -07:00
book.json adds redirects for docs 2017-08-19 08:31:54 -04:00
bootloader.mk Add logic for AT90USBxx7 where needed (#10203) 2020-09-27 20:33:03 +10:00
build_full_test.mk Add SRC and OPT_DEFS when building tests 2017-07-20 10:17:31 -04:00
build_json.mk Load keymap-level rules.mk when compiling keymap.json (#8841) 2020-04-18 14:29:48 +01:00
build_keyboard.mk Initial work for consolidation of ChibiOS platform files (#8327) 2020-08-29 14:30:02 -07:00
build_layout.mk Allow for building layouts from keymap.json files. 2020-07-07 07:27:39 -07:00
build_test.mk Initial arm->chibios pass - simplify some platform logic (#8450) 2020-03-21 16:20:04 +11:00
CODE_OF_CONDUCT.md updates the coc 2019-08-24 12:43:39 -04:00
common.mk Move Split Common VPATH addition (#4716) 2018-12-31 08:45:44 -08:00
common_features.mk quantum/debounce: rename debouncing algorithms (#9564) 2020-09-06 13:13:49 -07:00
Dockerfile Update docker util script and travis to use new base container 2019-07-14 21:01:38 -07:00
Doxyfile Generate API docs from source code comments (#2491) 2018-03-22 02:50:38 -04:00
doxygen-todo Remove iWRAP protocol (#9284) 2020-08-29 14:30:02 -07:00
LICENSE add an explicit lisence file for github to pickup 2017-11-13 20:50:54 -05:00
license_GPLv2.md Clarify the quantum license (#1042) 2017-03-28 15:20:36 -07:00
license_GPLv3.md Clarify the quantum license (#1042) 2017-03-28 15:20:36 -07:00
license_Modified_BSD.md Clarify the quantum license (#1042) 2017-03-28 15:20:36 -07:00
Makefile 2020 May 30 Breaking Changes Update (#9215) 2020-05-30 13:14:59 -07:00
message.mk 2020 May 30 Breaking Changes Update (#9215) 2020-05-30 13:14:59 -07:00
nose2.cfg Setup a python test framework 2019-09-07 07:58:41 -07:00
readme.md Revert "Branch point for 2020 Aug 29 Breaking Change" 2020-08-29 14:30:02 -07:00
requirements-dev.txt Use milc for config check, requirements fixes 2020-04-08 09:31:14 -07:00
requirements.txt CLI: Add development mode support 2020-04-08 09:31:14 -07:00
secrets.tar.enc update building for .hex, secrets moving 2017-08-21 21:57:46 -04:00
setup.cfg Add flake8 to our test suite and fix all errors (#7379) 2019-11-20 14:54:18 -08:00
shell.nix shell.nix improvements, and fix problems on Darwin (#9551) 2020-07-08 21:50:01 +01:00
show_options.mk Better handle LTO_ENABLE (#9832) 2020-08-29 14:30:02 -07:00
testlist.mk Add basic infrastrucure for building full tests 2017-06-18 21:08:23 +03:00
Vagrantfile Remove broken example from Makefile (#9159) 2020-05-21 20:33:20 +01:00

Quantum Mechanical Keyboard Firmware

Current Version Build Status Discord Docs Status GitHub contributors GitHub forks

This is a keyboard firmware based on the tmk_keyboard firmware with some useful features for Atmel AVR and ARM controllers, and more specifically, the OLKB product line, the ErgoDox EZ keyboard, and the Clueboard product line.

Documentation

The docs are powered by Docsify and hosted on GitHub. They are also viewable offline; see Previewing the Documentation for more details.

You can request changes by making a fork and opening a pull request, or by clicking the "Edit this page" link at the bottom of any page.

Supported Keyboards

The project also includes community support for lots of other keyboards.

Maintainers

QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, Hasu. The OLKB product firmwares are maintained by Jack Humbert, the Ergodox EZ by ZSA Technology Labs, the Clueboard by Zach White, and the Atreus by Phil Hagelberg.

Official Website

qmk.fm is the official website of QMK, where you can find links to this page, the documentation, and the keyboards supported by QMK.