Configure keyboard matrix from info.json (#10817)

* Make parameters from info.json available to the build system

* move all clueboard settings to info.json

* code formatting

* make flake8 happy

* make flake8 happy

* make qmk lint happy

* Add support for specifying led indicators in json

* move led indicators to the clueboard info.json

* Apply suggestions from code review

Co-authored-by: Erovia <Erovia@users.noreply.github.com>

* add missing docstring

Co-authored-by: Erovia <Erovia@users.noreply.github.com>
master
Zach White 2020-12-30 10:27:37 -08:00 committed by GitHub
parent f231f24dda
commit 47b9b11009
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
79 changed files with 4791 additions and 3901 deletions

View File

@ -501,8 +501,8 @@ endef
%:
# Check if we have the CMP tool installed
cmp $(ROOT_DIR)/Makefile $(ROOT_DIR)/Makefile >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
# Ensure that bin/qmk works. This will be a failing check after the next develop merge
if ! bin/qmk hello 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; fi
# Ensure that bin/qmk works.
if ! bin/qmk hello 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; exit 1; fi
# Check if the submodules are dirty, and display a warning if they are
ifndef SKIP_GIT
if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --depth 50 --init lib/chibios; fi

View File

@ -90,13 +90,16 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","")
include $(KEYBOARD_PATH_1)/rules.mk
endif
MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
# Pull in rules from info.json
INFO_RULES_MK = $(shell bin/qmk generate-rules-mk --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/rules.mk)
include $(INFO_RULES_MK)
# Check for keymap.json first, so we can regenerate keymap.c
include build_json.mk
@ -290,6 +293,32 @@ ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
CONFIG_H += $(KEYMAP_PATH)/config.h
endif
# Pull in stuff from info.json
INFO_JSON_FILES :=
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_1)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_2)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_3)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_4)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_5)/info.json
endif
CONFIG_H += $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/layouts.h
$(KEYBOARD_OUTPUT)/src/info_config.h: $(INFO_JSON_FILES)
bin/qmk generate-config-h --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/info_config.h
$(KEYBOARD_OUTPUT)/src/layouts.h: $(INFO_JSON_FILES)
bin/qmk generate-layouts --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/layouts.h
# project specific files
SRC += $(KEYBOARD_SRC) \
$(KEYMAP_C) \
@ -364,7 +393,7 @@ all:
echo "skipped" >&2
endif
build: elf cpfirmware
build: $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/layouts.h elf cpfirmware
check-size: build
objs-size: build

View File

@ -19,8 +19,20 @@ The `info.json` file is a JSON formatted dictionary with the following keys avai
* Width of the board in Key Units
* `height`
* Height of the board in Key Units
* `debounce`
* How many milliseconds (ms) to wait for debounce to happen. (Default: 5)
* `diode_direction`
* The direction diodes face. See [`DIRECT_PINS` in the hardware configuration](https://docs.qmk.fm/#/config_options?id=hardware-options) for more details.
* `layout_aliases`
* A dictionary containing layout aliases. The key is the alias and the value is a layout in `layouts` it maps to.
* `layouts`
* Physical Layout representations. See the next section for more detail.
* Physical Layout representations. See the [Layout Format](#layout_format) section for more detail.
* `matrix_pins`
* Configure the pins corresponding to columns and rows, or direct pins. See [Matrix Pins](#matrix_pins) for more detail.
* `rgblight`
* Configure the [RGB Lighting feature](feature_rgblight.md). See the [RGB Lighting](#rgb_lighting) section for more detail.
* `usb`
* Configure USB VID, PID, and other parameters. See [USB](#USB) for more detail.
### Layout Format
@ -49,25 +61,128 @@ All key positions and rotations are specified in relation to the top-left corner
* The width of the key, in Key Units. Ignored if `ks` is provided. Default: `1`
* `h`
* The height of the key, in Key Units. Ignored if `ks` is provided. Default: `1`
* `r`
* How many degrees clockwise to rotate the key.
* `rx`
* The absolute position of the point to rotate the key around in the horizontal axis. Default: `x`
* `ry`
* The absolute position of the point to rotate the key around in the vertical axis. Default: `y`
* `ks`
* Key Shape: define a polygon by providing a list of points, in Key Units.
* **Important**: These are relative to the top-left of the key, not absolute.
* Example ISO Enter: `[ [0,0], [1.5,0], [1.5,2], [0.25,2], [0.25,1], [0,1], [0,0] ]`
* `label`
* What to name this position in the matrix.
* This should usually be the same name as what is silkscreened on the PCB at this location.
* This should usually correspond to the keycode for the first layer of the default keymap.
* `matrix`
* A 2 item list describing the row and column location for this key.
## How is the Metadata Exposed?
### Matrix Pins
This metadata is primarily used in two ways:
Currently QMK supports connecting switches either directly to GPIO pins or via a switch matrix. At this time you can not combine these, they are mutually exclusive.
* To allow web-based configurators to dynamically generate UI
* To support the new `make keyboard:keymap:qmk` target, which bundles this metadata up with the firmware to allow QMK Toolbox to be smarter.
#### Switch Matrix
Configurator authors can see the [QMK Compiler](https://docs.api.qmk.fm/using-the-api) docs for more information on using the JSON API.
Most keyboards use a switch matrix to connect keyswitches to the MCU. You can define your pin columns and rows to configure your switch matrix. When defining switch matrices you should also define your `diode_direction`.
Example:
```json
{
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["F4", "E6", "B1", "D2"],
"rows": ["B0", "D3", "D5", "D4", "D6"]
}
}
```
#### Direct Pins
Direct pins are when you connect one side of the switch to GND and the other side to a GPIO pin on your MCU. No diode is required, but there is a 1:1 mapping between switches and pins.
When specifying direct pins you need to arrange them in nested arrays. The outer array consists of rows, while the inner array is a text string corresponding to a pin. You can use `null` to indicate an empty spot in the matrix.
Example:
```json
{
"matrix_pins": {
"direct": [
["A10", "A9"],
["A0", "B8"],
[null, "B11"],
["B9", "A8"],
["A7", "B1"],
[null, "B2"]
]
}
```
### RGB Lighting
This section controls the legacy WS2812 support in QMK. This should not be confused with the RGB Matrix feature, which can be used to control both WS2812 and ISSI RGB LEDs.
The following items can be set. Not every value is required.
* `led_count`
* The number of LEDs in your strip
* `pin`
* The GPIO pin that your LED strip is connected to
* `animations`
* A dictionary that lists enabled and disabled animations. See [RGB Light Animations](#rgb_light_animations) below.
* `sleep`
* Set to `true` to enable lighting during host sleep
* `split`
* Set to `true` to enable synchronization functionality between split halves
* `split_count`
* For split keyboards, the number of LEDs on each side
* `max_brightness`
* (0-255) What the maxmimum brightness (value) level is
* `hue_steps`
* How many steps of adjustment to have for hue
* `saturation_steps`
* How many steps of adjustment to have for saturation
* `brightness_steps`
* How many steps of adjustment to have for brightness (value)
Example:
```json
{
"rgblight": {
"led_count": 4,
"pin": "F6",
"hue_steps": 10,
"saturation_steps": 17,
"brightness_steps": 17,
"animations": {
"all": true
}
}
}
```
#### RGB Light Animations
The following animations can be enabled:
| Key | Description |
|-----|-------------|
| `all` | Enable all additional animation modes. |
| `alternating` | Enable alternating animation mode. |
| `breathing` | Enable breathing animation mode. |
| `christmas` | Enable christmas animation mode. |
| `knight` | Enable knight animation mode. |
| `rainbow_mood` | Enable rainbow mood animation mode. |
| `rainbow_swirl` | Enable rainbow swirl animation mode. |
| `rgb_test` | Enable RGB test animation mode. |
| `snake` | Enable snake animation mode. |
| `static_gradient` | Enable static gradient mode. |
| `twinkle` | Enable twinkle animation mode. |
### USB
Every USB keyboard needs to have its USB parmaters defined. At a minimum you need to set vid, pid, and device version.
Example:
```json
{
"usb": {
"vid": "0xC1ED",
"pid": "0x23B0",
"device_ver": "0x0001"
}
}
```

View File

@ -3,37 +3,4 @@
#include "quantum.h"
/* Cluepad matrix layout
* .-------------------.
* |NLCK| /| *| -|
* |-------------------|
* | 7| 8| 9| |
* |--------------| |
* | 4| 5| 6| +|
* |-------------------|
* | 1| 2| 3| |
* |--------------| |
* | 0| .| Ent|
* '-------------------'
*/
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT_numpad_5x4( \
k00, k01, k02, k03, \
k10, k11, k12, \
k20, k21, k22, k13, \
k30, k31, k32, \
k40, k42, k33 \
) { \
{ k00, k01, k02, k03 }, \
{ k10, k11, k12, k13 }, \
{ k20, k21, k22, KC_NO }, \
{ k30, k31, k32, k33 }, \
{ k40, KC_NO, k42, KC_NO } \
}
#define LAYOUT LAYOUT_numpad_5x4
#define KEYMAP LAYOUT_numpad_5x4
#endif

View File

@ -20,76 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2312
#define DEVICE_VER 0x0001
#define MANUFACTURER Clueboard
#define PRODUCT Cluepad with RGB Underlighting
#define DESCRIPTION QMK keyboard firmware for Cluepad
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 4
// ROWS: Top to bottom, COLS: Left to right
/* Row pin configuration
* row: 0 1 2 3 4
* pin:
*/
#define MATRIX_ROW_PINS { B0, D3, D5, D4, D6 }
/* Column pin configuration
* col: 0 1 2 3
* pin: F4 E6 B1 D2
*/
#define MATRIX_COL_PINS { F4, E6, B1, D2 }
#define UNUSED_PINS
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Number of backlighting levels */
#define BACKLIGHT_LEVELS 3
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* Underlight configuration
*/
#define RGB_DI_PIN F6
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 4 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* Debug forcibly enabled */
#define ALWAYS_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#endif

View File

@ -1,30 +1,67 @@
{
"manufacturer": "Clueboard",
"keyboard_name": "Clueboard 17% (Cluepad)",
"keyboard_folder": "clueboard/17",
"url": "",
"maintainer": "qmk",
"width": 4,
"maintainer": "skullydazed",
"height": 5,
"width": 4,
"diode_direction": "COL2ROW",
"features": {
"backlight": true,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": true,
"unicode": false
},
"matrix_pins": {
"cols": ["F4", "E6", "B1", "D2"],
"rows": ["B0", "D3", "D5", "D4", "D6"]
},
"rgblight": {
"animations": {
"all": true
},
"brightness_steps": "17",
"hue_steps": "10",
"led_count": "4",
"pin": "F6",
"saturation_steps": "17"
},
"url": "",
"usb": {
"device_ver": "0x0001",
"pid": "0x2312",
"vid": "0xC1ED"
},
"layout_aliases": {
"KEYMAP": "LAYOUT_numpad_5x4",
"LAYOUT": "LAYOUT_numpad_5x4"
},
"layouts": {
"LAYOUT_numpad_5x4": {
"key_count": 17,
"layout": [
{"label":"Num Lock", "x":0, "y":0},
{"label":"/", "x":1, "y":0},
{"label":"*", "x":2, "y":0},
{"label":"-", "x":3, "y":0},
{"label":"7", "x":0, "y":1},
{"label":"8", "x":1, "y":1},
{"label":"9", "x":2, "y":1},
{"label":"4", "x":0, "y":2},
{"label":"5", "x":1, "y":2},
{"label":"6", "x":2, "y":2},
{"label":"+", "x":3, "y":1, "h":2},
{"label":"1", "x":0, "y":3},
{"label":"2", "x":1, "y":3},
{"label":"3", "x":2, "y":3},
{"label":"0", "x":0, "y":4, "w":2},
{"label":".", "x":2, "y":4},
{"label":"Enter", "x":3, "y":3, "h":2}
{ "label": "Num Lock", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "/", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "*", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "-", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "7", "matrix": [1, 0], "w": 1, "x": 0, "y": 1 },
{ "label": "8", "matrix": [1, 1], "w": 1, "x": 1, "y": 1 },
{ "label": "9", "matrix": [1, 2], "w": 1, "x": 2, "y": 1 },
{ "label": "4", "matrix": [2, 0], "w": 1, "x": 0, "y": 2 },
{ "label": "5", "matrix": [2, 1], "w": 1, "x": 1, "y": 2 },
{ "label": "6", "matrix": [2, 2], "w": 1, "x": 2, "y": 2 },
{ "h": 2, "label": "+", "matrix": [1, 3], "w": 1, "x": 3, "y": 1 },
{ "label": "1", "matrix": [3, 0], "w": 1, "x": 0, "y": 3 },
{ "label": "2", "matrix": [3, 1], "w": 1, "x": 1, "y": 3 },
{ "label": "3", "matrix": [3, 2], "w": 1, "x": 2, "y": 3 },
{ "label": "0", "matrix": [4, 0], "w": 2, "x": 0, "y": 4 },
{ "label": ".", "matrix": [4, 2], "w": 1, "x": 2, "y": 4 },
{ "h": 2, "label": "Enter", "matrix": [3, 3], "w": 1, "x": 3, "y": 3 }
]
}
}

View File

@ -0,0 +1 @@
Default keymap for the Clueboard 17.

View File

@ -12,14 +12,4 @@ MCU = atmega32u4
BOOTLOADER = atmel-dfu
# Build Options
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
BACKLIGHT_DRIVER = custom
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support
UNICODE_ENABLE = no # Unicode

View File

@ -18,78 +18,4 @@
#include "quantum.h"
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT_all( \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a, kb0, kb1, kb2, kb3, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) \
{ \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, KC_NO }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, kb1, kb2, kb3, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO } \
}
#define LAYOUT_4u_space( \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, k58, kb0, kb2, kb3, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) \
{ \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, k58, KC_NO, KC_NO }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, KC_NO }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, KC_NO, kb2, kb3, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO } \
}
#define LAYOUT_7u_space( \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, kb0, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) \
{ \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, KC_NO, KC_NO, KC_NO }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, KC_NO }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, KC_NO, KC_NO, KC_NO, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO } \
}
#define LAYOUT LAYOUT_all
#endif

View File

@ -15,185 +15,17 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_H
#define CONFIG_H
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x23A0
#define DEVICE_VER 0x0001
#define MANUFACTURER Clueboard
#define PRODUCT 2x1800 2018
#define DESCRIPTION What does it mean?
/* key matrix size */
#define MATRIX_ROWS 12
#define MATRIX_COLS 11
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { C0, C1, C2, C3, C7, F7, B1, F2, F3, F4, F5, F6 }
#define MATRIX_COL_PINS { D2, D3, D4, D5, D7, E0, E1, B0, E6, B3, B2 }
#define UNUSED_PINS { D0, D1, D6, C5, C6, E4, E5, E7, F0, F1, A0, A1, A2, A3, A4, A5, A6, A7 }
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION ROW2COL
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* audio support */
#define B7_AUDIO
#define C4_AUDIO
#define AUDIO_CLICKY
#define LED_NUM_LOCK_PIN B4
#define LED_CAPS_LOCK_PIN B5
#define LED_SCROLL_LOCK_PIN B6
/* number of backlight levels */
// #define BACKLIGHT_PIN B7
// #define BACKLIGHT_BREATHING
// #define BACKLIGHT_LEVELS 3
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#define RGB_DI_PIN C6
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 16
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
*/
// #define GRAVE_ESC_CTRL_OVERRIDE
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* Magic Key Options
*
* Magic keys are hotkey commands that allow control over firmware functions of
* the keyboard. They are best used in combination with the HID Listen program,
* found here: https://www.pjrc.com/teensy/hid_listen.html
*
* The options below allow the magic key functionality to be changed. This is
* useful if your keyboard/keypad is missing keys and you want magic key support.
*
*/
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
/*
* MIDI options
*/
/* Prevent use of disabled MIDI features in the keymap */
//#define MIDI_ENABLE_STRICT 1
/* enable basic MIDI features:
- MIDI notes can be sent when in Music mode is on
*/
//#define MIDI_BASIC
/* enable advanced MIDI features:
- MIDI notes can be added to the keymap
- Octave shift and transpose
- Virtual sustain, portamento, and modulation wheel
- etc.
*/
//#define MIDI_ADVANCED
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
#endif

View File

@ -1,41 +1,435 @@
{
"keyboard_name": "Clueboard 2x1800",
"url": "",
"manufacturer": "Clueboard",
"keyboard_name": "Clueboard 2x1800 2018",
"maintainer": "skullydazed",
"width": 24,
"height": 6.5,
"width": 24,
"debounce": "5",
"diode_direction": "ROW2COL",
"features": {
"audio": true,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": true,
"unicode": false
},
"indicators": {
"num_lock": "B4",
"caps_lock": "B5",
"scroll_lock": "B6"
},
"matrix_pins": {
"cols": ["D2", " D3", " D4", " D5", " D7", " E0", " E1", " B0", " E6", " B3", " B2"],
"rows": ["C0", " C1", " C2", " C3", " C7", " F7", " B1", " F2", " F3", " F4", " F5", " F6"]
},
"rgblight": {
"animations": {
"all": true
},
"brightness_steps": "8",
"hue_steps": "8",
"led_count": "16",
"pin": "C6",
"saturation_steps": "8"
},
"usb": {
"pid": "0x23A0"
},
"layout_aliases": {
"KEYMAP": "LAYOUT_all",
"LAYOUT": "LAYOUT_all"
},
"layouts": {
"LAYOUT": {
"key_count": 127,
"LAYOUT_4u_space": {
"key_count": 124,
"layout": [
{"label":"Home", "x":0, "y":0}, {"label":"End", "x":1, "y":0}, {"label":"PgUp", "x":2, "y":0}, {"label":"PgDn", "x":3, "y":0}, {"label":"Esc", "x":4.75, "y":0}, {"label":"F1", "x":6.25, "y":0}, {"label":"F2", "x":7.25, "y":0}, {"label":"F3", "x":8.25, "y":0}, {"label":"F4", "x":9.25, "y":0}, {"label":"F5", "x":10.75, "y":0}, {"label":"F6", "x":11.75, "y":0}, {"label":"F7", "x":12.75, "y":0}, {"label":"F8", "x":13.75, "y":0}, {"label":"F9", "x":15.25, "y":0}, {"label":"F10", "x":16.25, "y":0}, {"label":"F11", "x":17.25, "y":0}, {"label":"F12", "x":18.25, "y":0}, {"label":"PrtSc", "x":20, "y":0}, {"label":"Scroll Lock", "x":21, "y":0}, {"label":"Pause", "x":22, "y":0}, {"label":"Insert", "x":23, "y":0},
{"label":"-", "x":0, "y":1.25}, {"label":"Num Lock", "x":1, "y":1.25}, {"label":"/", "x":2, "y":1.25}, {"label":"*", "x":3, "y":1.25}, {"label":"~", "x":4.5, "y":1.25}, {"label":"!", "x":5.5, "y":1.25}, {"label":"@", "x":6.5, "y":1.25}, {"label":"#", "x":7.5, "y":1.25}, {"label":"$", "x":8.5, "y":1.25}, {"label":"%", "x":9.5, "y":1.25}, {"label":"^", "x":10.5, "y":1.25}, {"label":"&", "x":11.5, "y":1.25}, {"label":"*", "x":12.5, "y":1.25}, {"label":"(", "x":13.5, "y":1.25}, {"label":")", "x":14.5, "y":1.25}, {"label":"_", "x":15.5, "y":1.25}, {"label":"+", "x":16.5, "y":1.25}, {"label":"Backspace", "x":17.5, "y":1.25, "w":2}, {"label":"Num Lock", "x":20, "y":1.25}, {"label":"/", "x":21, "y":1.25}, {"label":"*", "x":22, "y":1.25}, {"label":"-", "x":23, "y":1.25},
{"label":"+", "x":0, "y":2.25, "h":2}, {"label":"7", "x":1, "y":2.25}, {"label":"8", "x":2, "y":2.25}, {"label":"9", "x":3, "y":2.25}, {"label":"Tab", "x":4.5, "y":2.25, "w":1.5}, {"label":"Q", "x":6, "y":2.25}, {"label":"W", "x":7, "y":2.25}, {"label":"E", "x":8, "y":2.25}, {"label":"R", "x":9, "y":2.25}, {"label":"T", "x":10, "y":2.25}, {"label":"Y", "x":11, "y":2.25}, {"label":"U", "x":12, "y":2.25}, {"label":"I", "x":13, "y":2.25}, {"label":"O", "x":14, "y":2.25}, {"label":"P", "x":15, "y":2.25}, {"label":"{", "x":16, "y":2.25}, {"label":"}", "x":17, "y":2.25}, {"label":"|", "x":18, "y":2.25, "w":1.5}, {"label":"7", "x":20, "y":2.25}, {"label":"8", "x":21, "y":2.25}, {"label":"9", "x":22, "y":2.25}, {"label":"+", "x":23, "y":2.25, "h":2},
{"label":"4", "x":1, "y":3.25}, {"label":"5", "x":2, "y":3.25}, {"label":"6", "x":3, "y":3.25}, {"label":"Caps Lock", "x":4.5, "y":3.25, "w":1.75}, {"label":"A", "x":6.25, "y":3.25}, {"label":"S", "x":7.25, "y":3.25}, {"label":"D", "x":8.25, "y":3.25}, {"label":"F", "x":9.25, "y":3.25}, {"label":"G", "x":10.25, "y":3.25}, {"label":"H", "x":11.25, "y":3.25}, {"label":"J", "x":12.25, "y":3.25}, {"label":"K", "x":13.25, "y":3.25}, {"label":"L", "x":14.25, "y":3.25}, {"label":":", "x":15.25, "y":3.25}, {"label":"\"", "x":16.25, "y":3.25}, {"label":"Enter", "x":17.25, "y":3.25, "w":2.25}, {"label":"4", "x":20, "y":3.25}, {"label":"5", "x":21, "y":3.25}, {"label":"6", "x":22, "y":3.25},
{"label":"Enter", "x":0, "y":4.25, "h":2}, {"label":"1", "x":1, "y":4.25}, {"label":"2", "x":2, "y":4.25}, {"label":"3", "x":3, "y":4.25}, {"label":"\\u2191", "x":4.25, "y":4.5}, {"label":"Shift", "x":5.5, "y":4.25, "w":1.25}, {"label":"Z", "x":6.75, "y":4.25}, {"label":"X", "x":7.75, "y":4.25}, {"label":"C", "x":8.75, "y":4.25}, {"label":"V", "x":9.75, "y":4.25}, {"label":"B", "x":10.75, "y":4.25}, {"label":"N", "x":11.75, "y":4.25}, {"label":"M", "x":12.75, "y":4.25}, {"label":"<", "x":13.75, "y":4.25}, {"label":">", "x":14.75, "y":4.25}, {"label":"?", "x":15.75, "y":4.25}, {"label":"Shift", "x":16.75, "y":4.25, "w":1.75}, {"label":"\\u2191", "x":18.75, "y":4.5}, {"label":"1", "x":20, "y":4.25}, {"label":"2", "x":21, "y":4.25}, {"label":"3", "x":22, "y":4.25}, {"label":"Enter", "x":23, "y":4.25, "h":2},
{"label":"0", "x":1, "y":5.25}, {"label":".", "x":2, "y":5.25}, {"label":"\\u2190", "x":3.25, "y":5.5}, {"label":"\\u2193", "x":4.25, "y":5.5}, {"label":"\\u2192", "x":5.25, "y":5.5}, {"label":"Ctrl", "x":6.5, "y":5.25}, {"label":"Win", "x":7.5, "y":5.25}, {"label":"Alt", "x":8.5, "y":5.25}, {"label":"1u", "x":9.5, "y":5.25}, {"label":"1u", "x":10.5, "y":5.25}, {"label":"1u", "x":11.5, "y":5.25}, {"label":"1u", "x":12.5, "y":5.25}, {"label":"Alt", "x":13.5, "y":5.25}, {"label":"Win", "x":14.5, "y":5.25}, {"label":"Menu", "x":15.5, "y":5.25}, {"label":"Ctrl", "x":16.5, "y":5.25}, {"label":"\\u2190", "x":17.75, "y":5.5}, {"label":"\\u2193", "x":18.75, "y":5.5}, {"label":"\\u2192", "x":19.75, "y":5.5}, {"label":"0", "x":21, "y":5.25}, {"label":".", "x":22, "y":5.25}
{ "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "matrix": [0, 4], "w": 1, "x": 4.75, "y": 0 },
{ "matrix": [0, 6], "w": 1, "x": 6.25, "y": 0 },
{ "matrix": [0, 7], "w": 1, "x": 7.25, "y": 0 },
{ "matrix": [0, 8], "w": 1, "x": 8.25, "y": 0 },
{ "matrix": [0, 9], "w": 1, "x": 9.25, "y": 0 },
{ "matrix": [0, 10], "w": 1, "x": 10.75, "y": 0 },
{ "matrix": [6, 0], "w": 1, "x": 11.75, "y": 0 },
{ "matrix": [6, 1], "w": 1, "x": 12.75, "y": 0 },
{ "matrix": [6, 2], "w": 1, "x": 13.75, "y": 0 },
{ "matrix": [6, 3], "w": 1, "x": 15.25, "y": 0 },
{ "matrix": [6, 4], "w": 1, "x": 16.25, "y": 0 },
{ "matrix": [6, 5], "w": 1, "x": 17.25, "y": 0 },
{ "matrix": [6, 6], "w": 1, "x": 18.25, "y": 0 },
{ "matrix": [6, 7], "w": 1, "x": 20, "y": 0 },
{ "matrix": [6, 8], "w": 1, "x": 21, "y": 0 },
{ "matrix": [6, 9], "w": 1, "x": 22, "y": 0 },
{ "matrix": [6, 10], "w": 1, "x": 23, "y": 0 },
{ "matrix": [1, 0], "w": 1, "x": 0, "y": 1.25 },
{ "matrix": [1, 1], "w": 1, "x": 1, "y": 1.25 },
{ "matrix": [1, 2], "w": 1, "x": 2, "y": 1.25 },
{ "matrix": [1, 3], "w": 1, "x": 3, "y": 1.25 },
{ "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1.25 },
{ "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1.25 },
{ "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1.25 },
{ "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1.25 },
{ "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1.25 },
{ "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1.25 },
{ "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1.25 },
{ "matrix": [7, 0], "w": 1, "x": 11.5, "y": 1.25 },
{ "matrix": [7, 1], "w": 1, "x": 12.5, "y": 1.25 },
{ "matrix": [7, 2], "w": 1, "x": 13.5, "y": 1.25 },
{ "matrix": [7, 3], "w": 1, "x": 14.5, "y": 1.25 },
{ "matrix": [7, 4], "w": 1, "x": 15.5, "y": 1.25 },
{ "matrix": [7, 5], "w": 1, "x": 16.5, "y": 1.25 },
{ "matrix": [7, 6], "w": 2, "x": 17.5, "y": 1.25 },
{ "matrix": [7, 7], "w": 1, "x": 20, "y": 1.25 },
{ "matrix": [7, 8], "w": 1, "x": 21, "y": 1.25 },
{ "matrix": [7, 9], "w": 1, "x": 22, "y": 1.25 },
{ "matrix": [7, 10], "w": 1, "x": 23, "y": 1.25 },
{ "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 2.25 },
{ "matrix": [2, 1], "w": 1, "x": 1, "y": 2.25 },
{ "matrix": [2, 2], "w": 1, "x": 2, "y": 2.25 },
{ "matrix": [2, 3], "w": 1, "x": 3, "y": 2.25 },
{ "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 2.25 },
{ "matrix": [2, 5], "w": 1, "x": 6, "y": 2.25 },
{ "matrix": [2, 6], "w": 1, "x": 7, "y": 2.25 },
{ "matrix": [2, 7], "w": 1, "x": 8, "y": 2.25 },
{ "matrix": [2, 8], "w": 1, "x": 9, "y": 2.25 },
{ "matrix": [2, 9], "w": 1, "x": 10, "y": 2.25 },
{ "matrix": [2, 10], "w": 1, "x": 11, "y": 2.25 },
{ "matrix": [8, 0], "w": 1, "x": 12, "y": 2.25 },
{ "matrix": [8, 1], "w": 1, "x": 13, "y": 2.25 },
{ "matrix": [8, 2], "w": 1, "x": 14, "y": 2.25 },
{ "matrix": [8, 3], "w": 1, "x": 15, "y": 2.25 },
{ "matrix": [8, 4], "w": 1, "x": 16, "y": 2.25 },
{ "matrix": [8, 5], "w": 1, "x": 17, "y": 2.25 },
{ "matrix": [8, 6], "w": 1.5, "x": 18, "y": 2.25 },
{ "matrix": [8, 7], "w": 1, "x": 20, "y": 2.25 },
{ "matrix": [8, 8], "w": 1, "x": 21, "y": 2.25 },
{ "matrix": [8, 9], "w": 1, "x": 22, "y": 2.25 },
{ "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 2.25 },
{ "matrix": [3, 1], "w": 1, "x": 1, "y": 3.25 },
{ "matrix": [3, 2], "w": 1, "x": 2, "y": 3.25 },
{ "matrix": [3, 3], "w": 1, "x": 3, "y": 3.25 },
{ "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 3.25 },
{ "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3.25 },
{ "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3.25 },
{ "matrix": [3, 7], "w": 1, "x": 8.25, "y": 3.25 },
{ "matrix": [3, 8], "w": 1, "x": 9.25, "y": 3.25 },
{ "matrix": [3, 9], "w": 1, "x": 10.25, "y": 3.25 },
{ "matrix": [3, 10], "w": 1, "x": 11.25, "y": 3.25 },
{ "matrix": [9, 0], "w": 1, "x": 12.25, "y": 3.25 },
{ "matrix": [9, 1], "w": 1, "x": 13.25, "y": 3.25 },
{ "matrix": [9, 2], "w": 1, "x": 14.25, "y": 3.25 },
{ "matrix": [9, 3], "w": 1, "x": 15.25, "y": 3.25 },
{ "matrix": [9, 4], "w": 1, "x": 16.25, "y": 3.25 },
{ "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 3.25 },
{ "matrix": [9, 7], "w": 1, "x": 20, "y": 3.25 },
{ "matrix": [9, 8], "w": 1, "x": 21, "y": 3.25 },
{ "matrix": [9, 9], "w": 1, "x": 22, "y": 3.25 },
{ "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 4.25 },
{ "matrix": [4, 1], "w": 1, "x": 1, "y": 4.25 },
{ "matrix": [4, 2], "w": 1, "x": 2, "y": 4.25 },
{ "matrix": [4, 3], "w": 1, "x": 3, "y": 4.25 },
{ "matrix": [4, 4], "w": 1.25, "x": 5.5, "y": 4.25 },
{ "matrix": [4, 5], "w": 1, "x": 6.75, "y": 4.25 },
{ "matrix": [4, 6], "w": 1, "x": 7.75, "y": 4.25 },
{ "matrix": [4, 7], "w": 1, "x": 8.75, "y": 4.25 },
{ "matrix": [4, 8], "w": 1, "x": 9.75, "y": 4.25 },
{ "matrix": [4, 9], "w": 1, "x": 10.75, "y": 4.25 },
{ "matrix": [4, 10], "w": 1, "x": 11.75, "y": 4.25 },
{ "matrix": [10, 0], "w": 1, "x": 12.75, "y": 4.25 },
{ "matrix": [10, 1], "w": 1, "x": 13.75, "y": 4.25 },
{ "matrix": [10, 2], "w": 1, "x": 14.75, "y": 4.25 },
{ "matrix": [10, 3], "w": 1, "x": 15.75, "y": 4.25 },
{ "matrix": [10, 4], "w": 1.75, "x": 16.75, "y": 4.25 },
{ "matrix": [10, 5], "w": 1, "x": 20, "y": 4.25 },
{ "matrix": [9, 6], "w": 1, "x": 21, "y": 4.25 },
{ "matrix": [10, 7], "w": 1, "x": 22, "y": 4.25 },
{ "h": 2, "matrix": [10, 8], "w": 1, "x": 23, "y": 4.25 },
{ "matrix": [10, 9], "w": 1, "x": 4.25, "y": 4.5 },
{ "matrix": [10, 10], "w": 1, "x": 18.75, "y": 4.5 },
{ "matrix": [5, 1], "w": 1, "x": 1, "y": 5.25 },
{ "matrix": [5, 2], "w": 1, "x": 2, "y": 5.25 },
{ "matrix": [5, 3], "w": 1, "x": 6.5, "y": 5.25 },
{ "matrix": [5, 4], "w": 1, "x": 7.5, "y": 5.25 },
{ "matrix": [5, 5], "w": 1, "x": 8.5, "y": 5.25 },
{ "matrix": [5, 6], "w": 4, "x": 9.5, "y": 5.25 },
{ "matrix": [5, 7], "w": 1, "x": 13.5, "y": 5.25 },
{ "matrix": [5, 8], "w": 1, "x": 14.5, "y": 5.25 },
{ "matrix": [11, 0], "w": 1, "x": 15.5, "y": 5.25 },
{ "matrix": [11, 2], "w": 1, "x": 16.5, "y": 5.25 },
{ "matrix": [11, 3], "w": 1, "x": 21, "y": 5.25 },
{ "matrix": [11, 4], "w": 1, "x": 22, "y": 5.25 },
{ "matrix": [11, 5], "w": 1, "x": 3.25, "y": 5.5 },
{ "matrix": [10, 6], "w": 1, "x": 4.25, "y": 5.5 },
{ "matrix": [11, 6], "w": 1, "x": 5.25, "y": 5.5 },
{ "matrix": [11, 7], "w": 1, "x": 17.75, "y": 5.5 },
{ "matrix": [11, 8], "w": 1, "x": 18.75, "y": 5.5 },
{ "matrix": [11, 9], "w": 1, "x": 19.75, "y": 5.5 }
]
},
"LAYOUT_7u_space": {
"key_count": 121,
"layout": [
{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4.75, "y":0}, {"label":"k06", "x":6.25, "y":0}, {"label":"k07", "x":7.25, "y":0}, {"label":"k08", "x":8.25, "y":0}, {"label":"k09", "x":9.25, "y":0}, {"label":"k0a", "x":10.75, "y":0}, {"label":"k60", "x":11.75, "y":0}, {"label":"k61", "x":12.75, "y":0}, {"label":"k62", "x":13.75, "y":0}, {"label":"k63", "x":15.25, "y":0}, {"label":"k64", "x":16.25, "y":0}, {"label":"k65", "x":17.25, "y":0}, {"label":"k66", "x":18.25, "y":0}, {"label":"k67", "x":20, "y":0}, {"label":"k68", "x":21, "y":0}, {"label":"k69", "x":22, "y":0}, {"label":"k6a", "x":23, "y":0},
{"label":"k10", "x":0, "y":1.25}, {"label":"k11", "x":1, "y":1.25}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1.25}, {"label":"k14", "x":4.5, "y":1.25}, {"label":"k15", "x":5.5, "y":1.25}, {"label":"k16", "x":6.5, "y":1.25}, {"label":"k17", "x":7.5, "y":1.25}, {"label":"k18", "x":8.5, "y":1.25}, {"label":"k19", "x":9.5, "y":1.25}, {"label":"k0a", "x":10.5, "y":1.25}, {"label":"k70", "x":11.5, "y":1.25}, {"label":"k71", "x":12.5, "y":1.25}, {"label":"k72", "x":13.5, "y":1.25}, {"label":"k73", "x":14.5, "y":1.25}, {"label":"k74", "x":15.5, "y":1.25}, {"label":"k75", "x":16.5, "y":1.25}, {"label":"k76", "x":17.5, "y":1.25, "w":2}, {"label":"k77", "x":20, "y":1.25}, {"label":"k78", "x":21, "y":1.25}, {"label":"k79", "x":22, "y":1.25}, {"label":"k7a", "x":23, "y":1.25},
{"label":"k20", "x":0, "y":2.25, "h":2}, {"label":"k21", "x":1, "y":2.25}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2.25}, {"label":"k24", "x":4.5, "y":2.25, "w":1.5}, {"label":"k25", "x":6, "y":2.25}, {"label":"k26", "x":7, "y":2.25}, {"label":"k27", "x":8, "y":2.25}, {"label":"k28", "x":9, "y":2.25}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2a", "x":11, "y":2.25}, {"label":"k80", "x":12, "y":2.25}, {"label":"k81", "x":13, "y":2.25}, {"label":"k82", "x":14, "y":2.25}, {"label":"k83", "x":15, "y":2.25}, {"label":"k84", "x":16, "y":2.25}, {"label":"k85", "x":17, "y":2.25}, {"label":"k86", "x":18, "y":2.25, "w":1.5}, {"label":"k87", "x":20, "y":2.25}, {"label":"k88", "x":21, "y":2.25}, {"label":"k89", "x":22, "y":2.25}, {"label":"k8a", "x":23, "y":2.25, "h":2},
{"label":"k31", "x":1, "y":3.25}, {"label":"k32", "x":2, "y":3.25}, {"label":"k33", "x":3, "y":3.25}, {"label":"k34", "x":4.5, "y":3.25, "w":1.75}, {"label":"k35", "x":6.25, "y":3.25}, {"label":"k36", "x":7.25, "y":3.25}, {"label":"k37", "x":8.25, "y":3.25}, {"label":"k38", "x":9.25, "y":3.25}, {"label":"k39", "x":10.25, "y":3.25}, {"label":"k3a", "x":11.25, "y":3.25}, {"label":"k90", "x":12.25, "y":3.25}, {"label":"k91", "x":13.25, "y":3.25}, {"label":"k92", "x":14.25, "y":3.25}, {"label":"k93", "x":15.25, "y":3.25}, {"label":"k94", "x":16.25, "y":3.25}, {"label":"k95", "x":17.25, "y":3.25, "w":2.25}, {"label":"k97", "x":20, "y":3.25}, {"label":"k98", "x":21, "y":3.25}, {"label":"k99", "x":22, "y":3.25},
{"label":"k40", "x":0, "y":4.25, "h":2}, {"label":"k41", "x":1, "y":4.25}, {"label":"k42", "x":2, "y":4.25}, {"label":"k43", "x":3, "y":4.25}, {"label":"k45", "x":5.5, "y":4.25, "w":1.25}, {"label":"k46", "x":6.75, "y":4.25}, {"label":"k47", "x":7.75, "y":4.25}, {"label":"k48", "x":8.75, "y":4.25}, {"label":"k49", "x":9.75, "y":4.25}, {"label":"k4a", "x":10.75, "y":4.25}, {"label":"ka0", "x":11.75, "y":4.25}, {"label":"ka1", "x":12.75, "y":4.25}, {"label":"ka2", "x":13.75, "y":4.25}, {"label":"ka3", "x":14.75, "y":4.25}, {"label":"ka4", "x":15.75, "y":4.25}, {"label":"ka5", "x":16.75, "y":4.25, "w":1.75}, {"label":"ka7", "x":20, "y":4.25}, {"label":"ka8", "x":21, "y":4.25}, {"label":"ka9", "x":22, "y":4.25}, {"label":"kaa", "x":23, "y":4.25, "h":2}, {"label":"k44", "x":4.25, "y":4.5}, {"label":"k96", "x":18.75, "y":4.5},
{"label":"k51", "x":1, "y":5.25}, {"label":"k52", "x":2, "y":5.25}, {"label":"k56", "x":6.5, "y":5.25}, {"label":"k57", "x":7.5, "y":5.25}, {"label":"kb0", "x":8.5, "y":5.25, "w":7}, {"label":"kb4", "x":15.5, "y":5.25}, {"label":"kb5", "x":16.5, "y":5.25}, {"label":"kb8", "x":21, "y":5.25}, {"label":"kb9", "x":22, "y":5.25}, {"label":"k53", "x":3.25, "y":5.5}, {"label":"k54", "x":4.25, "y":5.5}, {"label":"k55", "x":5.25, "y":5.5}, {"label":"ka6", "x":17.75, "y":5.5}, {"label":"kb6", "x":18.75, "y":5.5}, {"label":"kb7", "x":19.75, "y":5.5}
{ "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "matrix": [0, 4], "w": 1, "x": 4.75, "y": 0 },
{ "matrix": [0, 6], "w": 1, "x": 6.25, "y": 0 },
{ "matrix": [0, 7], "w": 1, "x": 7.25, "y": 0 },
{ "matrix": [0, 8], "w": 1, "x": 8.25, "y": 0 },
{ "matrix": [0, 9], "w": 1, "x": 9.25, "y": 0 },
{ "matrix": [0, 10], "w": 1, "x": 10.75, "y": 0 },
{ "matrix": [6, 0], "w": 1, "x": 11.75, "y": 0 },
{ "matrix": [6, 1], "w": 1, "x": 12.75, "y": 0 },
{ "matrix": [6, 2], "w": 1, "x": 13.75, "y": 0 },
{ "matrix": [6, 3], "w": 1, "x": 15.25, "y": 0 },
{ "matrix": [6, 4], "w": 1, "x": 16.25, "y": 0 },
{ "matrix": [6, 5], "w": 1, "x": 17.25, "y": 0 },
{ "matrix": [6, 6], "w": 1, "x": 18.25, "y": 0 },
{ "matrix": [6, 7], "w": 1, "x": 20, "y": 0 },
{ "matrix": [6, 8], "w": 1, "x": 21, "y": 0 },
{ "matrix": [6, 9], "w": 1, "x": 22, "y": 0 },
{ "matrix": [6, 10], "w": 1, "x": 23, "y": 0 },
{ "matrix": [1, 0], "w": 1, "x": 0, "y": 1.25 },
{ "matrix": [1, 1], "w": 1, "x": 1, "y": 1.25 },
{ "matrix": [1, 2], "w": 1, "x": 2, "y": 1.25 },
{ "matrix": [1, 3], "w": 1, "x": 3, "y": 1.25 },
{ "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1.25 },
{ "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1.25 },
{ "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1.25 },
{ "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1.25 },
{ "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1.25 },
{ "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1.25 },
{ "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1.25 },
{ "matrix": [7, 0], "w": 1, "x": 11.5, "y": 1.25 },
{ "matrix": [7, 1], "w": 1, "x": 12.5, "y": 1.25 },
{ "matrix": [7, 2], "w": 1, "x": 13.5, "y": 1.25 },
{ "matrix": [7, 3], "w": 1, "x": 14.5, "y": 1.25 },
{ "matrix": [7, 4], "w": 1, "x": 15.5, "y": 1.25 },
{ "matrix": [7, 5], "w": 1, "x": 16.5, "y": 1.25 },
{ "matrix": [7, 6], "w": 2, "x": 17.5, "y": 1.25 },
{ "matrix": [7, 7], "w": 1, "x": 20, "y": 1.25 },
{ "matrix": [7, 8], "w": 1, "x": 21, "y": 1.25 },
{ "matrix": [7, 9], "w": 1, "x": 22, "y": 1.25 },
{ "matrix": [7, 10], "w": 1, "x": 23, "y": 1.25 },
{ "h": 2, "matrix": [2, 0], "w": 1, "x": 0, "y": 2.25 },
{ "matrix": [2, 1], "w": 1, "x": 1, "y": 2.25 },
{ "matrix": [2, 2], "w": 1, "x": 2, "y": 2.25 },
{ "matrix": [2, 3], "w": 1, "x": 3, "y": 2.25 },
{ "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 2.25 },
{ "matrix": [2, 5], "w": 1, "x": 6, "y": 2.25 },
{ "matrix": [2, 6], "w": 1, "x": 7, "y": 2.25 },
{ "matrix": [2, 7], "w": 1, "x": 8, "y": 2.25 },
{ "matrix": [2, 8], "w": 1, "x": 9, "y": 2.25 },
{ "matrix": [2, 9], "w": 1, "x": 10, "y": 2.25 },
{ "matrix": [2, 10], "w": 1, "x": 11, "y": 2.25 },
{ "matrix": [8, 0], "w": 1, "x": 12, "y": 2.25 },
{ "matrix": [8, 1], "w": 1, "x": 13, "y": 2.25 },
{ "matrix": [8, 2], "w": 1, "x": 14, "y": 2.25 },
{ "matrix": [8, 3], "w": 1, "x": 15, "y": 2.25 },
{ "matrix": [8, 4], "w": 1, "x": 16, "y": 2.25 },
{ "matrix": [8, 5], "w": 1, "x": 17, "y": 2.25 },
{ "matrix": [8, 6], "w": 1.5, "x": 18, "y": 2.25 },
{ "matrix": [8, 7], "w": 1, "x": 20, "y": 2.25 },
{ "matrix": [8, 8], "w": 1, "x": 21, "y": 2.25 },
{ "matrix": [8, 9], "w": 1, "x": 22, "y": 2.25 },
{ "h": 2, "matrix": [8, 10], "w": 1, "x": 23, "y": 2.25 },
{ "matrix": [3, 1], "w": 1, "x": 1, "y": 3.25 },
{ "matrix": [3, 2], "w": 1, "x": 2, "y": 3.25 },
{ "matrix": [3, 3], "w": 1, "x": 3, "y": 3.25 },
{ "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 3.25 },
{ "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3.25 },
{ "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3.25 },
{ "matrix": [3, 7], "w": 1, "x": 8.25, "y": 3.25 },
{ "matrix": [3, 8], "w": 1, "x": 9.25, "y": 3.25 },
{ "matrix": [3, 9], "w": 1, "x": 10.25, "y": 3.25 },
{ "matrix": [3, 10], "w": 1, "x": 11.25, "y": 3.25 },
{ "matrix": [9, 0], "w": 1, "x": 12.25, "y": 3.25 },
{ "matrix": [9, 1], "w": 1, "x": 13.25, "y": 3.25 },
{ "matrix": [9, 2], "w": 1, "x": 14.25, "y": 3.25 },
{ "matrix": [9, 3], "w": 1, "x": 15.25, "y": 3.25 },
{ "matrix": [9, 4], "w": 1, "x": 16.25, "y": 3.25 },
{ "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 3.25 },
{ "matrix": [9, 7], "w": 1, "x": 20, "y": 3.25 },
{ "matrix": [9, 8], "w": 1, "x": 21, "y": 3.25 },
{ "matrix": [9, 9], "w": 1, "x": 22, "y": 3.25 },
{ "h": 2, "matrix": [4, 0], "w": 1, "x": 0, "y": 4.25 },
{ "matrix": [4, 1], "w": 1, "x": 1, "y": 4.25 },
{ "matrix": [4, 2], "w": 1, "x": 2, "y": 4.25 },
{ "matrix": [4, 3], "w": 1, "x": 3, "y": 4.25 },
{ "matrix": [4, 4], "w": 1.25, "x": 5.5, "y": 4.25 },
{ "matrix": [4, 5], "w": 1, "x": 6.75, "y": 4.25 },
{ "matrix": [4, 6], "w": 1, "x": 7.75, "y": 4.25 },
{ "matrix": [4, 7], "w": 1, "x": 8.75, "y": 4.25 },
{ "matrix": [4, 8], "w": 1, "x": 9.75, "y": 4.25 },
{ "matrix": [4, 9], "w": 1, "x": 10.75, "y": 4.25 },
{ "matrix": [4, 10], "w": 1, "x": 11.75, "y": 4.25 },
{ "matrix": [10, 0], "w": 1, "x": 12.75, "y": 4.25 },
{ "matrix": [10, 1], "w": 1, "x": 13.75, "y": 4.25 },
{ "matrix": [10, 2], "w": 1, "x": 14.75, "y": 4.25 },
{ "matrix": [10, 3], "w": 1, "x": 15.75, "y": 4.25 },
{ "matrix": [10, 4], "w": 1.75, "x": 16.75, "y": 4.25 },
{ "matrix": [10, 5], "w": 1, "x": 20, "y": 4.25 },
{ "matrix": [9, 6], "w": 1, "x": 21, "y": 4.25 },
{ "matrix": [10, 7], "w": 1, "x": 22, "y": 4.25 },
{ "h": 2, "matrix": [10, 8], "w": 1, "x": 23, "y": 4.25 },
{ "matrix": [10, 9], "w": 1, "x": 4.25, "y": 4.5 },
{ "matrix": [10, 10], "w": 1, "x": 18.75, "y": 4.5 },
{ "matrix": [5, 1], "w": 1, "x": 1, "y": 5.25 },
{ "matrix": [5, 2], "w": 1, "x": 2, "y": 5.25 },
{ "matrix": [5, 3], "w": 1, "x": 6.5, "y": 5.25 },
{ "matrix": [5, 4], "w": 1, "x": 7.5, "y": 5.25 },
{ "matrix": [5, 5], "w": 7, "x": 8.5, "y": 5.25 },
{ "matrix": [5, 6], "w": 1, "x": 15.5, "y": 5.25 },
{ "matrix": [5, 7], "w": 1, "x": 16.5, "y": 5.25 },
{ "matrix": [11, 0], "w": 1, "x": 21, "y": 5.25 },
{ "matrix": [11, 4], "w": 1, "x": 22, "y": 5.25 },
{ "matrix": [11, 5], "w": 1, "x": 3.25, "y": 5.5 },
{ "matrix": [10, 6], "w": 1, "x": 4.25, "y": 5.5 },
{ "matrix": [11, 6], "w": 1, "x": 5.25, "y": 5.5 },
{ "matrix": [11, 7], "w": 1, "x": 17.75, "y": 5.5 },
{ "matrix": [11, 8], "w": 1, "x": 18.75, "y": 5.5 },
{ "matrix": [11, 9], "w": 1, "x": 19.75, "y": 5.5 }
]
},
"LAYOUT_4u_space": {
"key_count": 124,
"LAYOUT_all": {
"key_count": 127,
"layout": [
{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4.75, "y":0}, {"label":"k06", "x":6.25, "y":0}, {"label":"k07", "x":7.25, "y":0}, {"label":"k08", "x":8.25, "y":0}, {"label":"k09", "x":9.25, "y":0}, {"label":"k0a", "x":10.75, "y":0}, {"label":"k60", "x":11.75, "y":0}, {"label":"k61", "x":12.75, "y":0}, {"label":"k62", "x":13.75, "y":0}, {"label":"k63", "x":15.25, "y":0}, {"label":"k64", "x":16.25, "y":0}, {"label":"k65", "x":17.25, "y":0}, {"label":"k66", "x":18.25, "y":0}, {"label":"k67", "x":20, "y":0}, {"label":"k68", "x":21, "y":0}, {"label":"k69", "x":22, "y":0}, {"label":"k6a", "x":23, "y":0},
{"label":"k10", "x":0, "y":1.25}, {"label":"k11", "x":1, "y":1.25}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1.25}, {"label":"k14", "x":4.5, "y":1.25}, {"label":"k15", "x":5.5, "y":1.25}, {"label":"k16", "x":6.5, "y":1.25}, {"label":"k17", "x":7.5, "y":1.25}, {"label":"k18", "x":8.5, "y":1.25}, {"label":"k19", "x":9.5, "y":1.25}, {"label":"k0a", "x":10.5, "y":1.25}, {"label":"k70", "x":11.5, "y":1.25}, {"label":"k71", "x":12.5, "y":1.25}, {"label":"k72", "x":13.5, "y":1.25}, {"label":"k73", "x":14.5, "y":1.25}, {"label":"k74", "x":15.5, "y":1.25}, {"label":"k75", "x":16.5, "y":1.25}, {"label":"k76", "x":17.5, "y":1.25, "w":2}, {"label":"k77", "x":20, "y":1.25}, {"label":"k78", "x":21, "y":1.25}, {"label":"k79", "x":22, "y":1.25}, {"label":"k7a", "x":23, "y":1.25},
{"label":"k20", "x":0, "y":2.25, "h":2}, {"label":"k21", "x":1, "y":2.25}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2.25}, {"label":"k24", "x":4.5, "y":2.25, "w":1.5}, {"label":"k25", "x":6, "y":2.25}, {"label":"k26", "x":7, "y":2.25}, {"label":"k27", "x":8, "y":2.25}, {"label":"k28", "x":9, "y":2.25}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2a", "x":11, "y":2.25}, {"label":"k80", "x":12, "y":2.25}, {"label":"k81", "x":13, "y":2.25}, {"label":"k82", "x":14, "y":2.25}, {"label":"k83", "x":15, "y":2.25}, {"label":"k84", "x":16, "y":2.25}, {"label":"k85", "x":17, "y":2.25}, {"label":"k86", "x":18, "y":2.25, "w":1.5}, {"label":"k87", "x":20, "y":2.25}, {"label":"k88", "x":21, "y":2.25}, {"label":"k89", "x":22, "y":2.25}, {"label":"k8a", "x":23, "y":2.25, "h":2},
{"label":"k31", "x":1, "y":3.25}, {"label":"k32", "x":2, "y":3.25}, {"label":"k33", "x":3, "y":3.25}, {"label":"k34", "x":4.5, "y":3.25, "w":1.75}, {"label":"k35", "x":6.25, "y":3.25}, {"label":"k36", "x":7.25, "y":3.25}, {"label":"k37", "x":8.25, "y":3.25}, {"label":"k38", "x":9.25, "y":3.25}, {"label":"k39", "x":10.25, "y":3.25}, {"label":"k3a", "x":11.25, "y":3.25}, {"label":"k90", "x":12.25, "y":3.25}, {"label":"k91", "x":13.25, "y":3.25}, {"label":"k92", "x":14.25, "y":3.25}, {"label":"k93", "x":15.25, "y":3.25}, {"label":"k94", "x":16.25, "y":3.25}, {"label":"k95", "x":17.25, "y":3.25, "w":2.25}, {"label":"k97", "x":20, "y":3.25}, {"label":"k98", "x":21, "y":3.25}, {"label":"k99", "x":22, "y":3.25},
{"label":"k40", "x":0, "y":4.25, "h":2}, {"label":"k41", "x":1, "y":4.25}, {"label":"k42", "x":2, "y":4.25}, {"label":"k43", "x":3, "y":4.25}, {"label":"k45", "x":5.5, "y":4.25, "w":1.25}, {"label":"k46", "x":6.75, "y":4.25}, {"label":"k47", "x":7.75, "y":4.25}, {"label":"k48", "x":8.75, "y":4.25}, {"label":"k49", "x":9.75, "y":4.25}, {"label":"k4a", "x":10.75, "y":4.25}, {"label":"ka0", "x":11.75, "y":4.25}, {"label":"ka1", "x":12.75, "y":4.25}, {"label":"ka2", "x":13.75, "y":4.25}, {"label":"ka3", "x":14.75, "y":4.25}, {"label":"ka4", "x":15.75, "y":4.25}, {"label":"ka5", "x":16.75, "y":4.25, "w":1.75}, {"label":"ka7", "x":20, "y":4.25}, {"label":"ka8", "x":21, "y":4.25}, {"label":"ka9", "x":22, "y":4.25}, {"label":"kaa", "x":23, "y":4.25, "h":2}, {"label":"k44", "x":4.25, "y":4.5}, {"label":"k96", "x":18.75, "y":4.5},
{"label":"k51", "x":1, "y":5.25}, {"label":"k52", "x":2, "y":5.25}, {"label":"k56", "x":6.5, "y":5.25}, {"label":"k57", "x":7.5, "y":5.25}, {"label":"k58", "x":8.5, "y":5.25}, {"label":"kb0", "x":9.5, "y":5.25, "w":4}, {"label":"kb2", "x":13.5, "y":5.25}, {"label":"kb3", "x":14.5, "y":5.25}, {"label":"kb4", "x":15.5, "y":5.25}, {"label":"kb5", "x":16.5, "y":5.25}, {"label":"kb8", "x":21, "y":5.25}, {"label":"kb9", "x":22, "y":5.25}, {"label":"k53", "x":3.25, "y":5.5}, {"label":"k54", "x":4.25, "y":5.5}, {"label":"k55", "x":5.25, "y":5.5}, {"label":"ka6", "x":17.75, "y":5.5}, {"label":"kb6", "x":18.75, "y":5.5}, {"label":"kb7", "x":19.75, "y":5.5}
{ "label": "Home", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "End", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "PgUp", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "PgDn", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "Esc", "matrix": [0, 4], "w": 1, "x": 4.75, "y": 0 },
{ "label": "F1", "matrix": [0, 6], "w": 1, "x": 6.25, "y": 0 },
{ "label": "F2", "matrix": [0, 7], "w": 1, "x": 7.25, "y": 0 },
{ "label": "F3", "matrix": [0, 8], "w": 1, "x": 8.25, "y": 0 },
{ "label": "F4", "matrix": [0, 9], "w": 1, "x": 9.25, "y": 0 },
{ "label": "F5", "matrix": [0, 10], "w": 1, "x": 10.75, "y": 0 },
{ "label": "F6", "matrix": [6, 0], "w": 1, "x": 11.75, "y": 0 },
{ "label": "F7", "matrix": [6, 1], "w": 1, "x": 12.75, "y": 0 },
{ "label": "F8", "matrix": [6, 2], "w": 1, "x": 13.75, "y": 0 },
{ "label": "F9", "matrix": [6, 3], "w": 1, "x": 15.25, "y": 0 },
{ "label": "F10", "matrix": [6, 4], "w": 1, "x": 16.25, "y": 0 },
{ "label": "F11", "matrix": [6, 5], "w": 1, "x": 17.25, "y": 0 },
{ "label": "F12", "matrix": [6, 6], "w": 1, "x": 18.25, "y": 0 },
{ "label": "PrtSc", "matrix": [6, 7], "w": 1, "x": 20, "y": 0 },
{ "label": "Scroll Lock", "matrix": [6, 8], "w": 1, "x": 21, "y": 0 },
{ "label": "Pause", "matrix": [6, 9], "w": 1, "x": 22, "y": 0 },
{ "label": "Insert", "matrix": [6, 10], "w": 1, "x": 23, "y": 0 },
{ "label": "-", "matrix": [1, 0], "w": 1, "x": 0, "y": 1.25 },
{ "label": "Num Lock", "matrix": [1, 1], "w": 1, "x": 1, "y": 1.25 },
{ "label": "/", "matrix": [1, 2], "w": 1, "x": 2, "y": 1.25 },
{ "label": "*", "matrix": [1, 3], "w": 1, "x": 3, "y": 1.25 },
{ "label": "~", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1.25 },
{ "label": "!", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1.25 },
{ "label": "@", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1.25 },
{ "label": "#", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1.25 },
{ "label": "$", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1.25 },
{ "label": "%", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1.25 },
{ "label": "^", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1.25 },
{ "label": "&", "matrix": [7, 0], "w": 1, "x": 11.5, "y": 1.25 },
{ "label": "*", "matrix": [7, 1], "w": 1, "x": 12.5, "y": 1.25 },
{ "label": "(", "matrix": [7, 2], "w": 1, "x": 13.5, "y": 1.25 },
{ "label": ")", "matrix": [7, 3], "w": 1, "x": 14.5, "y": 1.25 },
{ "label": "_", "matrix": [7, 4], "w": 1, "x": 15.5, "y": 1.25 },
{ "label": "+", "matrix": [7, 5], "w": 1, "x": 16.5, "y": 1.25 },
{ "label": "Backspace", "matrix": [7, 6], "w": 2, "x": 17.5, "y": 1.25 },
{ "label": "Num Lock", "matrix": [7, 7], "w": 1, "x": 20, "y": 1.25 },
{ "label": "/", "matrix": [7, 8], "w": 1, "x": 21, "y": 1.25 },
{ "label": "*", "matrix": [7, 9], "w": 1, "x": 22, "y": 1.25 },
{ "label": "-", "matrix": [7, 10], "w": 1, "x": 23, "y": 1.25 },
{ "h": 2, "label": "+", "matrix": [2, 0], "w": 1, "x": 0, "y": 2.25 },
{ "label": "7", "matrix": [2, 1], "w": 1, "x": 1, "y": 2.25 },
{ "label": "8", "matrix": [2, 2], "w": 1, "x": 2, "y": 2.25 },
{ "label": "9", "matrix": [2, 3], "w": 1, "x": 3, "y": 2.25 },
{ "label": "Tab", "matrix": [2, 4], "w": 1.5, "x": 4.5, "y": 2.25 },
{ "label": "Q", "matrix": [2, 5], "w": 1, "x": 6, "y": 2.25 },
{ "label": "W", "matrix": [2, 6], "w": 1, "x": 7, "y": 2.25 },
{ "label": "E", "matrix": [2, 7], "w": 1, "x": 8, "y": 2.25 },
{ "label": "R", "matrix": [2, 8], "w": 1, "x": 9, "y": 2.25 },
{ "label": "T", "matrix": [2, 9], "w": 1, "x": 10, "y": 2.25 },
{ "label": "Y", "matrix": [2, 10], "w": 1, "x": 11, "y": 2.25 },
{ "label": "U", "matrix": [8, 0], "w": 1, "x": 12, "y": 2.25 },
{ "label": "I", "matrix": [8, 1], "w": 1, "x": 13, "y": 2.25 },
{ "label": "O", "matrix": [8, 2], "w": 1, "x": 14, "y": 2.25 },
{ "label": "P", "matrix": [8, 3], "w": 1, "x": 15, "y": 2.25 },
{ "label": "{", "matrix": [8, 4], "w": 1, "x": 16, "y": 2.25 },
{ "label": "}", "matrix": [8, 5], "w": 1, "x": 17, "y": 2.25 },
{ "label": "|", "matrix": [8, 6], "w": 1.5, "x": 18, "y": 2.25 },
{ "label": "7", "matrix": [8, 7], "w": 1, "x": 20, "y": 2.25 },
{ "label": "8", "matrix": [8, 8], "w": 1, "x": 21, "y": 2.25 },
{ "label": "9", "matrix": [8, 9], "w": 1, "x": 22, "y": 2.25 },
{ "h": 2, "label": "+", "matrix": [8, 10], "w": 1, "x": 23, "y": 2.25 },
{ "label": "4", "matrix": [3, 1], "w": 1, "x": 1, "y": 3.25 },
{ "label": "5", "matrix": [3, 2], "w": 1, "x": 2, "y": 3.25 },
{ "label": "6", "matrix": [3, 3], "w": 1, "x": 3, "y": 3.25 },
{ "label": "Caps Lock", "matrix": [3, 4], "w": 1.75, "x": 4.5, "y": 3.25 },
{ "label": "A", "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3.25 },
{ "label": "S", "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3.25 },
{ "label": "D", "matrix": [3, 7], "w": 1, "x": 8.25, "y": 3.25 },
{ "label": "F", "matrix": [3, 8], "w": 1, "x": 9.25, "y": 3.25 },
{ "label": "G", "matrix": [3, 9], "w": 1, "x": 10.25, "y": 3.25 },
{ "label": "H", "matrix": [3, 10], "w": 1, "x": 11.25, "y": 3.25 },
{ "label": "J", "matrix": [9, 0], "w": 1, "x": 12.25, "y": 3.25 },
{ "label": "K", "matrix": [9, 1], "w": 1, "x": 13.25, "y": 3.25 },
{ "label": "L", "matrix": [9, 2], "w": 1, "x": 14.25, "y": 3.25 },
{ "label": ":", "matrix": [9, 3], "w": 1, "x": 15.25, "y": 3.25 },
{ "label": "\"", "matrix": [9, 4], "w": 1, "x": 16.25, "y": 3.25 },
{ "label": "Enter", "matrix": [9, 5], "w": 2.25, "x": 17.25, "y": 3.25 },
{ "label": "4", "matrix": [9, 7], "w": 1, "x": 20, "y": 3.25 },
{ "label": "5", "matrix": [9, 8], "w": 1, "x": 21, "y": 3.25 },
{ "label": "6", "matrix": [9, 9], "w": 1, "x": 22, "y": 3.25 },
{ "h": 2, "label": "Enter", "matrix": [4, 0], "w": 1, "x": 0, "y": 4.25 },
{ "label": "1", "matrix": [4, 1], "w": 1, "x": 1, "y": 4.25 },
{ "label": "2", "matrix": [4, 2], "w": 1, "x": 2, "y": 4.25 },
{ "label": "3", "matrix": [4, 3], "w": 1, "x": 3, "y": 4.25 },
{ "label": "\\u2191", "matrix": [4, 4], "w": 1, "x": 4.25, "y": 4.5 },
{ "label": "Shift", "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 4.25 },
{ "label": "Z", "matrix": [4, 6], "w": 1, "x": 6.75, "y": 4.25 },
{ "label": "X", "matrix": [4, 7], "w": 1, "x": 7.75, "y": 4.25 },
{ "label": "C", "matrix": [4, 8], "w": 1, "x": 8.75, "y": 4.25 },
{ "label": "V", "matrix": [4, 9], "w": 1, "x": 9.75, "y": 4.25 },
{ "label": "B", "matrix": [4, 10], "w": 1, "x": 10.75, "y": 4.25 },
{ "label": "N", "matrix": [10, 0], "w": 1, "x": 11.75, "y": 4.25 },
{ "label": "M", "matrix": [10, 1], "w": 1, "x": 12.75, "y": 4.25 },
{ "label": "<", "matrix": [10, 2], "w": 1, "x": 13.75, "y": 4.25 },
{ "label": ">", "matrix": [10, 3], "w": 1, "x": 14.75, "y": 4.25 },
{ "label": "?", "matrix": [10, 4], "w": 1, "x": 15.75, "y": 4.25 },
{ "label": "Shift", "matrix": [10, 5], "w": 1.75, "x": 16.75, "y": 4.25 },
{ "label": "\\u2191", "matrix": [9, 6], "w": 1, "x": 18.75, "y": 4.5 },
{ "label": "1", "matrix": [10, 7], "w": 1, "x": 20, "y": 4.25 },
{ "label": "2", "matrix": [10, 8], "w": 1, "x": 21, "y": 4.25 },
{ "label": "3", "matrix": [10, 9], "w": 1, "x": 22, "y": 4.25 },
{ "h": 2, "label": "Enter", "matrix": [10, 10], "w": 1, "x": 23, "y": 4.25 },
{ "label": "0", "matrix": [5, 1], "w": 1, "x": 1, "y": 5.25 },
{ "label": ".", "matrix": [5, 2], "w": 1, "x": 2, "y": 5.25 },
{ "label": "\\u2190", "matrix": [5, 3], "w": 1, "x": 3.25, "y": 5.5 },
{ "label": "\\u2193", "matrix": [5, 4], "w": 1, "x": 4.25, "y": 5.5 },
{ "label": "\\u2192", "matrix": [5, 5], "w": 1, "x": 5.25, "y": 5.5 },
{ "label": "Ctrl", "matrix": [5, 6], "w": 1, "x": 6.5, "y": 5.25 },
{ "label": "Win", "matrix": [5, 7], "w": 1, "x": 7.5, "y": 5.25 },
{ "label": "Alt", "matrix": [5, 8], "w": 1, "x": 8.5, "y": 5.25 },
{ "label": "1u", "matrix": [5, 9], "w": 1, "x": 9.5, "y": 5.25 },
{ "label": "1u", "matrix": [5, 10], "w": 1, "x": 10.5, "y": 5.25 },
{ "label": "1u", "matrix": [11, 0], "w": 1, "x": 11.5, "y": 5.25 },
{ "label": "1u", "matrix": [11, 1], "w": 1, "x": 12.5, "y": 5.25 },
{ "label": "Alt", "matrix": [11, 2], "w": 1, "x": 13.5, "y": 5.25 },
{ "label": "Win", "matrix": [11, 3], "w": 1, "x": 14.5, "y": 5.25 },
{ "label": "Menu", "matrix": [11, 4], "w": 1, "x": 15.5, "y": 5.25 },
{ "label": "Ctrl", "matrix": [11, 5], "w": 1, "x": 16.5, "y": 5.25 },
{ "label": "\\u2190", "matrix": [10, 6], "w": 1, "x": 17.75, "y": 5.5 },
{ "label": "\\u2193", "matrix": [11, 6], "w": 1, "x": 18.75, "y": 5.5 },
{ "label": "\\u2192", "matrix": [11, 7], "w": 1, "x": 19.75, "y": 5.5 },
{ "label": "0", "matrix": [11, 8], "w": 1, "x": 21, "y": 5.25 },
{ "label": ".", "matrix": [11, 9], "w": 1, "x": 22, "y": 5.25 }
]
}
}

View File

@ -10,15 +10,3 @@ MCU = at90usb1286
# ATmega32A bootloadHID
# ATmega328P USBasp
BOOTLOADER = halfkay
# Build Options
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
MIDI_ENABLE = no # MIDI support
UNICODE_ENABLE = no # Unicode
RGBLIGHT_ENABLE = yes # RGB on port C6
AUDIO_ENABLE = yes # Audio output on port C4 and B7

View File

@ -28,227 +28,6 @@ enum TWOx1800_keycodes {
#undef SAFE_RANGE
#define SAFE_RANGE NEW_SAFE_RANGE
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT_all( \
e00, e01, e02, e03, \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k9a, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a, kb0, kb1, kb2, kb3, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) { \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, k9a }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, kb1, kb2, kb3, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, e00, e01, KC_NO, KC_NO, KC_NO, KC_NO, e02, e03 } \
}
#define LAYOUT_1u_ansi( \
e00, e01, e02, e03, \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a, kb0, kb1, kb2, kb3, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) { \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, KC_NO }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, kb1, kb2, kb3, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, e00, e01, KC_NO, KC_NO, KC_NO, KC_NO, e02, e03 } \
}
#define LAYOUT_1u_iso( \
e00, e01, e02, e03, \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k9a, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a, kb0, kb1, kb2, kb3, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) { \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, KC_NO, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, k9a }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, kb1, kb2, kb3, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, e00, e01, KC_NO, KC_NO, KC_NO, KC_NO, e02, e03 } \
}
#define LAYOUT_2u_ansi( \
e00, e01, e02, e03, \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, k58, k59, kb0, kb1, kb2, kb3, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) { \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, k58, k59, KC_NO }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, KC_NO }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, kb1, kb2, kb3, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, e00, e01, KC_NO, KC_NO, KC_NO, KC_NO, e02, e03 } \
}
#define LAYOUT_2u_iso( \
e00, e01, e02, e03, \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k9a, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, k58, k59, kb0, kb1, kb2, kb3, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) { \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, k58, k59, KC_NO }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, KC_NO, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, k9a }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, kb1, kb2, kb3, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, e00, e01, KC_NO, KC_NO, KC_NO, KC_NO, e02, e03 } \
}
#define LAYOUT_4u_ansi( \
e00, e01, e02, e03, \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, k58, kb0, kb2, kb3, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) { \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, k58, KC_NO, KC_NO }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, KC_NO }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, KC_NO, kb2, kb3, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, e00, e01, KC_NO, KC_NO, KC_NO, KC_NO, e02, e03 } \
}
#define LAYOUT_4u_iso( \
e00, e01, e02, e03, \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k9a, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, k58, kb0, kb2, kb3, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) { \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, k58, KC_NO, KC_NO }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, KC_NO, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, k9a }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, KC_NO, kb2, kb3, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, e00, e01, KC_NO, KC_NO, KC_NO, KC_NO, e02, e03 } \
}
#define LAYOUT_7u_ansi( \
e00, e01, e02, e03, \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, kb0, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) { \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, KC_NO, KC_NO, KC_NO }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, KC_NO }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, KC_NO, KC_NO, KC_NO, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, e00, e01, KC_NO, KC_NO, KC_NO, KC_NO, e02, e03 } \
}
#define LAYOUT_7u_iso( \
e00, e01, e02, e03, \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k87, k88, k89, k8a, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k90, k91, k92, k93, k94, k9a, k95, k97, k98, k99, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, ka0, ka1, ka2, ka3, ka4, ka5, k96, ka7, ka8, ka9, kaa, \
k51, k52, k53, k54, k55, k56, k57, kb0, kb4, kb5, ka6, kb6, kb7, kb8, kb9 \
) { \
{ k00, k01, k02, k03, k04, KC_NO, k06, k07, k08, k09, k0a }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a }, \
{ KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a }, \
{ KC_NO, k51, k52, k53, k54, k55, k56, k57, KC_NO, KC_NO, KC_NO }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a }, \
{ k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a }, \
{ k80, k81, k82, k83, k84, k85, KC_NO, k87, k88, k89, k8a }, \
{ k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, k9a }, \
{ ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9, kaa }, \
{ kb0, KC_NO, KC_NO, KC_NO, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, e00, e01, KC_NO, KC_NO, KC_NO, KC_NO, e02, e03 } \
}
#define LAYOUT LAYOUT_all
// Encoder update function that returns true/false
__attribute__ ((weak))
bool encoder_update_keymap(int8_t index, bool clockwise);

View File

@ -19,182 +19,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x23A0
#define DEVICE_VER 0x0002
#define MANUFACTURER Clueboard
#define PRODUCT 2x1800 2019
#define DESCRIPTION Mechanical Drawing Toy Edition
/* key matrix size */
#define MATRIX_ROWS 13
#define MATRIX_COLS 11
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { C0, C1, C2, C3, C7, F7, B1, F2, F3, F4, F5, F6, C6 }
#define MATRIX_COL_PINS { D2, D3, D4, D5, D7, E0, E1, B0, E6, B3, B2 }
#define UNUSED_PINS { D0, D1, D6, C5, E7, F0, F1 }
* Encoder Assignments
*/
#define ENCODERS_PAD_A { A5, A4, A2, A1 }
#define ENCODERS_PAD_B { A6, A7, A3, A0 }
#define ENCODER_RESOLUTION 4
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION ROW2COL
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* audio support */
#define B7_AUDIO
#define C4_AUDIO
#define AUDIO_CLICKY
/* number of backlight levels */
// #define BACKLIGHT_PIN B7
// #define BACKLIGHT_BREATHING
// #define BACKLIGHT_LEVELS 3
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#define RGB_DI_PIN C5
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 16
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
*/
// #define GRAVE_ESC_CTRL_OVERRIDE
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* Magic Key Options
*
* Magic keys are hotkey commands that allow control over firmware functions of
* the keyboard. They are best used in combination with the HID Listen program,
* found here: https://www.pjrc.com/teensy/hid_listen.html
*
* The options below allow the magic key functionality to be changed. This is
* useful if your keyboard/keypad is missing keys and you want magic key support.
*
*/
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
/*
* MIDI options
*/
/* Prevent use of disabled MIDI features in the keymap */
//#define MIDI_ENABLE_STRICT 1
/* enable basic MIDI features:
- MIDI notes can be sent when in Music mode is on
*/
//#define MIDI_BASIC
/* enable advanced MIDI features:
- MIDI notes can be added to the keymap
- Octave shift and transpose
- Virtual sustain, portamento, and modulation wheel
- etc.
*/
//#define MIDI_ADVANCED
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
/*
* Drawing mode
*/

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{
"keyboard":"clueboard/2x1800/2019",
"keymap":"default",
"layout":"LAYOUT",
"layout":"LAYOUT_all",
"layers":[
["ENC_BTN1","ENC_BTN2","ENC_BTN3","ENC_BTN4","KC_HOME","KC_END","KC_PGUP","KC_PGDN","KC_ESC","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_F11","KC_F12","KC_PSCR","KC_SLCK","KC_PAUS","KC_INS","KC_PMNS","KC_NLCK","KC_PSLS","KC_PAST","KC_GRV","KC_1","KC_2","KC_3","KC_4","KC_5","KC_6","KC_7","KC_8","KC_9","KC_0","KC_MINS","KC_EQL","KC_BSPC","KC_NLCK","KC_PSLS","KC_PAST","KC_PMNS","KC_PPLS","KC_P7","KC_P8","KC_P9","KC_TAB","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_LBRC","KC_RBRC","KC_BSLS","KC_P7","KC_P8","KC_P9","KC_PSLS","KC_P4","KC_P5","KC_P6","KC_CAPS","KC_A","KC_S","KC_D","KC_F","KC_G","KC_H","KC_J","KC_K","KC_L","KC_SCLN","KC_QUOT","KC_NUHS","KC_ENT","KC_P4","KC_P5","KC_P6","KC_PENT","KC_P1","KC_P2","KC_P3","KC_UP","KC_LSFT","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_N","KC_M","KC_SLSH","KC_COMM","KC_DOT","KC_RSFT","KC_UP","KC_P1","KC_P2","KC_P3","KC_PENT","KC_P0","KC_PDOT","KC_LEFT","KC_DOWN","KC_RGHT","KC_LCTL","KC_LGUI","KC_LALT","KC_SPC","KC_SPC","KC_SPC","KC_SPC","KC_RALT","KC_RGUI","KC_APP","KC_RCTL","KC_LEFT","KC_DOWN","KC_RGHT","KC_P0","KC_PDOT"]
],

View File

@ -10,16 +10,3 @@ MCU = at90usb1286
# ATmega32A bootloadHID
# ATmega328P USBasp
BOOTLOADER = halfkay
# Build Options
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
ENCODER_ENABLE = yes # Rotary encoder (knob) support
NKRO_ENABLE = yes # USB Nkey Rollover
MIDI_ENABLE = no # MIDI support
UNICODE_ENABLE = no # Unicode
RGBLIGHT_ENABLE = yes # RGB on pin C5
AUDIO_ENABLE = yes # Audio output on pin C4 and B7

View File

@ -1,5 +1,4 @@
{
"keyboard_name": "Clueboard 2x1800",
"url": "",
"maintainer": "skullydazed"
"diode_direction": "ROW2COL",
"width": 24
}

View File

@ -18,91 +18,4 @@
#include "quantum.h"
/*
* These are shortcuts to help you work with the various layout options. If your
* keymap works with one of the LAYOUT_...() macros you are encouraged to use that
* and to contribute your keymap to the corresponding layout in
* `qmk_firmware/layouts/community`.
*/
/* The fully-featured LAYOUT_all() that has every single key available in the matrix.
*/
#define LAYOUT_all(\
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3e, \
k40, k41, k42, k47, k4a, k4b, k4c, k4e \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO, k1e, }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, k2e, }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO, k3e, }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, k4a, k4b, k4c, KC_NO, k4e, }, \
}
/* A layout that matches the Apple Extended Keyboard's main area. No split keys,
* 3 mods on either side of the spacebar.
*/
#define LAYOUT_aek(\
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2e, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
k40, k41, k42, k47, k4b, k4c, k4e \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e, }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO, k1e, }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, KC_NO, k2e, }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO, KC_NO, }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, k4b, k4c, KC_NO, k4e, }, \
}
/* Standard 60% ANSI layout */
#define LAYOUT_60_ansi(\
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2e, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
k40, k41, k42, k47, k4a, k4b, k4c, k4e \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e, }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO, k1e, }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, KC_NO, k2e, }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO, KC_NO, }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, k4a, k4b, k4c, KC_NO, k4e, }, \
}
/* Standard 60% ISO layout */
#define LAYOUT_60_iso(\
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
k40, k41, k42, k47, k4a, k4b, k4c, k4e \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e, }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO, KC_NO, }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, k2e, }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO, KC_NO, }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, k4a, k4b, k4c, KC_NO, k4e, }, \
}
/* Split Backspace and Right Shift ANSI layout. */
#define LAYOUT_60_ansi_split_bs_rshift(\
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2e, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3e, \
k40, k41, k42, k47, k4a, k4b, k4c, k4e \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO, k1e, }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, KC_NO, k2e, }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO, k3e, }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, k4a, k4b, k4c, KC_NO, k4e, }, \
}
#define LAYOUT LAYOUT_all
#define KEYMAP LAYOUT_all
#endif

View File

@ -19,110 +19,12 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2350
#define DEVICE_VER 0x0001
#define MANUFACTURER Clueboard
#define PRODUCT Clueboard 60%
#define DESCRIPTION Clueboard 60%
/* Address for jumping to bootloader on STM32 chips. */
/* It is chip dependent, the correct number can be looked up here:
* http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
*/
#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 15
/*
* Keyboard Matrix Assignments
*
* COLS: Pins used for columns, left to right
* ROWS: Pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { B0, B1, B2, A15, A10 }
#define MATRIX_COL_PINS { A2, A3, A6, B14, B15, A8, A9, A7, B3, B4, C15, C14, C13, B5, B6 }
#define UNUSED_PINS { A0, A1, A9, B7, B8, B9, B10, B11, B12, B13 }
#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 6
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
//#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
//#define LOCKING_RESYNC_ENABLE
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
/*
* MIDI options
*/
/* Prevent use of disabled MIDI features in the keymap */
//#define MIDI_ENABLE_STRICT 1
/* enable basic MIDI features:
- MIDI notes can be sent when in Music mode is on
*/
//#define MIDI_BASIC
/* enable advanced MIDI features:
- MIDI notes can be added to the keymap
- Octave shift and transpose
- Virtual sustain, portamento, and modulation wheel
- etc.
*/
//#define MIDI_ADVANCED
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
#define LED_CAPS_LOCK_PIN B7
/* Backlight configuration
*/
#define BACKLIGHT_LEVELS 1

View File

@ -1,58 +1,373 @@
{
"keyboard_name": "clueboard/60",
"manufacturer": "Clueboard",
"keyboard_name": "Clueboard 60%",
"maintainer": "skullydazed",
"url": "",
"width": 15,
"height": 5,
"width": 15,
"debounce": "6",
"diode_direction": "COL2ROW",
"features": {
"audio": true,
"backlight": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"indicators": {
"caps_lock": "B7"
},
"matrix_pins": {
"cols": ["A2", "A3", "A6", "B14", "B15", "A8", "A9", "A7", "B3", "B4", "C15", "C14", "C13", "B5", "B6"],
"rows": ["B0", "B1", "B2", "A15", "A10"]
},
"usb": {
"device_ver": "0x0001",
"pid": "0x2350",
"vid": "0xC1ED"
},
"community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_iso"],
"layout_aliases": {
"KEYMAP": "LAYOUT_all",
"LAYOUT": "LAYOUT_all"
},
"layouts": {
"LAYOUT_60_ansi": {
"key_count": 61,
"layout": [
{"label": "~", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "@", "x": 2, "y": 0}, {"label": "#", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"label": "Backspace", "x": 13, "y": 0, "w": 2},
{"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "|", "x": 13.5, "y": 1, "w": 1.5},
{"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": ":", "x": 10.75, "y": 2}, {"label": "\"", "x": 11.75, "y": 2}, {"label": "Enter", "x": 12.75, "y": 2, "w": 2.25},
{"label": "Shift", "x": 0, "y": 3, "w": 2.25}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "<", "x": 9.25, "y": 3}, {"label": ">", "x": 10.25, "y": 3}, {"label": "?", "x": 11.25, "y": 3}, {"label": "Shift", "x": 12.25, "y": 3, "w": 2.75},
{"label": "Ctrl", "x": 0, "y": 4, "w": 1.25}, {"label": "Win", "x": 1.25, "y": 4, "w": 1.25}, {"label": "Alt", "x": 2.5, "y": 4, "w": 1.25}, {"x": 3.75, "y": 4, "w": 6.25}, {"label": "Alt", "x": 10, "y": 4, "w": 1.25}, {"label": "Win", "x": 11.25, "y": 4, "w": 1.25}, {"label": "Menu", "x": 12.5, "y": 4, "w": 1.25}, {"label": "Ctrl", "x": 13.75, "y": 4, "w": 1.25 }
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 14], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 14], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k47", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 14], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_iso": {
"key_count": 62,
"layout": [
{"label": "\\u00ac", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "\"", "x": 2, "y": 0}, {"label": "\\u00a3", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"label": "Backspace", "x": 13, "y": 0, "w": 2},
{"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "Enter", "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": ":", "x": 10.75, "y": 2}, {"label": "@", "x": 11.75, "y": 2}, {"label": "~", "x": 12.75, "y": 2},
{"label": "Shift", "x": 0, "y": 3, "w": 1.25}, {"label": "|", "x": 1.25, "y": 3}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "<", "x": 9.25, "y": 3}, {"label": ">", "x": 10.25, "y": 3}, {"label": "?", "x": 11.25, "y": 3}, {"label": "Shift", "x": 12.25, "y": 3, "w": 2.75},
{"label": "Ctrl", "x": 0, "y": 4, "w": 1.25}, {"label": "Win", "x": 1.25, "y": 4, "w": 1.25}, {"label": "Alt", "x": 2.5, "y": 4, "w": 1.25}, {"x": 3.75, "y": 4, "w": 6.25}, {"label": "AltGr", "x": 10, "y": 4, "w": 1.25}, {"label": "Win", "x": 11.25, "y": 4, "w": 1.25}, {"label": "Menu", "x": 12.5, "y": 4, "w": 1.25}, {"label": "Ctrl", "x": 13.75, "y": 4, "w": 1.25 }
]
},
"LAYOUT_aek": {
"key_count": 60,
"layout": [
{"label": "~", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "@", "x": 2, "y": 0}, {"label": "#", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"label": "Backspace", "x": 13, "y": 0, "w": 2},
{"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "|", "x": 13.5, "y": 1, "w": 1.5},
{"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": ":", "x": 10.75, "y": 2}, {"label": "\"", "x": 11.75, "y": 2}, {"label": "Enter", "x": 12.75, "y": 2, "w": 2.25},
{"label": "Shift", "x": 0, "y": 3, "w": 2.25}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "<", "x": 9.25, "y": 3}, {"label": ">", "x": 10.25, "y": 3}, {"label": "?", "x": 11.25, "y": 3}, {"label": "Shift", "x": 12.25, "y": 3, "w": 2.75},
{"label": "Ctrl", "x": 0, "y": 4, "w": 1.5}, {"label": "Win", "x": 1.5, "y": 4, "w": 1.25}, {"label": "Alt", "x": 2.75, "y": 4, "w": 1.5}, {"x": 4.25, "y": 4, "w": 6.5}, {"label": "AltGr", "x": 10.75, "y": 4, "w": 1.5}, {"label": "Win", "x": 12.25, "y": 4, "w": 1.25}, {"label": "Ctrl", "x": 13.5, "y": 4, "w": 1.5 }
]
},
"LAYOUT_all": {
"key_count": 65,
"layout": [
{"label": "~", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "@", "x": 2, "y": 0}, {"label": "#", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"x": 13, "y": 0}, {"label": "Back", "x": 14, "y": 0},
{"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "|", "x": 13.5, "y": 1, "w": 1.5},
{"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": ":", "x": 10.75, "y": 2}, {"label": "\"", "x": 11.75, "y": 2}, {"x": 12.75, "y": 2}, {"label": "Enter", "x": 13.75, "y": 2, "w": 1.25},
{"x": 0, "y": 3}, {"label": "Shift", "x": 1, "y": 3, "w": 1.25}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "<", "x": 9.25, "y": 3}, {"label": ">", "x": 10.25, "y": 3}, {"label": "?", "x": 11.25, "y": 3}, {"label": "Shift", "x": 12.25, "y": 3, "w": 1.75}, {"x": 14, "y": 3},
{"label": "Ctrl", "x": 0, "y": 4, "w": 1.25}, {"label": "Win", "x": 1.25, "y": 4, "w": 1.25}, {"label": "Alt", "x": 2.5, "y": 4, "w": 1.25}, {"x": 3.75, "y": 4, "w": 6.25}, {"label": "Alt", "x": 10, "y": 4, "w": 1.25}, {"label": "Win", "x": 11.25, "y": 4, "w": 1.25}, {"label": "Menu", "x": 12.5, "y": 4, "w": 1.25}, {"label": "Ctrl", "x": 13.75, "y": 4, "w": 1.25 }
]
},
},
"LAYOUT_60_ansi_split_bs_rshift": {
"key_count": 63,
"layout": [
{"label": "~", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "@", "x": 2, "y": 0}, {"label": "#", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"x": 13, "y": 0}, {"label": "Back", "x": 14, "y": 0},
{"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "|", "x": 13.5, "y": 1, "w": 1.5},
{"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": ":", "x": 10.75, "y": 2}, {"label": "\"", "x": 11.75, "y": 2}, {"label": "Enter", "x": 12.75, "y": 2, "w": 2.25},
{"label": "Shift", "x": 0, "y": 3, "w": 2.25}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "<", "x": 9.25, "y": 3}, {"label": ">", "x": 10.25, "y": 3}, {"label": "?", "x": 11.25, "y": 3}, {"label": "Shift", "x": 12.25, "y": 3, "w": 1.75}, {"x": 14, "y": 3},
{"label": "Ctrl", "x": 0, "y": 4, "w": 1.25}, {"label": "Win", "x": 1.25, "y": 4, "w": 1.25}, {"label": "Alt", "x": 2.5, "y": 4, "w": 1.25}, {"x": 3.75, "y": 4, "w": 6.25}, {"label": "Alt", "x": 10, "y": 4, "w": 1.25}, {"label": "Win", "x": 11.25, "y": 4, "w": 1.25}, {"label": "Menu", "x": 12.5, "y": 4, "w": 1.25}, {"label": "Ctrl", "x": 13.75, "y": 4, "w": 1.25}
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
{ "label": "k0d", "matrix": [0, 13], "w": 1, "x": 13, "y": 0 },
{ "label": "Back", "matrix": [0, 14], "w": 1, "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 14], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 14], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
{ "label": "k3e", "matrix": [3, 14], "w": 1, "x": 14, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k47", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 14], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_iso": {
"key_count": 62,
"layout": [
{ "label": "\\u00ac", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "\"", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "\\u00a3", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
{ "h": 2, "label": "Enter", "matrix": [2, 0], "w": 1.25, "x": 13.75, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 1], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 2], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 3], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 4], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 5], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 6], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 7], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 8], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 9], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 10], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 11], "w": 1, "x": 10.75, "y": 2 },
{ "label": "@", "matrix": [2, 12], "w": 1, "x": 11.75, "y": 2 },
{ "label": "~", "matrix": [2, 14], "w": 1, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "|", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k47", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "AltGr", "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 14], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_aek": {
"key_count": 60,
"layout": [
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 14], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 14], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.5, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.5, "x": 2.75, "y": 4 },
{ "label": "k47", "matrix": [4, 7], "w": 6.5, "x": 4.25, "y": 4 },
{ "label": "AltGr", "matrix": [4, 11], "w": 1.5, "x": 10.75, "y": 4 },
{ "label": "Win", "matrix": [4, 12], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 14], "w": 1.5, "x": 13.5, "y": 4 }
]
},
"LAYOUT_all": {
"key_count": 65,
"layout": [
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
{ "label": "k0d", "matrix": [0, 13], "w": 1, "x": 13, "y": 0 },
{ "label": "Back", "matrix": [0, 14], "w": 1, "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 14], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
{ "label": "k2c", "matrix": [2, 12], "w": 1, "x": 12.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 14], "w": 1.25, "x": 13.75, "y": 2 },
{ "label": "k30", "matrix": [3, 0], "w": 1, "x": 0, "y": 3 },
{ "label": "Shift", "matrix": [3, 1], "w": 1.25, "x": 1, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
{ "label": "k3e", "matrix": [3, 14], "w": 1, "x": 14, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k47", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 14], "w": 1.25, "x": 13.75, "y": 4 }
]
}
}

View File

@ -2,18 +2,5 @@
MCU = STM32F303
BOARD = QMK_PROTON_C
# Build Options
# comment out to disable the options.
#
BACKLIGHT_ENABLE = no
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
AUDIO_ENABLE = yes
# project specific files
SRC = led.c
LAYOUTS += 60_ansi 60_ansi_split_bs_rshift 60_iso

View File

@ -1,36 +1,4 @@
{
"keyboard_name": "Clueboard 66%",
"width": 16.5,
"height": 5,
"layouts": {
"LAYOUT_all": {
"layout": [
{"x": 0, "y": 0, "w": 1, "label": "GRAVE"}, {"x": 1, "y": 0, "w": 1, "label": "1"}, {"x": 2, "y": 0, "w": 1, "label": "2"}, {"x": 3, "y": 0, "w": 1, "label": "3"}, {"x": 4, "y": 0, "w": 1, "label": "4"}, {"x": 5, "y": 0, "w": 1, "label": "5"}, {"x": 6, "y": 0, "w": 1, "label": "6"}, {"x": 7, "y": 0, "w": 1, "label": "7"}, {"x": 8, "y": 0, "w": 1, "label": "8"}, {"x": 9, "y": 0, "w": 1, "label": "9"}, {"x": 10, "y": 0, "w": 1, "label": "0"}, {"x": 11, "y": 0, "w": 1, "label": "DASH"}, {"x": 12, "y": 0, "w": 1, "label": "EQUALSIGN"}, {"x": 13, "y": 0, "w": 1, "label": "YEN"}, {"x": 14, "y": 0, "w": 1, "label": "BACKSPACE"}, {"x": 15.5, "y": 0, "w": 1, "label": "PAGEUP"},
{"x": 0, "y": 1, "w": 1.5, "label": "TAB"}, {"x": 1.5, "y": 1, "w": 1, "label": "Q"}, {"x": 2.5, "y": 1, "w": 1, "label": "W"}, {"x": 3.5, "y": 1, "w": 1, "label": "E"}, {"x": 4.5, "y": 1, "w": 1, "label": "R"}, {"x": 5.5, "y": 1, "w": 1, "label": "T"}, {"x": 6.5, "y": 1, "w": 1, "label": "Y"}, {"x": 7.5, "y": 1, "w": 1, "label": "U"}, {"x": 8.5, "y": 1, "w": 1, "label": "I"}, {"x": 9.5, "y": 1, "w": 1, "label": "O"}, {"x": 10.5, "y": 1, "w": 1, "label": "P"}, {"x": 11.5, "y": 1, "w": 1, "label": "LBRACKET"}, {"x": 12.5, "y": 1, "w": 1, "label": "RBRACKET"}, {"x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH"}, {"x": 15.5, "y": 1, "w": 1, "label": "PAGEDOWN"},
{"x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK"}, {"x": 1.75, "y": 2, "w": 1, "label": "A"}, {"x": 2.75, "y": 2, "w": 1, "label": "S"}, {"x": 3.75, "y": 2, "w": 1, "label": "D"}, {"x": 4.75, "y": 2, "w": 1, "label": "F"}, {"x": 5.75, "y": 2, "w": 1, "label": "G"}, {"x": 6.75, "y": 2, "w": 1, "label": "H"}, {"x": 7.75, "y": 2, "w": 1, "label": "J"}, {"x": 8.75, "y": 2, "w": 1, "label": "K"}, {"x": 9.75, "y": 2, "w": 1, "label": "L"}, {"x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON"}, {"x": 11.75, "y": 2, "w": 1, "label": "QUOTE"}, {"x": 12.75, "y": 2, "w": 1, "label": "ISOHASH"}, {"x": 13.75, "y": 2, "w": 1.25, "label": "ENTER"},
{"x": 0, "y": 3, "w": 1.25, "label": "LSHIFT"}, {"x": 1.25, "y": 3, "w": 1, "label": "ISOBACKSLASH"}, {"x": 2.25, "y": 3, "w": 1, "label": "Z"}, {"x": 3.25, "y": 3, "w": 1, "label": "X"}, {"x": 4.25, "y": 3, "w": 1, "label": "C"}, {"x": 5.25, "y": 3, "w": 1, "label": "V"}, {"x": 6.25, "y": 3, "w": 1, "label": "B"}, {"x": 7.25, "y": 3, "w": 1, "label": "N"}, {"x": 8.25, "y": 3, "w": 1, "label": "M"}, {"x": 9.25, "y": 3, "w": 1, "label": "COMMA"}, {"x": 10.25, "y": 3, "w": 1, "label": "PERIOD"}, {"x": 11.25, "y": 3, "w": 1, "label": "SLASH"}, {"x": 12.25, "y": 3, "w": 1, "label": "JPBACKSLASH"}, {"x": 13.25, "y": 3, "w": 1.25, "label": "RSHIFT"}, {"x": 14.5, "y": 3, "w": 1, "label": "UP"},
{"x": 0, "y": 4, "w": 1.25, "label": "LCTRL"}, {"x": 1.25, "y": 4, "w": 1, "label": "LALT"}, {"x": 2.25, "y": 4, "w": 1.25, "label": "LCMD"}, {"x": 3.5, "y": 4, "w": 1.25, "label": "MUHENKAN"}, {"x": 4.75, "y": 4, "w": 2, "label": "SPACE1"}, {"x": 6.75, "y": 4, "w": 2, "label": "SPACE2"}, {"x": 8.75, "y": 4, "w": 1.25, "label": "HENKAN"}, {"x": 10, "y": 4, "w": 1.25, "label": "RCMD"}, {"x": 11.25, "y": 4, "w": 1, "label": "RCTRL"}, {"x": 12.25, "y": 4, "w": 1.25, "label": "FN"}, {"x": 13.5, "y": 4, "w": 1, "label": "LEFT"}, {"x": 14.5, "y": 4, "w": 1, "label": "DOWN"}, {"x": 15.5, "y": 4, "w": 1, "label": "RIGHT"}
]
},
"LAYOUT_66_ansi": {
"layout": [
{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.5, "y":0},
{"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.5, "y":1},
{"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25},
{"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.25}, {"x":14.5, "y":3},
{"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6}, {"label":"Alt", "x":9.75, "y":4, "w":1.25}, {"label":"Win", "x":11, "y":4, "w":1.25}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}
]
},
"LAYOUT_66_iso": {
"layout": [
{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Insert", "x":15.5, "y":0},
{"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Delete", "x":15.5, "y":1},
{"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
{"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"\\", "x":1.25, "y":3, "w":1}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.25}, {"label":"\u2191", "x":14.5, "y":3},
{"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6}, {"label":"Alt", "x":9.75, "y":4, "w":1.25}, {"label":"Ctrl", "x":11, "y":4, "w":1.25}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"label":"\u2190", "x":13.5, "y":4}, {"label":"\u2193", "x":14.5, "y":4}, {"label":"\u2192", "x":15.5, "y":4}
]
}
}
"height": 5
}

View File

@ -1,62 +1,3 @@
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2301
#define DEVICE_VER 0x0003
#define MANUFACTURER Clueboard
#define PRODUCT Clueboard
#define DESCRIPTION QMK keyboard firmware for Clueboard
/* key matrix size
*/
#define MATRIX_ROWS 5
#define MATRIX_COLS 16
/* ROWS: Top to bottom, COLS: Left to right
*/
#define MATRIX_COL_PINS { B3, F1, F4, F5, F6, C7, C6, B6, B5, B4, D7, D6, D4, F7, B0, B1 }
#define MATRIX_ROW_PINS { D1, D0, D2, D5, D3 }
#define UNUSED_PINS
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#define LED_CAPS_LOCK_PIN F0
/* Underlight configuration
*/
#define RGB_DI_PIN B2
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 14 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17

View File

@ -0,0 +1,273 @@
{
"manufacturer": "Clueboard",
"keyboard_name": "Clueboard 66%",
"maintainer": "skullydazed",
"height": 5,
"width": 16.5,
"debounce": "5",
"diode_direction": "COL2ROW",
"features": {
"audio": false,
"backlight": false,
"bluetooth": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": false,
"unicode": false
},
"indicators": {
"caps_lock": "F0"
},
"matrix_pins": {
"cols": ["B3", " F1", " F4", " F5", " F6", " C7", " C6", " B6", " B5", " B4", " D7", " D6", " D4", " F7", " B0", " B1"],
"rows": ["D1", " D0", " D2", " D5", " D3"]
},
"rgblight": {
"animations": {
"all": true
},
"brightness_steps": "17",
"hue_steps": "10",
"led_count": "14",
"pin": "B2",
"saturation_steps": "17"
},
"usb": {
"device_ver": "0x0001",
"pid": "0x2301",
"vid": "0xC1ED"
},
"community_layouts": ["66_ansi", "66_iso"],
"layout_aliases": {
"KEYMAP": "LAYOUT_all",
"LAYOUT": "LAYOUT_all"
},
"layouts": {
"LAYOUT_66_ansi": {
"key_count": 66,
"layout": [
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
{ "label": "k0F", "matrix": [0, 15], "w": 1, "x": 15.5, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "k1F", "matrix": [1, 15], "w": 1, "x": 15.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 2.25, "x": 12.25, "y": 3 },
{ "label": "k3E", "matrix": [3, 14], "w": 1, "x": 14.5, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k46", "matrix": [4, 6], "w": 6, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 9.75, "y": 4 },
{ "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11, "y": 4 },
{ "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "k4D", "matrix": [4, 13], "w": 1, "x": 13.5, "y": 4 },
{ "label": "k4E", "matrix": [4, 14], "w": 1, "x": 14.5, "y": 4 },
{ "label": "k4F", "matrix": [4, 15], "w": 1, "x": 15.5, "y": 4 }
]
},
"LAYOUT_66_iso": {
"key_count": 67,
"layout": [
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
{ "label": "Insert", "matrix": [0, 15], "w": 1, "x": 15.5, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
{ "label": "Delete", "matrix": [1, 15], "w": 1, "x": 15.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
{ "label": "", "matrix": [2, 12], "w": 1, "x": 12.75, "y": 2 },
{ "h": 2, "label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "\\", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 2.25, "x": 12.25, "y": 3 },
{ "label": "\u2191", "matrix": [3, 14], "w": 1, "x": 14.5, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k46", "matrix": [4, 6], "w": 6, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 9.75, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 11], "w": 1.25, "x": 11, "y": 4 },
{ "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "\u2190", "matrix": [4, 13], "w": 1, "x": 13.5, "y": 4 },
{ "label": "\u2193", "matrix": [4, 14], "w": 1, "x": 14.5, "y": 4 },
{ "label": "\u2192", "matrix": [4, 15], "w": 1, "x": 15.5, "y": 4 }
]
},
"LAYOUT_all": {
"key_count": 73,
"layout": [
{ "label": "GRAVE", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "1", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "2", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "3", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "4", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "5", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "6", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "7", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "8", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
{ "label": "9", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
{ "label": "0", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
{ "label": "DASH", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
{ "label": "EQUALSIGN", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
{ "label": "YEN", "matrix": [0, 13], "w": 1, "x": 13, "y": 0 },
{ "label": "BACKSPACE", "matrix": [0, 14], "w": 1, "x": 14, "y": 0 },
{ "label": "PAGEUP", "matrix": [0, 15], "w": 1, "x": 15.5, "y": 0 },
{ "label": "TAB", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
{ "label": "LBRACKET", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
{ "label": "RBRACKET", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
{ "label": "BACKSLASH", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "PAGEDOWN", "matrix": [1, 15], "w": 1, "x": 15.5, "y": 1 },
{ "label": "CAPSLOCK", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
{ "label": "SEMICOLON", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
{ "label": "QUOTE", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
{ "label": "ISOHASH", "matrix": [2, 12], "w": 1, "x": 12.75, "y": 2 },
{ "label": "ENTER", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2 },
{ "label": "LSHIFT", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "ISOBACKSLASH", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3 },
{ "label": "COMMA", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3 },
{ "label": "PERIOD", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 },
{ "label": "SLASH", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 },
{ "label": "JPBACKSLASH", "matrix": [3, 12], "w": 1, "x": 12.25, "y": 3 },
{ "label": "RSHIFT", "matrix": [3, 13], "w": 1.25, "x": 13.25, "y": 3 },
{ "label": "UP", "matrix": [3, 14], "w": 1, "x": 14.5, "y": 3 },
{ "label": "LCTRL", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "LALT", "matrix": [4, 1], "w": 1, "x": 1.25, "y": 4 },
{ "label": "LCMD", "matrix": [4, 2], "w": 1.25, "x": 2.25, "y": 4 },
{ "label": "MUHENKAN", "matrix": [4, 3], "w": 1.25, "x": 3.5, "y": 4 },
{ "label": "SPACE1", "matrix": [4, 5], "w": 2, "x": 4.75, "y": 4 },
{ "label": "SPACE2", "matrix": [4, 6], "w": 2, "x": 6.75, "y": 4 },
{ "label": "HENKAN", "matrix": [4, 9], "w": 1.25, "x": 8.75, "y": 4 },
{ "label": "RCMD", "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
{ "label": "RCTRL", "matrix": [4, 11], "w": 1, "x": 11.25, "y": 4 },
{ "label": "FN", "matrix": [4, 12], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "LEFT", "matrix": [4, 13], "w": 1, "x": 13.5, "y": 4 },
{ "label": "DOWN", "matrix": [4, 14], "w": 1, "x": 14.5, "y": 4 },
{ "label": "RIGHT", "matrix": [4, 15], "w": 1, "x": 15.5, "y": 4 }
]
}
}
}

View File

@ -0,0 +1,15 @@
# Clueboard 66%
![Clueboard](https://i.imgur.com/hLePwJu.jpg)
A fully customizable 66% keyboard.
* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
* Hardware Supported: Clueboard 66% PCB rev1 (atmega32u4)
* Hardware Availability: [clueboard.co](https://clueboard.co/)
Make example for this keyboard (after setting up your build environment):
make clueboard/66/rev1:default
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then 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).

View File

@ -1,75 +1,3 @@
#pragma once
#include "quantum.h"
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
* | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E| | 0F|
* |-----------------------------------------------------------| |---|
* | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 1C| 1D| | 1F|
* |-----------------------------------------------------------| `---'
* | 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 2A| 2B| 2C| 2D|
* |------------------------------------------------------------.
* | 30| 31| 32| 33| 34| 35| 36| 37| 38| 39| 3A| 3B| 3C| 3D|3E|
* |------------------------------------------------------------------.
* | 40| 41| 42| 43| 45| 46| 49| 4A| 4B| 4C| 4D| 4E| 4F|
* `------------------------------------------------------------------'
* ,-----------------------------------------------------------. ,---.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins|
* |-----------------------------------------------------------| |---|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
* |-----------------------------------------------------------| `---'
* |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent|
* |--------------------------------------------------------------.
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
* |------------------------------------------------------------------.
* |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt|
* `------------------------------------------------------------------'
*/
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1F, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \
k40, k41, k42, k43, k45, k46, k49, k4A, k4B, k4C, k4D, k4E, k4F \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, KC_NO, k1F }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E }, \
{ k40, k41, k42, k43, KC_NO, k45, k46, KC_NO, KC_NO, k49, k4A, k4B, k4C, k4D, k4E, k4F } \
}
#define LAYOUT_66_ansi( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0E, k0F, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1F, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2D, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, \
k40, k41, k42, k46, k4A, k4B, k4C, k4D, k4E, k4F \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, KC_NO, k0E, k0F }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, KC_NO, k1F }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, KC_NO, k2D }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, KC_NO, k3D, k3E }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4A, k4B, k4C, k4D, k4E, k4F } \
}
#define LAYOUT_66_iso( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0E, k0F, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1F, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, \
k40, k41, k42, k46, k4A, k4B, k4C, k4D, k4E, k4F \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, KC_NO, k0E, k0F }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, KC_NO, KC_NO, k1F }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, KC_NO, k3D, k3E }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4A, k4B, k4C, k4D, k4E, k4F } \
}
#define KEYMAP LAYOUT_all
#define LAYOUT LAYOUT_all

View File

@ -10,21 +10,3 @@ MCU = atmega32u4
# ATmega32A bootloadHID
# ATmega328P USBasp
BOOTLOADER = atmel-dfu
# Build Options
# comment out to disable the options.
#
BACKLIGHT_ENABLE = no
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
AUDIO_ENABLE = no
RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
LAYOUTS = 66_ansi 66_iso

View File

@ -2,68 +2,12 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2320
#define DEVICE_VER 0x0001
#define MANUFACTURER Clueboard
#define PRODUCT Clueboard
#define DESCRIPTION QMK keyboard firmware for Clueboard
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 8
/* ROWS: Top to bottom, COLS: Left to right
*/
#define MATRIX_ROW_PINS { B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 }
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, E6, B1 }
#define UNUSED_PINS
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#define LED_CAPS_LOCK_PIN B4
/* Backlight configuration
*/
#define BACKLIGHT_LEVELS 1
/* Underlight configuration
*/
#define RGB_DI_PIN D7
#define RGBLED_NUM 14 // Number of LEDs
#define RGBLIGHT_HUE_STEP 32
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
#define RGBLIGHT_EFFECT_BREATHE_MAX 200
#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 666*2

View File

@ -0,0 +1,273 @@
{
"manufacturer": "Clueboard",
"keyboard_name": "Clueboard 66%",
"maintainer": "skullydazed",
"height": 5,
"width": 16.5,
"debounce": "5",
"diode_direction": "COL2ROW",
"features": {
"audio": false,
"backlight": true,
"bluetooth": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": true,
"unicode": false
},
"indicators": {
"caps_lock": "B4"
},
"matrix_pins": {
"cols": ["F0", " F1", " F4", " F5", " F6", " F7", " E6", " B1"],
"rows": ["B2", " C7", " C6", " B6", " B5", " B0", " B3", " D5", " D3", " D2"]
},
"rgblight": {
"animations": {
"all": true
},
"brightness_steps": "17",
"hue_steps": "32",
"led_count": "14",
"pin": "D7",
"saturation_steps": "17"
},
"usb": {
"device_ver": "0x0001",
"pid": "0x2320",
"vid": "0xC1ED"
},
"community_layouts": ["66_ansi", "66_iso"],
"layout_aliases": {
"KEYMAP": "LAYOUT_all",
"LAYOUT": "LAYOUT_all"
},
"layouts": {
"LAYOUT_66_ansi": {
"key_count": 66,
"layout": [
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [5, 6], "w": 2, "x": 13, "y": 0 },
{ "label": "k57", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [6, 5], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "k67", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [7, 5], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [8, 5], "w": 2.25, "x": 12.25, "y": 3 },
{ "label": "k86", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k46", "matrix": [4, 6], "w": 6, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [9, 2], "w": 1.25, "x": 9.75, "y": 4 },
{ "label": "Win", "matrix": [9, 3], "w": 1.25, "x": 11, "y": 4 },
{ "label": "Menu", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "k95", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "k96", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "k97", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
},
"LAYOUT_66_iso": {
"key_count": 67,
"layout": [
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [5, 6], "w": 2, "x": 13, "y": 0 },
{ "label": "Insert", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "Delete", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "", "matrix": [7, 4], "w": 1, "x": 12.75, "y": 2 },
{ "h": 2, "label": "Enter", "matrix": [7, 5], "w": 1.25, "x": 13.75, "y": 1 },
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "\\", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [8, 5], "w": 2.25, "x": 12.25, "y": 3 },
{ "label": "\u2191", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k46", "matrix": [4, 6], "w": 6, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [9, 2], "w": 1.25, "x": 9.75, "y": 4 },
{ "label": "Ctrl", "matrix": [9, 3], "w": 1.25, "x": 11, "y": 4 },
{ "label": "Menu", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "\u2190", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "\u2193", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "\u2192", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
},
"LAYOUT_all": {
"key_count": 73,
"layout": [
{ "label": "GRAVE", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "1", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "2", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "3", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "4", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "5", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "6", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "7", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "8", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "9", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": "0", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "DASH", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "EQUALSIGN", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "YEN", "matrix": [5, 5], "w": 1, "x": 13, "y": 0 },
{ "label": "BACKSPACE", "matrix": [5, 6], "w": 1, "x": 14, "y": 0 },
{ "label": "PAGEUP", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "TAB", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "LBRACKET", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "RBRACKET", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "BACKSLASH", "matrix": [6, 5], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "PAGEDOWN", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "CAPSLOCK", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": "SEMICOLON", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "QUOTE", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "ISOHASH", "matrix": [7, 4], "w": 1, "x": 12.75, "y": 2 },
{ "label": "ENTER", "matrix": [7, 5], "w": 1.25, "x": 13.75, "y": 2 },
{ "label": "LSHIFT", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "ISOBACKSLASH", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "COMMA", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": "PERIOD", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "SLASH", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "JPBACKSLASH", "matrix": [8, 4], "w": 1, "x": 12.25, "y": 3 },
{ "label": "RSHIFT", "matrix": [8, 5], "w": 1.25, "x": 13.25, "y": 3 },
{ "label": "UP", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "LCTRL", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "LALT", "matrix": [4, 1], "w": 1, "x": 1.25, "y": 4 },
{ "label": "LCMD", "matrix": [4, 2], "w": 1.25, "x": 2.25, "y": 4 },
{ "label": "MUHENKAN", "matrix": [4, 3], "w": 1.25, "x": 3.5, "y": 4 },
{ "label": "SPACE1", "matrix": [4, 5], "w": 2, "x": 4.75, "y": 4 },
{ "label": "SPACE2", "matrix": [4, 6], "w": 2, "x": 6.75, "y": 4 },
{ "label": "HENKAN", "matrix": [9, 0], "w": 1.25, "x": 8.75, "y": 4 },
{ "label": "RCMD", "matrix": [9, 2], "w": 1.25, "x": 10, "y": 4 },
{ "label": "RCTRL", "matrix": [9, 3], "w": 1, "x": 11.25, "y": 4 },
{ "label": "FN", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "LEFT", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "DOWN", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "RIGHT", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
}
}
}

View File

@ -0,0 +1,15 @@
# Clueboard 66%
![Clueboard](https://i.imgur.com/hLePwJu.jpg)
A fully customizable 66% keyboard.
* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
* Hardware Supported: Clueboard 66% PCB rev2 (atmega32u4)
* Hardware Availability: [clueboard.co](https://clueboard.co/)
Make example for this keyboard (after setting up your build environment):
make clueboard/66/rev2:default
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then 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).

View File

@ -2,93 +2,3 @@
#include "quantum.h"
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
* | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 55| 56| | 57|
* |-----------------------------------------------------------| |---|
* | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67|
* |-----------------------------------------------------------| `---'
* | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74| 75|
* |------------------------------------------------------------.
* | 30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84| 85|86|
* |------------------------------------------------------------------.
* | 40| 41| 42| 43| 45| 46| 90| 92| 93| 94| 95| 96| 97|
* `------------------------------------------------------------------'
* ,-----------------------------------------------------------. ,---.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins|
* |-----------------------------------------------------------| |---|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
* |-----------------------------------------------------------| `---'
* |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent|
* |--------------------------------------------------------------.
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
* |------------------------------------------------------------------.
* |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt|
* `------------------------------------------------------------------'
*/
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
k40, k41, k42, k43, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, k31, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, k43, KC_NO, k45, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, k55, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
{ k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
/* LAYOUT_66_ansi, standard 66 key ANSI layout
*/
#define LAYOUT_66_ansi( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
/* LAYOUT_66_iso, standard 67 key ISO layout
*/
#define LAYOUT_66_iso( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, k31, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
{ k60, k61, k62, k63, k64, KC_NO, KC_NO, k67 }, \
{ k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
#define KEYMAP LAYOUT_all
#define LAYOUT LAYOUT_all

View File

@ -12,18 +12,4 @@ MCU = atmega32u4
BOOTLOADER = atmel-dfu
# Build Options
BACKLIGHT_ENABLE = yes
BACKLIGHT_DRIVER = custom
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
AUDIO_ENABLE = no
RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
LAYOUTS = 66_ansi 66_iso

View File

@ -2,68 +2,10 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2370
#define DEVICE_VER 0x0001
#define MANUFACTURER Clueboard
#define PRODUCT Clueboard
#define DESCRIPTION QMK keyboard firmware for Clueboard
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 8
/* ROWS: Top to bottom, COLS: Left to right
*/
#define MATRIX_ROW_PINS { B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 }
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, E6, B1 }
#define UNUSED_PINS
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#define LED_CAPS_LOCK_PIN B4
/* Backlight configuration
*/
#define BACKLIGHT_LEVELS 1
/* Underlight configuration
*/
#define RGB_DI_PIN D7
#define RGBLED_NUM 18 // Number of LEDs
#define RGBLIGHT_HUE_STEP 32
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
#define RGBLIGHT_EFFECT_BREATHE_MAX 200
#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 666*2

View File

@ -0,0 +1,273 @@
{
"manufacturer": "Clueboard",
"keyboard_name": "Clueboard 66% rev3",
"maintainer": "skullydazed",
"height": 5,
"width": 16.5,
"debounce": "5",
"diode_direction": "COL2ROW",
"features": {
"audio": false,
"backlight": true,
"bluetooth": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": true,
"unicode": false
},
"indicators": {
"caps_lock": "B4"
},
"matrix_pins": {
"cols": ["F0", " F1", " F4", " F5", " F6", " F7", " E6", " B1"],
"rows": ["B2", " C7", " C6", " B6", " B5", " B0", " B3", " D5", " D3", " D2"]
},
"rgblight": {
"animations": {
"all": true
},
"brightness_steps": "17",
"hue_steps": "32",
"led_count": "18",
"pin": "D7",
"saturation_steps": "17"
},
"usb": {
"device_ver": "0x0001",
"pid": "0x2370",
"vid": "0xC1ED"
},
"community_layouts": ["66_ansi", "66_iso"],
"layout_aliases": {
"KEYMAP": "LAYOUT_all",
"LAYOUT": "LAYOUT_all"
},
"layouts": {
"LAYOUT_66_ansi": {
"key_count": 66,
"layout": [
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [5, 6], "w": 2, "x": 13, "y": 0 },
{ "label": "k57", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [6, 5], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "k67", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [7, 5], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [8, 5], "w": 2.25, "x": 12.25, "y": 3 },
{ "label": "k86", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k46", "matrix": [4, 6], "w": 6, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [9, 2], "w": 1.25, "x": 9.75, "y": 4 },
{ "label": "Win", "matrix": [9, 3], "w": 1.25, "x": 11, "y": 4 },
{ "label": "Menu", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "k95", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "k96", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "k97", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
},
"LAYOUT_66_iso": {
"key_count": 67,
"layout": [
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [5, 6], "w": 2, "x": 13, "y": 0 },
{ "label": "Insert", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "Delete", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "", "matrix": [7, 4], "w": 1, "x": 12.75, "y": 2 },
{ "h": 2, "label": "Enter", "matrix": [7, 5], "w": 1.25, "x": 13.75, "y": 1 },
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "\\", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [8, 5], "w": 2.25, "x": 12.25, "y": 3 },
{ "label": "\u2191", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k46", "matrix": [4, 6], "w": 6, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [9, 2], "w": 1.25, "x": 9.75, "y": 4 },
{ "label": "Ctrl", "matrix": [9, 3], "w": 1.25, "x": 11, "y": 4 },
{ "label": "Menu", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "\u2190", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "\u2193", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "\u2192", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
},
"LAYOUT_all": {
"key_count": 73,
"layout": [
{ "label": "GRAVE", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "1", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "2", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "3", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "4", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "5", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "6", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "7", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "8", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "9", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": "0", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "DASH", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "EQUALSIGN", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "YEN", "matrix": [5, 5], "w": 1, "x": 13, "y": 0 },
{ "label": "BACKSPACE", "matrix": [5, 6], "w": 1, "x": 14, "y": 0 },
{ "label": "PAGEUP", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "TAB", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "LBRACKET", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "RBRACKET", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "BACKSLASH", "matrix": [6, 5], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "PAGEDOWN", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "CAPSLOCK", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": "SEMICOLON", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "QUOTE", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "ISOHASH", "matrix": [7, 4], "w": 1, "x": 12.75, "y": 2 },
{ "label": "ENTER", "matrix": [7, 5], "w": 1.25, "x": 13.75, "y": 2 },
{ "label": "LSHIFT", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "ISOBACKSLASH", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "COMMA", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": "PERIOD", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "SLASH", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "JPBACKSLASH", "matrix": [8, 4], "w": 1, "x": 12.25, "y": 3 },
{ "label": "RSHIFT", "matrix": [8, 5], "w": 1.25, "x": 13.25, "y": 3 },
{ "label": "UP", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "LCTRL", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "LALT", "matrix": [4, 1], "w": 1, "x": 1.25, "y": 4 },
{ "label": "LCMD", "matrix": [4, 2], "w": 1.25, "x": 2.25, "y": 4 },
{ "label": "MUHENKAN", "matrix": [4, 3], "w": 1.25, "x": 3.5, "y": 4 },
{ "label": "SPACE1", "matrix": [4, 5], "w": 2, "x": 4.75, "y": 4 },
{ "label": "SPACE2", "matrix": [4, 6], "w": 2, "x": 6.75, "y": 4 },
{ "label": "HENKAN", "matrix": [9, 0], "w": 1.25, "x": 8.75, "y": 4 },
{ "label": "RCMD", "matrix": [9, 2], "w": 1.25, "x": 10, "y": 4 },
{ "label": "RCTRL", "matrix": [9, 3], "w": 1, "x": 11.25, "y": 4 },
{ "label": "FN", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "LEFT", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "DOWN", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "RIGHT", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
}
}
}

View File

@ -0,0 +1,15 @@
# Clueboard 66%
![Clueboard](https://i.imgur.com/hLePwJu.jpg)
A fully customizable 66% keyboard.
* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
* Hardware Supported: Clueboard 66% PCB rev3 (atmega32u4)
* Hardware Availability: [clueboard.co](https://clueboard.co/)
Make example for this keyboard (after setting up your build environment):
make clueboard/66/rev3:default
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then 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).

View File

@ -2,93 +2,3 @@
#include "quantum.h"
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
* | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 55| 56| | 57|
* |-----------------------------------------------------------| |---|
* | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67|
* |-----------------------------------------------------------| `---'
* | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74| 75|
* |------------------------------------------------------------.
* | 30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84| 85|86|
* |------------------------------------------------------------------.
* | 40| 41| 42| 43| 45| 46| 90| 92| 93| 94| 95| 96| 97|
* `------------------------------------------------------------------'
* ,-----------------------------------------------------------. ,---.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins|
* |-----------------------------------------------------------| |---|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
* |-----------------------------------------------------------| `---'
* |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent|
* |--------------------------------------------------------------.
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
* |------------------------------------------------------------------.
* |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt|
* `------------------------------------------------------------------'
*/
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
k40, k41, k42, k43, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, k31, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, k43, KC_NO, k45, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, k55, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
{ k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
/* LAYOUT_66_ansi, standard 66 key ANSI layout
*/
#define LAYOUT_66_ansi( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
/* LAYOUT_66_iso, standard 67 key ISO layout
*/
#define LAYOUT_66_iso( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, k31, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
{ k60, k61, k62, k63, k64, KC_NO, KC_NO, k67 }, \
{ k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
#define KEYMAP LAYOUT_all
#define LAYOUT LAYOUT_all

View File

@ -14,18 +14,4 @@ BOOTLOADER = atmel-dfu
# Build Options
# comment out to disable the options.
#
BACKLIGHT_ENABLE = yes
BACKLIGHT_DRIVER = custom
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
AUDIO_ENABLE = no
RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
LAYOUTS = 66_ansi 66_iso

View File

@ -2,72 +2,18 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2390
#define DEVICE_VER 0x0001
#define MANUFACTURER Clueboard
#define PRODUCT Clueboard 66% rev4
#define DESCRIPTION QMK keyboard firmware for Clueboard
/* Address for jumping to bootloader on STM32 chips. */
/* It is chip dependent, the correct number can be looked up here:
* http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
*/
#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 8
/* ROWS: Top to bottom, COLS: Left to right
*/
#define MATRIX_ROW_PINS { B11, A6, A3, A2, A1, B7, B6, C15, C14, C13 }
#define MATRIX_COL_PINS { B10, B2, B1, B0, A7, B4, B3, B5 }
#define UNUSED_PINS { B15, B14, B13, B12, B9, B8, A15, A10, A9, A8 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
/* Backlight configuration
*/
#define BACKLIGHT_LEVELS 1
/* Underlight configuration
*/
#define RGB_DI_PIN D7
#define RGBLED_NUM 18 // Number of LEDs
#define RGBLIGHT_HUE_STEP 32
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
#define RGBLIGHT_EFFECT_BREATHE_MAX 200
#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 666*2

View File

@ -0,0 +1,270 @@
{
"manufacturer": "Clueboard",
"keyboard_name": "Clueboard 66% rev4",
"maintainer": "skullydazed",
"height": 5,
"width": 16.5,
"debounce": "5",
"diode_direction": "COL2ROW",
"features": {
"audio": true,
"backlight": false,
"bluetooth": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": false,
"unicode": false
},
"matrix_pins": {
"cols": ["B10", " B2", " B1", " B0", " A7", " B4", " B3", " B5"],
"rows": ["B11", " A6", " A3", " A2", " A1", " B7", " B6", " C15", " C14", " C13"]
},
"rgblight": {
"animations": {
"all": true
},
"brightness_steps": "17",
"hue_steps": "32",
"led_count": "18",
"pin": "D7",
"saturation_steps": "17"
},
"usb": {
"device_ver": "0x0001",
"pid": "0x2390",
"vid": "0xC1ED"
},
"community_layouts": ["66_ansi", "66_iso"],
"layout_aliases": {
"KEYMAP": "LAYOUT_all",
"LAYOUT": "LAYOUT_all"
},
"layouts": {
"LAYOUT_66_ansi": {
"key_count": 66,
"layout": [
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [5, 6], "w": 2, "x": 13, "y": 0 },
{ "label": "Page Up", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [6, 5], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Page Down", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [7, 5], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [8, 5], "w": 2.25, "x": 12.25, "y": 3 },
{ "label": "Up", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 6], "w": 6, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [9, 2], "w": 1.25, "x": 9.75, "y": 4 },
{ "label": "Win", "matrix": [9, 3], "w": 1.25, "x": 11, "y": 4 },
{ "label": "Menu", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "Left", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "Down", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "Up", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
},
"LAYOUT_66_iso": {
"key_count": 67,
"layout": [
{ "label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "*", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "(", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": ")", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "_", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "+", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [5, 6], "w": 2, "x": 13, "y": 0 },
{ "label": "Insert", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "Delete", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "", "matrix": [7, 4], "w": 1, "x": 12.75, "y": 2 },
{ "h": 2, "label": "Enter", "matrix": [7, 5], "w": 1.25, "x": 13.75, "y": 1 },
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "\\", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [8, 5], "w": 2.25, "x": 12.25, "y": 3 },
{ "label": "\u2191", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 6], "w": 6, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [9, 2], "w": 1.25, "x": 9.75, "y": 4 },
{ "label": "Ctrl", "matrix": [9, 3], "w": 1.25, "x": 11, "y": 4 },
{ "label": "Menu", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "\u2190", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "\u2193", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "\u2192", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
},
"LAYOUT_all": {
"key_count": 73,
"layout": [
{ "label": "GRAVE", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "1", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "2", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "3", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "4", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "5", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "6", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "7", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "8", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "9", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": "0", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "DASH", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "EQUALSIGN", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "YEN", "matrix": [5, 5], "w": 1, "x": 13, "y": 0 },
{ "label": "BACKSPACE", "matrix": [5, 6], "w": 1, "x": 14, "y": 0 },
{ "label": "PAGEUP", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "TAB", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "LBRACKET", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "RBRACKET", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "BACKSLASH", "matrix": [6, 5], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "PAGEDOWN", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "CAPSLOCK", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": "SEMICOLON", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "QUOTE", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "ISOHASH", "matrix": [7, 4], "w": 1, "x": 12.75, "y": 2 },
{ "label": "ENTER", "matrix": [7, 5], "w": 1.25, "x": 13.75, "y": 2 },
{ "label": "LSHIFT", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "ISOBACKSLASH", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "COMMA", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": "PERIOD", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "SLASH", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "JPBACKSLASH", "matrix": [8, 4], "w": 1, "x": 12.25, "y": 3 },
{ "label": "RSHIFT", "matrix": [8, 5], "w": 1.25, "x": 13.25, "y": 3 },
{ "label": "UP", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "LCTRL", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "LALT", "matrix": [4, 1], "w": 1, "x": 1.25, "y": 4 },
{ "label": "LCMD", "matrix": [4, 2], "w": 1.25, "x": 2.25, "y": 4 },
{ "label": "MUHENKAN", "matrix": [4, 3], "w": 1.25, "x": 3.5, "y": 4 },
{ "label": "SPACE1", "matrix": [4, 5], "w": 2, "x": 4.75, "y": 4 },
{ "label": "SPACE2", "matrix": [4, 6], "w": 2, "x": 6.75, "y": 4 },
{ "label": "HENKAN", "matrix": [9, 0], "w": 1.25, "x": 8.75, "y": 4 },
{ "label": "RCMD", "matrix": [9, 2], "w": 1.25, "x": 10, "y": 4 },
{ "label": "RCTRL", "matrix": [9, 3], "w": 1, "x": 11.25, "y": 4 },
{ "label": "FN", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "LEFT", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "DOWN", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "RIGHT", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
}
}
}

View File

@ -0,0 +1,13 @@
#include QMK_KEYBOARD_H
/* THIS FILE WAS GENERATED!
*
* This file was generated by qmk json2c. You may or may not want to
* edit it directly.
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT(KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_MUTE, KC_VOLD, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, KC_HOME, KC_PGDN, KC_END),
[2] = LAYOUT(BL_STEP, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI)
};

View File

@ -0,0 +1,13 @@
#include QMK_KEYBOARD_H
/* THIS FILE WAS GENERATED!
*
* This file was generated by qmk json2c. You may or may not want to
* edit it directly.
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT(KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_MUTE, KC_VOLD, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, KC_HOME, KC_PGDN, KC_END),
[2] = LAYOUT(BL_STEP, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI)
};

View File

@ -0,0 +1,13 @@
#include QMK_KEYBOARD_H
/* THIS FILE WAS GENERATED!
*
* This file was generated by qmk json2c. You may or may not want to
* edit it directly.
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT(KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_MUTE, KC_VOLD, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, KC_HOME, KC_PGDN, KC_END),
[2] = LAYOUT(BL_STEP, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI)
};

View File

@ -1,94 +1,3 @@
#pragma once
#include "quantum.h"
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
* | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 55| 56| | 57|
* |-----------------------------------------------------------| |---|
* | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67|
* |-----------------------------------------------------------| `---'
* | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74| 75|
* |------------------------------------------------------------.
* | 30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84| 85|86|
* |------------------------------------------------------------------.
* | 40| 41| 42| 43| 45| 46| 90| 92| 93| 94| 95| 96| 97|
* `------------------------------------------------------------------'
* ,-----------------------------------------------------------. ,---.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins|
* |-----------------------------------------------------------| |---|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
* |-----------------------------------------------------------| `---'
* |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent|
* |--------------------------------------------------------------.
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
* |------------------------------------------------------------------.
* |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt|
* `------------------------------------------------------------------'
*/
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
k40, k41, k42, k43, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, k31, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, k43, KC_NO, k45, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, k55, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
{ k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
/* LAYOUT_66_ansi, standard 66 key ANSI layout
*/
#define LAYOUT_66_ansi( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
/* LAYOUT_66_iso, standard 67 key ISO layout
*/
#define LAYOUT_66_iso( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, k31, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
{ k60, k61, k62, k63, k64, KC_NO, KC_NO, k67 }, \
{ k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
#define KEYMAP LAYOUT_all
#define LAYOUT LAYOUT_all

View File

@ -1,22 +1,3 @@
# MCU name
MCU = STM32F303
BOARD = QMK_PROTON_C
# Build Options
# comment out to disable the options.
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
AUDIO_ENABLE = no
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = yes
LAYOUTS = 66_ansi 66_iso

View File

@ -18,32 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define MANUFACTURER Clueboard
#define PRODUCT Clueboard 66% HotSwap
#define DESCRIPTION QMK keyboard firmware for Clueboard 66%
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
//#define NO_DEBUG
//#define NO_PRINT
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
#define NO_ACTION_ONESHOT
#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION

View File

@ -18,37 +18,12 @@
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2391
#define DEVICE_VER 0x0001
#define MANUFACTURER Clueboard
/* Address for jumping to bootloader on STM32 chips. */
/* It is chip dependent, the correct number can be looked up here:
* http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
*/
#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 8
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { B11, A6, A3, A2, A1, B5, B6, C15, C14, C13 }
#define MATRIX_COL_PINS { B10, B2, B1, B0, A7, B4, B3, B7 }
#define UNUSED_PINS { A0, A8, A15, B12, B13, B14, B15 }
#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
// #define DEBOUNCE 6

View File

@ -16,74 +16,3 @@
#pragma once
#include "quantum.h"
/*
* These are shortcuts to help you work with the various layout options. If your
* keymap works with one of the LAYOUT_...() macros you are encouraged to use that
* and to contribute your keymap to the corresponding layout in
* `qmk_firmware/layouts/community`.
*/
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
* | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 56 | | 57|
* |-----------------------------------------------------------| |---|
* | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67|
* |-----------------------------------------------------------| `---'
* | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 75|
* |--------------------------------------------------------------.
* | 30 | 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 85 |86|
* |------------------------------------------------------------------.
* | 40| 41| 42| 45| 46| 90| 92| 93| 94| 95|96| 97|
* `------------------------------------------------------------------'
* ,-----------------------------------------------------------. ,---.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|
* |-----------------------------------------------------------| |---|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
* |-----------------------------------------------------------| `---'
* |Caps | A| S| D| F| G| H| J| k| L| ;| '|Enter |
* |--------------------------------------------------------------.
* |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift| Up|
* |------------------------------------------------------------------.
* |Ctrl|Alt|Gui | Space| Space|Gui |Alt |Fn |Ctrl|Left|Down|Rgt|
* `------------------------------------------------------------------'
*/
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
k40, k41, k42, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, k45, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, k55, KC_NO, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
#define LAYOUT_66_ansi( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, k55, KC_NO, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}

View File

@ -1,165 +1,178 @@
{
"keyboard_name": "Clueboard 66% HotSwap Gen1",
"maintainer": "skullydazed",
"width": 16.5,
"height": 5,
"layouts": {
"LAYOUT": {
"layout": [
{"x": 0, "y": 0},
{"x": 1, "y": 0},
{"x": 2, "y": 0},
{"x": 3, "y": 0},
{"x": 4, "y": 0},
{"x": 5, "y": 0},
{"x": 6, "y": 0},
{"x": 7, "y": 0},
{"x": 8, "y": 0},
{"x": 9, "y": 0},
{"x": 10, "y": 0},
{"x": 11, "y": 0},
{"x": 12, "y": 0},
{"x": 13, "y": 0, "w": 2},
{"x": 15.5, "y": 0},
{"x": 0, "y": 1, "w": 1.5},
{"x": 1.5, "y": 1},
{"x": 2.5, "y": 1},
{"x": 3.5, "y": 1},
{"x": 4.5, "y": 1},
{"x": 5.5, "y": 1},
{"x": 6.5, "y": 1},
{"x": 7.5, "y": 1},
{"x": 8.5, "y": 1},
{"x": 9.5, "y": 1},
{"x": 10.5, "y": 1},
{"x": 11.5, "y": 1},
{"x": 12.5, "y": 1},
{"x": 13.5, "y": 1, "w": 1.5},
{"x": 15.5, "y": 1},
{"x": 0, "y": 2, "w": 1.75},
{"x": 1.75, "y": 2},
{"x": 2.75, "y": 2},
{"x": 3.75, "y": 2},
{"x": 4.75, "y": 2},
{"x": 5.75, "y": 2},
{"x": 6.75, "y": 2},
{"x": 7.75, "y": 2},
{"x": 8.75, "y": 2},
{"x": 9.75, "y": 2},
{"x": 10.75, "y": 2},
{"x": 11.75, "y": 2},
{"x": 12.75, "y": 2, "w": 2.25},
{"x": 0, "y": 3, "w": 2.25},
{"x": 2.25, "y": 3},
{"x": 3.25, "y": 3},
{"x": 4.25, "y": 3},
{"x": 5.25, "y": 3},
{"x": 6.25, "y": 3},
{"x": 7.25, "y": 3},
{"x": 8.25, "y": 3},
{"x": 9.25, "y": 3},
{"x": 10.25, "y": 3},
{"x": 11.25, "y": 3},
{"x": 12.25, "y": 3, "w": 2.25},
{"x": 14.5, "y": 3},
{"x": 0, "y": 4, "w": 1.25},
{"x": 1.25, "y": 4, "w": 1.25},
{"x": 2.5, "y": 4, "w": 1.25},
{"x": 3.75, "y": 4, "w": 2.75},
{"x": 6.5, "y": 4, "w": 2.25},
{"x": 8.75, "y": 4, "w": 1.25},
{"x": 10, "y": 4, "w": 1.25},
{"x": 11.25, "y": 4},
{"x": 12.25, "y": 4, "w": 1.25},
{"x": 13.5, "y": 4},
{"x": 14.5, "y": 4},
{"x": 15.5, "y": 4}
]
},
"LAYOUT_66_ansi": {
"layout": [
{"x": 0, "y": 0},
{"x": 1, "y": 0},
{"x": 2, "y": 0},
{"x": 3, "y": 0},
{"x": 4, "y": 0},
{"x": 5, "y": 0},
{"x": 6, "y": 0},
{"x": 7, "y": 0},
{"x": 8, "y": 0},
{"x": 9, "y": 0},
{"x": 10, "y": 0},
{"x": 11, "y": 0},
{"x": 12, "y": 0},
{"x": 13, "y": 0, "w": 2},
{"x": 15.5, "y": 0},
{"x": 0, "y": 1, "w": 1.5},
{"x": 1.5, "y": 1},
{"x": 2.5, "y": 1},
{"x": 3.5, "y": 1},
{"x": 4.5, "y": 1},
{"x": 5.5, "y": 1},
{"x": 6.5, "y": 1},
{"x": 7.5, "y": 1},
{"x": 8.5, "y": 1},
{"x": 9.5, "y": 1},
{"x": 10.5, "y": 1},
{"x": 11.5, "y": 1},
{"x": 12.5, "y": 1},
{"x": 13.5, "y": 1, "w": 1.5},
{"x": 15.5, "y": 1},
{"x": 0, "y": 2, "w": 1.75},
{"x": 1.75, "y": 2},
{"x": 2.75, "y": 2},
{"x": 3.75, "y": 2},
{"x": 4.75, "y": 2},
{"x": 5.75, "y": 2},
{"x": 6.75, "y": 2},
{"x": 7.75, "y": 2},
{"x": 8.75, "y": 2},
{"x": 9.75, "y": 2},
{"x": 10.75, "y": 2},
{"x": 11.75, "y": 2},
{"x": 12.75, "y": 2, "w": 2.25},
{"x": 0, "y": 3, "w": 2.25},
{"x": 2.25, "y": 3},
{"x": 3.25, "y": 3},
{"x": 4.25, "y": 3},
{"x": 5.25, "y": 3},
{"x": 6.25, "y": 3},
{"x": 7.25, "y": 3},
{"x": 8.25, "y": 3},
{"x": 9.25, "y": 3},
{"x": 10.25, "y": 3},
{"x": 11.25, "y": 3},
{"x": 12.25, "y": 3, "w": 2.25},
{"x": 14.5, "y": 3},
{"x": 0, "y": 4, "w": 1.25},
{"x": 1.25, "y": 4, "w": 1.25},
{"x": 2.5, "y": 4, "w": 1.25},
{"x": 3.75, "y": 4, "w": 6.25},
{"x": 10, "y": 4, "w": 1.25},
{"x": 11.25, "y": 4},
{"x": 12.25, "y": 4, "w": 1.25},
{"x": 13.5, "y": 4},
{"x": 14.5, "y": 4},
{"x": 15.5, "y": 4}
]
}
"manufacturer": "Clueboard",
"keyboard_name": "Clueboard 66% HotSwap Gen1",
"maintainer": "skullydazed",
"height": 5,
"width": 16.5,
"debounce": "5",
"diode_direction": "COL2ROW",
"features": {
"audio": true,
"bootmagic": true,
"command": true,
"console": true,
"extrakey": true,
"led_matrix": "IS31FL3731",
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["B10", " B2", " B1", " B0", " A7", " B4", " B3", " B7"],
"rows": ["B11", " A6", " A3", " A2", " A1", " B5", " B6", " C15", " C14", " C13"]
},
"usb": {
"device_ver": "0x0001",
"pid": "0x2391",
"vid": "0xC1ED"
},
"community_layouts": [],
"layout_aliases": {
"LAYOUT": "LAYOUT_all"
},
"layouts": {
"LAYOUT_66_ansi": {
"key_count": 66,
"layout": [
{ "label": "k00", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "k01", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "k02", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "k03", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "k04", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "k05", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "k06", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "k07", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "k50", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "k51", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": "k52", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "k53", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "k54", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "k55", "matrix": [5, 5], "w": 2, "x": 13, "y": 0 },
{ "label": "k57", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "k10", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "k11", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "k12", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "k13", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "k14", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "k15", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "k16", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "k17", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "k60", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "k61", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "k62", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "k63", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "k64", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "k65", "matrix": [6, 5], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "k67", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "k20", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "k21", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "k22", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "k23", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "k24", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "k25", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "k26", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "k27", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "k70", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "k71", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": "k72", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "k73", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "k75", "matrix": [7, 5], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "k30", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "k32", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "k33", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "k34", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "k35", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "k36", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "k37", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "k80", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "k81", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": "k82", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "k83", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "k85", "matrix": [8, 5], "w": 2.25, "x": 12.25, "y": 3 },
{ "label": "k86", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "k40", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "k41", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "k42", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k46", "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "k92", "matrix": [9, 2], "w": 1.25, "x": 10, "y": 4 },
{ "label": "k93", "matrix": [9, 3], "w": 1, "x": 11.25, "y": 4 },
{ "label": "k94", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "k95", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "k96", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "k97", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
},
"LAYOUT_all": {
"key_count": 68,
"layout": [
{ "label": "k00", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "k01", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "k02", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "k03", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "k04", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "k05", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "k06", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "k07", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "k50", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "k51", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": "k52", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "k53", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "k54", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "k55", "matrix": [5, 5], "w": 2, "x": 13, "y": 0 },
{ "label": "k57", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "k10", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "k11", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "k12", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "k13", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "k14", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "k15", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "k16", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "k17", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "k60", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "k61", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "k62", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "k63", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "k64", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "k65", "matrix": [6, 5], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "k67", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "k20", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "k21", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "k22", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "k23", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "k24", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "k25", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "k26", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "k27", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "k70", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "k71", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": "k72", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "k73", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "k75", "matrix": [7, 5], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "k30", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "k32", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "k33", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "k34", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "k35", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "k36", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "k37", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "k80", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "k81", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": "k82", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "k83", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "k85", "matrix": [8, 5], "w": 2.25, "x": 12.25, "y": 3 },
{ "label": "k86", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "k40", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "k41", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "k42", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k45", "matrix": [4, 5], "w": 2.75, "x": 3.75, "y": 4 },
{ "label": "k46", "matrix": [4, 6], "w": 2.25, "x": 6.5, "y": 4 },
{ "label": "k90", "matrix": [9, 0], "w": 1.25, "x": 8.75, "y": 4 },
{ "label": "k92", "matrix": [9, 2], "w": 1.25, "x": 10, "y": 4 },
{ "label": "k93", "matrix": [9, 3], "w": 1, "x": 11.25, "y": 4 },
{ "label": "k94", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "k95", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "k96", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "k97", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
}
}
}

View File

@ -0,0 +1,16 @@
# Clueboard 66% HotSwap
![Clueboard](https://i.imgur.com/8UmBoNx.jpg)
A fully customizable 66% keyboard with Hot Swap sockets.
* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
* Hardware Supported: Clueboard 66% HotSwap PCB
* 2.9 (gen1)
* Hardware Availability: [clueboard.co](https://clueboard.co/)
Make example for this keyboard (after setting up your build environment):
make clueboard/66_hotswap/gen1: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).

View File

@ -2,21 +2,5 @@
MCU = STM32F303
BOARD = QMK_PROTON_C
# LED Configuration
LED_MATRIX_ENABLE = yes
LED_MATRIX_DRIVER = IS31FL3731
# Build Options
# comment out to disable the options.
#
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
NKRO_ENABLE = yes # USB Nkey Rollover
AUDIO_ENABLE = yes
# SERIAL_LINK_ENABLE = yes
LAYOUTS = 66_ansi
# project specific files
SRC = led.c

View File

@ -1,27 +1,6 @@
#pragma once
#include "config_common.h"
#define PRODUCT_ID 0x2390
#define DEVICE_VER 0x0001
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 8
// ROWS: Top to bottom, COLS: Left to right
/* Row pin configuration
* row: 0 1 2 3 4 5 6 7 8 9
* pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2
*/
#define MATRIX_ROW_PINS { B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 }
/* Column pin configuration
* col: 0 1 2 3 4 5 6 7
* pin: F0 F1 F4 F5 F6 F7 E6 B1
*/
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, E6, B1 }
#define UNUSED_PINS
/* Speaker configuration
*/
#define B7_AUDIO
@ -32,21 +11,12 @@
*/
#define NO_ACTION_TAPPING
#define LED_CAPS_LOCK_PIN B4
/* Backlight configuration
*/
#define BACKLIGHT_LEVELS 1
/* Underlight configuration
*/
#define RGB_DI_PIN D7
#define RGBLED_NUM 26 // Number of LEDs
#define RGBLIGHT_HUE_STEP 32
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
#define RGBLIGHT_EFFECT_BREATHE_MAX 200
#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 666*2

View File

@ -1,245 +1,198 @@
{
"keyboard_name": "Clueboard 66% HotSwap Prototype",
"maintainer": "skullydazed",
"width": 16.5,
"height": 5,
"layouts": {
"LAYOUT_all": {
"layout": [
{"x": 0, "y": 0},
{"x": 1, "y": 0},
{"x": 2, "y": 0},
{"x": 3, "y": 0},
{"x": 4, "y": 0},
{"x": 5, "y": 0},
{"x": 6, "y": 0},
{"x": 7, "y": 0},
{"x": 8, "y": 0},
{"x": 9, "y": 0},
{"x": 10, "y": 0},
{"x": 11, "y": 0},
{"x": 12, "y": 0},
{"x": 13, "y": 0, "w": 2},
{"x": 15.5, "y": 0},
{"x": 0, "y": 1, "w": 1.5},
{"x": 1.5, "y": 1},
{"x": 2.5, "y": 1},
{"x": 3.5, "y": 1},
{"x": 4.5, "y": 1},
{"x": 5.5, "y": 1},
{"x": 6.5, "y": 1},
{"x": 7.5, "y": 1},
{"x": 8.5, "y": 1},
{"x": 9.5, "y": 1},
{"x": 10.5, "y": 1},
{"x": 11.5, "y": 1},
{"x": 12.5, "y": 1},
{"x": 13.5, "y": 1, "w": 1.5},
{"x": 15.5, "y": 1},
{"x": 0, "y": 2, "w": 1.75},
{"x": 1.75, "y": 2},
{"x": 2.75, "y": 2},
{"x": 3.75, "y": 2},
{"x": 4.75, "y": 2},
{"x": 5.75, "y": 2},
{"x": 6.75, "y": 2},
{"x": 7.75, "y": 2},
{"x": 8.75, "y": 2},
{"x": 9.75, "y": 2},
{"x": 10.75, "y": 2},
{"x": 11.75, "y": 2},
{"x": 12.75, "y": 2, "w": 2.25},
{"x": 0, "y": 3, "w": 1.25},
{"x": 1.25, "y": 3},
{"x": 2.25, "y": 3},
{"x": 3.25, "y": 3},
{"x": 4.25, "y": 3},
{"x": 5.25, "y": 3},
{"x": 6.25, "y": 3},
{"x": 7.25, "y": 3},
{"x": 8.25, "y": 3},
{"x": 9.25, "y": 3},
{"x": 10.25, "y": 3},
{"x": 11.25, "y": 3},
{"x": 12.25, "y": 3},
{"x": 13.25, "y": 3, "w": 1.25},
{"x": 14.5, "y": 3},
{"x": 0, "y": 4, "w": 1.25},
{"x": 1.25, "y": 4, "w": 1.25},
{"x": 2.5, "y": 4, "w": 1.25},
{"x": 3.75, "y": 4, "w": 2.75},
{"x": 6.5, "y": 4, "w": 2.25},
{"x": 8.75, "y": 4, "w": 1.25},
{"x": 10, "y": 4, "w": 1.25},
{"x": 11.25, "y": 4},
{"x": 12.25, "y": 4, "w": 1.25},
{"x": 13.5, "y": 4},
{"x": 14.5, "y": 4},
{"x": 15.5, "y": 4}
]
},
"LAYOUT": {
"layout": [
{"x": 0, "y": 0},
{"x": 1, "y": 0},
{"x": 2, "y": 0},
{"x": 3, "y": 0},
{"x": 4, "y": 0},
{"x": 5, "y": 0},
{"x": 6, "y": 0},
{"x": 7, "y": 0},
{"x": 8, "y": 0},
{"x": 9, "y": 0},
{"x": 10, "y": 0},
{"x": 11, "y": 0},
{"x": 12, "y": 0},
{"x": 13, "y": 0, "w": 2},
{"x": 15.5, "y": 0},
{"x": 0, "y": 1, "w": 1.5},
{"x": 1.5, "y": 1},
{"x": 2.5, "y": 1},
{"x": 3.5, "y": 1},
{"x": 4.5, "y": 1},
{"x": 5.5, "y": 1},
{"x": 6.5, "y": 1},
{"x": 7.5, "y": 1},
{"x": 8.5, "y": 1},
{"x": 9.5, "y": 1},
{"x": 10.5, "y": 1},
{"x": 11.5, "y": 1},
{"x": 12.5, "y": 1},
{"x": 13.5, "y": 1, "w": 1.5},
{"x": 15.5, "y": 1},
{"x": 0, "y": 2, "w": 1.75},
{"x": 1.75, "y": 2},
{"x": 2.75, "y": 2},
{"x": 3.75, "y": 2},
{"x": 4.75, "y": 2},
{"x": 5.75, "y": 2},
{"x": 6.75, "y": 2},
{"x": 7.75, "y": 2},
{"x": 8.75, "y": 2},
{"x": 9.75, "y": 2},
{"x": 10.75, "y": 2},
{"x": 11.75, "y": 2},
{"x": 12.75, "y": 2, "w": 2.25},
{"x": 0, "y": 3, "w": 2.25},
{"x": 2.25, "y": 3},
{"x": 3.25, "y": 3},
{"x": 4.25, "y": 3},
{"x": 5.25, "y": 3},
{"x": 6.25, "y": 3},
{"x": 7.25, "y": 3},
{"x": 8.25, "y": 3},
{"x": 9.25, "y": 3},
{"x": 10.25, "y": 3},
{"x": 11.25, "y": 3},
{"x": 12.25, "y": 3, "w": 2.25},
{"x": 14.5, "y": 3},
{"x": 0, "y": 4, "w": 1.25},
{"x": 1.25, "y": 4, "w": 1.25},
{"x": 2.5, "y": 4, "w": 1.25},
{"x": 3.75, "y": 4, "w": 2.75},
{"x": 6.5, "y": 4, "w": 2.25},
{"x": 8.75, "y": 4, "w": 1.25},
{"x": 10, "y": 4, "w": 1.25},
{"x": 11.25, "y": 4},
{"x": 12.25, "y": 4, "w": 1.25},
{"x": 13.5, "y": 4},
{"x": 14.5, "y": 4},
{"x": 15.5, "y": 4}
]
},
"LAYOUT_66_ansi": {
"layout": [
{"x": 0, "y": 0},
{"x": 1, "y": 0},
{"x": 2, "y": 0},
{"x": 3, "y": 0},
{"x": 4, "y": 0},
{"x": 5, "y": 0},
{"x": 6, "y": 0},
{"x": 7, "y": 0},
{"x": 8, "y": 0},
{"x": 9, "y": 0},
{"x": 10, "y": 0},
{"x": 11, "y": 0},
{"x": 12, "y": 0},
{"x": 13, "y": 0, "w": 2},
{"x": 15.5, "y": 0},
{"x": 0, "y": 1, "w": 1.5},
{"x": 1.5, "y": 1},
{"x": 2.5, "y": 1},
{"x": 3.5, "y": 1},
{"x": 4.5, "y": 1},
{"x": 5.5, "y": 1},
{"x": 6.5, "y": 1},
{"x": 7.5, "y": 1},
{"x": 8.5, "y": 1},
{"x": 9.5, "y": 1},
{"x": 10.5, "y": 1},
{"x": 11.5, "y": 1},
{"x": 12.5, "y": 1},
{"x": 13.5, "y": 1, "w": 1.5},
{"x": 15.5, "y": 1},
{"x": 0, "y": 2, "w": 1.75},
{"x": 1.75, "y": 2},
{"x": 2.75, "y": 2},
{"x": 3.75, "y": 2},
{"x": 4.75, "y": 2},
{"x": 5.75, "y": 2},
{"x": 6.75, "y": 2},
{"x": 7.75, "y": 2},
{"x": 8.75, "y": 2},
{"x": 9.75, "y": 2},
{"x": 10.75, "y": 2},
{"x": 11.75, "y": 2},
{"x": 12.75, "y": 2, "w": 2.25},
{"x": 0, "y": 3, "w": 2.25},
{"x": 2.25, "y": 3},
{"x": 3.25, "y": 3},
{"x": 4.25, "y": 3},
{"x": 5.25, "y": 3},
{"x": 6.25, "y": 3},
{"x": 7.25, "y": 3},
{"x": 8.25, "y": 3},
{"x": 9.25, "y": 3},
{"x": 10.25, "y": 3},
{"x": 11.25, "y": 3},
{"x": 12.25, "y": 3, "w": 2.25},
{"x": 14.5, "y": 3},
{"x": 0, "y": 4, "w": 1.25},
{"x": 1.25, "y": 4, "w": 1.25},
{"x": 2.5, "y": 4, "w": 1.25},
{"x": 3.75, "y": 4, "w": 6.25},
{"x": 10, "y": 4, "w": 1.25},
{"x": 11.25, "y": 4},
{"x": 12.25, "y": 4, "w": 1.25},
{"x": 13.5, "y": 4},
{"x": 14.5, "y": 4},
{"x": 15.5, "y": 4}
]
}
"manufacturer": "Clueboard",
"keyboard_name": "Clueboard 66% HotSwap Prototype",
"maintainer": "skullydazed",
"height": 5,
"width": 16.5,
"debounce": "5",
"diode_direction": "COL2ROW",
"features": {
"audio": true,
"backlight": true,
"bluetooth": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": false,
"nkro": true,
"rgblight": true,
"unicode": false
},
"indicators": {
"caps_lock": "B4"
},
"matrix_pins": {
"cols": ["F0", " F1", " F4", " F5", " F6", " F7", " E6", " B1"],
"rows": ["B2", " C7", " C6", " B6", " B5", " B0", " B3", " D5", " D3", " D2"]
},
"rgblight": {
"animations": {
"all": true
},
"brightness_steps": "17",
"hue_steps": "32",
"led_count": "26",
"pin": "D7",
"saturation_steps": "17"
},
"usb": {
"device_ver": "0x0001",
"pid": "0x2390",
"vid": "0xC1ED"
},
"community_layouts": ["66_ansi"],
"layout_aliases": {
"KEYMAP": "LAYOUT_all",
"LAYOUT": "LAYOUT_all"
},
"layouts": {
"LAYOUT_66_ansi": {
"key_count": 66,
"layout": [
{ "label": "k00", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "k01", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "k02", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "k03", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "k04", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "k05", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "k06", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "k07", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "k50", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "k51", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": "k52", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "k53", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "k54", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "k56", "matrix": [5, 6], "w": 2, "x": 13, "y": 0 },
{ "label": "k57", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "k10", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "k11", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "k12", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "k13", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "k14", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "k15", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "k16", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "k17", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "k60", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "k61", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "k62", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "k63", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "k64", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "k65", "matrix": [6, 5], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "k67", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "k20", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "k21", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "k22", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "k23", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "k24", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "k25", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "k26", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "k27", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "k70", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "k71", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": "k72", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "k73", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "k75", "matrix": [7, 5], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "k30", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "k32", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "k33", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "k34", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "k35", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "k36", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "k37", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "k80", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "k81", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": "k82", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "k83", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "k85", "matrix": [8, 5], "w": 2.25, "x": 12.25, "y": 3 },
{ "label": "k86", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "k40", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "k41", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "k42", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k46", "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "k92", "matrix": [9, 2], "w": 1.25, "x": 10, "y": 4 },
{ "label": "k93", "matrix": [9, 3], "w": 1, "x": 11.25, "y": 4 },
{ "label": "k94", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "k95", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "k96", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "k97", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
},
"LAYOUT_all": {
"key_count": 70,
"layout": [
{ "label": "k00", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "k01", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
{ "label": "k02", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
{ "label": "k03", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
{ "label": "k04", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
{ "label": "k05", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
{ "label": "k06", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
{ "label": "k07", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
{ "label": "k50", "matrix": [5, 0], "w": 1, "x": 8, "y": 0 },
{ "label": "k51", "matrix": [5, 1], "w": 1, "x": 9, "y": 0 },
{ "label": "k52", "matrix": [5, 2], "w": 1, "x": 10, "y": 0 },
{ "label": "k53", "matrix": [5, 3], "w": 1, "x": 11, "y": 0 },
{ "label": "k54", "matrix": [5, 4], "w": 1, "x": 12, "y": 0 },
{ "label": "k56", "matrix": [5, 6], "w": 2, "x": 13, "y": 0 },
{ "label": "k57", "matrix": [5, 7], "w": 1, "x": 15.5, "y": 0 },
{ "label": "k10", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "k11", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
{ "label": "k12", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
{ "label": "k13", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
{ "label": "k14", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
{ "label": "k15", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
{ "label": "k16", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
{ "label": "k17", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
{ "label": "k60", "matrix": [6, 0], "w": 1, "x": 8.5, "y": 1 },
{ "label": "k61", "matrix": [6, 1], "w": 1, "x": 9.5, "y": 1 },
{ "label": "k62", "matrix": [6, 2], "w": 1, "x": 10.5, "y": 1 },
{ "label": "k63", "matrix": [6, 3], "w": 1, "x": 11.5, "y": 1 },
{ "label": "k64", "matrix": [6, 4], "w": 1, "x": 12.5, "y": 1 },
{ "label": "k65", "matrix": [6, 5], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "k67", "matrix": [6, 7], "w": 1, "x": 15.5, "y": 1 },
{ "label": "k20", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "k21", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
{ "label": "k22", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
{ "label": "k23", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
{ "label": "k24", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
{ "label": "k25", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
{ "label": "k26", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
{ "label": "k27", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
{ "label": "k70", "matrix": [7, 0], "w": 1, "x": 8.75, "y": 2 },
{ "label": "k71", "matrix": [7, 1], "w": 1, "x": 9.75, "y": 2 },
{ "label": "k72", "matrix": [7, 2], "w": 1, "x": 10.75, "y": 2 },
{ "label": "k73", "matrix": [7, 3], "w": 1, "x": 11.75, "y": 2 },
{ "label": "k75", "matrix": [7, 5], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "k30", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "k31", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3 },
{ "label": "k32", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3 },
{ "label": "k33", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3 },
{ "label": "k34", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3 },
{ "label": "k35", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3 },
{ "label": "k36", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3 },
{ "label": "k37", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3 },
{ "label": "k80", "matrix": [8, 0], "w": 1, "x": 8.25, "y": 3 },
{ "label": "k81", "matrix": [8, 1], "w": 1, "x": 9.25, "y": 3 },
{ "label": "k82", "matrix": [8, 2], "w": 1, "x": 10.25, "y": 3 },
{ "label": "k83", "matrix": [8, 3], "w": 1, "x": 11.25, "y": 3 },
{ "label": "k84", "matrix": [8, 4], "w": 1, "x": 12.25, "y": 3 },
{ "label": "k85", "matrix": [8, 5], "w": 1.25, "x": 13.25, "y": 3 },
{ "label": "k86", "matrix": [8, 6], "w": 1, "x": 14.5, "y": 3 },
{ "label": "k40", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "k41", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "k42", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "k45", "matrix": [4, 5], "w": 2.75, "x": 3.75, "y": 4 },
{ "label": "k46", "matrix": [4, 6], "w": 2.25, "x": 6.5, "y": 4 },
{ "label": "k90", "matrix": [9, 0], "w": 1.25, "x": 8.75, "y": 4 },
{ "label": "k92", "matrix": [9, 2], "w": 1.25, "x": 10, "y": 4 },
{ "label": "k93", "matrix": [9, 3], "w": 1, "x": 11.25, "y": 4 },
{ "label": "k94", "matrix": [9, 4], "w": 1.25, "x": 12.25, "y": 4 },
{ "label": "k95", "matrix": [9, 5], "w": 1, "x": 13.5, "y": 4 },
{ "label": "k96", "matrix": [9, 6], "w": 1, "x": 14.5, "y": 4 },
{ "label": "k97", "matrix": [9, 7], "w": 1, "x": 15.5, "y": 4 }
]
}
}
}

View File

@ -1,86 +1,3 @@
#pragma once
#include "quantum.h"
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
* | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 56 | | 57|
* |-----------------------------------------------------------| |---|
* | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67|
* |-----------------------------------------------------------| `---'
* | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74| 75|
* |------------------------------------------------------------.
* | 30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84| 85|86|
* |------------------------------------------------------------------.
* | 40| 41| 42| 43| 45| 46| 90| 92| 93| 94| 95| 96| 97|
* `------------------------------------------------------------------'
* ,-----------------------------------------------------------. ,---.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|
* |-----------------------------------------------------------| |---|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
* |-----------------------------------------------------------| `---'
* |Caps | A| S| D| F| G| H| J| k| L| ;| '|Enter |
* |--------------------------------------------------------------.
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
* |------------------------------------------------------------------.
* |Ctrl|Alt|Gui | Space| Space|Gui |Alt |Fn |Ctrl|Left|Down|Rgt|
* `------------------------------------------------------------------'
*/
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
k40, k41, k42, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, k31, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, k45, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
{ k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
k40, k41, k42, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, k45, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
#define LAYOUT_66_ansi( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}

View File

@ -0,0 +1,16 @@
# Clueboard 66% HotSwap
![Clueboard](https://i.imgur.com/8UmBoNx.jpg)
A fully customizable 66% keyboard with Hot Swap sockets.
* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
* Hardware Supported: Clueboard 66% HotSwap Prototype PCB
* 2.8 (prototype)
* Hardware Availability: [clueboard.co](https://clueboard.co/)
Make example for this keyboard (after setting up your build environment):
make clueboard/66_hotswap/prototype: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).

View File

@ -14,19 +14,6 @@ BOOTLOADER = atmel-dfu
# Build Options
# comment out to disable the options.
#
BACKLIGHT_ENABLE = yes
BACKLIGHT_DRIVER = custom
BOOTMAGIC_ENABLE = no
MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes
CONSOLE_ENABLE = yes
COMMAND_ENABLE = no
NKRO_ENABLE = yes
AUDIO_ENABLE = yes
RGBLIGHT_ENABLE = yes
MIDI_ENABLE = no
UNICODE_ENABLE = no
BLUETOOTH_ENABLE = no
EXTRAFLAGS += -flto
LAYOUTS = 66_ansi

View File

@ -1,21 +1,3 @@
#pragma once
#include "quantum.h"
// Any changes to the layout names and/or definitions must also be made to info.json
#define LAYOUT( \
K00, K01, \
K10, K11, \
K21, \
K30, K31, \
K40, K41, \
K51 \
) { \
{ K00, K01 }, \
{ K10, K11 }, \
{ KC_NO, K21 }, \
{ K30, K31 }, \
{ K40, K41 }, \
{ KC_NO, K51 } \
}

View File

@ -1,24 +1,3 @@
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x23B0
#define DEVICE_VER 0x0001
#define MANUFACTURER Clueboard
#define PRODUCT California Macropad
#define DESCRIPTION A 10-key macropad shaped like California
/* key matrix pins */
#define MATRIX_ROWS 6
#define MATRIX_COLS 2
#define DIRECT_PINS { \
{ A10, A9 }, \
{ A0, B8 }, \
{ NO_PIN, B11 }, \
{ B9, A8 }, \
{ A7, B1 }, \
{ NO_PIN, B2 } \
}
#define UNUSED_PINS

View File

@ -2,9 +2,31 @@
"keyboard_name": "Clueboard California",
"url": "",
"maintainer": "skullydazed",
"matrix_pins": {
"direct": [
["A10", "A9"],
["A0", "B8"],
[null, "B11"],
["B9", "A8"],
["A7", "B1"],
[null, "B2"]
]
},
"usb": {"pid": "0x23B0"},
"layouts": {
"LAYOUT": {
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":1, "y":2}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":3.75, "y":5}]
"layout": [
{"x": 0, "y": 0, "w": 1, "matrix": [0, 0]},
{"x": 1, "y": 0, "w": 1, "matrix": [0, 1]},
{"x": 0, "y": 1, "w": 1, "matrix": [1, 0]},
{"x": 1, "y": 1, "w": 1, "matrix": [1, 1]},
{"x": 1, "y": 2, "w": 1, "matrix": [2, 1]},
{"x": 1.25, "y": 3, "w": 1, "matrix": [3, 0]},
{"x": 2.25, "y": 3, "w": 1, "matrix": [3, 1]},
{"x": 2, "y": 4, "w": 1, "matrix": [4, 0]},
{"x": 3, "y": 4, "w": 1, "matrix": [4, 1]},
{"x": 3.75, "y": 5, "w": 1, "matrix": [5, 1]}
]
}
}
}

View File

@ -0,0 +1 @@
Default keymap for the Clueboard California Macropad.

View File

@ -1,19 +1,3 @@
#pragma once
#include "quantum.h"
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
#define LAYOUT( \
k00, k01, k02, \
k10, k12, \
k20, k21, k22, \
k11, \
k30, k31, k32 \
) { \
{ k00, k01, k02, }, \
{ k10, k11, k12, }, \
{ k20, k21, k22, }, \
{ k30, k31, k32, } \
}

View File

@ -19,137 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2330
#define DEVICE_VER 0x0001
#define MANUFACTURER Clueboard
#define PRODUCT ATMEGA32U4 Firmware Dev Kit
#define DESCRIPTION A small board to help you hack on QMK.
/* key matrix size */
#define MATRIX_ROWS 4
#define MATRIX_COLS 3
/* Keyboard Matrix Assignments
*/
#define MATRIX_ROW_PINS { F0, F5, F4, B4 }
#define MATRIX_COL_PINS { F1, F7, F6 }
#define UNUSED_PINS
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION ROW2COL
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 20
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
#define BACKLIGHT_LEVELS 6
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
//#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
//#define LOCKING_RESYNC_ENABLE
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* Magic Key Options
*
* Magic keys are hotkey commands that allow control over firmware functions of
* the keyboard. They are best used in combination with the HID Listen program,
* found here: https://www.pjrc.com/teensy/hid_listen.html
*
* The options below allow the magic key functionality to be changed. This is
* useful if your keyboard/keypad is missing keys and you want magic key support.
*
*/
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/* Underlight configuration
*/
#define RGB_DI_PIN E6
//#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 4 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
// Enable audio
#define C6_AUDIO

View File

@ -1,19 +1,61 @@
{
"manufacturer": "Clueboard",
"keyboard_name": "Cluecard",
"keyboard_folder": "clueboard/card",
"url": "",
"maintainer": "skullydazed",
"width": 10,
"height": 8,
"width": 10,
"debounce": "20",
"diode_direction": "ROW2COL",
"features": {
"audio": true,
"backlight": true,
"bluetooth": false,
"bootmagic": false,
"command": true,
"console": true,
"extrakey": true,
"lto": true,
"midi": false,
"mousekey": true,
"nkro": false,
"rgblight": true,
"unicode": false
},
"matrix_pins": {
"cols": ["F1", " F7", " F6"],
"rows": ["F0", " F5", " F4", " B4"]
},
"rgblight": {
"brightness_steps": "17",
"hue_steps": "10",
"led_count": "4",
"pin": "E6",
"saturation_steps": "17"
},
"usb": {
"device_ver": "0x0001",
"pid": "0x2330",
"vid": "0xC1ED"
},
"layout_aliases": {
"LAYOUT": "LAYOUT_all"
},
"layouts": {
"LAYOUT": {
"LAYOUT_all": {
"key_count": 12,
"layout": [
{"label":"ON/OFF", "x":0, "y":0}, {"label":"SAT+", "x":4, "y":0}, {"label":"BRIGHT+", "x":8, "y":0},
{"label":"HUE-", "x":2, "y":1}, {"label":"HUE+", "x":6, "y":1},
{"label":"MODE", "x":0, "y":2}, {"label":"SAT-", "x":4, "y":2}, {"label":"BRIGHT-", "x":8, "y":2},
{"label":"LAYER", "x":2, "y":4},
{"label":"MX1", "x":4, "y":6, "w":2, "h":2}, {"label":"MX2", "x":6, "y":6, "w":2, "h":2}, {"label":"MX3", "x":8, "y":6, "w":2, "h":2}
{ "label": "ON/OFF", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
{ "label": "SAT+", "matrix": [0, 1], "w": 1, "x": 4, "y": 0 },
{ "label": "BRIGHT+", "matrix": [0, 2], "w": 1, "x": 8, "y": 0 },
{ "label": "HUE-", "matrix": [1, 0], "w": 1, "x": 2, "y": 1 },
{ "label": "HUE+", "matrix": [1, 2], "w": 1, "x": 6, "y": 1 },
{ "label": "MODE", "matrix": [2, 0], "w": 1, "x": 0, "y": 2 },
{ "label": "SAT-", "matrix": [2, 1], "w": 1, "x": 4, "y": 2 },
{ "label": "BRIGHT-", "matrix": [2, 2], "w": 1, "x": 8, "y": 2 },
{ "label": "LAYER", "matrix": [1, 1], "w": 1, "x": 2, "y": 4 },
{ "h": 2, "label": "MX1", "matrix": [3, 0], "w": 2, "x": 4, "y": 6 },
{ "h": 2, "label": "MX2", "matrix": [3, 1], "w": 2, "x": 6, "y": 6 },
{ "h": 2, "label": "MX3", "matrix": [3, 2], "w": 2, "x": 8, "y": 6 }
]
}
}

View File

@ -12,18 +12,4 @@ MCU = atmega32u4
BOOTLOADER = atmel-dfu
# Build Options
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # USB Nkey Rollover
RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
BACKLIGHT_DRIVER = custom
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = yes # Audio output on port C6
LTO_ENABLE = yes

View File

@ -1,4 +1,8 @@
{
"manufacturer": "Clueboard",
"maintainer": "skullydazed"
"maintainer": "skullydazed",
"usb": {
"device_ver": "0x0001",
"vid": "0xC1ED"
}
}

View File

@ -6,6 +6,7 @@ from milc import cli
import qmk.keymap
import qmk.path
from qmk.info_json_encoder import InfoJSONEncoder
@cli.argument('--no-cpp', arg_only=True, action='store_false', help='Do not use \'cpp\' on keymap.c')
@ -47,7 +48,7 @@ def c2json(cli):
cli.args.output.parent.mkdir(parents=True, exist_ok=True)
if cli.args.output.exists():
cli.args.output.replace(cli.args.output.name + '.bak')
cli.args.output.write_text(json.dumps(keymap_json))
cli.args.output.write_text(json.dumps(keymap_json, cls=InfoJSONEncoder))
if not cli.args.quiet:
cli.log.info('Wrote keymap to %s.', cli.args.output)

View File

@ -13,7 +13,7 @@ def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
fileHeader = """\
file_header = """\
/* Copyright 2020 QMK
*
* This program is free software: you can redistribute it and/or modify
@ -77,7 +77,7 @@ def check_diffs(input_defs, reference_defs):
def migrate_chconf_h(to_override, outfile):
print(fileHeader.format(cli.args.input.relative_to(QMK_FIRMWARE), cli.args.reference.relative_to(QMK_FIRMWARE)), file=outfile)
print(file_header.format(cli.args.input.relative_to(QMK_FIRMWARE), cli.args.reference.relative_to(QMK_FIRMWARE)), file=outfile)
for override in to_override:
print("#define %s %s" % (override[0], override[1]), file=outfile)
@ -87,7 +87,7 @@ def migrate_chconf_h(to_override, outfile):
def migrate_halconf_h(to_override, outfile):
print(fileHeader.format(cli.args.input.relative_to(QMK_FIRMWARE), cli.args.reference.relative_to(QMK_FIRMWARE)), file=outfile)
print(file_header.format(cli.args.input.relative_to(QMK_FIRMWARE), cli.args.reference.relative_to(QMK_FIRMWARE)), file=outfile)
for override in to_override:
print("#define %s %s" % (override[0], override[1]), file=outfile)
@ -97,7 +97,7 @@ def migrate_halconf_h(to_override, outfile):
def migrate_mcuconf_h(to_override, outfile):
print(fileHeader.format(cli.args.input.relative_to(QMK_FIRMWARE), cli.args.reference.relative_to(QMK_FIRMWARE)), file=outfile)
print(file_header.format(cli.args.input.relative_to(QMK_FIRMWARE), cli.args.reference.relative_to(QMK_FIRMWARE)), file=outfile)
print("#include_next <mcuconf.h>\n", file=outfile)

View File

@ -1,3 +1,7 @@
from . import api
from . import config_h
from . import docs
from . import info_json
from . import layouts
from . import rgb_breathe_table
from . import rules_mk

View File

@ -8,6 +8,7 @@ from milc import cli
from qmk.datetime import current_datetime
from qmk.info import info_json
from qmk.info_json_encoder import InfoJSONEncoder
from qmk.keyboard import list_keyboards
@ -44,15 +45,16 @@ def generate_api(cli):
if 'usb' in kb_all['keyboards'][keyboard_name]:
usb = kb_all['keyboards'][keyboard_name]['usb']
if usb['vid'] not in usb_list['devices']:
if 'vid' in usb and usb['vid'] not in usb_list['devices']:
usb_list['devices'][usb['vid']] = {}
if usb['pid'] not in usb_list['devices'][usb['vid']]:
if 'pid' in usb and usb['pid'] not in usb_list['devices'][usb['vid']]:
usb_list['devices'][usb['vid']][usb['pid']] = {}
usb_list['devices'][usb['vid']][usb['pid']][keyboard_name] = usb
if 'vid' in usb and 'pid' in usb:
usb_list['devices'][usb['vid']][usb['pid']][keyboard_name] = usb
# Write the global JSON files
keyboard_list.write_text(json.dumps({'last_updated': current_datetime(), 'keyboards': sorted(kb_all['keyboards'])}))
keyboard_all.write_text(json.dumps(kb_all))
usb_file.write_text(json.dumps(usb_list))
keyboard_list.write_text(json.dumps({'last_updated': current_datetime(), 'keyboards': sorted(kb_all['keyboards'])}, cls=InfoJSONEncoder))
keyboard_all.write_text(json.dumps(kb_all, cls=InfoJSONEncoder))
usb_file.write_text(json.dumps(usb_list, cls=InfoJSONEncoder))

View File

@ -0,0 +1,277 @@
"""Used by the make system to generate info_config.h from info.json.
"""
from milc import cli
from qmk.constants import LED_INDICATORS
from qmk.decorators import automagic_keyboard, automagic_keymap
from qmk.info import info_json, rgblight_animations, rgblight_properties, rgblight_toggles
from qmk.path import is_keyboard, normpath
usb_properties = {
'vid': 'VENDOR_ID',
'pid': 'PRODUCT_ID',
'device_ver': 'DEVICE_VER',
}
def debounce(debounce):
"""Return the config.h lines that set debounce
"""
return """
#ifndef DEBOUNCE
# define DEBOUNCE %s
#endif // DEBOUNCE
""" % debounce
def diode_direction(diode_direction):
"""Return the config.h lines that set diode direction
"""
return """
#ifndef DIODE_DIRECTION
# define DIODE_DIRECTION %s
#endif // DIODE_DIRECTION
""" % diode_direction
def keyboard_name(keyboard_name):
"""Return the config.h lines that set the keyboard's name.
"""
return """
#ifndef DESCRIPTION
# define DESCRIPTION %s
#endif // DESCRIPTION
#ifndef PRODUCT
# define PRODUCT %s
#endif // PRODUCT
""" % (keyboard_name, keyboard_name)
def manufacturer(manufacturer):
"""Return the config.h lines that set the manufacturer.
"""
return """
#ifndef MANUFACTURER
# define MANUFACTURER %s
#endif // MANUFACTURER
""" % (manufacturer)
def direct_pins(direct_pins):
"""Return the config.h lines that set the direct pins.
"""
rows = []
for row in direct_pins:
cols = ','.join([col or 'NO_PIN' for col in row])
rows.append('{' + cols + '}')
col_count = len(direct_pins[0])
row_count = len(direct_pins)
return """
#ifndef MATRIX_COLS
# define MATRIX_COLS %s
#endif // MATRIX_COLS
#ifndef MATRIX_ROWS
# define MATRIX_ROWS %s
#endif // MATRIX_ROWS
#ifndef DIRECT_PINS
# define DIRECT_PINS {%s}
#endif // DIRECT_PINS
""" % (col_count, row_count, ','.join(rows))
def col_pins(col_pins):
"""Return the config.h lines that set the column pins.
"""
cols = ','.join(col_pins)
col_num = len(col_pins)
return """
#ifndef MATRIX_COLS
# define MATRIX_COLS %s
#endif // MATRIX_COLS
#ifndef MATRIX_COL_PINS
# define MATRIX_COL_PINS {%s}
#endif // MATRIX_COL_PINS
""" % (col_num, cols)
def row_pins(row_pins):
"""Return the config.h lines that set the row pins.
"""
rows = ','.join(row_pins)
row_num = len(row_pins)
return """
#ifndef MATRIX_ROWS
# define MATRIX_ROWS %s
#endif // MATRIX_ROWS
#ifndef MATRIX_ROW_PINS
# define MATRIX_ROW_PINS {%s}
#endif // MATRIX_ROW_PINS
""" % (row_num, rows)
def indicators(config):
"""Return the config.h lines that setup LED indicators.
"""
defines = []
for led, define in LED_INDICATORS.items():
if led in config:
defines.append('')
defines.append('#ifndef %s' % (define,))
defines.append('# define %s %s' % (define, config[led]))
defines.append('#endif // %s' % (define,))
return '\n'.join(defines)
def layout_aliases(layout_aliases):
"""Return the config.h lines that setup layout aliases.
"""
defines = []
for alias, layout in layout_aliases.items():
defines.append('')
defines.append('#ifndef %s' % (alias,))
defines.append('# define %s %s' % (alias, layout))
defines.append('#endif // %s' % (alias,))
return '\n'.join(defines)
def matrix_pins(matrix_pins):
"""Add the matrix config to the config.h.
"""
pins = []
if 'direct' in matrix_pins:
pins.append(direct_pins(matrix_pins['direct']))
if 'cols' in matrix_pins:
pins.append(col_pins(matrix_pins['cols']))
if 'rows' in matrix_pins:
pins.append(row_pins(matrix_pins['rows']))
return '\n'.join(pins)
def rgblight(config):
"""Return the config.h lines that setup rgblight.
"""
rgblight_config = []
for json_key, config_key in rgblight_properties.items():
if json_key in config:
rgblight_config.append('')
rgblight_config.append('#ifndef %s' % (config_key,))
rgblight_config.append('# define %s %s' % (config_key, config[json_key]))
rgblight_config.append('#endif // %s' % (config_key,))
for json_key, config_key in rgblight_toggles.items():
if config.get(json_key):
rgblight_config.append('')
rgblight_config.append('#ifndef %s' % (config_key,))
rgblight_config.append('# define %s' % (config_key,))
rgblight_config.append('#endif // %s' % (config_key,))
for json_key, config_key in rgblight_animations.items():
if 'animations' in config and config['animations'].get(json_key):
rgblight_config.append('')
rgblight_config.append('#ifndef %s' % (config_key,))
rgblight_config.append('# define %s' % (config_key,))
rgblight_config.append('#endif // %s' % (config_key,))
return '\n'.join(rgblight_config)
def usb_properties(usb_props):
"""Return the config.h lines that setup USB params.
"""
usb_lines = []
for info_name, config_name in usb_props.items():
if info_name in usb_props:
usb_lines.append('')
usb_lines.append('#ifndef ' + config_name)
usb_lines.append('# define %s %s' % (config_name, usb_props[info_name]))
usb_lines.append('#endif // ' + config_name)
return '\n'.join(usb_lines)
@cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to')
@cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
@cli.argument('-kb', '--keyboard', help='Keyboard to generate config.h for.')
@cli.subcommand('Used by the make system to generate info_config.h from info.json', hidden=True)
@automagic_keyboard
@automagic_keymap
def generate_config_h(cli):
"""Generates the info_config.h file.
"""
# Determine our keyboard(s)
if not cli.config.generate_config_h.keyboard:
cli.log.error('Missing paramater: --keyboard')
cli.subcommands['info'].print_help()
return False
if not is_keyboard(cli.config.generate_config_h.keyboard):
cli.log.error('Invalid keyboard: "%s"', cli.config.generate_config_h.keyboard)
return False
# Build the info.json file
kb_info_json = info_json(cli.config.generate_config_h.keyboard)
# Build the info_config.h file.
config_h_lines = ['/* This file was generated by `qmk generate-config-h`. Do not edit or copy.' ' */', '', '#pragma once']
if 'debounce' in kb_info_json:
config_h_lines.append(debounce(kb_info_json['debounce']))
if 'diode_direction' in kb_info_json:
config_h_lines.append(diode_direction(kb_info_json['diode_direction']))
if 'indicators' in kb_info_json:
config_h_lines.append(indicators(kb_info_json['indicators']))
if 'keyboard_name' in kb_info_json:
config_h_lines.append(keyboard_name(kb_info_json['keyboard_name']))
if 'layout_aliases' in kb_info_json:
config_h_lines.append(layout_aliases(kb_info_json['layout_aliases']))
if 'manufacturer' in kb_info_json:
config_h_lines.append(manufacturer(kb_info_json['manufacturer']))
if 'rgblight' in kb_info_json:
config_h_lines.append(rgblight(kb_info_json['rgblight']))
if 'matrix_pins' in kb_info_json:
config_h_lines.append(matrix_pins(kb_info_json['matrix_pins']))
if 'usb' in kb_info_json:
config_h_lines.append(usb_properties(kb_info_json['usb']))
# Show the results
config_h = '\n'.join(config_h_lines)
if cli.args.output:
cli.args.output.parent.mkdir(parents=True, exist_ok=True)
if cli.args.output.exists():
cli.args.output.replace(cli.args.output.name + '.bak')
cli.args.output.write_text(config_h)
if not cli.args.quiet:
cli.log.info('Wrote info_config.h to %s.', cli.args.output)
else:
print(config_h)

View File

@ -0,0 +1,49 @@
"""Keyboard information script.
Compile an info.json for a particular keyboard and pretty-print it.
"""
import json
from milc import cli
from qmk.info_json_encoder import InfoJSONEncoder
from qmk.decorators import automagic_keyboard, automagic_keymap
from qmk.info import info_json
from qmk.path import is_keyboard
@cli.argument('-kb', '--keyboard', help='Keyboard to show info for.')
@cli.argument('-km', '--keymap', help='Show the layers for a JSON keymap too.')
@cli.subcommand('Generate an info.json file for a keyboard.', hidden=False if cli.config.user.developer else True)
@automagic_keyboard
@automagic_keymap
def generate_info_json(cli):
"""Generate an info.json file for a keyboard
"""
# Determine our keyboard(s)
if not cli.config.generate_info_json.keyboard:
cli.log.error('Missing paramater: --keyboard')
cli.subcommands['info'].print_help()
return False
if not is_keyboard(cli.config.generate_info_json.keyboard):
cli.log.error('Invalid keyboard: "%s"', cli.config.generate_info_json.keyboard)
return False
# Build the info.json file
kb_info_json = info_json(cli.config.generate_info_json.keyboard)
pared_down_json = {}
for key in ('manufacturer', 'maintainer', 'usb', 'keyboard_name', 'width', 'height', 'debounce', 'diode_direction', 'features', 'community_layouts', 'layout_aliases', 'matrix_pins', 'rgblight', 'url'):
if key in kb_info_json:
pared_down_json[key] = kb_info_json[key]
pared_down_json['layouts'] = {}
if 'layouts' in pared_down_json:
for layout_name, layout in kb_info_json['layouts'].items():
pared_down_json['layouts'][layout_name] = {}
pared_down_json['layouts'][layout_name]['key_count'] = layout.get('key_count', len(layout['layout']))
pared_down_json['layouts'][layout_name]['layout'] = layout['layout']
# Display the results
print(json.dumps(pared_down_json, indent=2, cls=InfoJSONEncoder))

View File

@ -0,0 +1,93 @@
"""Used by the make system to generate layouts.h from info.json.
"""
from milc import cli
from qmk.constants import COL_LETTERS, ROW_LETTERS
from qmk.decorators import automagic_keyboard, automagic_keymap
from qmk.info import info_json
from qmk.path import is_keyboard, normpath
usb_properties = {
'vid': 'VENDOR_ID',
'pid': 'PRODUCT_ID',
'device_ver': 'DEVICE_VER',
}
@cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to')
@cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
@cli.argument('-kb', '--keyboard', help='Keyboard to generate config.h for.')
@cli.subcommand('Used by the make system to generate layouts.h from info.json', hidden=True)
@automagic_keyboard
@automagic_keymap
def generate_layouts(cli):
"""Generates the layouts.h file.
"""
# Determine our keyboard(s)
if not cli.config.generate_layouts.keyboard:
cli.log.error('Missing paramater: --keyboard')
cli.subcommands['info'].print_help()
return False
if not is_keyboard(cli.config.generate_layouts.keyboard):
cli.log.error('Invalid keyboard: "%s"', cli.config.generate_layouts.keyboard)
return False
# Build the info.json file
kb_info_json = info_json(cli.config.generate_layouts.keyboard)
# Build the layouts.h file.
layouts_h_lines = ['/* This file was generated by `qmk generate-layouts`. Do not edit or copy.' ' */', '', '#pragma once']
if 'direct' in kb_info_json['matrix_pins']:
col_num = len(kb_info_json['matrix_pins']['direct'][0])
row_num = len(kb_info_json['matrix_pins']['direct'])
elif 'cols' in kb_info_json['matrix_pins'] and 'rows' in kb_info_json['matrix_pins']:
col_num = len(kb_info_json['matrix_pins']['cols'])
row_num = len(kb_info_json['matrix_pins']['rows'])
else:
cli.log.error('%s: Invalid matrix config.', cli.config.generate_layouts.keyboard)
return False
for layout_name in kb_info_json['layouts']:
if kb_info_json['layouts'][layout_name]['c_macro']:
continue
layout_keys = []
layout_matrix = [['KC_NO' for i in range(col_num)] for i in range(row_num)]
for i, key in enumerate(kb_info_json['layouts'][layout_name]['layout']):
row = key['matrix'][0]
col = key['matrix'][1]
identifier = 'k%s%s' % (ROW_LETTERS[row], COL_LETTERS[col])
try:
layout_matrix[row][col] = identifier
layout_keys.append(identifier)
except IndexError:
key_name = key.get('label', identifier)
cli.log.error('Matrix data out of bounds for layout %s at index %s (%s): %s, %s', layout_name, i, key_name, row, col)
return False
layouts_h_lines.append('')
layouts_h_lines.append('#define %s(%s) {\\' % (layout_name, ', '.join(layout_keys)))
rows = ', \\\n'.join(['\t {' + ', '.join(row) + '}' for row in layout_matrix])
rows += ' \\'
layouts_h_lines.append(rows)
layouts_h_lines.append('}')
# Show the results
layouts_h = '\n'.join(layouts_h_lines) + '\n'
if cli.args.output:
cli.args.output.parent.mkdir(parents=True, exist_ok=True)
if cli.args.output.exists():
cli.args.output.replace(cli.args.output.name + '.bak')
cli.args.output.write_text(layouts_h)
if not cli.args.quiet:
cli.log.info('Wrote info_config.h to %s.', cli.args.output)
else:
print(layouts_h)

View File

@ -0,0 +1,59 @@
"""Used by the make system to generate a rules.mk
"""
from milc import cli
from qmk.decorators import automagic_keyboard, automagic_keymap
from qmk.info import info_json
from qmk.path import is_keyboard, normpath
@cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to')
@cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
@cli.argument('-kb', '--keyboard', help='Keyboard to generate config.h for.')
@cli.subcommand('Used by the make system to generate info_config.h from info.json', hidden=True)
@automagic_keyboard
@automagic_keymap
def generate_rules_mk(cli):
"""Generates a rules.mk file from info.json.
"""
# Determine our keyboard(s)
if not cli.config.generate_rules_mk.keyboard:
cli.log.error('Missing paramater: --keyboard')
cli.subcommands['info'].print_help()
return False
if not is_keyboard(cli.config.generate_rules_mk.keyboard):
cli.log.error('Invalid keyboard: "%s"', cli.config.generate_rules_mk.keyboard)
return False
# Build the info.json file
kb_info_json = info_json(cli.config.generate_rules_mk.keyboard)
rules_mk_lines = ['# This file was generated by `qmk generate-rules-mk`. Do not edit or copy.', '']
# Find features that should be enabled
if 'features' in kb_info_json:
for feature, enabled in kb_info_json['features'].items():
feature = feature.upper()
enabled = 'yes' if enabled else 'no'
rules_mk_lines.append(f'{feature}_ENABLE := {enabled}')
# Add community layouts
if 'community_layouts' in kb_info_json:
rules_mk_lines.append(f'LAYOUTS = {" ".join(kb_info_json["community_layouts"])}')
# Show the results
rules_mk = '\n'.join(rules_mk_lines) + '\n'
if cli.args.output:
cli.args.output.parent.mkdir(parents=True, exist_ok=True)
if cli.args.output.exists():
cli.args.output.replace(cli.args.output.name + '.bak')
cli.args.output.write_text(rules_mk)
if cli.args.quiet:
print(cli.args.output)
else:
cli.log.info('Wrote info_config.h to %s.', cli.args.output)
else:
print(rules_mk)

View File

@ -7,6 +7,8 @@ import platform
from milc import cli
from qmk.info_json_encoder import InfoJSONEncoder
from qmk.constants import COL_LETTERS, ROW_LETTERS
from qmk.decorators import automagic_keyboard, automagic_keymap
from qmk.keyboard import render_layouts, render_layout
from qmk.keymap import locate_keymap
@ -15,9 +17,6 @@ from qmk.path import is_keyboard
platform_id = platform.platform().lower()
ROW_LETTERS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop'
COL_LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijilmnopqrstuvwxyz'
def show_keymap(kb_info_json, title_caps=True):
"""Render the keymap in ascii art.
@ -149,7 +148,7 @@ def info(cli):
# Output in the requested format
if cli.args.format == 'json':
print(json.dumps(kb_info_json))
print(json.dumps(kb_info_json, cls=InfoJSONEncoder))
elif cli.args.format == 'text':
print_text_output(kb_info_json)
elif cli.args.format == 'friendly':

View File

@ -3,25 +3,12 @@
import json
import os
from pathlib import Path
from decimal import Decimal
from collections import OrderedDict
from milc import cli
from kle2xy import KLE2xy
from qmk.converter import kle2qmk
class CustomJSONEncoder(json.JSONEncoder):
def default(self, obj):
try:
if isinstance(obj, Decimal):
if obj % 2 in (Decimal(0), Decimal(1)):
return int(obj)
return float(obj)
except TypeError:
pass
return json.JSONEncoder.default(self, obj)
from qmk.info_json_encoder import InfoJSONEncoder
@cli.argument('filename', help='The KLE raw txt to convert')
@ -52,24 +39,22 @@ def kle2json(cli):
cli.log.error('Could not parse KLE raw data: %s', raw_code)
cli.log.exception(e)
return False
keyboard = OrderedDict(
keyboard_name=kle.name,
url='',
maintainer='qmk',
width=kle.columns,
height=kle.rows,
layouts={'LAYOUT': {
'layout': 'LAYOUT_JSON_HERE'
}},
)
# Initialize keyboard with json encoded from ordered dict
keyboard = json.dumps(keyboard, indent=4, separators=(', ', ': '), sort_keys=False, cls=CustomJSONEncoder)
# Initialize layout with kle2qmk from converter module
layout = json.dumps(kle2qmk(kle), separators=(', ', ':'), cls=CustomJSONEncoder)
# Replace layout in keyboard json
keyboard = keyboard.replace('"LAYOUT_JSON_HERE"', layout)
keyboard = {
'keyboard_name': kle.name,
'url': '',
'maintainer': 'qmk',
'width': kle.columns,
'height': kle.rows,
'layouts': {
'LAYOUT': {
'layout': kle2qmk(kle)
}
},
}
# Write our info.json
file = open(out_path / "info.json", "w")
file.write(keyboard)
file.close()
keyboard = json.dumps(keyboard, indent=4, separators=(', ', ': '), sort_keys=False, cls=InfoJSONEncoder)
info_json_file = out_path / 'info.json'
info_json_file.write_text(keyboard)
cli.log.info('Wrote out {fg_cyan}%s/info.json', out_path)

View File

@ -17,3 +17,14 @@ VUSB_PROCESSORS = 'atmega32a', 'atmega328p', 'atmega328', 'attiny85'
DATE_FORMAT = '%Y-%m-%d'
DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S %Z'
TIME_FORMAT = '%H:%M:%S'
# Used when generating matrix locations
COL_LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijilmnopqrstuvwxyz'
ROW_LETTERS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop'
# Mapping between info.json and config.h keys
LED_INDICATORS = {
'caps_lock': 'LED_CAPS_LOCK_PIN',
'num_lock': 'LED_NUM_LOCK_PIN',
'scrol_lock': 'LED_SCROLL_LOCK_PIN'
}

View File

@ -6,13 +6,45 @@ from pathlib import Path
from milc import cli
from qmk.constants import CHIBIOS_PROCESSORS, LUFA_PROCESSORS, VUSB_PROCESSORS
from qmk.constants import CHIBIOS_PROCESSORS, LUFA_PROCESSORS, VUSB_PROCESSORS, LED_INDICATORS
from qmk.c_parse import find_layouts
from qmk.keyboard import config_h, rules_mk
from qmk.keymap import list_keymaps
from qmk.makefile import parse_rules_mk_file
from qmk.math import compute
rgblight_properties = {
'led_count': 'RGBLED_NUM',
'pin': 'RGB_DI_PIN',
'split_count': 'RGBLED_SPLIT',
'max_brightness': 'RGBLIGHT_LIMIT_VAL',
'hue_steps': 'RGBLIGHT_HUE_STEP',
'saturation_steps': 'RGBLIGHT_SAT_STEP',
'brightness_steps': 'RGBLIGHT_VAL_STEP'
}
rgblight_toggles = {
'sleep': 'RGBLIGHT_SLEEP',
'split': 'RGBLIGHT_SPLIT',
}
rgblight_animations = {
'all': 'RGBLIGHT_ANIMATIONS',
'alternating': 'RGBLIGHT_EFFECT_ALTERNATING',
'breathing': 'RGBLIGHT_EFFECT_BREATHING',
'christmas': 'RGBLIGHT_EFFECT_CHRISTMAS',
'knight': 'RGBLIGHT_EFFECT_KNIGHT',
'rainbow_mood': 'RGBLIGHT_EFFECT_RAINBOW_MOOD',
'rainbow_swirl': 'RGBLIGHT_EFFECT_RAINBOW_SWIRL',
'rgb_test': 'RGBLIGHT_EFFECT_RGB_TEST',
'snake': 'RGBLIGHT_EFFECT_SNAKE',
'static_gradient': 'RGBLIGHT_EFFECT_STATIC_GRADIENT',
'twinkle': 'RGBLIGHT_EFFECT_TWINKLE'
}
true_values = ['1', 'on', 'yes']
false_values = ['0', 'off', 'no']
def info_json(keyboard):
"""Generate the info.json data for a specific keyboard.
@ -38,8 +70,9 @@ def info_json(keyboard):
info_data['keymaps'][keymap.name] = {'url': f'https://raw.githubusercontent.com/qmk/qmk_firmware/master/{keymap}/keymap.json'}
# Populate layout data
for layout_name, layout_json in _find_all_layouts(info_data, keyboard, rules).items():
for layout_name, layout_json in _find_all_layouts(info_data, keyboard).items():
if not layout_name.startswith('LAYOUT_kc'):
layout_json['c_macro'] = True
info_data['layouts'][layout_name] = layout_json
# Merge in the data from info.json, config.h, and rules.mk
@ -47,34 +80,179 @@ def info_json(keyboard):
info_data = _extract_config_h(info_data)
info_data = _extract_rules_mk(info_data)
# Make sure we have at least one layout
if not info_data.get('layouts'):
_log_error(info_data, 'No LAYOUTs defined! Need at least one layout defined in the keyboard.h or info.json.')
# Make sure we supply layout macros for the community layouts we claim to support
# FIXME(skullydazed): This should be populated into info.json and read from there instead
if 'LAYOUTS' in rules and info_data.get('layouts'):
# Match these up against the supplied layouts
supported_layouts = rules['LAYOUTS'].strip().split()
for layout_name in sorted(info_data['layouts']):
layout_name = layout_name[7:]
if layout_name in supported_layouts:
supported_layouts.remove(layout_name)
if supported_layouts:
for supported_layout in supported_layouts:
_log_error(info_data, 'Claims to support community layout %s but no LAYOUT_%s() macro found' % (supported_layout, supported_layout))
return info_data
def _extract_config_h(info_data):
"""Pull some keyboard information from existing rules.mk files
def _extract_debounce(info_data, config_c):
"""Handle debounce.
"""
if 'debounce' in info_data and 'DEBOUNCE' in config_c:
_log_warning(info_data, 'Debounce is specified in both info.json and config.h, the config.h value wins.')
if 'DEBOUNCE' in config_c:
info_data['debounce'] = config_c.get('DEBOUNCE')
return info_data
def _extract_diode_direction(info_data, config_c):
"""Handle the diode direction.
"""
if 'diode_direction' in info_data and 'DIODE_DIRECTION' in config_c:
_log_warning(info_data, 'Diode direction is specified in both info.json and config.h, the config.h value wins.')
if 'DIODE_DIRECTION' in config_c:
info_data['diode_direction'] = config_c.get('DIODE_DIRECTION')
return info_data
def _extract_indicators(info_data, config_c):
"""Find the LED indicator information.
"""
for json_key, config_key in LED_INDICATORS.items():
if json_key in info_data.get('indicators', []) and config_key in config_c:
_log_warning(info_data, f'Indicator {json_key} is specified in both info.json and config.h, the config.h value wins.')
if config_key in config_c:
info_data['indicators'][json_key] = config_c.get(config_key)
return info_data
def _extract_community_layouts(info_data, rules):
"""Find the community layouts in rules.mk.
"""
community_layouts = rules['LAYOUTS'].split() if 'LAYOUTS' in rules else []
if 'community_layouts' in info_data:
for layout in community_layouts:
if layout not in info_data['community_layouts']:
community_layouts.append(layout)
else:
info_data['community_layouts'] = community_layouts
return info_data
def _extract_features(info_data, rules):
"""Find all the features enabled in rules.mk.
"""
for key, value in rules.items():
if key.endswith('_ENABLE'):
key = '_'.join(key.split('_')[:-1]).lower()
value = True if value in true_values else False if value in false_values else value
if 'config_h_features' not in info_data:
info_data['config_h_features'] = {}
if 'features' not in info_data:
info_data['features'] = {}
if key in info_data['features']:
_log_warning(info_data, 'Feature %s is specified in both info.json and rules.mk, the rules.mk value wins.' % (key,))
info_data['features'][key] = value
info_data['config_h_features'][key] = value
return info_data
def _extract_rgblight(info_data, config_c):
"""Handle the rgblight configuration
"""
rgblight = info_data.get('rgblight', {})
animations = rgblight.get('animations', {})
for json_key, config_key in rgblight_properties.items():
if config_key in config_c:
if json_key in rgblight:
_log_warning(info_data, 'RGB Light: %s is specified in both info.json and config.h, the config.h value wins.' % (json_key,))
rgblight[json_key] = config_c[config_key]
for json_key, config_key in rgblight_toggles.items():
if config_key in config_c:
if json_key in rgblight:
_log_warning(info_data, 'RGB Light: %s is specified in both info.json and config.h, the config.h value wins.', json_key)
rgblight[json_key] = config_c[config_key]
for json_key, config_key in rgblight_animations.items():
if config_key in config_c:
if json_key in animations:
_log_warning(info_data, 'RGB Light: animations: %s is specified in both info.json and config.h, the config.h value wins.' % (json_key,))
animations[json_key] = config_c[config_key]
if animations:
rgblight['animations'] = animations
if rgblight:
info_data['rgblight'] = rgblight
return info_data
def _extract_matrix_info(info_data, config_c):
"""Populate the matrix information.
"""
config_c = config_h(info_data['keyboard_folder'])
row_pins = config_c.get('MATRIX_ROW_PINS', '').replace('{', '').replace('}', '').strip()
col_pins = config_c.get('MATRIX_COL_PINS', '').replace('{', '').replace('}', '').strip()
direct_pins = config_c.get('DIRECT_PINS', '').replace(' ', '')[1:-1]
info_data['diode_direction'] = config_c.get('DIODE_DIRECTION')
info_data['matrix_size'] = {
'rows': compute(config_c.get('MATRIX_ROWS', '0')),
'cols': compute(config_c.get('MATRIX_COLS', '0')),
}
info_data['matrix_pins'] = {}
if 'MATRIX_ROWS' in config_c and 'MATRIX_COLS' in config_c:
if 'matrix_size' in info_data:
_log_warning(info_data, 'Matrix size is specified in both info.json and config.h, the config.h values win.')
if row_pins:
info_data['matrix_pins']['rows'] = row_pins.split(',')
if col_pins:
info_data['matrix_pins']['cols'] = col_pins.split(',')
info_data['matrix_size'] = {
'rows': compute(config_c.get('MATRIX_ROWS', '0')),
'cols': compute(config_c.get('MATRIX_COLS', '0')),
}
if row_pins and col_pins:
if 'matrix_pins' in info_data:
_log_warning(info_data, 'Matrix pins are specified in both info.json and config.h, the config.h values win.')
info_data['matrix_pins'] = {}
if row_pins:
info_data['matrix_pins']['rows'] = row_pins.split(',')
if col_pins:
info_data['matrix_pins']['cols'] = col_pins.split(',')
if direct_pins:
if 'matrix_pins' in info_data:
_log_warning(info_data, 'Direct pins are specified in both info.json and config.h, the config.h values win.')
info_data['matrix_pins'] = {}
direct_pin_array = []
for row in direct_pins.split('},{'):
if row.startswith('{'):
row = row[1:]
if row.endswith('}'):
row = row[:-1]
@ -86,15 +264,43 @@ def _extract_config_h(info_data):
direct_pin_array[-1].append(pin)
info_data['matrix_pins']['direct'] = direct_pin_array
info_data['matrix_pins']['direct'] = direct_pin_array
info_data['usb'] = {
'vid': config_c.get('VENDOR_ID'),
'pid': config_c.get('PRODUCT_ID'),
'device_ver': config_c.get('DEVICE_VER'),
'manufacturer': config_c.get('MANUFACTURER'),
'product': config_c.get('PRODUCT'),
}
return info_data
def _extract_usb_info(info_data, config_c):
"""Populate the USB information.
"""
usb_properties = {'vid': 'VENDOR_ID', 'pid': 'PRODUCT_ID', 'device_ver': 'DEVICE_VER'}
if 'usb' not in info_data:
info_data['usb'] = {}
for info_name, config_name in usb_properties.items():
if config_name in config_c:
if info_name in info_data['usb']:
_log_warning(info_data, '%s in config.h is overwriting usb.%s in info.json' % (config_name, info_name))
info_data['usb'][info_name] = config_c[config_name]
elif info_name not in info_data['usb']:
_log_error(info_data, '%s not specified in config.h, and %s not specified in info.json. One is required.' % (config_name, info_name))
return info_data
def _extract_config_h(info_data):
"""Pull some keyboard information from existing config.h files
"""
config_c = config_h(info_data['keyboard_folder'])
_extract_debounce(info_data, config_c)
_extract_diode_direction(info_data, config_c)
_extract_indicators(info_data, config_c)
_extract_matrix_info(info_data, config_c)
_extract_usb_info(info_data, config_c)
_extract_rgblight(info_data, config_c)
return info_data
@ -106,16 +312,52 @@ def _extract_rules_mk(info_data):
mcu = rules.get('MCU')
if mcu in CHIBIOS_PROCESSORS:
return arm_processor_rules(info_data, rules)
arm_processor_rules(info_data, rules)
elif mcu in LUFA_PROCESSORS + VUSB_PROCESSORS:
return avr_processor_rules(info_data, rules)
avr_processor_rules(info_data, rules)
msg = "Unknown MCU: " + str(mcu)
else:
cli.log.warning("%s: Unknown MCU: %s" % (info_data['keyboard_folder'], mcu))
unknown_processor_rules(info_data, rules)
_log_warning(info_data, msg)
_extract_community_layouts(info_data, rules)
_extract_features(info_data, rules)
return unknown_processor_rules(info_data, rules)
return info_data
def _merge_layouts(info_data, new_info_data):
"""Merge new_info_data into info_data in an intelligent way.
"""
for layout_name, layout_json in new_info_data['layouts'].items():
if layout_name in info_data['layouts']:
# Pull in layouts we have a macro for
if len(info_data['layouts'][layout_name]['layout']) != len(layout_json['layout']):
msg = '%s: %s: Number of elements in info.json does not match! info.json:%s != %s:%s'
_log_error(info_data, msg % (info_data['keyboard_folder'], layout_name, len(layout_json['layout']), layout_name, len(info_data['layouts'][layout_name]['layout'])))
else:
for i, key in enumerate(info_data['layouts'][layout_name]['layout']):
key.update(layout_json['layout'][i])
else:
# Pull in layouts that have matrix data
missing_matrix = False
for key in layout_json['layout']:
if 'matrix' not in key:
missing_matrix = True
if not missing_matrix:
if layout_name in info_data['layouts']:
# Update an existing layout with new data
for i, key in enumerate(info_data['layouts'][layout_name]['layout']):
key.update(layout_json['layout'][i])
else:
# Copy in the new layout wholesale
layout_json['c_macro'] = False
info_data['layouts'][layout_name] = layout_json
return info_data
def _search_keyboard_h(path):
@ -131,34 +373,21 @@ def _search_keyboard_h(path):
return layouts
def _find_all_layouts(info_data, keyboard, rules):
def _find_all_layouts(info_data, keyboard):
"""Looks for layout macros associated with this keyboard.
"""
layouts = _search_keyboard_h(Path(keyboard))
if not layouts:
# If we didn't find any layouts above we widen our search. This is error
# prone which is why we want to encourage people to follow the standard above.
_log_warning(info_data, 'Falling back to searching for KEYMAP/LAYOUT macros.')
# If we don't find any layouts from info.json or keyboard.h we widen our search. This is error prone which is why we want to encourage people to follow the standard above.
info_data['parse_warnings'].append('%s: Falling back to searching for KEYMAP/LAYOUT macros.' % (keyboard))
for file in glob('keyboards/%s/*.h' % keyboard):
if file.endswith('.h'):
these_layouts = find_layouts(file)
if these_layouts:
layouts.update(these_layouts)
if 'LAYOUTS' in rules:
# Match these up against the supplied layouts
supported_layouts = rules['LAYOUTS'].strip().split()
for layout_name in sorted(layouts):
if not layout_name.startswith('LAYOUT_'):
continue
layout_name = layout_name[7:]
if layout_name in supported_layouts:
supported_layouts.remove(layout_name)
if supported_layouts:
_log_error(info_data, 'Missing LAYOUT() macro for %s' % (', '.join(supported_layouts)))
return layouts
@ -231,32 +460,40 @@ def merge_info_jsons(keyboard, info_data):
for info_file in find_info_json(keyboard):
# Load and validate the JSON data
try:
with info_file.open('r') as info_fd:
new_info_data = json.load(info_fd)
new_info_data = json.load(info_file.open('r'))
except Exception as e:
_log_error(info_data, "Invalid JSON in file %s: %s: %s" % (str(info_file), e.__class__.__name__, e))
continue
new_info_data = {}
if not isinstance(new_info_data, dict):
_log_error(info_data, "Invalid file %s, root object should be a dictionary." % (str(info_file),))
continue
# Copy whitelisted keys into `info_data`
for key in ('keyboard_name', 'manufacturer', 'identifier', 'url', 'maintainer', 'processor', 'bootloader', 'width', 'height'):
for key in ('debounce', 'diode_direction', 'indicators', 'keyboard_name', 'manufacturer', 'identifier', 'url', 'maintainer', 'processor', 'bootloader', 'width', 'height'):
if key in new_info_data:
info_data[key] = new_info_data[key]
# Merge the layouts in
# Deep merge certain keys
# FIXME(skullydazed/anyone): this should be generalized more so that we can inteligently merge more than one level deep. It would be nice if we could filter on valid keys too. That may have to wait for a future where we use openapi or something.
for key in ('features', 'layout_aliases', 'matrix_pins', 'rgblight', 'usb'):
if key in new_info_data:
if key not in info_data:
info_data[key] = {}
info_data[key].update(new_info_data[key])
# Merge the layouts
if 'community_layouts' in new_info_data:
if 'community_layouts' in info_data:
for layout in new_info_data['community_layouts']:
if layout not in info_data['community_layouts']:
info_data['community_layouts'].append(layout)
else:
info_data['community_layouts'] = new_info_data['community_layouts']
if 'layouts' in new_info_data:
for layout_name, json_layout in new_info_data['layouts'].items():
# Only pull in layouts we have a macro for
if layout_name in info_data['layouts']:
if info_data['layouts'][layout_name]['key_count'] != len(json_layout['layout']):
msg = '%s: Number of elements in info.json does not match! info.json:%s != %s:%s'
_log_error(info_data, msg % (layout_name, len(json_layout['layout']), layout_name, len(info_data['layouts'][layout_name]['layout'])))
else:
for i, key in enumerate(info_data['layouts'][layout_name]['layout']):
key.update(json_layout['layout'][i])
_merge_layouts(info_data, new_info_data)
return info_data

View File

@ -0,0 +1,96 @@
"""Class that pretty-prints QMK info.json files.
"""
import json
from decimal import Decimal
class InfoJSONEncoder(json.JSONEncoder):
"""Custom encoder to make info.json's a little nicer to work with.
"""
container_types = (list, tuple, dict)
indentation_char = " "
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.indentation_level = 0
if not self.indent:
self.indent = 4
def encode(self, obj):
"""Encode JSON objects for QMK.
"""
if isinstance(obj, Decimal):
if obj == int(obj): # I can't believe Decimal objects don't have .is_integer()
return int(obj)
return float(obj)
elif isinstance(obj, (list, tuple)):
if self._primitives_only(obj):
return "[" + ", ".join(self.encode(element) for element in obj) + "]"
else:
self.indentation_level += 1
output = [self.indent_str + self.encode(element) for element in obj]
self.indentation_level -= 1
return "[\n" + ",\n".join(output) + "\n" + self.indent_str + "]"
elif isinstance(obj, dict):
if obj:
if self.indentation_level == 4:
# These are part of a layout, put them on a single line.
return "{ " + ", ".join(f"{self.encode(key)}: {self.encode(element)}" for key, element in sorted(obj.items())) + " }"
else:
self.indentation_level += 1
output = [self.indent_str + f"{json.dumps(key)}: {self.encode(value)}" for key, value in sorted(obj.items(), key=self.sort_root_dict)]
self.indentation_level -= 1
return "{\n" + ",\n".join(output) + "\n" + self.indent_str + "}"
else:
return "{}"
else:
return super().encode(obj)
def _primitives_only(self, obj):
"""Returns true if the object doesn't have any container type objects (list, tuple, dict).
"""
if isinstance(obj, dict):
obj = obj.values()
return not any(isinstance(element, self.container_types) for element in obj)
def sort_root_dict(self, key):
"""Forces layout to the back of the sort order.
"""
key = key[0]
if self.indentation_level == 1:
if key == 'manufacturer':
return '10keyboard_name'
elif key == 'keyboard_name':
return '11keyboard_name'
elif key == 'maintainer':
return '12maintainer'
elif key in ('height', 'width'):
return '40' + str(key)
elif key == 'community_layouts':
return '97community_layouts'
elif key == 'layout_aliases':
return '98layout_aliases'
elif key == 'layouts':
return '99layouts'
else:
return '50' + str(key)
return key
@property
def indent_str(self):
return self.indentation_char * (self.indentation_level * self.indent)

View File

@ -86,8 +86,7 @@ MSG_FILE_TOO_BIG = $(ERROR_COLOR)The firmware is too large!$(NO_COLOR) $(CURRENT
MSG_FILE_TOO_SMALL = The firmware is too small! $(CURRENT_SIZE)/$(MAX_SIZE)\n
MSG_FILE_JUST_RIGHT = The firmware size is fine - $(CURRENT_SIZE)/$(MAX_SIZE) ($(PERCENT_SIZE)%%, $(FREE_SIZE) bytes free)\n
MSG_FILE_NEAR_LIMIT = The firmware size is approaching the maximum - $(CURRENT_SIZE)/$(MAX_SIZE) ($(PERCENT_SIZE)%%, $(FREE_SIZE) bytes free)\n
MSG_PYTHON_MISSING = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \
Can not run bin/qmk! This tool will be required when the develop branch is merged on 2020 Aug 29.\n\n\
MSG_PYTHON_MISSING = $(ERROR_COLOR)ERROR:$(NO_COLOR) Can not run bin/qmk!\n\n\
Please run $(BOLD)util/qmk_install.sh$(NO_COLOR) to install all the dependencies QMK requires.\n\n
MSG_FLASH_BOOTLOADER = $(WARN_COLOR)WARNING:$(NO_COLOR) This board's bootloader is not specified or is not supported by the \":flash\" target at this time.\n\n
MSG_FLASH_ARCH = $(WARN_COLOR)WARNING:$(NO_COLOR) This board's architecture is not supported by the \":flash\" target at this time.\n\n