* Give Tsangan layout a real Fn2 layer
* Disable mouse keys to work around qmk#8323
I don't actually use this feature, so there's no reason for it to be
enabled anyway, and it seems to cause spurious wakeups on Windows.
* Adding Novem keyboard (macropad) and demo layout
* Making changes suggested during pull request
* Removing keyboards/novem/keymaps/default/config.h as suggested during the pull request
* Moving keyboard to the handwired folder and changing the build line from readme in order to reflect this new location
* Add revision 1 and revision 2 to ProjectKB Alice PCB
* Swap SLEEP LED to no
* Basic root rules.mk
* Apply suggestions from code review
* Update keyboards/projectkb/alice/rules.mk
Using just qmk setup <github_username> would fail w/ "Could not find repo github.com/<username>, whereas the repo is actually after another slash after the user name. Can consider changing code to add the default forked repo name if slash is not detected in the arg.
* add VIA enabled keymap with some layers taken out for space
* get a more sane VID and PID so we don't collide with the other BMC powered boards
* small cleanups
* Update keyboards/tgr/jane/keymaps/via/keymap.c
Co-Authored-By: Ryan <fauxpark@gmail.com>
* add tkl_ansi_tsangan LAYOUT
* add tkl_iso_tsangan LAYOUT
Co-authored-by: Ryan <fauxpark@gmail.com>
* porting the niu_mini to via
* Wrong values in mk
* Updating to unique Vendor ID and Product ID
* Addressing zvecr comments
* Addressing fauxpark comments
Co-Authored-By: Ryan <fauxpark@gmail.com>
Co-authored-by: Lauren Harris <lauren.y.harris@outlook.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
* Add support for hardware and board initialisation overrides.
* qmk cformat.
* Add some documentation.
* Docs clarity.
* Make early_hardware_init_pre a no-op for now, until migrations occur.
* Doco update
* Make distinction between keyboard and ChibiOS board in docs
* Doc anchors.
* Update tmk_core/protocol/chibios/main.c
Co-Authored-By: Joel Challis <git@zvecr.com>
* Rework bootloader entry to be off by default, allow opting-in.
Co-authored-by: Joel Challis <git@zvecr.com>
* id80: New keyboard (IDOBAO ID80)
Add initial support for the IDOBAO ID80 keyboard.
Most source files were generated by the KBFirmware JSON to QMK Parser
(https://noroadsleft.github.io/kbf_qmk_converter/) based on the
ID80.json file provided by the keyboard vendor. The only change to
rules.mk was to set `COMMAND_ENABLE = no` to make the compiled firmware
fit into the available flash space.
* id80: Update default keymap to match stock
Update the Fn layer in the default keymap to match the stock firmware
which was actually flashed into the PCB.
* id80: Add Caps Lock indicator support
Although the KBFirmware JSON includes information about the MCU pins
used for keyboard indicator LEDs, the KBF to QMK converter does not
generate the required code automatically. Implement the LED handling
code, and at the same time switch from the older `led_set_kb` API to the
newer `led_update_kb`.
* id80: Remove placeholder functions
The provided skeletons for `matrix_scan_kb` and `process_record_kb` did
not do anything useful, so remove them.
* id80: Use Esc as the Bootmagic Lite activation key
The Esc key is not at the (0, 0) position in the ID80 matrix, therefore
setting `BOOTMAGIC_LITE_ROW` and `BOOTMAGIC_LITE_COLUMN` is required to
use the Esc key for Bootmagic Lite.
* id80: Update info.json
Replace info.json generated by the KBF to QMK converter with another
version generated using http://www.keyboard-layout-editor.com/ and the
KLE raw to QMK info.json converter (https://qmk.fm/converter/). The
updated info.json has the correct physical layout (the distance between
the function key row and the main block is actually 0.25U, but the
vendor-provided ID80.json had 0.5U there) and correct key labels (using
the stock layout instead of raw matrix locations and pin names).
* id80: Enable NKRO
The default keymap is updated to have NK_TOGG at Fn+N, like most other
keyboards which have NKRO enabled.
* id80: Use unique USB vendor/product ID
Having an unique USB vendor/product ID is required for VIA support.
The vendor ID value is the same as for the `idobo` (ID75) keyboard.
* id80: Fix right modifiers in the default keymap
For some reason the default keymap converted from the vendor-supplied
JSON had the right Shift, Alt and Ctrl keys mapped to the left side
modifier keycodes.
* id80: Remove empty row 6 (F0) from matrix
The matrix layout which was defined in the vendor-supplied ID80.json
file had 12 rows which corresponded to the left and right parts of the
6 physical rows. However, the row 6 of the matrix (connected to the F0
pin), which corresponded to the right part of the physical bottom row,
was completely empty (all 9 keys of the bottom row were placed in the
matrix row for the left part). Keeping this row in the matrix just
wastes resources; in particular, when the VIA support is enabled, having
a 9×12 matrix with 4 layers leaves only 122 bytes available for dynamic
macros, which is less than the recommended minimum of 128 bytes.
Removing the unused row reduces the matrix size to 9×11, which leaves
194 bytes of EEPROM space for dynamic macros.
* id80: Update row numbers in the LAYOUT macro
Update row numbers in the names of the LAYOUT macro parameters after
removing a row in the middle.
* id80: Set RGBLED_NUM to 20 to match the actual PCB
The vendor-supplied ID80.json file specified that the PCB should have
28 RGB LEDs in the chain. However, the actual PCB that was shipped
from AliExpress had 20 LEDs in the chain (16 underglow LEDs, and then 4
more LEDs on top of the PCB, to the right of the Enter key location).
Update RGBLED_NUM to match the actual PCB.
* Add support for Caps Lock LED
Currently ignores the fact that led_state is not synced between halves, so caps lock LED doesn't do anything if USB is plugged into right half
* Set initial backlight and RGB mode/values on blank EEPROM
* Set default VIA layout options
* Add backlight/RGB ifdefs
* Set bootloaders for each rev
* dipsw test on helix/rev2/sc/back:five_rows
* bug fix quantum/dip_switch.c
* test end. remove test code. Revert "dipsw test on helix/rev2/sc/back:five_rows"
This reverts commit 4b13ebb996e1c4997e6deb1fa3b3227db5fa9661.
* dipsw test on helix/rev2/sc/back:five_rows
* update quantum/dip_switch.c
* test end. remove test code. Revert "dipsw test on helix/rev2/sc/back:five_rows"
This reverts commit bf99ace095528ad65c531229bcf5ece037dda595.
* Add handwired BDN9-BLE
* Apply suggestions from code review
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update keyboards/handwired/bdn9_ble/rules.mk
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update keyboards/handwired/bdn9_ble/rules.mk
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update keyboards/handwired/bdn9_ble/readme.md
Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
GCC 4.9.4 is no longer available on Gentoo (or Sabayon), which causes
problems when attempting to install on either of these platforms. Since
QMK is not particularly sensitive to its GCC version, modify the version
restriction to <9 so newer versions of GCC may be installed. Since the
toolchain for arm-none-eabi isn't currently installed as part of setup,
add that as well.
Additionally, drop the Python installation as part of the Gentoo
installation process. Python is a core system package on Gentoo and can
therefore be assumed to be present; in addition, the slot restriction of
3.5 which was present is also no longer available in Gentoo.
Finally, separate the gcc rebuild invocation of `emerge` from the new
packages that may need to be installed, and apply the `--noreplace` flag
to new packages so that they are not rebuilt if already present.
* Cannonkeys DB60 Keyboard
* WhitespacE
* Add ISO and make layer names more idiomatic
* backlight enable
* Remove big backslash from ISO
* Apply suggestions from code review
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update for correct matrix
* Apply suggestions from code review
Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update chibios config files
* Complete VIA keymap
* Remove ugly hack comments
* Update keyboards/cannonkeys/db60/rules.mk
Co-Authored-By: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: Joel Challis <git@zvecr.com>
* Save progress
* Finished matrix and everything
* Apply suggestions from code review
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update DevastatingTKL
* Renames
* Add renamed files
* Update chibios files and VIA keymap for completion
* Some cleanup
* Apply suggestions from code review
Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/cannonkeys/devastatingtkl/rules.mk
Co-Authored-By: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: Joel Challis <git@zvecr.com>
* quantum/debounce: Added sym_pk debounce algorithm
* Apply suggestions from code review
Co-Authored-By: Ryan <fauxpark@gmail.com>
* quantum/debounce/sym_pk: delete comments and rename functions following code review
* quantum/debounce/sym_pk: Modifications for code readability according to code review
* quantum/debounce/sym_pk: Modifications for code readability according to code review (2)
* quantum/debounce/sym_pk: code review: cleaner code
Co-Authored-By: Nick Brassel <nick@tzarc.org>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
* Added personal minivan keymap, and started work on splitish directory
* Merge branch 'splitish' of github.com:RSchneyer/qmk_firmware into splitish
Trying to undo attempted fix
Added splitish keyboard files, removed personal Minivan keymap
* Removed personal Minivan keymaps
* Fixed small issue in readme
* Added changes based on inital PR feedback
* forgot a semicolon
* Quick config.h file and default keymap update
* tmk_core/common: Fixing TIMER_DIFF macro to calculate difference correctly after the timer wraps.
Let's go through an example, using the following macro:
If the first timer read is 0xe4 and the second one is 0x32, the timer wrapped.
If the timer would have had more bits, it's new value would have been 0x132,
and the correct difference in time is 0x132 - 0xe4 = 0x4e
old code TIMER_DIFF_8(0x32, 0xe4) = 0xff - 0xe4 + 0x32 = 0x4d, which is wrong.
new code TIMER_DIFF_8(0x32, 0xe4) = 0xff + 1 - 0xe4 + 0x32 = 0x4e, which is correct.
This also gives a chance for a smart compiler to optimize the code using normal
integer overflow.
For example on AVR, the following C code:
uint8_t __attribute__ ((noinline)) test(uint8_t current_timer, uint8_t start_timer)
{
return TIMER_DIFF_8(current_timer, start_timer);
}
With the original code, it gets translated to the following list of instructions:
00004c6e <test>:
4c6e: 98 2f mov r25, r24
4c70: 86 1b sub r24, r22
4c72: 96 17 cp r25, r22
4c74: 08 f4 brcc .+2 ; 0x4c78 <test+0xa>
4c76: 81 50 subi r24, 0x01 ; 1
4c78: 08 95 ret
But with this commit, it gets translated to a single instruction:
00004c40 <test>:
4c40: 86 1b sub r24, r22
4c42: 08 95 ret
This unfortunately doesn't always work so nicely, for example the following C code:
int __attribute__ ((noinline)) test(uint8_t current_timer, uint8_t start_timer)
{
return TIMER_DIFF_8(current_timer, start_timer);
}
(Note: return type changed to int)
With the original code it gets translated to:
00004c6e <test>:
4c6e: 28 2f mov r18, r24
4c70: 30 e0 ldi r19, 0x00 ; 0
4c72: 46 2f mov r20, r22
4c74: 50 e0 ldi r21, 0x00 ; 0
4c76: 86 17 cp r24, r22
4c78: 20 f0 brcs .+8 ; 0x4c82 <test+0x14>
4c7a: c9 01 movw r24, r18
4c7c: 84 1b sub r24, r20
4c7e: 95 0b sbc r25, r21
4c80: 08 95 ret
4c82: c9 01 movw r24, r18
4c84: 84 1b sub r24, r20
4c86: 95 0b sbc r25, r21
4c88: 81 50 subi r24, 0x01 ; 1
4c8a: 9f 4f sbci r25, 0xFF ; 255
4c8c: 08 95 ret
Wth this commit it gets translated to:
00004c40 <test>:
4c40: 28 2f mov r18, r24
4c42: 30 e0 ldi r19, 0x00 ; 0
4c44: 46 2f mov r20, r22
4c46: 50 e0 ldi r21, 0x00 ; 0
4c48: 86 17 cp r24, r22
4c4a: 20 f0 brcs .+8 ; 0x4c54 <test+0x14>
4c4c: c9 01 movw r24, r18
4c4e: 84 1b sub r24, r20
4c50: 95 0b sbc r25, r21
4c52: 08 95 ret
4c54: c9 01 movw r24, r18
4c56: 84 1b sub r24, r20
4c58: 95 0b sbc r25, r21
4c5a: 93 95 inc r25
4c5c: 08 95 ret
There is not much performance improvement in this case, however at least with this
commit it functions correctly.
Note: The following commit will improve compiler output for the latter example.
* tmk_core/common: Improve code generation for TIMER_DIFF* macros
Because of integer promotion the compiler is having a hard time generating
efficient code to calculate TIMER_DIFF* macros in some situations.
In the below example, the return value is "int", and this is causing the
trouble.
Example C code:
int __attribute__ ((noinline)) test(uint8_t current_timer, uint8_t start_timer)
{
return TIMER_DIFF_8(current_timer, start_timer);
}
BEFORE: (with -Os)
00004c40 <test>:
4c40: 28 2f mov r18, r24
4c42: 30 e0 ldi r19, 0x00 ; 0
4c44: 46 2f mov r20, r22
4c46: 50 e0 ldi r21, 0x00 ; 0
4c48: 86 17 cp r24, r22
4c4a: 20 f0 brcs .+8 ; 0x4c54 <test+0x14>
4c4c: c9 01 movw r24, r18
4c4e: 84 1b sub r24, r20
4c50: 95 0b sbc r25, r21
4c52: 08 95 ret
4c54: c9 01 movw r24, r18
4c56: 84 1b sub r24, r20
4c58: 95 0b sbc r25, r21
4c5a: 93 95 inc r25
4c5c: 08 95 ret
AFTER: (with -Os)
00004c40 <test>:
4c40: 86 1b sub r24, r22
4c42: 90 e0 ldi r25, 0x00 ; 0
4c44: 08 95 ret
Note: the example is showing -Os but improvements can be seen at all optimization levels,
including -O0. We never use -O0, but I tested it to make sure that no extra code is
generated in that case.OA
* quantum/debounce: Fix custom wrapping timers in eager_pr and eager_pk debounce algorithms
Please see the below simulated sequence of events:
Column A is the 16-bit value returned by read_timer();
Column B is the value returned by custom_wrap_timer_read();
Column C is the original code: (timer_read() % MAX_DEBOUNCE)
A, B, C
65530, 19, 30
65531, 20, 31
65532, 21, 32
65533, 22, 33
65534, 23, 34
65535, 24, 35
0 25, 0
1, 26, 1
2, 27, 2
3, 28, 3
4, 29, 4
5, 30, 5
read_timer() wraps about every 1.09 seconds, and so debouncing might
fail at these times without this commit.
* quantum/debounce/eager_pr and eager_pk: modifications for code readability according to code review.
* quantum/debounce/eager_pr and eager_pk: modifications for code readability according to code review. (2)
* First cut at Josh Diamond's KBD75 customizations.
Includes:
* My unique keymap with ChromeOS specific keys
* Use RGB underglow to indicate Caps Lock
* Some unicode bindings
* Some changes to make debugging easier
* Updated spidey3 to be applicable to all 75_ansi boards
* Sadly, ChromeOS doesn't pay attention to most consumer codes
* Add mac layer; fix flakeyness in CAPS_LOCK underglow.
* Make layers.json match the keymap (to the extent possible)
* Major cleanup; fix broken debug persistence
* Cleanup some whitespace issues
* Fix incorrect log message.
* Rework layer indication to user RGBLIGHT_LAYERS
* Update layouts/community/75_ansi/spidey3/keymap.c
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* Rename users/spidey3/rgblight.c to layer_rgb.c per suggestion
* Refactor to use set_single_persistant_default_layer().
* Use dprint/f to make logging more elegant.
* Update users/spidey3/config.h
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* Update users/spidey3/config.h
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* Update layouts/community/75_ansi/spidey3/rules.mk
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update users/spidey3/spidey3.c
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update users/spidey3/layer_rgb.c
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update users/spidey3/init.c
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Changes from code review
* Numpad layer, various keys for 75_ansi/spidey3
* Add Fn-B to toggle NKRO
* Blink rgb to acknowledge some setting changes
* Updated media control & reset key location
* Minor cleanup
Co-authored-by: Joshua Diamond <jdiamond@Deep-Thought.local>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
* added vim compatibility, backspace above enter, and general macOS optimizations on top of default layout
* add space65 macOS keymap for vim users with an optimized bottom row
* Update keyboards/projectkb/alice/keymaps/keithlo/keymap.c
* Update mousekey parameters in userspace
* Disable GRAVE_ESC in boards where it isn't used
* Tweak MODERN_DOLCH_RED and reset RGB on Shift+Toggle in KBD6X
* Disable RGB controls when Fn/Caps indicator lights are on
* Use LTO_ENABLE instead of setting -flto directly
* Add led_update_keymap, use SS_LCTL instead of SS_LCTRL
* Change TAPPING_TOGGLE from 2 to 3
* Add PS2_MOUSE_ROTATE to compensate for device orientation
* fixup! Add PS2_MOUSE_ROTATE to compensate for device orientation
* Reformat with IndentPPDirectives: AfterHash as per #6316
* Fix RGB LED count on YD60MQ
* Split YD60MQ into 12-LED and 16-LED revisions
* Update readmes
* Make 12led the default version
* Readd base rules.mk, version→variant in readme
* Add syntax highlighting to code blocks in readme
* Define NO_ACTION_MACRO/FUNCTION in header instead of makefile when LTO is enabled
Currently, boards and keymaps that define NO_ACTION_MACRO/FUNCTION unconditionally
will not compile with LTO_ENABLE (#8604). This fixes the issue by moving the
definitions from common.mk to action.h, which enables us to check for previous
definitions of those macros (this cannot be done in a makefile).
* Remove LTO checks in templates
Since now NO_ACTION_MACRO/FUNCTION are defined as needed in action.h (which is
included by quantum.h), checking for LTO in keyboard and user code is no
longer required.
* Update LTO_ENABLE docs
* enable rgblight layers
* rgblight layers code
* switch to new rgblight layers
* testing led positions
* fix caps typo
* lights and colors working
* rules updated for different rgb use
* Extra spaces removed
* Add Via keymap for BM16-A
* Apply suggestions from code review
Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Deleted as per noroadsleft
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Without this check, users can lock themselves out by enabling developer
mode, than disabling the dependencies. They wouldn't be able to turn off
developer mode as none of the subcommands (including 'config') would
work.
The list of hidden subcommands were approved by @skullydazed ;)
Currently hidden if 'user.developer' is not True:
- cformat
- docs
- kle2json
- pyformat
- pytest
Use milc's config finding and parsing to check if the user is a
developer or not.
'requirements-dev.txt' will now load 'requirements.txt', so no need to
run pip twice.
Add missing 'yapf' dependency to 'requirements-dev.txt'.
* Change _delay_ms/us() to wait_ms/us()
* Switch to platform-agnostic GPIO macros
* Add AVR spi_master and migrate Adafruit BLE code
* Set verbose back to false
* Add clock divisor, bit order and SPI mode configuration for init
* Add start and stop functions
* Move configuration of mode, endianness and speed to `spi_start()`
* Some breaks here would be good
* Default Adafruit BLE clock divisor to 4 (2MHz on the Feather 32U4)
* Remove mode and divisor enums
* Add some docs
* No hr at EOF
* Add links in sidebar
* Selectively adding pieces
* Adding georgi keymap
* Adding more files, fixing make
* Smaller makefiles
* Fixing make rules
* README more inline with QMK's guidelines
* Turning off buggy assert
* Improving documentation based on a user feedback.
* Slightly better schema
* Resurrected state machine diagram
* updated rules.mk and default keymap of Wonderland for VIA support
* Restored default keymap and rules.mk, added via keymap folder with modified default keymap and rules.mk, also fixed VendorID in config.h
* fixed jargon on layers 3 and 4 of Wonderland VIA keymap
* cleaned up via keymap, removed fluff
* default keymap for Wonderland restored
* removed unnecessary information from rules.mk
* made more readable per noroadsleft suggestion
Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Add Polish keymap
* Fix wrong AltGr mapping
* These are ogoneks, not cedillas
* Too many !s
* ANSI
* Just use BSLS
* Move BSLS
* Move PIPE
* Fix some incorrect names in keymap_slovak.h
Thanks to vomindoraan
* Add Korean keymap
* Switch to ANSI layout
* Update quantum/keymap_extras/keymap_korean.h
Co-Authored-By: Konstantin Đorđević <vomindoraan@gmail.com>
Co-authored-by: Konstantin Đorđević <vomindoraan@gmail.com>
* ADD DecadePad
* Fix Key display bug
* fix
* firmware1
THIS IS A Backup commit
* firmware2
* rename all fill with lower case
* fix bug
* Final Version
Fix all bugs
* Requested change apply
* suggested apply
* change apply
* via test
* Apply change and fix via support problem
* created initial files for the lattice60
* modifying the keymaps and config
* keymap edits and docs
* modifying docs and added personal keymap
* added pic and website to readme
* added layout image for default keymap
* updating layout pictures
* minor formatting edit
* file cleanup
* trying to prevent errors with usbconfig
* removed usbconfig.h
* cleaning up comments
* switched to use community hhkb layout
* Make initial batch of files
* Tweak keymap
* Mod default keymap
* Add via compat
* Update default keymap based on real world use
* Remove RGB, LCD, MIDI options
* Remove unnecessary functons from orbit_x.c
* Update readme
* Cleanup makefile as necessary
* Make the readme file for default keymap not completely empty
* Update keyboards/ai03/orbit_x/keymaps/default/keymap.c
* Update keyboards/ai03/orbit_x/readme.md
* Update keyboards/ai03/orbit_x/info.json
* Add VIA to Gingham
- Add VIA keymap
- Fix minor typo in config.h
- Remove redundunt methods and defines
* Update keyboards/gingham/config.h
Co-Authored-By: Ryan <fauxpark@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
* define VID/PID in post_config.h, add via keymap
* update readme, set vid/pid for via
* update keymap
* delete usbconfig.h, update keymap
* add status led feature
* Apply suggestions from code review
Co-Authored-By: Joel Challis <git@zvecr.com>
* undef vid/pid in keymap
Co-authored-by: Joel Challis <git@zvecr.com>
* add feature part 01
* update sentences
* update sentences
* update sentences
* update file based on comment
* leave ctrl, shift, alt key name as alphabet
* update file based on comment
* update file based on comment
* update file based on comment
* update file based on comment
* remove unnecessary space on define line
* update sentence based on pull request's comment
* translate 'breathing' in document
* change expression in table
* update file based on comment
* change the word 'brightness', and update based on comment
* update based on comment
* update based on comment
* add language directory name to each internal link
* update based on comment
* update based on comment
* Changes to my Ergodox & Planck keymaps
* Fixed Typos
Corrected some typos and omissions to my Ergodox layout and readme
* Fixed Typos
Fixed some typos in my ErgoDox Readme and keymap.c files
@ -6,7 +6,7 @@ The QMK CLI makes building and working with QMK keyboards easier. We have provid
### Requirements :id=requirements
The CLI requires Python 3.5 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
QMK requires Python 3.6 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
### Install Using Homebrew (macOS, some Linux) :id=install-using-homebrew
@ -21,7 +21,7 @@ qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build
### Install Using easy_install or pip :id=install-using-easy_install-or-pip
If your system is not listed above you can install QMK manually. First ensure that you have python 3.5 (or later) installed and have installed pip. Then install QMK with this command:
If your system is not listed above you can install QMK manually. First ensure that you have python 3.6 (or later) installed and have installed pip. Then install QMK with this command:
Run it with no arguments to format all core code that has been changed. Default checks `origin/master` with `git diff`, branch can be changed using `-b <branch_name>`
Run it with `-a` to format all core code, or pass filenames on the command line to run it on specific files.
**Usage for specified files**:
```
qmk cformat [file1] [file2] [...] [fileN]
```
**Usage for all core files**:
```
qmk cformat -a
```
**Usage for only changed files against origin/master**:
```
qmk cformat
```
**Usage for only changed files against branch_name**:
```
qmk cformat -b branch_name
```
# User Commands
## `qmk compile`
@ -136,16 +104,6 @@ This command lets you configure the behavior of QMK. For the full `qmk config` d
This command starts a local HTTP server which you can use for browsing or improving the docs. Default port is 8936.
**Usage**:
```
qmk docs [-p PORT]
```
## `qmk doctor`
This command examines your environment and alerts you to potential build or flash problems. It can fix many of them if you want it to.
@ -180,28 +138,6 @@ Creates a keymap.c from a QMK Configurator export.
qmk json2c [-o OUTPUT] filename
```
## `qmk kle2json`
This command allows you to convert from raw KLE data to QMK Configurator JSON. It accepts either an absolute file path, or a file name in the current directory. By default it will not overwrite `info.json` if it is already present. Use the `-f` or `--force` flag to overwrite.
**Usage**:
```
qmk kle2json [-f] <filename>
```
**Examples**:
```
$ qmk kle2json kle.txt
☒ File info.json already exists, use -f or --force to overwrite.
```
```
$ qmk kle2json -f kle.txt -f
Ψ Wrote out to info.json
```
## `qmk list-keyboards`
This command lists all the keyboards currently defined in `qmk_firmware`
@ -232,6 +168,74 @@ This command creates a new keymap based on a keyboard's existing default keymap.
qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
```
---
# Developer Commands
## `qmk cformat`
This command formats C code using clang-format.
Run it with no arguments to format all core code that has been changed. Default checks `origin/master` with `git diff`, branch can be changed using `-b <branch_name>`
Run it with `-a` to format all core code, or pass filenames on the command line to run it on specific files.
**Usage for specified files**:
```
qmk cformat [file1] [file2] [...] [fileN]
```
**Usage for all core files**:
```
qmk cformat -a
```
**Usage for only changed files against origin/master**:
```
qmk cformat
```
**Usage for only changed files against branch_name**:
```
qmk cformat -b branch_name
```
## `qmk docs`
This command starts a local HTTP server which you can use for browsing or improving the docs. Default port is 8936.
**Usage**:
```
qmk docs [-p PORT]
```
## `qmk kle2json`
This command allows you to convert from raw KLE data to QMK Configurator JSON. It accepts either an absolute file path, or a file name in the current directory. By default it will not overwrite `info.json` if it is already present. Use the `-f` or `--force` flag to overwrite.
**Usage**:
```
qmk kle2json [-f] <filename>
```
**Examples**:
```
$ qmk kle2json kle.txt
☒ File info.json already exists, use -f or --force to overwrite.
```
```
$ qmk kle2json -f kle.txt -f
Ψ Wrote out to info.json
```
## `qmk pyformat`
This command formats python code in `qmk_firmware`.
@ -251,3 +255,4 @@ This command runs the python test suite. If you make changes to python code you
@ -6,6 +6,18 @@ This document has useful information for developers wishing to write new `qmk` s
The QMK CLI operates using the subcommand pattern made famous by git. The main `qmk` script is simply there to setup the environment and pick the correct entrypoint to run. Each subcommand is a self-contained module with an entrypoint (decorated by `@cli.subcommand()`) that performs some action and returns a shell returncode, or None.
## Developer mode:
If you intend to maintain keyboards and/or contribute to QMK, you can enable the CLI's "Developer" mode:
`qmk config user.developer=True`
This will allow you to see all available subcommands.
**Note:** You will have to install additional requirements:
```bash
python3 -m pip install -r requirements-dev.txt
```
# Subcommands
[MILC](https://github.com/clueboard/milc) is the CLI framework `qmk` uses to handle argument parsing, configuration, logging, and many other features. It lets you focus on writing your tool without wasting your time writing glue code.
@ -32,7 +44,7 @@ def hello(cli):
First we import the `cli` object from `milc`. This is how we interact with the user and control the script's behavior. We use `@cli.argument()` to define a command line flag, `--name`. This also creates a configuration variable named `hello.name` (and the corresponding `user.name`) which the user can set so they don't have to specify the argument. The `cli.subcommand()` decorator designates this function as a subcommand. The name of the subcommand will be taken from the name of the function.
Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.5/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator.
Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.6/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator.
# User Interaction
@ -44,13 +56,13 @@ There are two main methods for outputting text in a subcommand- `cli.log` and `c
You can use special tokens to colorize your text, to make it easier to understand the output of your program. See [Colorizing Text](#colorizing-text) below.
Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.5/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example.
Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.6/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example.
You should never use the format operator (`%`) directly, always pass values as arguments.
### Logging (`cli.log`)
The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.5/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong.
The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.6/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong.
The default log level is `INFO`. If the user runs `qmk -v <subcommand>` the default log level will be set to `DEBUG`.
@ -20,11 +20,11 @@ Most of our style is pretty easy to pick up on, but right now it's not entirely
* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)`
* If you are not sure which to prefer use the `#if defined(DEFINED)` form.
* Do not change existing code from one style to the other, except when moving to a multiple condition `#if`.
* Do not put whitespace between `#` and `if`.
* When deciding how (or if) to indent directives keep these points in mind:
* Readability is more important than consistency.
* Follow the file's existing style. If the file is mixed follow the style that makes sense for the section you are modifying.
* When choosing to indent you can follow the indention level of the surrounding C code, or preprocessor directives can have their own indent level. Choose the style that best communicates the intent of your code.
* When deciding how (or if) to indent preprocessor directives, keep these points in mind:
* Readability is more important than consistency.
* Follow the file's existing style. If the file is mixed, follow the style that makes sense for the section you are modifying.
* When indenting, keep the hash at the start of the line and add whitespace between `#` and `if`, starting with 4 spaces after the `#`.
* You can follow the indention level of the surrounding C code, or preprocessor directives can have their own indentation levels. Choose the style that best communicates the intent of your code.
Most of our style follows PEP8 with some local modifications to make things less nit-picky.
* We target Python 3.5 for compatability with all supported platforms.
* We target Python 3.6 for compatability with all supported platforms.
* We indent using four (4) spaces (soft tabs)
* We encourage liberal use of comments
* Think of them as a story describing the feature
@ -317,7 +317,7 @@ At the time of this writing our tests are not very comprehensive. Looking at the
## Integration Tests
Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.5/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.6/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
@ -115,9 +115,9 @@ If you define these options you will disable the associated feature, which can s
* `#define NO_ACTION_ONESHOT`
* disable one-shot modifiers
* `#define NO_ACTION_MACRO`
* disable old style macro handling: MACRO() & action_get_macro
* disable old-style macro handling using `MACRO()`, `action_get_macro()` _(deprecated)_
* `#define NO_ACTION_FUNCTION`
* disable calling of action_function() from the fn_actions array (deprecated)
* disable old-style function handling using `fn_actions`, `action_function()` _(deprecated)_
## Features That Can Be Enabled
@ -317,10 +317,10 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
* `LAYOUTS`
* A list of [layouts](feature_layouts.md) this keyboard supports.
* `LINK_TIME_OPTIMIZATION_ENABLE`
* Enables Link Time Optimization (`LTO`) when compiling the keyboard. This makes the process take longer, but can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). However, this will automatically disable the old Macros and Functions features automatically, as these break when `LTO` is enabled.
It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`
* Enables Link Time Optimization (LTO) when compiling the keyboard. This makes the process take longer, but it can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable).
However, this will automatically disable the legacy TMK Macros and Functions features, as these break when LTO is enabled. It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`. (Note: This does not affect QMK [Macros](feature_macros.md) and [Layers](feature_layers.md).)
* `LTO_ENABLE`
* It has the same meaning as LINK_TIME_OPTIMIZATION_ENABLE. You can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`.
* Has the same meaning as `LINK_TIME_OPTIMIZATION_ENABLE`. You can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`.
@ -38,5 +38,6 @@ For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computati
appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.
* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
* sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE``` milliseconds of no changes has occured, all input changes are pushed.
* sym_pk - debouncing per key. On any state change, a per-key timer is set. When ```DEBOUNCE``` milliseconds of no changes have occured on that key, the key status change is pushed.
If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.