Compare commits
6 Commits
8070255490
...
5a1a6dc70d
Author | SHA1 | Date |
---|---|---|
Snipeye | 5a1a6dc70d | |
c0ldbru | d0ac04a841 | |
Danny | 8f2085421e | |
Dasky | 47bc02b2ff | |
Joel Challis | 340be4bae3 | |
Joshua Broekhuijsen | f7d902e619 |
|
@ -159,10 +159,10 @@ For example, one could search for all keyboards using STM32F411:
|
|||
qmk find -f 'processor=STM32F411'
|
||||
```
|
||||
|
||||
...and one can further constrain the list to keyboards using STM32F411 as well as rgb_matrix support:
|
||||
...and one can further constrain the list to keyboards using STM32F411 as well as rgb_matrix support with at least 3 columns:
|
||||
|
||||
```
|
||||
qmk find -f 'processor=STM32F411' -f 'features.rgb_matrix=true'
|
||||
qmk find -f 'processor=STM32F411' -f 'features.rgb_matrix=true' -f 'length(matrix_pins.cols, >=3)'
|
||||
```
|
||||
|
||||
The following filter expressions are also supported:
|
||||
|
@ -170,7 +170,7 @@ The following filter expressions are also supported:
|
|||
- `exists(key)`: Match targets where `key` is present.
|
||||
- `absent(key)`: Match targets where `key` is not present.
|
||||
- `contains(key, value)`: Match targets where `key` contains `value`. Can be used for strings, arrays and object keys.
|
||||
- `length(key, value)`: Match targets where the length of `key` is `value`. Can be used for strings, arrays and objects.
|
||||
- `length(key, value)`: Match targets where the length of `key` matches `value`. Can be used for strings, arrays and objects.
|
||||
|
||||
You can also list arbitrary values for each matched target with `--print`:
|
||||
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"manufacturer": "Keebio",
|
||||
"url": "https://keeb.io",
|
||||
"maintainer": "Keebio",
|
||||
"usb": {
|
||||
"vid": "0xCB10"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"config": { "features": {"encoder_map": true, "tri_layer": true} },
|
||||
"keyboard": "keebio/irispad",
|
||||
"keymap": "default",
|
||||
"layout": "LAYOUT",
|
||||
"layers": [
|
||||
[
|
||||
"QK_GESC", "KC_1" , "KC_2" , "KC_3" , "KC_4" , "KC_5" ,
|
||||
"KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T" ,
|
||||
"KC_LCTL", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G" ,
|
||||
"KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "TL_UPPR",
|
||||
"KC_LGUI", "TL_LOWR", "KC_ENT"
|
||||
],
|
||||
[
|
||||
"KC_TILD", "KC_EXLM", "KC_AT" , "KC_HASH", "KC_DLR" , "KC_PERC",
|
||||
"KC_GRV" , "_______", "KC_UP" , "_______", "QK_BOOT", "_______",
|
||||
"KC_DEL" , "KC_LEFT", "KC_DOWN", "KC_RGHT", "_______", "KC_LBRC",
|
||||
"RGB_MOD", "EE_CLR" , "_______", "_______", "_______", "KC_LCBR", "KC_LPRN",
|
||||
"_______", "_______", "KC_DEL"
|
||||
],
|
||||
[
|
||||
"KC_F6" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5" ,
|
||||
"KC_F12", "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_F11" ,
|
||||
"RGB_MOD", "KC_MPRV", "KC_MNXT", "KC_VOLU", "KC_PGUP", "KC_UNDS",
|
||||
"KC_MUTE", "KC_MSTP", "KC_MPLY", "KC_VOLD", "KC_PGDN", "KC_MINS", "KC_LPRN",
|
||||
"_______", "_______", "_______"
|
||||
]
|
||||
],
|
||||
"encoders": [
|
||||
[
|
||||
{"ccw": "KC_PGUP", "cw": "KC_PGDN"},
|
||||
{"ccw": "KC_VOLD", "cw": "KC_VOLU"}
|
||||
],
|
||||
[
|
||||
{"ccw": "_______", "cw": "_______"},
|
||||
{"ccw": "_______", "cw": "_______"}
|
||||
],
|
||||
[
|
||||
{"ccw": "_______", "cw": "_______"},
|
||||
{"ccw": "_______", "cw": "_______"}
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"config": { "features": {"encoder_map": true, "via": true} },
|
||||
"keyboard": "keebio/irispad",
|
||||
"keymap": "via",
|
||||
"layout": "LAYOUT",
|
||||
"layers": [
|
||||
[
|
||||
"QK_GESC", "KC_1" , "KC_2" , "KC_3" , "KC_4" , "KC_5" ,
|
||||
"KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T" ,
|
||||
"KC_LCTL", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G" ,
|
||||
"KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "TL_UPPR",
|
||||
"KC_LGUI", "TL_LOWR", "KC_ENT"
|
||||
],
|
||||
[
|
||||
"KC_TILD", "KC_EXLM", "KC_AT" , "KC_HASH", "KC_DLR" , "KC_PERC",
|
||||
"KC_GRV" , "_______", "KC_UP" , "_______", "QK_BOOT", "_______",
|
||||
"KC_DEL" , "KC_LEFT", "KC_DOWN", "KC_RGHT", "_______", "KC_LBRC",
|
||||
"RGB_MOD", "EE_CLR" , "_______", "_______", "_______", "KC_LCBR", "KC_LPRN",
|
||||
"_______", "_______", "KC_DEL"
|
||||
],
|
||||
[
|
||||
"KC_F6" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5" ,
|
||||
"KC_F12", "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_F11" ,
|
||||
"RGB_MOD", "KC_MPRV", "KC_MNXT", "KC_VOLU", "KC_PGUP", "KC_UNDS",
|
||||
"KC_MUTE", "KC_MSTP", "KC_MPLY", "KC_VOLD", "KC_PGDN", "KC_MINS", "KC_LPRN",
|
||||
"_______", "_______", "_______"
|
||||
]
|
||||
],
|
||||
"encoders": [
|
||||
[
|
||||
{"ccw": "KC_PGUP", "cw": "KC_PGDN"},
|
||||
{"ccw": "KC_VOLD", "cw": "KC_VOLU"}
|
||||
],
|
||||
[
|
||||
{"ccw": "_______", "cw": "_______"},
|
||||
{"ccw": "_______", "cw": "_______"}
|
||||
],
|
||||
[
|
||||
{"ccw": "_______", "cw": "_______"},
|
||||
{"ccw": "_______", "cw": "_______"}
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
# Irispad
|
||||
|
||||
An ergonomic gamepad based off of the Iris and sold by Keebio. [More info at Keebio](https://keeb.io).
|
||||
|
||||
* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges)
|
||||
* Hardware Supported: RP2040
|
||||
* Hardware Availability: [Keebio](https://keeb.io)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make keebio/irispad/rev8:default
|
||||
|
||||
Example of flashing this keyboard:
|
||||
|
||||
make keebio/irispad/rev8:default:flash
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/#/newbs_getting_started) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
|
||||
|
||||
A build guide for this keyboard can be found here: [Iris Build Guide](https://docs.keeb.io/iris-rev6-build-guide)
|
||||
|
||||
Note: The Irispad PCB is a repurposed Iris Rev. 8 PCB from a batch that had all of the diodes flipped, so if you would like to use a regular Iris Rev. 8 PCB, you will need to change `ROW2COL` to `COL2ROW` in `keyboard.json`.
|
|
@ -0,0 +1,11 @@
|
|||
// Copyright 2024 Danny Nguyen (danny@keeb.io)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
|
||||
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
|
||||
|
||||
#define I2C_DRIVER I2CD2
|
||||
#define I2C1_SDA_PIN GP10
|
||||
#define I2C1_SCL_PIN GP11
|
|
@ -0,0 +1,151 @@
|
|||
{
|
||||
"keyboard_name": "Irispad Rev. 8",
|
||||
"bootloader": "rp2040",
|
||||
"diode_direction": "ROW2COL",
|
||||
"encoder": {
|
||||
"rotary": [
|
||||
{"pin_a": "GP14", "pin_b": "GP15"},
|
||||
{"pin_a": "GP26", "pin_b": "GP25"}
|
||||
]
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"encoder": true,
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"rgb_matrix": true
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["GP2", "GP3", "GP29", "GP27", "GP6", "GP5"],
|
||||
"rows": ["GP0", "GP1", "GP7", "GP16", "GP28"]
|
||||
},
|
||||
"processor": "RP2040",
|
||||
"rgb_matrix": {
|
||||
"animations": {
|
||||
"alphas_mods": true,
|
||||
"band_pinwheel_sat": true,
|
||||
"band_pinwheel_val": true,
|
||||
"band_sat": true,
|
||||
"band_spiral_sat": true,
|
||||
"band_spiral_val": true,
|
||||
"band_val": true,
|
||||
"breathing": true,
|
||||
"cycle_all": true,
|
||||
"cycle_left_right": true,
|
||||
"cycle_out_in": true,
|
||||
"cycle_out_in_dual": true,
|
||||
"cycle_pinwheel": true,
|
||||
"cycle_spiral": true,
|
||||
"cycle_up_down": true,
|
||||
"digital_rain": true,
|
||||
"dual_beacon": true,
|
||||
"gradient_left_right": true,
|
||||
"gradient_up_down": true,
|
||||
"hue_breathing": true,
|
||||
"hue_pendulum": true,
|
||||
"hue_wave": true,
|
||||
"jellybean_raindrops": true,
|
||||
"multisplash": true,
|
||||
"pixel_flow": true,
|
||||
"pixel_fractal": true,
|
||||
"pixel_rain": true,
|
||||
"rainbow_beacon": true,
|
||||
"rainbow_moving_chevron": true,
|
||||
"rainbow_pinwheels": true,
|
||||
"raindrops": true,
|
||||
"solid_multisplash": true,
|
||||
"solid_reactive": true,
|
||||
"solid_reactive_cross": true,
|
||||
"solid_reactive_multicross": true,
|
||||
"solid_reactive_multinexus": true,
|
||||
"solid_reactive_multiwide": true,
|
||||
"solid_reactive_nexus": true,
|
||||
"solid_reactive_simple": true,
|
||||
"solid_reactive_wide": true,
|
||||
"solid_splash": true,
|
||||
"splash": true,
|
||||
"typing_heatmap": true
|
||||
},
|
||||
"driver": "ws2812",
|
||||
"layout": [
|
||||
{"matrix": [0, 0], "x": 0, "y": 5, "flags": 4},
|
||||
{"x": 18, "y": 5, "flags": 2},
|
||||
{"matrix": [0, 1], "x": 37, "y": 5, "flags": 4},
|
||||
{"matrix": [0, 2], "x": 76, "y": 2, "flags": 4},
|
||||
{"x": 91, "y": 1, "flags": 2},
|
||||
{"matrix": [0, 3], "x": 110, "y": 0, "flags": 4},
|
||||
{"matrix": [0, 4], "x": 146, "y": 5, "flags": 4},
|
||||
{"x": 165, "y": 3, "flags": 2},
|
||||
{"matrix": [0, 5], "x": 183, "y": 3, "flags": 4},
|
||||
{"matrix": [1, 5], "x": 183, "y": 17, "flags": 4},
|
||||
{"matrix": [1, 4], "x": 137, "y": 15, "flags": 4},
|
||||
{"matrix": [1, 3], "x": 110, "y": 13, "flags": 4},
|
||||
{"matrix": [1, 2], "x": 73, "y": 15, "flags": 4},
|
||||
{"matrix": [1, 1], "x": 37, "y": 18, "flags": 4},
|
||||
{"matrix": [1, 0], "x": 0, "y": 18, "flags": 4},
|
||||
{"matrix": [2, 0], "x": 0, "y": 32, "flags": 4},
|
||||
{"matrix": [2, 1], "x": 37, "y": 32, "flags": 4},
|
||||
{"matrix": [2, 2], "x": 73, "y": 28, "flags": 4},
|
||||
{"matrix": [2, 3], "x": 110, "y": 27, "flags": 4},
|
||||
{"matrix": [2, 4], "x": 137, "y": 28, "flags": 4},
|
||||
{"matrix": [2, 5], "x": 183, "y": 30, "flags": 4},
|
||||
{"matrix": [3, 5], "x": 183, "y": 43, "flags": 4},
|
||||
{"matrix": [3, 4], "x": 146, "y": 42, "flags": 4},
|
||||
{"matrix": [3, 3], "x": 110, "y": 40, "flags": 4},
|
||||
{"x": 91, "y": 50, "flags": 2},
|
||||
{"matrix": [3, 2], "x": 73, "y": 42, "flags": 4},
|
||||
{"matrix": [3, 1], "x": 37, "y": 45, "flags": 4},
|
||||
{"x": 18, "y": 43, "flags": 2},
|
||||
{"matrix": [3, 0], "x": 0, "y": 45, "flags": 4},
|
||||
{"matrix": [4, 5], "x": 224, "y": 52, "flags": 4},
|
||||
{"matrix": [4, 4], "x": 206, "y": 64, "flags": 4},
|
||||
{"x": 183, "y": 58, "flags": 2},
|
||||
{"matrix": [4, 3], "x": 165, "y": 58, "flags": 4},
|
||||
{"matrix": [4, 2], "x": 128, "y": 47, "flags": 4}
|
||||
],
|
||||
"max_brightness": 180,
|
||||
"sleep": true
|
||||
},
|
||||
"usb": {
|
||||
"device_version": "8.0.0",
|
||||
"pid": "0x8356"
|
||||
},
|
||||
"ws2812": {
|
||||
"driver": "vendor",
|
||||
"pin": "GP9"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"matrix": [0, 0], "x": 0, "y": 0.375},
|
||||
{"matrix": [0, 1], "x": 1, "y": 0.375},
|
||||
{"matrix": [0, 2], "x": 2, "y": 0.125},
|
||||
{"matrix": [0, 3], "x": 3, "y": 0},
|
||||
{"matrix": [0, 4], "x": 4, "y": 0.125},
|
||||
{"matrix": [0, 5], "x": 5, "y": 0.25},
|
||||
{"matrix": [1, 0], "x": 0, "y": 1.375},
|
||||
{"matrix": [1, 1], "x": 1, "y": 1.375},
|
||||
{"matrix": [1, 2], "x": 2, "y": 1.125},
|
||||
{"matrix": [1, 3], "x": 3, "y": 1},
|
||||
{"matrix": [1, 4], "x": 4, "y": 1.125},
|
||||
{"matrix": [1, 5], "x": 5, "y": 1.25},
|
||||
{"matrix": [2, 0], "x": 0, "y": 2.375},
|
||||
{"matrix": [2, 1], "x": 1, "y": 2.375},
|
||||
{"matrix": [2, 2], "x": 2, "y": 2.125},
|
||||
{"matrix": [2, 3], "x": 3, "y": 2},
|
||||
{"matrix": [2, 4], "x": 4, "y": 2.125},
|
||||
{"matrix": [2, 5], "x": 5, "y": 2.25},
|
||||
{"matrix": [3, 0], "x": 0, "y": 3.375},
|
||||
{"matrix": [3, 1], "x": 1, "y": 3.375},
|
||||
{"matrix": [3, 2], "x": 2, "y": 3.125},
|
||||
{"matrix": [3, 3], "x": 3, "y": 3},
|
||||
{"matrix": [3, 4], "x": 4, "y": 3.125},
|
||||
{"matrix": [3, 5], "x": 5, "y": 3.25},
|
||||
{"matrix": [4, 5], "x": 6.15, "y": 3.75},
|
||||
{"matrix": [4, 2], "x": 3.5, "y": 4.25},
|
||||
{"matrix": [4, 3], "x": 4.5, "y": 4.375},
|
||||
{"matrix": [4, 4], "x": 5.6, "y": 4.75}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
SERIAL_DRIVER = vendor
|
|
@ -0,0 +1,159 @@
|
|||
{
|
||||
"manufacturer": "rot13labs",
|
||||
"keyboard_name": "H4CKB0ARD",
|
||||
"maintainer": "c0ldbru",
|
||||
"bootloader": "usbasploader",
|
||||
"diode_direction": "COL2ROW",
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"command": false,
|
||||
"console": false,
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"nkro": true,
|
||||
"rgb_matrix": true
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["C0", "C1", "C2", "C3", "C4", "C5", "D0", "D1", "B5", "D7", "D6", "D4"],
|
||||
"rows": ["B0", "B1", "B2", "B3"]
|
||||
},
|
||||
"processor": "atmega328p",
|
||||
"usb": {
|
||||
"pid": "0xBABE",
|
||||
"vid": "0xBEEF",
|
||||
"device_version": "13.3.7",
|
||||
"no_startup_check": true
|
||||
},
|
||||
"ws2812": {
|
||||
"pin": "B4"
|
||||
},
|
||||
"rgb_matrix": {
|
||||
"animations": {
|
||||
"cycle_up_down": true,
|
||||
"jellybean_raindrops": true,
|
||||
"cycle_out_in": true,
|
||||
"cycle_out_in_dual": true,
|
||||
"pixel_fractal": true,
|
||||
"rainbow_moving_chevron": true,
|
||||
"cycle_pinwheel": true,
|
||||
"pixel_rain": true,
|
||||
"dual_beacon": true,
|
||||
"hue_breathing": true,
|
||||
"typing_heatmap": true,
|
||||
"digital_rain": true,
|
||||
"solid_reactive_simple": true,
|
||||
"solid_reactive": true,
|
||||
"splash": true,
|
||||
"multisplash": true,
|
||||
"solid_splash": true,
|
||||
"solid_reactive_cross": true
|
||||
},
|
||||
"driver": "ws2812",
|
||||
"default": {
|
||||
"animation": "cycle_up_down"
|
||||
},
|
||||
"layout": [
|
||||
{"flags": 4, "matrix": [0, 11], "x": 0, "y": 0},
|
||||
{"flags": 4, "matrix": [0, 10], "x": 1, "y": 0},
|
||||
{"flags": 4, "matrix": [0, 9], "x": 2, "y": 0},
|
||||
{"flags": 4, "matrix": [0, 8], "x": 3, "y": 0},
|
||||
{"flags": 4, "matrix": [0, 7], "x": 4, "y": 0},
|
||||
{"flags": 4, "matrix": [0, 6], "x": 5, "y": 0},
|
||||
{"flags": 4, "matrix": [0, 5], "x": 6, "y": 0},
|
||||
{"flags": 4, "matrix": [0, 4], "x": 7, "y": 0},
|
||||
{"flags": 4, "matrix": [0, 3], "x": 8, "y": 0},
|
||||
{"flags": 4, "matrix": [0, 2], "x": 9, "y": 0},
|
||||
{"flags": 4, "matrix": [0, 1], "x": 10, "y": 0},
|
||||
{"flags": 4, "matrix": [0, 0], "x": 11, "y": 0},
|
||||
|
||||
{"flags": 4, "matrix": [1, 0], "x": 0, "y": 1},
|
||||
{"flags": 4, "matrix": [1, 1], "x": 1.25, "y": 1},
|
||||
{"flags": 4, "matrix": [1, 2], "x": 2.25, "y": 1},
|
||||
{"flags": 4, "matrix": [1, 3], "x": 3.25, "y": 1},
|
||||
{"flags": 4, "matrix": [1, 4], "x": 4.25, "y": 1},
|
||||
{"flags": 4, "matrix": [1, 5], "x": 5.25, "y": 1},
|
||||
{"flags": 4, "matrix": [1, 6], "x": 6.25, "y": 1},
|
||||
{"flags": 4, "matrix": [1, 7], "x": 7.25, "y": 1},
|
||||
{"flags": 4, "matrix": [1, 8], "x": 8.25, "y": 1},
|
||||
{"flags": 4, "matrix": [1, 9], "x": 9.25, "y": 1},
|
||||
{"flags": 4, "matrix": [1, 11], "x": 10.25, "y": 1},
|
||||
|
||||
{"flags": 4, "matrix": [2, 11], "x": 0, "y": 2},
|
||||
{"flags": 4, "matrix": [2, 10], "x": 1.75, "y": 2},
|
||||
{"flags": 4, "matrix": [2, 8], "x": 2.75, "y": 2},
|
||||
{"flags": 4, "matrix": [2, 7], "x": 3.75, "y": 2},
|
||||
{"flags": 4, "matrix": [2, 6], "x": 4.75, "y": 2},
|
||||
{"flags": 4, "matrix": [2, 5], "x": 5.75, "y": 2},
|
||||
{"flags": 4, "matrix": [2, 4], "x": 6.75, "y": 2},
|
||||
{"flags": 4, "matrix": [2, 3], "x": 7.75, "y": 2},
|
||||
{"flags": 4, "matrix": [2, 2], "x": 8.75, "y": 2},
|
||||
{"flags": 4, "matrix": [2, 1], "x": 10.5, "y": 2},
|
||||
{"flags": 4, "matrix": [2, 0], "x": 11.5, "y": 2},
|
||||
|
||||
{"flags": 4, "matrix": [3, 0], "x": 0, "y": 3},
|
||||
{"flags": 4, "matrix": [3, 1], "x": 1.25, "y": 3},
|
||||
{"flags": 4, "matrix": [3, 2], "x": 2.5, "y": 3},
|
||||
{"flags": 4, "matrix": [3, 4], "x": 3.5, "y": 3},
|
||||
{"flags": 4, "matrix": [3, 6], "x": 5.75, "y": 3},
|
||||
{"flags": 4, "matrix": [3, 8], "x": 8.5, "y": 3},
|
||||
{"flags": 4, "matrix": [3, 9], "x": 9.5, "y": 3},
|
||||
{"flags": 4, "matrix": [3, 10], "x": 10.5, "y": 3},
|
||||
{"flags": 4, "matrix": [3, 11], "x": 11.5, "y": 3}
|
||||
],
|
||||
"max_brightness": 100
|
||||
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"matrix": [0, 0], "x": 0, "y": 0},
|
||||
{"matrix": [0, 1], "x": 1, "y": 0},
|
||||
{"matrix": [0, 2], "x": 2, "y": 0},
|
||||
{"matrix": [0, 3], "x": 3, "y": 0},
|
||||
{"matrix": [0, 4], "x": 4, "y": 0},
|
||||
{"matrix": [0, 5], "x": 5, "y": 0},
|
||||
{"matrix": [0, 6], "x": 6, "y": 0},
|
||||
{"matrix": [0, 7], "x": 7, "y": 0},
|
||||
{"matrix": [0, 8], "x": 8, "y": 0},
|
||||
{"matrix": [0, 9], "x": 9, "y": 0},
|
||||
{"matrix": [0, 10], "x": 10, "y": 0},
|
||||
{"matrix": [0, 11], "x": 11, "y": 0, "w": 1.5},
|
||||
|
||||
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
|
||||
{"matrix": [1, 1], "x": 1.25, "y": 1},
|
||||
{"matrix": [1, 2], "x": 2.25, "y": 1},
|
||||
{"matrix": [1, 3], "x": 3.25, "y": 1},
|
||||
{"matrix": [1, 4], "x": 4.25, "y": 1},
|
||||
{"matrix": [1, 5], "x": 5.25, "y": 1},
|
||||
{"matrix": [1, 6], "x": 6.25, "y": 1},
|
||||
{"matrix": [1, 7], "x": 7.25, "y": 1},
|
||||
{"matrix": [1, 8], "x": 8.25, "y": 1},
|
||||
{"matrix": [1, 9], "x": 9.25, "y": 1},
|
||||
{"matrix": [1, 11], "x": 10.25, "y": 1, "w": 2.25},
|
||||
|
||||
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
|
||||
{"matrix": [2, 1], "x": 1.75, "y": 2},
|
||||
{"matrix": [2, 2], "x": 2.75, "y": 2},
|
||||
{"matrix": [2, 3], "x": 3.75, "y": 2},
|
||||
{"matrix": [2, 4], "x": 4.75, "y": 2},
|
||||
{"matrix": [2, 5], "x": 5.75, "y": 2},
|
||||
{"matrix": [2, 6], "x": 6.75, "y": 2},
|
||||
{"matrix": [2, 7], "x": 7.75, "y": 2},
|
||||
{"matrix": [2, 8], "x": 8.75, "y": 2, "w": 1.75},
|
||||
{"matrix": [2, 10], "x": 10.5, "y": 2},
|
||||
{"matrix": [2, 11], "x": 11.5, "y": 2},
|
||||
|
||||
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
|
||||
{"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
|
||||
{"matrix": [3, 2], "x": 2.5, "y": 3},
|
||||
{"matrix": [3, 4], "x": 3.5, "y": 3, "w": 2.25},
|
||||
{"matrix": [3, 6], "x": 5.75, "y": 3, "w": 2.75},
|
||||
{"matrix": [3, 8], "x": 8.5, "y": 3},
|
||||
{"matrix": [3, 9], "x": 9.5, "y": 3},
|
||||
{"matrix": [3, 10], "x": 10.5, "y": 3},
|
||||
{"matrix": [3, 11], "x": 11.5, "y": 3}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
/* Copyright 2024 rot13labs
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT(
|
||||
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_RCTL, KC_UP, DF(1),
|
||||
KC_LCTL, KC_LGUI, MO(2), KC_SPC, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT),
|
||||
|
||||
/* FN - symbols & audio controls */
|
||||
[1] = LAYOUT(
|
||||
KC_ESC, KC_MINS, KC_EQL, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_LBRC, KC_RBRC, KC_BSLS, KC_BSPC,
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_COMM, KC_DOT, KC_SLSH, KC_RCTL, KC_VOLU, DF(2),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
|
||||
|
||||
/* ALT - numbers */
|
||||
[2] = LAYOUT(
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_RCTL, KC_UP, DF(3),
|
||||
KC_LCTL, KC_LGUI, _______, MO(3), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT),
|
||||
|
||||
/* SPC - RGB control layer */
|
||||
[3] = LAYOUT(
|
||||
KC_ESC, KC_Q, RGB_M_SW, KC_E, RGB_M_R, KC_T, KC_Y, RGB_SPD, RGB_SPI, RGB_RMOD, RGB_MOD, KC_DEL,
|
||||
KC_TAB, KC_A, RGB_M_P, KC_D, KC_F, KC_G, KC_H, RGB_SAD, RGB_SAI, RGB_TOG, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, RGB_M_B, KC_N, KC_M, KC_RCTL, RGB_VAI, DF(0),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, _______, RGB_HUD, RGB_VAD, RGB_HUI),
|
||||
};
|
|
@ -0,0 +1,19 @@
|
|||
# h4ckb0ard
|
||||
|
||||
![h4ckb0ard](https://i.imgur.com/U325abR.jpg)
|
||||
|
||||
A 40% keyboard for hackers using the c0ldbru layout, designed to minimize space without requiring users to buy extra keycaps just to use less.
|
||||
|
||||
* Keyboard Maintainer: [c0ldbru](https://github.com/c0ldbru)
|
||||
* Hardware Supported: h4ckb0ard // atmega328p
|
||||
* Hardware Availability: [rot13labs](https://rot13labs.com)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make rot13labs/h4ckb0ard:default
|
||||
|
||||
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||
|
||||
## Bootloader
|
||||
|
||||
You can enter the bootloader to flash on new firmware by holding down the ESC key while plugging the h4ckb0ard in.
|
|
@ -0,0 +1 @@
|
|||
# This file intentionally left blank
|
|
@ -11,7 +11,7 @@ from qmk.search import filter_help, search_keymap_targets
|
|||
action='append',
|
||||
default=[],
|
||||
help= # noqa: `format-python` and `pytest` don't agree here.
|
||||
f"Filter the list of keyboards based on their info.json data. Accepts the formats key=value, function(key), or function(key,value), eg. 'features.rgblight=true'. Valid functions are {filter_help()}. May be passed multiple times; all filters need to match. Value may include wildcards such as '*' and '?'." # noqa: `format-python` and `pytest` don't agree here.
|
||||
f"Filter the list of keyboards based on their info.json data. Accepts the formats key=value, function(key), or function(key,value), eg. 'features.rgblight=true' or 'length(encoder.rotary, >=20)'. Valid functions are {filter_help()}. May be passed multiple times; all filters need to match. Value may include wildcards such as '*' and '?'." # noqa: `format-python` and `pytest` don't agree here.
|
||||
)
|
||||
@cli.argument('-p', '--print', arg_only=True, action='append', default=[], help="For each matched target, print the value of the supplied info.json key. May be passed multiple times.")
|
||||
@cli.argument('-km', '--keymap', type=str, default='default', help="The keymap name to build. Default is 'default'.")
|
||||
|
|
|
@ -61,10 +61,22 @@ class Absent(FilterFunction):
|
|||
|
||||
class Length(FilterFunction):
|
||||
func_name = "length"
|
||||
funcMap = [
|
||||
(">=", int.__ge__),
|
||||
("<=", int.__le__),
|
||||
(">", int.__gt__),
|
||||
("<", int.__lt__),
|
||||
]
|
||||
|
||||
def apply(self, target_info: TargetInfo) -> bool:
|
||||
_kb, _km, info = target_info
|
||||
return (self.key in info and len(info[self.key]) == int(self.value))
|
||||
val = int(''.join(c for c in self.value if c.isdigit()))
|
||||
comp = int.__eq__
|
||||
for (start, func) in self.funcMap:
|
||||
if (self.value.startswith(start)):
|
||||
comp = func
|
||||
break
|
||||
return (self.key in info and comp(len(info[self.key]), val))
|
||||
|
||||
|
||||
class Contains(FilterFunction):
|
||||
|
|
|
@ -12,29 +12,29 @@ from qmk.json_encoders import UserspaceJSONEncoder
|
|||
|
||||
|
||||
def qmk_userspace_paths():
|
||||
test_dirs = {}
|
||||
test_dirs = set()
|
||||
|
||||
# If we're already in a directory with a qmk.json and a keyboards or layouts directory, interpret it as userspace
|
||||
if environ.get('ORIG_CWD') is not None:
|
||||
current_dir = Path(environ['ORIG_CWD'])
|
||||
while len(current_dir.parts) > 1:
|
||||
if (current_dir / 'qmk.json').is_file():
|
||||
test_dirs[current_dir] = True
|
||||
test_dirs.add(current_dir)
|
||||
current_dir = current_dir.parent
|
||||
|
||||
# If we have a QMK_USERSPACE environment variable, use that
|
||||
if environ.get('QMK_USERSPACE') is not None:
|
||||
current_dir = Path(environ['QMK_USERSPACE'])
|
||||
current_dir = Path(environ['QMK_USERSPACE']).expanduser()
|
||||
if current_dir.is_dir():
|
||||
test_dirs[current_dir] = True
|
||||
test_dirs.add(current_dir)
|
||||
|
||||
# If someone has configured a directory, use that
|
||||
if cli.config.user.overlay_dir is not None:
|
||||
current_dir = Path(cli.config.user.overlay_dir)
|
||||
current_dir = Path(cli.config.user.overlay_dir).expanduser().resolve()
|
||||
if current_dir.is_dir():
|
||||
test_dirs[current_dir] = True
|
||||
test_dirs.add(current_dir)
|
||||
|
||||
return list(test_dirs.keys())
|
||||
return list(test_dirs)
|
||||
|
||||
|
||||
def qmk_userspace_validate(path):
|
||||
|
|
|
@ -710,16 +710,17 @@ static bool pointing_handlers_master(matrix_row_t master_matrix[], matrix_row_t
|
|||
return true;
|
||||
}
|
||||
# endif
|
||||
static uint32_t last_update = 0;
|
||||
static uint16_t last_cpi = 0;
|
||||
static uint32_t last_update = 0;
|
||||
static uint32_t last_cpi_update = 0;
|
||||
static uint16_t last_cpi = 0;
|
||||
report_mouse_t temp_state;
|
||||
uint16_t temp_cpi;
|
||||
bool okay = read_if_checksum_mismatch(GET_POINTING_CHECKSUM, GET_POINTING_DATA, &last_update, &temp_state, &split_shmem->pointing.report, sizeof(temp_state));
|
||||
if (okay) pointing_device_set_shared_report(temp_state);
|
||||
temp_cpi = pointing_device_get_shared_cpi();
|
||||
if (temp_cpi && last_cpi != temp_cpi) {
|
||||
if (temp_cpi) {
|
||||
split_shmem->pointing.cpi = temp_cpi;
|
||||
okay = transport_write(PUT_POINTING_CPI, &split_shmem->pointing.cpi, sizeof(split_shmem->pointing.cpi));
|
||||
okay = send_if_condition(PUT_POINTING_CPI, &last_cpi_update, last_cpi != temp_cpi, &split_shmem->pointing.cpi, sizeof(split_shmem->pointing.cpi));
|
||||
if (okay) {
|
||||
last_cpi = temp_cpi;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue