Merge remote-tracking branch 'upstream/master' into hold-tap
This commit is contained in:
commit
abaafbd8c5
@ -9,7 +9,7 @@ kb.py is designed to work with the Teensy 4.1
|
|||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Atreus62](https://shop.profetkeyboards.com/product/atreus62-keyboard)
|
[Atreus62](https://shop.profetkeyboards.com/product/atreus62-keyboard)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
||||||
- [Encoder](https://github.com/KMKfw/kmk_firmware/tree/master/docs/encoder.md) Twist control for all the things
|
- [Encoder](https://github.com/KMKfw/kmk_firmware/tree/master/docs/encoder.md) Twist control for all the things
|
||||||
|
@ -9,5 +9,5 @@ kb.py is designed to work with the nice!nano
|
|||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5ecc2008eee64242946c98c1)
|
[Boardsource](https://boardsource.xyz/store/5ecc2008eee64242946c98c1)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
|
@ -13,9 +13,9 @@ Retailers (USA)
|
|||||||
Low profile 4x12
|
Low profile 4x12
|
||||||
[Boardsource](https://boardsource.xyz/store/5ecb7dad86879c9a0c22db32)
|
[Boardsource](https://boardsource.xyz/store/5ecb7dad86879c9a0c22db32)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [MediaKeys](https://github.com/KMKfw/kmk_firmware/tree/master/docs/media_keys.md) Control volume and other media functions
|
- [MediaKeys](https://github.com/KMKfw/kmk_firmware/tree/master/docs/media_keys.md) Control volume and other media functions
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -13,9 +13,9 @@ Retailers (USA)
|
|||||||
Low Profile 5x12
|
Low Profile 5x12
|
||||||
[Boardsource](https://boardsource.xyz/store/5ecb822386879c9a0c22db84)
|
[Boardsource](https://boardsource.xyz/store/5ecb822386879c9a0c22db84)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [MediaKeys](https://github.com/KMKfw/kmk_firmware/tree/master/docs/media_keys.md) Control volume and other media functions
|
- [MediaKeys](https://github.com/KMKfw/kmk_firmware/tree/master/docs/media_keys.md) Control volume and other media functions
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -9,11 +9,11 @@ kb.py is designed to work with the nice!nano
|
|||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5f2e7e4a2902de7151494f92)
|
[Boardsource](https://boardsource.xyz/store/5f2e7e4a2902de7151494f92)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
||||||
- [ModTap](https://github.com/KMKfw/kmk_firmware/tree/master/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
- [ModTap](https://github.com/KMKfw/kmk_firmware/tree/master/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -17,11 +17,11 @@ Corne
|
|||||||
Corne LP
|
Corne LP
|
||||||
[Boardsource](https://boardsource.xyz/store/5f2efc462902de7151495057)
|
[Boardsource](https://boardsource.xyz/store/5f2efc462902de7151495057)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
||||||
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -11,11 +11,11 @@ Hardware Availability: [PCB & Case Source](https://github.com/jpconstantineau/Er
|
|||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5eed23430883e03ef9a69d6a)
|
[Boardsource](https://boardsource.xyz/store/5eed23430883e03ef9a69d6a)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
||||||
- [MediaKeys](https://github.com/KMKfw/kmk_firmware/tree/master/docs/media_keys.md) Control volume and other media functions
|
- [MediaKeys](https://github.com/KMKfw/kmk_firmware/tree/master/docs/media_keys.md) Control volume and other media functions
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -8,10 +8,10 @@ kb.py is designed to work with the nice!nano
|
|||||||
|
|
||||||
Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html)
|
Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [ModTap](https://github.com/KMKfw/kmk_firmware/tree/master/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
- [ModTap](https://github.com/KMKfw/kmk_firmware/tree/master/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
||||||
- [LED](https://github.com/KMKfw/kmk_firmware/tree/master/docs/led.md) Light your keys up
|
- [LED](https://github.com/KMKfw/kmk_firmware/tree/master/docs/led.md) Light your keys up
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -9,10 +9,10 @@ kb_converter.py is designed to work with an itsybitsy with converter board found
|
|||||||
|
|
||||||
Hardware Availability: [Luddite project on 40% Keyboards](http://www.40percent.club/search/label/luddite)
|
Hardware Availability: [Luddite project on 40% Keyboards](http://www.40percent.club/search/label/luddite)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) RGB underglow
|
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) RGB underglow
|
||||||
- [LED](https://github.com/KMKfw/kmk_firmware/tree/master/docs/led.md) Light your keys up
|
- [LED](https://github.com/KMKfw/kmk_firmware/tree/master/docs/led.md) Light your keys up
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -5,11 +5,11 @@ A split keyboard with a 4x6 layout with additional 4 thumb buttons
|
|||||||
kb.py is designed to work with the nice!nano
|
kb.py is designed to work with the nice!nano
|
||||||
kb_converter.py is designed to work with an itsybitsy with converter board found [here](https://github.com/KMKfw/kmk_firmware/tree/master/hardware)
|
kb_converter.py is designed to work with an itsybitsy with converter board found [here](https://github.com/KMKfw/kmk_firmware/tree/master/hardware)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
||||||
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -5,11 +5,11 @@ A split keyboard with a 4x6 layout
|
|||||||
kb.py is designed to work with the nice!nano
|
kb.py is designed to work with the nice!nano
|
||||||
kb_converter.py is designed to work with an itsybitsy with converter board found [here](https://github.com/KMKfw/kmk_firmware/tree/master/hardware)
|
kb_converter.py is designed to work with an itsybitsy with converter board found [here](https://github.com/KMKfw/kmk_firmware/tree/master/hardware)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
||||||
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -6,11 +6,11 @@ kb.py is designed to work with the nice!nano
|
|||||||
kb_converter.py is designed to work with an itsybitsy with converter board found [here](https://github.com/KMKfw/kmk_firmware/tree/master/hardware)
|
kb_converter.py is designed to work with an itsybitsy with converter board found [here](https://github.com/KMKfw/kmk_firmware/tree/master/hardware)
|
||||||
|
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
||||||
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -10,11 +10,11 @@ kb.py is designed to work with the nice!nano
|
|||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5ec9df84c6b834480de6c3d0)
|
[Boardsource](https://boardsource.xyz/store/5ec9df84c6b834480de6c3d0)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
||||||
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -11,10 +11,10 @@ Hardware Availability: [PCB & Case Data](https://github.com/gtips/reviung)
|
|||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5ecb734486879c9a0c22dab3)
|
[Boardsource](https://boardsource.xyz/store/5ecb734486879c9a0c22dab3)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
||||||
- [ModTap](https://github.com/KMKfw/kmk_firmware/tree/master/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
- [ModTap](https://github.com/KMKfw/kmk_firmware/tree/master/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -11,10 +11,10 @@ Hardware Availability: [PCB & Case Data](https://github.com/gtips/reviung/tree/m
|
|||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5f2ef1b52bf5e8714a60f613)
|
[Boardsource](https://boardsource.xyz/store/5f2ef1b52bf5e8714a60f613)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
||||||
- [ModTap](https://github.com/KMKfw/kmk_firmware/tree/master/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
- [ModTap](https://github.com/KMKfw/kmk_firmware/tree/master/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -9,11 +9,11 @@ kb.py is designed to work with the nice!nano
|
|||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5ecb6aee86879c9a0c22da89)
|
[Boardsource](https://boardsource.xyz/store/5ecb6aee86879c9a0c22da89)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
- [BLE_Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves without wires
|
||||||
- [ModTap](https://github.com/KMKfw/kmk_firmware/tree/master/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
- [ModTap](https://github.com/KMKfw/kmk_firmware/tree/master/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
- [Split](https://github.com/KMKfw/kmk_firmware/tree/master/docs/split.md) Connects halves using a wire
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -9,9 +9,9 @@ kb.py is designed to work with the nice!nano
|
|||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5eff7ead037395179221b90c)
|
[Boardsource](https://boardsource.xyz/store/5eff7ead037395179221b90c)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
- [Layers](https://github.com/KMKfw/kmk_firmware/tree/master/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
- [RGB](https://github.com/KMKfw/kmk_firmware/tree/master/docs/rgb.md) Light it up
|
||||||
|
|
||||||
Common Extentions
|
Common Extensions
|
||||||
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
- [Power](https://github.com/KMKfw/kmk_firmware/tree/master/docs/power.md) Powersaving features for battery life
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
# BLE HID
|
# BLE HID
|
||||||
Bluetooth connections help clean up the wire mess!
|
Bluetooth connections help clean up the wire mess!
|
||||||
|
|
||||||
## Circuitpython
|
## Circuitpython
|
||||||
If not running KMKpython, this does require the adafruit_ble library from Adafruit.
|
If not running KMKpython, this does require the adafruit_ble library from Adafruit.
|
||||||
This can be downloaded
|
This can be downloaded
|
||||||
[here](https://github.com/adafruit/Adafruit_CircuitPython_BLE/tree/master/adafruit_ble).
|
[here](https://github.com/adafruit/Adafruit_CircuitPython_BLE/tree/master/adafruit_ble).
|
||||||
It is part of the [Adafruit CircuitPython Bundle](https://github.com/adafruit/Adafruit_CircuitPython_Bundle).
|
It is part of the [Adafruit CircuitPython Bundle](https://github.com/adafruit/Adafruit_CircuitPython_Bundle).
|
||||||
Simply put this in the "root" of your circuitpython device. If unsure, it's the folder with main.py in it, and should be the first folder you see when you open the device.
|
Simply put this in the "root" of your circuitpython device. If unsure, it's the folder with main.py in it, and should be the first folder you see when you open the device.
|
||||||
@ -14,12 +14,14 @@ To enable BLE hid, change the keyboard.go(). By default, the advertised name
|
|||||||
will be the name of the "flash drive". By default this is CIRCUITPY
|
will be the name of the "flash drive". By default this is CIRCUITPY
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
from kmk.hid import HIDModes
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
keyboard.go(hid_type=HIDModes.BLE)
|
keyboard.go(hid_type=HIDModes.BLE)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Changing the advertise name
|
## Changing the advertise name
|
||||||
There are two ways to change the advertising name. The first would be to
|
There are two ways to change the advertising name. The first would be to
|
||||||
[change the name of the drive](https://learn.adafruit.com/welcome-to-circuitpython/the-circuitpy-drive).
|
[change the name of the drive](https://learn.adafruit.com/welcome-to-circuitpython/the-circuitpy-drive).
|
||||||
The second would be to change the keyboard.go() like this.
|
The second would be to change the keyboard.go() like this.
|
||||||
|
|
||||||
|
@ -169,8 +169,8 @@
|
|||||||
|
|
||||||
|Key |Aliases |Description |
|
|Key |Aliases |Description |
|
||||||
|------------------------|------------------------------|-----------------------|
|
|------------------------|------------------------------|-----------------------|
|
||||||
|`KC.NONUS_HASH` |`KC.NUHS` |ISO Right of LSHIFT |
|
|`KC.NONUS_HASH` |`KC.NUHS` |ISO Left of Return |
|
||||||
|`KC.NONUS_BSLASH` |`KC.NUBS` |ISO Left of Return |
|
|`KC.NONUS_BSLASH` |`KC.NUBS` |ISO Right of LSHIFT |
|
||||||
|`KC.APPLICATION` |`KC.APP`,`KC.SEL`,`KC.WINMENU`|Menu Key (Near RCTRL) |
|
|`KC.APPLICATION` |`KC.APP`,`KC.SEL`,`KC.WINMENU`|Menu Key (Near RCTRL) |
|
||||||
|`KC.INT1` |`KC.RO` | |
|
|`KC.INT1` |`KC.RO` | |
|
||||||
|`KC.INT2` |`KC.KANA` | |
|
|`KC.INT2` |`KC.KANA` | |
|
||||||
|
@ -21,8 +21,8 @@ Changing the **Hue** cycles around the circle.
|
|||||||
Changing the **Saturation** moves between the inner and outer sections of the wheel, affecting the intensity of the color.
|
Changing the **Saturation** moves between the inner and outer sections of the wheel, affecting the intensity of the color.
|
||||||
Changing the **Value** sets the overall brightness.
|
Changing the **Value** sets the overall brightness.
|
||||||
|
|
||||||
## Enabling the extention
|
## Enabling the extension
|
||||||
The only required values that you need to give the RGB extention would be the pixel pin, and the number of pixels/LED's. If using a split keyboard, this number is per side, and not the total of both sides.
|
The only required values that you need to give the RGB extension would be the pixel pin, and the number of pixels/LED's. If using a split keyboard, this number is per side, and not the total of both sides.
|
||||||
```python
|
```python
|
||||||
from kmk.extensions.RGB import RGB
|
from kmk.extensions.RGB import RGB
|
||||||
from kb import rgb_pixel_pin # This can be imported or defined manually
|
from kb import rgb_pixel_pin # This can be imported or defined manually
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from kmk.kmktime import sleep_ms
|
from time import sleep
|
||||||
|
|
||||||
|
|
||||||
def passthrough(key, keyboard, *args, **kwargs):
|
def passthrough(key, keyboard, *args, **kwargs):
|
||||||
@ -8,9 +8,6 @@ def passthrough(key, keyboard, *args, **kwargs):
|
|||||||
def default_pressed(key, keyboard, KC, coord_int=None, coord_raw=None, *args, **kwargs):
|
def default_pressed(key, keyboard, KC, coord_int=None, coord_raw=None, *args, **kwargs):
|
||||||
keyboard.hid_pending = True
|
keyboard.hid_pending = True
|
||||||
|
|
||||||
if coord_int is not None:
|
|
||||||
keyboard._coordkeys_pressed[coord_int] = key
|
|
||||||
|
|
||||||
keyboard.keys_pressed.add(key)
|
keyboard.keys_pressed.add(key)
|
||||||
|
|
||||||
return keyboard
|
return keyboard
|
||||||
@ -22,10 +19,6 @@ def default_released(
|
|||||||
keyboard.hid_pending = True
|
keyboard.hid_pending = True
|
||||||
keyboard.keys_pressed.discard(key)
|
keyboard.keys_pressed.discard(key)
|
||||||
|
|
||||||
if coord_int is not None:
|
|
||||||
keyboard.keys_pressed.discard(keyboard._coordkeys_pressed.get(coord_int, None))
|
|
||||||
keyboard._coordkeys_pressed[coord_int] = None
|
|
||||||
|
|
||||||
return keyboard
|
return keyboard
|
||||||
|
|
||||||
|
|
||||||
@ -102,7 +95,7 @@ def bkdl_released(key, keyboard, KC, *args, **kwargs):
|
|||||||
|
|
||||||
|
|
||||||
def sleep_pressed(key, keyboard, KC, *args, **kwargs):
|
def sleep_pressed(key, keyboard, KC, *args, **kwargs):
|
||||||
sleep_ms(key.meta.ms)
|
sleep(key.meta.ms / 1000)
|
||||||
return keyboard
|
return keyboard
|
||||||
|
|
||||||
|
|
||||||
|
10
kmk/hid.py
10
kmk/hid.py
@ -52,7 +52,7 @@ HID_REPORT_SIZES = {
|
|||||||
class AbstractHID:
|
class AbstractHID:
|
||||||
REPORT_BYTES = 8
|
REPORT_BYTES = 8
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, **kwargs):
|
||||||
self._evt = bytearray(self.REPORT_BYTES)
|
self._evt = bytearray(self.REPORT_BYTES)
|
||||||
self.report_device = memoryview(self._evt)[0:1]
|
self.report_device = memoryview(self._evt)[0:1]
|
||||||
self.report_device[0] = HIDReportTypes.KEYBOARD
|
self.report_device[0] = HIDReportTypes.KEYBOARD
|
||||||
@ -239,11 +239,15 @@ class BLEHID(AbstractHID):
|
|||||||
# Hardcoded in CPy
|
# Hardcoded in CPy
|
||||||
MAX_CONNECTIONS = const(2)
|
MAX_CONNECTIONS = const(2)
|
||||||
|
|
||||||
def post_init(self, ble_name=str(getmount('/').label), **kwargs):
|
def __init__(self, ble_name=str(getmount('/').label), **kwargs):
|
||||||
|
self.ble_name = ble_name
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
def post_init(self):
|
||||||
self.conn_id = -1
|
self.conn_id = -1
|
||||||
|
|
||||||
self.ble = BLERadio()
|
self.ble = BLERadio()
|
||||||
self.ble.name = ble_name
|
self.ble.name = self.ble_name
|
||||||
self.hid = HIDService()
|
self.hid = HIDService()
|
||||||
self.hid.protocol_mode = 0 # Boot protocol
|
self.hid.protocol_mode = 0 # Boot protocol
|
||||||
|
|
||||||
|
36
kmk/keys.py
36
kmk/keys.py
@ -401,10 +401,6 @@ class Key:
|
|||||||
self.no_press = bool(no_press)
|
self.no_press = bool(no_press)
|
||||||
self.no_release = bool(no_press)
|
self.no_release = bool(no_press)
|
||||||
|
|
||||||
self._pre_press_handlers = []
|
|
||||||
self._post_press_handlers = []
|
|
||||||
self._pre_release_handlers = []
|
|
||||||
self._post_release_handlers = []
|
|
||||||
self._handle_press = on_press
|
self._handle_press = on_press
|
||||||
self._handle_release = on_release
|
self._handle_release = on_release
|
||||||
self.meta = meta
|
self.meta = meta
|
||||||
@ -424,26 +420,30 @@ class Key:
|
|||||||
return 'Key(code={}, has_modifiers={})'.format(self.code, self.has_modifiers)
|
return 'Key(code={}, has_modifiers={})'.format(self.code, self.has_modifiers)
|
||||||
|
|
||||||
def on_press(self, state, coord_int, coord_raw):
|
def on_press(self, state, coord_int, coord_raw):
|
||||||
for fn in self._pre_press_handlers:
|
if hasattr(self, '_pre_press_handlers'):
|
||||||
if not fn(self, state, KC, coord_int, coord_raw):
|
for fn in self._pre_press_handlers:
|
||||||
return None
|
if not fn(self, state, KC, coord_int, coord_raw):
|
||||||
|
return None
|
||||||
|
|
||||||
ret = self._handle_press(self, state, KC, coord_int, coord_raw)
|
ret = self._handle_press(self, state, KC, coord_int, coord_raw)
|
||||||
|
|
||||||
for fn in self._post_press_handlers:
|
if hasattr(self, '_post_press_handlers'):
|
||||||
fn(self, state, KC, coord_int, coord_raw)
|
for fn in self._post_press_handlers:
|
||||||
|
fn(self, state, KC, coord_int, coord_raw)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def on_release(self, state, coord_int, coord_raw):
|
def on_release(self, state, coord_int, coord_raw):
|
||||||
for fn in self._pre_release_handlers:
|
if hasattr(self, '_pre_release_handlers'):
|
||||||
if not fn(self, state, KC, coord_int, coord_raw):
|
for fn in self._pre_release_handlers:
|
||||||
return None
|
if not fn(self, state, KC, coord_int, coord_raw):
|
||||||
|
return None
|
||||||
|
|
||||||
ret = self._handle_release(self, state, KC, coord_int, coord_raw)
|
ret = self._handle_release(self, state, KC, coord_int, coord_raw)
|
||||||
|
|
||||||
for fn in self._post_release_handlers:
|
if hasattr(self, '_post_release_handlers'):
|
||||||
fn(self, state, KC, coord_int, coord_raw)
|
for fn in self._post_release_handlers:
|
||||||
|
fn(self, state, KC, coord_int, coord_raw)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@ -485,6 +485,8 @@ class Key:
|
|||||||
calls of this method will be executed before those provided by later calls.
|
calls of this method will be executed before those provided by later calls.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
if not hasattr(self, '_pre_press_handlers'):
|
||||||
|
self._pre_press_handlers = []
|
||||||
self._pre_press_handlers.append(fn)
|
self._pre_press_handlers.append(fn)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@ -508,6 +510,8 @@ class Key:
|
|||||||
calls of this method will be executed before those provided by later calls.
|
calls of this method will be executed before those provided by later calls.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
if not hasattr(self, '_post_press_handlers'):
|
||||||
|
self._post_press_handlers = []
|
||||||
self._post_press_handlers.append(fn)
|
self._post_press_handlers.append(fn)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@ -532,6 +536,8 @@ class Key:
|
|||||||
calls of this method will be executed before those provided by later calls.
|
calls of this method will be executed before those provided by later calls.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
if not hasattr(self, '_pre_release_handlers'):
|
||||||
|
self._pre_release_handlers = []
|
||||||
self._pre_release_handlers.append(fn)
|
self._pre_release_handlers.append(fn)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@ -555,6 +561,8 @@ class Key:
|
|||||||
calls of this method will be executed before those provided by later calls.
|
calls of this method will be executed before those provided by later calls.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
if not hasattr(self, '_post_release_handlers'):
|
||||||
|
self._post_release_handlers = []
|
||||||
self._post_release_handlers.append(fn)
|
self._post_release_handlers.append(fn)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
|
from supervisor import ticks_ms
|
||||||
|
|
||||||
from kmk.consts import KMK_RELEASE, UnicodeMode
|
from kmk.consts import KMK_RELEASE, UnicodeMode
|
||||||
from kmk.hid import BLEHID, USBHID, AbstractHID, HIDModes
|
from kmk.hid import BLEHID, USBHID, AbstractHID, HIDModes
|
||||||
from kmk.keys import KC
|
from kmk.keys import KC
|
||||||
from kmk.kmktime import ticks_ms
|
|
||||||
from kmk.matrix import MatrixScanner, intify_coordinate
|
from kmk.matrix import MatrixScanner, intify_coordinate
|
||||||
from kmk.types import TapDanceKeyMeta
|
from kmk.types import TapDanceKeyMeta
|
||||||
|
|
||||||
@ -42,7 +43,7 @@ class KMKKeyboard:
|
|||||||
secondary_hid_type = None
|
secondary_hid_type = None
|
||||||
_hid_helper = None
|
_hid_helper = None
|
||||||
hid_pending = False
|
hid_pending = False
|
||||||
state_layer_key = None
|
current_key = None
|
||||||
matrix_update = None
|
matrix_update = None
|
||||||
secondary_matrix_update = None
|
secondary_matrix_update = None
|
||||||
_matrix_modify = None
|
_matrix_modify = None
|
||||||
@ -52,6 +53,7 @@ class KMKKeyboard:
|
|||||||
_trigger_powersave_enable = False
|
_trigger_powersave_enable = False
|
||||||
_trigger_powersave_disable = False
|
_trigger_powersave_disable = False
|
||||||
i2c_deinit_count = 0
|
i2c_deinit_count = 0
|
||||||
|
_go_args = None
|
||||||
|
|
||||||
# this should almost always be PREpended to, replaces
|
# this should almost always be PREpended to, replaces
|
||||||
# former use of reversed_active_layers which had pointless
|
# former use of reversed_active_layers which had pointless
|
||||||
@ -119,7 +121,6 @@ class KMKKeyboard:
|
|||||||
self.state_changed = True
|
self.state_changed = True
|
||||||
|
|
||||||
def _find_key_in_map(self, int_coord, row, col):
|
def _find_key_in_map(self, int_coord, row, col):
|
||||||
self.state_layer_key = None
|
|
||||||
try:
|
try:
|
||||||
idx = self.coord_mapping.index(int_coord)
|
idx = self.coord_mapping.index(int_coord)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@ -133,28 +134,39 @@ class KMKKeyboard:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
for layer in self.active_layers:
|
for layer in self.active_layers:
|
||||||
self.state_layer_key = self.keymap[layer][idx]
|
layer_key = self.keymap[layer][idx]
|
||||||
|
|
||||||
if not self.state_layer_key or self.state_layer_key == KC.TRNS:
|
if not layer_key or layer_key == KC.TRNS:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if self.debug_enabled:
|
if self.debug_enabled:
|
||||||
print('KeyResolution(key={})'.format(self.state_layer_key))
|
print('KeyResolution(key={})'.format(layer_key))
|
||||||
|
|
||||||
return self.state_layer_key
|
return layer_key
|
||||||
|
|
||||||
def _on_matrix_changed(self, row, col, is_pressed):
|
def _on_matrix_changed(self, row, col, is_pressed):
|
||||||
if self.debug_enabled:
|
if self.debug_enabled:
|
||||||
print('MatrixChange(col={} row={} pressed={})'.format(col, row, is_pressed))
|
print('MatrixChange(col={} row={} pressed={})'.format(col, row, is_pressed))
|
||||||
|
|
||||||
int_coord = intify_coordinate(row, col)
|
int_coord = intify_coordinate(row, col)
|
||||||
kc_changed = self._find_key_in_map(int_coord, row, col)
|
if not is_pressed:
|
||||||
|
self.current_key = self._coordkeys_pressed[int_coord]
|
||||||
|
if self.debug_enabled:
|
||||||
|
print('PressedKeyResolution(key={})'.format(self.current_key))
|
||||||
|
|
||||||
if kc_changed is None:
|
if self.current_key is None:
|
||||||
|
self.current_key = self._find_key_in_map(int_coord, row, col)
|
||||||
|
|
||||||
|
if is_pressed:
|
||||||
|
self._coordkeys_pressed[int_coord] = self.current_key
|
||||||
|
else:
|
||||||
|
self._coordkeys_pressed[int_coord] = None
|
||||||
|
|
||||||
|
if self.current_key is None:
|
||||||
print('MatrixUndefinedCoordinate(col={} row={})'.format(col, row))
|
print('MatrixUndefinedCoordinate(col={} row={})'.format(col, row))
|
||||||
return self
|
return self
|
||||||
|
|
||||||
return self.process_key(kc_changed, is_pressed, int_coord, (row, col))
|
return self.process_key(self.current_key, is_pressed, int_coord, (row, col))
|
||||||
|
|
||||||
def process_key(self, key, is_pressed, coord_int=None, coord_raw=None):
|
def process_key(self, key, is_pressed, coord_int=None, coord_raw=None):
|
||||||
if self._tapping and not isinstance(key.meta, TapDanceKeyMeta):
|
if self._tapping and not isinstance(key.meta, TapDanceKeyMeta):
|
||||||
@ -324,7 +336,7 @@ class KMKKeyboard:
|
|||||||
self._hid_helper = BLEHID
|
self._hid_helper = BLEHID
|
||||||
else:
|
else:
|
||||||
self._hid_helper = AbstractHID
|
self._hid_helper = AbstractHID
|
||||||
self._hid_helper = self._hid_helper()
|
self._hid_helper = self._hid_helper(**self._go_args)
|
||||||
|
|
||||||
def _init_matrix(self):
|
def _init_matrix(self):
|
||||||
self.matrix = MatrixScanner(
|
self.matrix = MatrixScanner(
|
||||||
@ -426,6 +438,7 @@ class KMKKeyboard:
|
|||||||
print('Failed to run post hid function in extension: ', err, ext)
|
print('Failed to run post hid function in extension: ', err, ext)
|
||||||
|
|
||||||
def go(self, hid_type=HIDModes.USB, secondary_hid_type=None, **kwargs):
|
def go(self, hid_type=HIDModes.USB, secondary_hid_type=None, **kwargs):
|
||||||
|
self._go_args = kwargs
|
||||||
self.hid_type = hid_type
|
self.hid_type = hid_type
|
||||||
self.secondary_hid_type = secondary_hid_type
|
self.secondary_hid_type = secondary_hid_type
|
||||||
|
|
||||||
@ -444,13 +457,14 @@ class KMKKeyboard:
|
|||||||
ext.during_bootup(self)
|
ext.during_bootup(self)
|
||||||
except Exception:
|
except Exception:
|
||||||
if self.debug_enabled:
|
if self.debug_enabled:
|
||||||
print('Failed to load extention', ext)
|
print('Failed to load extension', ext)
|
||||||
|
|
||||||
self._init_matrix()
|
self._init_matrix()
|
||||||
|
|
||||||
self._print_debug_cycle(init=True)
|
self._print_debug_cycle(init=True)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
self.current_key = None
|
||||||
self.state_changed = False
|
self.state_changed = False
|
||||||
self.sandbox.active_layers = self.active_layers.copy()
|
self.sandbox.active_layers = self.active_layers.copy()
|
||||||
|
|
||||||
|
@ -1,23 +1,15 @@
|
|||||||
import time
|
from micropython import const
|
||||||
|
|
||||||
|
_TICKS_PERIOD = const(1 << 29)
|
||||||
|
_TICKS_MAX = const(_TICKS_PERIOD - 1)
|
||||||
|
_TICKS_HALFPERIOD = const(_TICKS_PERIOD // 2)
|
||||||
|
|
||||||
|
|
||||||
def sleep_ms(ms):
|
def ticks_diff(new, start):
|
||||||
return time.sleep(ms / 1000)
|
diff = (new - start) & _TICKS_MAX
|
||||||
|
diff = ((diff + _TICKS_HALFPERIOD) & _TICKS_MAX) - _TICKS_HALFPERIOD
|
||||||
|
return diff
|
||||||
|
|
||||||
|
|
||||||
def ticks_ms():
|
def check_deadline(new, start, ms):
|
||||||
'''Has .25s granularity, but is cheap'''
|
return ticks_diff(new, start) < ms
|
||||||
return time.monotonic() * 1000
|
|
||||||
|
|
||||||
|
|
||||||
def ticks_diff(new, old):
|
|
||||||
return new - old
|
|
||||||
|
|
||||||
|
|
||||||
def accurate_ticks():
|
|
||||||
'''Is more expensive, but good for time critical things'''
|
|
||||||
return time.monotonic_ns()
|
|
||||||
|
|
||||||
|
|
||||||
def accurate_ticks_diff(new, old, ms):
|
|
||||||
return bool(new - old < ms * 1000000)
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import digitalio
|
import digitalio
|
||||||
|
from supervisor import ticks_ms
|
||||||
|
|
||||||
from kmk.kmktime import ticks_ms
|
|
||||||
from kmk.modules import Module
|
from kmk.modules import Module
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
'''One layer isn't enough. Adds keys to get to more of them'''
|
'''One layer isn't enough. Adds keys to get to more of them'''
|
||||||
from micropython import const
|
from micropython import const
|
||||||
|
from supervisor import ticks_ms
|
||||||
|
|
||||||
from kmk.key_validators import layer_key_validator
|
from kmk.key_validators import layer_key_validator
|
||||||
from kmk.keys import make_argumented_key
|
from kmk.keys import make_argumented_key
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from supervisor import ticks_ms
|
||||||
|
|
||||||
from kmk.key_validators import mod_tap_validator
|
from kmk.key_validators import mod_tap_validator
|
||||||
from kmk.keys import make_argumented_key
|
from kmk.keys import make_argumented_key
|
||||||
from kmk.modules.holdtap import HoldTap
|
from kmk.modules.holdtap import HoldTap
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
import board
|
import board
|
||||||
import digitalio
|
import digitalio
|
||||||
|
from supervisor import ticks_ms
|
||||||
|
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
from kmk.handlers.stock import passthrough as handler_passthrough
|
from kmk.handlers.stock import passthrough as handler_passthrough
|
||||||
from kmk.keys import make_key
|
from kmk.keys import make_key
|
||||||
from kmk.kmktime import sleep_ms, ticks_diff, ticks_ms
|
from kmk.kmktime import check_deadline
|
||||||
from kmk.modules import Module
|
from kmk.modules import Module
|
||||||
|
|
||||||
|
|
||||||
@ -100,10 +103,10 @@ class Power(Module):
|
|||||||
'''
|
'''
|
||||||
Sleeps longer and longer to save power the more time in between updates.
|
Sleeps longer and longer to save power the more time in between updates.
|
||||||
'''
|
'''
|
||||||
if ticks_diff(ticks_ms(), self._powersave_start) <= 60000:
|
if check_deadline(ticks_ms(), self._powersave_start) <= 60000:
|
||||||
sleep_ms(8)
|
sleep(8 / 1000)
|
||||||
elif ticks_diff(ticks_ms(), self._powersave_start) >= 240000:
|
elif check_deadline(ticks_ms(), self._powersave_start) >= 240000:
|
||||||
sleep_ms(180)
|
sleep(180 / 1000)
|
||||||
return
|
return
|
||||||
|
|
||||||
def psave_time_reset(self):
|
def psave_time_reset(self):
|
||||||
@ -120,7 +123,7 @@ class Power(Module):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def usb_rescan_timer(self):
|
def usb_rescan_timer(self):
|
||||||
return bool(ticks_diff(ticks_ms(), self._usb_last_scan) > 5000)
|
return bool(check_deadline(ticks_ms(), self._usb_last_scan) > 5000)
|
||||||
|
|
||||||
def usb_time_reset(self):
|
def usb_time_reset(self):
|
||||||
self._usb_last_scan = ticks_ms()
|
self._usb_last_scan = ticks_ms()
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
'''Enables splitting keyboards wirelessly or wired'''
|
'''Enables splitting keyboards wirelessly or wired'''
|
||||||
import busio
|
import busio
|
||||||
from micropython import const
|
from micropython import const
|
||||||
|
from supervisor import ticks_ms
|
||||||
|
|
||||||
from storage import getmount
|
from storage import getmount
|
||||||
|
|
||||||
from kmk.kmktime import ticks_diff, ticks_ms
|
from kmk.kmktime import check_deadline
|
||||||
from kmk.matrix import intify_coordinate
|
from kmk.matrix import intify_coordinate
|
||||||
from kmk.modules import Module
|
from kmk.modules import Module
|
||||||
|
|
||||||
@ -241,7 +242,7 @@ class Split(Module):
|
|||||||
|
|
||||||
def ble_rescan_timer(self):
|
def ble_rescan_timer(self):
|
||||||
'''If true, the rescan timer is up'''
|
'''If true, the rescan timer is up'''
|
||||||
return bool(ticks_diff(ticks_ms(), self._ble_last_scan) > 5000)
|
return bool(check_deadline(ticks_ms(), self._ble_last_scan) > 5000)
|
||||||
|
|
||||||
def ble_time_reset(self):
|
def ble_time_reset(self):
|
||||||
'''Resets the rescan timer'''
|
'''Resets the rescan timer'''
|
||||||
|
Loading…
Reference in New Issue
Block a user