Merge branch 'qmk:master' into dev_branch

This commit is contained in:
Mrinal Singh Tak 2024-05-25 04:15:54 +05:30 committed by GitHub
commit cd1514dc42
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
84 changed files with 3500 additions and 350 deletions

View File

@ -37,7 +37,7 @@ jobs:
qmk --verbose generate-docs
- name: Deploy
uses: JamesIves/github-pages-deploy-action@v4.6.0
uses: JamesIves/github-pages-deploy-action@v4.6.1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BASE_BRANCH: master

View File

@ -255,3 +255,7 @@ This is some inner content.
</details>
[1]: https://en.wikipedia.org/wiki/Eclipse_(software)
## Embed
[example embed](__capabilities_inc.md ':include')

View File

@ -0,0 +1 @@
Lorem ipsum dolor sit amet.

View File

@ -17,11 +17,12 @@ combo_t key_combos[] = {
This will send "Escape" if you hit the A and B keys, and Ctrl+Z when you hit the C and D keys.
## Mod-Tap Support
[Mod-Tap](mod_tap.md) feature is also supported together with combos. You will need to use the full Mod-Tap keycode in the combo definition, e.g.:
## Advanced Keycodes Support
Advanced keycodes, such as [Mod-Tap](mod_tap.md) and [Tap Dance](feature_tap_dance.md) are also supported together with combos. If you use these advanced keycodes in your keymap, you will need to place the full keycode in the combo definition, e.g.:
```c
const uint16_t PROGMEM test_combo1[] = {LSFT_T(KC_A), LT(1, KC_B), COMBO_END};
const uint16_t PROGMEM test_combo2[] = {TD(TD_ESC_CAPS), KC_F1, COMBO_END};
```
## Overlapping Combos

View File

@ -2,7 +2,7 @@
AVR is severely resource-constrained, and as QMK continues to grow, it is approaching a point where support for AVR may need to be moved to legacy status as newer development is unable to fit into those constraints.
However, if you need to reduce the compiled size of your firmware, there are a number of options to do so.
However, if you need to reduce the compiled size of your firmware to fit the controller's limited flash size, there are a number of options to do so.
## `rules.mk` Settings
First and foremost is enabling link time optimization. To do so, add this to your rules.mk:
@ -91,15 +91,19 @@ Or if you're not using layers at all, you can outright remove the functionality
There are two `__attribute__ ((weak))` placeholder functions available to customize magic keycodes. If you are not using that feature to swap keycodes, such as backslash with backspace, add the following to your `keymap.c` or user space code:
```c
#ifndef MAGIC_ENABLE
uint16_t keycode_config(uint16_t keycode) {
return keycode;
}
#endif
```
Likewise, if you are not using magic keycodes to swap modifiers, such as Control with GUI, add the following to your `keymap.c` or user space code:
```c
#ifndef MAGIC_ENABLE
uint8_t mod_config(uint8_t mod) {
return mod;
}
#endif
```
Both of them will overwrite the placeholder functions with a simple return statement to reduce firmware size.
@ -197,11 +201,7 @@ For RGB Matrix, these need to be explicitly enabled as well. To disable any that
# Final Thoughts
If you've done all of this, and your firmware is still too large, then it's time. It's time to consider making the switch to ARM. Unfortunately, right now is the worst possible time for that, due to the silicon shortage, and supply chain issues. Getting an ARM chip is difficult, at best, and significantly overpriced, at worst.
-- Drashna
That said, there are a number of Pro Micro replacements with ARM controllers:
* [Proton C](https://qmk.fm/proton-c/) (out of stock)
If you've done all of this, and your firmware is still too large, then it is time to consider making the switch to ARM. There are a number of Pro Micro replacements with an ARM controller:
* [Bonsai C](https://github.com/customMK/Bonsai-C) (Open Source, DIY/PCBA)
* [STeMCell](https://github.com/megamind4089/STeMCell) (Open Source, DIY/PCBA)
* [Adafruit KB2040](https://learn.adafruit.com/adafruit-kb2040)
@ -212,6 +212,7 @@ That said, there are a number of Pro Micro replacements with ARM controllers:
* [Liatris](https://splitkb.com/products/liatris)
* [Imera](https://splitkb.com/products/imera)
* [Michi](https://github.com/ci-bus/michi-promicro-rp2040)
* [Proton C](https://qmk.fm/proton-c/) (out of stock)
There are other, non-Pro Micro compatible boards out there. The most popular being:
* [WeAct Blackpill F411](https://www.aliexpress.com/item/1005001456186625.html) (~$6 USD)

View File

@ -3,8 +3,6 @@
#pragma once
#define ENCODER_DEFAULT_POS 0x3 // enable 1:1 resolution
// Default PIO0 cases flickering in this board. Setting to PIO1 resolves this issue.
#define WS2812_PIO_USE_PIO1

View File

@ -8,7 +8,7 @@
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "GP13", "pin_b": "GP14"}
{"pin_a": "GP13", "pin_b": "GP14", "resolution": 2}
]
},
"features": {
@ -83,4 +83,4 @@
]
}
}
}
}

View File

@ -73,7 +73,7 @@
#define WS2812_DMA_CHANNEL 6
#define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM1_UP
#define RGBLIGHT_DEFAULT_VAL 200
#define RGBLIGHT_DEFAULT_VAL 175
#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 5)
#define NUM_INDICATOR_INDEX 2

View File

@ -35,8 +35,8 @@ void eeconfig_init_kb(void) {
eeprom_ec_config.mode_0_actuation_threshold = DEFAULT_MODE_0_ACTUATION_LEVEL;
eeprom_ec_config.mode_0_release_threshold = DEFAULT_MODE_0_RELEASE_LEVEL;
eeprom_ec_config.mode_1_initial_deadzone_offset = DEFAULT_MODE_1_INITIAL_DEADZONE_OFFSET;
eeprom_ec_config.mode_1_actuation_offset = DEFAULT_MODE_1_ACTUATION_OFFSET;
eeprom_ec_config.mode_1_release_offset = DEFAULT_MODE_1_RELEASE_OFFSET;
eeprom_ec_config.mode_1_actuation_offset = DEFAULT_MODE_1_ACTUATION_OFFSET;
eeprom_ec_config.mode_1_release_offset = DEFAULT_MODE_1_RELEASE_OFFSET;
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
for (uint8_t col = 0; col < MATRIX_COLS; col++) {
@ -59,8 +59,8 @@ void keyboard_post_init_kb(void) {
ec_config.mode_0_actuation_threshold = eeprom_ec_config.mode_0_actuation_threshold;
ec_config.mode_0_release_threshold = eeprom_ec_config.mode_0_release_threshold;
ec_config.mode_1_initial_deadzone_offset = eeprom_ec_config.mode_1_initial_deadzone_offset;
ec_config.mode_1_actuation_offset = eeprom_ec_config.mode_1_actuation_offset;
ec_config.mode_1_release_offset = eeprom_ec_config.mode_1_release_offset;
ec_config.mode_1_actuation_offset = eeprom_ec_config.mode_1_actuation_offset;
ec_config.mode_1_release_offset = eeprom_ec_config.mode_1_release_offset;
ec_config.bottoming_calibration = false;
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
for (uint8_t col = 0; col < MATRIX_COLS; col++) {
@ -115,5 +115,6 @@ bool indicators_callback(void) {
else
sethsv(0, 0, 0, (rgb_led_t *)&led[SCROLL_INDICATOR_INDEX]);
rgblight_set();
return true;
}

View File

@ -42,7 +42,7 @@
},
"led_count": 69,
"led_map": [0, 1, 2, 3, 4, 5, 66, 67, 68, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65],
"max_brightness": 200
"max_brightness": 175
},
"usb": {
"device_version": "0.0.1",

View File

@ -1,320 +1,163 @@
// Copyright 2023 QMK -- generated source code only, font retains original copyright
// Copyright 2024 QMK -- generated source code only, font retains original copyright
// SPDX-License-Identifier: GPL-2.0-or-later
// This file was auto-generated by `qmk painter-convert-font-image -i robotomono20.png -f mono4`
// This file was auto-generated by `qmk painter-convert-font-image -i robotomono20.png -f mono2`
#include <qp.h>
const uint32_t font_robotomono20_length = 4904;
const uint32_t font_robotomono20_length = 2396;
// clang-format off
const uint8_t font_robotomono20[4904] = {
0x00, 0xFF, 0x14, 0x00, 0x00, 0x51, 0x46, 0x46, 0x01, 0x28, 0x13, 0x00, 0x00, 0xD7, 0xEC, 0xFF,
0xFF, 0x16, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0xFF, 0x01, 0xFE, 0x1D, 0x01, 0x00, 0x0C, 0x00,
0x00, 0x8C, 0x00, 0x00, 0x0C, 0x0E, 0x00, 0xCC, 0x12, 0x00, 0xCC, 0x1F, 0x00, 0x8C, 0x2F, 0x00,
0x0C, 0x3D, 0x00, 0xCC, 0x49, 0x00, 0x4C, 0x4F, 0x00, 0x4C, 0x62, 0x00, 0x0C, 0x76, 0x00, 0x4C,
0x7F, 0x00, 0xCC, 0x89, 0x00, 0x0C, 0x8F, 0x00, 0xCC, 0x91, 0x00, 0x4C, 0x95, 0x00, 0x0C, 0xA4,
0x00, 0xCC, 0xB0, 0x00, 0x8C, 0xBE, 0x00, 0x4C, 0xCB, 0x00, 0x4C, 0xD8, 0x00, 0x8C, 0xE4, 0x00,
0x4C, 0xF2, 0x00, 0x8C, 0xFF, 0x00, 0x0C, 0x0D, 0x01, 0xCC, 0x19, 0x01, 0x0C, 0x26, 0x01, 0x8C,
0x2C, 0x01, 0x0C, 0x35, 0x01, 0xCC, 0x3C, 0x01, 0x8C, 0x42, 0x01, 0x8C, 0x4A, 0x01, 0x8C, 0x56,
0x01, 0x4C, 0x63, 0x01, 0xCC, 0x70, 0x01, 0x4C, 0x7D, 0x01, 0x4C, 0x8B, 0x01, 0x8C, 0x97, 0x01,
0x0C, 0xA6, 0x01, 0x4C, 0xB4, 0x01, 0xCC, 0xC1, 0x01, 0x4C, 0xCE, 0x01, 0x0C, 0xDD, 0x01, 0x0C,
0xEC, 0x01, 0x8C, 0xF8, 0x01, 0x4C, 0x08, 0x02, 0xCC, 0x14, 0x02, 0x8C, 0x21, 0x02, 0x8C, 0x2E,
0x02, 0x8C, 0x3B, 0x02, 0x8C, 0x49, 0x02, 0x0C, 0x56, 0x02, 0x4C, 0x63, 0x02, 0x4C, 0x72, 0x02,
0x4C, 0x7F, 0x02, 0x4C, 0x8C, 0x02, 0x8C, 0x99, 0x02, 0xCC, 0xA6, 0x02, 0xCC, 0xB4, 0x02, 0x0C,
0xC2, 0x02, 0x4C, 0xD6, 0x02, 0x0C, 0xE7, 0x02, 0x4C, 0xFB, 0x02, 0x0C, 0x03, 0x03, 0xCC, 0x05,
0x03, 0x4C, 0x09, 0x03, 0x4C, 0x13, 0x03, 0x4C, 0x21, 0x03, 0xCC, 0x2B, 0x03, 0x0C, 0x39, 0x03,
0x0C, 0x43, 0x03, 0x0C, 0x52, 0x03, 0x8C, 0x5E, 0x03, 0x0C, 0x6C, 0x03, 0x4C, 0x7A, 0x03, 0xCC,
0x89, 0x03, 0x4C, 0x97, 0x03, 0x8C, 0xA6, 0x03, 0x0C, 0xB0, 0x03, 0x8C, 0xB9, 0x03, 0x4C, 0xC3,
0x03, 0xCC, 0xCF, 0x03, 0x0C, 0xDD, 0x03, 0x4C, 0xE6, 0x03, 0x0C, 0xF0, 0x03, 0x4C, 0xFD, 0x03,
0x4C, 0x07, 0x04, 0x4C, 0x11, 0x04, 0xCC, 0x1A, 0x04, 0xCC, 0x24, 0x04, 0x8C, 0x32, 0x04, 0x8C,
0x3C, 0x04, 0xCC, 0x4F, 0x04, 0x4C, 0x62, 0x04, 0xCC, 0x75, 0x04, 0x04, 0xFB, 0xE8, 0x11, 0x00,
0x42, 0x00, 0x07, 0x00, 0x80, 0x04, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00,
0x80, 0x2C, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00,
0x80, 0x2C, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x14, 0x08, 0x00,
0x80, 0x2C, 0x02, 0x00, 0x80, 0x3C, 0x10, 0x00, 0x06, 0x00, 0x8D, 0x80, 0xC3, 0x01, 0x80, 0xC3,
0x01, 0x80, 0xC3, 0x01, 0x80, 0xC2, 0x01, 0x40, 0x82, 0x2E, 0x00, 0x07, 0x00, 0x02, 0x04, 0x80,
0x00, 0x02, 0x0D, 0x80, 0x00, 0x02, 0x0D, 0x80, 0x00, 0x02, 0x0A, 0x97, 0x00, 0x0A, 0x0B, 0xF8,
0xFF, 0xBF, 0x50, 0x57, 0x17, 0x40, 0x43, 0x03, 0x80, 0x82, 0x02, 0xD4, 0xD6, 0x16, 0xFD, 0xFF,
0x2F, 0xC0, 0xD1, 0x01, 0x02, 0xD0, 0x83, 0x00, 0xE0, 0xA0, 0x00, 0x02, 0xA0, 0x10, 0x00, 0x81,
0x00, 0x24, 0x02, 0x00, 0x80, 0x34, 0x02, 0x00, 0x95, 0x78, 0x00, 0x80, 0xFF, 0x07, 0xD0, 0x56,
0x0F, 0xE0, 0x00, 0x1E, 0xF0, 0x00, 0x2D, 0xE0, 0x01, 0x00, 0xD0, 0x07, 0x00, 0x40, 0xBF, 0x02,
0x00, 0x95, 0xF4, 0x07, 0x00, 0x40, 0x1F, 0x10, 0x00, 0x2D, 0x74, 0x00, 0x2D, 0xB0, 0x00, 0x2D,
0xE0, 0x96, 0x0F, 0x80, 0xFF, 0x06, 0x00, 0x38, 0x02, 0x00, 0x80, 0x38, 0x0A, 0x00, 0x06, 0x00,
0x80, 0x50, 0x02, 0x00, 0x90, 0xFC, 0x03, 0x00, 0x0D, 0x0B, 0x01, 0x0A, 0x4A, 0x07, 0x0E, 0x8A,
0x02, 0x6D, 0xD7, 0x00, 0xA4, 0xB1, 0x02, 0x00, 0x80, 0x34, 0x02, 0x00, 0x80, 0x1C, 0x02, 0x00,
0x90, 0x8E, 0x2F, 0x00, 0xD7, 0x75, 0x80, 0xA2, 0xB0, 0xC0, 0xA1, 0xA0, 0x00, 0xE0, 0x70, 0x00,
0x80, 0x2F, 0x0F, 0x00, 0x07, 0x00, 0xAD, 0x15, 0x00, 0x80, 0xFF, 0x00, 0xD0, 0xD2, 0x02, 0xE0,
0xC1, 0x02, 0xE0, 0xC1, 0x02, 0xD0, 0xE2, 0x01, 0xC0, 0x7F, 0x00, 0x80, 0x0F, 0x00, 0xE0, 0x2E,
0x24, 0xB4, 0x78, 0x74, 0x3C, 0xF0, 0x39, 0x3C, 0xD0, 0x2F, 0x38, 0x40, 0x0F, 0xF4, 0xE5, 0x2F,
0xD0, 0xBF, 0x7D, 0x00, 0x04, 0x0D, 0x00, 0x07, 0x00, 0x80, 0x1D, 0x02, 0x00, 0x80, 0x1D, 0x02,
0x00, 0x80, 0x1D, 0x02, 0x00, 0x80, 0x1D, 0x02, 0x00, 0x80, 0x08, 0x2E, 0x00, 0x04, 0x00, 0x86,
0x40, 0x01, 0x00, 0xE0, 0x01, 0x00, 0x74, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x1D, 0x02,
0x00, 0x80, 0x0E, 0x02, 0x00, 0x95, 0x0B, 0x00, 0x40, 0x0B, 0x00, 0x40, 0x07, 0x00, 0x40, 0x07,
0x00, 0x80, 0x07, 0x00, 0x40, 0x07, 0x00, 0x40, 0x07, 0x00, 0x40, 0x0B, 0x02, 0x00, 0x80, 0x0B,
0x02, 0x00, 0x80, 0x0E, 0x02, 0x00, 0x80, 0x1D, 0x02, 0x00, 0x80, 0x38, 0x02, 0x00, 0x80, 0xB0,
0x02, 0x00, 0x81, 0xD0, 0x01, 0x02, 0x00, 0x80, 0x01, 0x03, 0x00, 0x84, 0x80, 0x01, 0x00, 0x40,
0x07, 0x02, 0x00, 0x80, 0x0E, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x78, 0x02, 0x00, 0x80,
0xB4, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xE0, 0x02, 0x00, 0x8C, 0xE0, 0x01, 0x00, 0xE0,
0x01, 0x00, 0xE0, 0x01, 0x00, 0xE0, 0x01, 0x00, 0xE0, 0x02, 0x00, 0x80, 0xE0, 0x02, 0x00, 0x80,
0xB0, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80, 0x38, 0x02, 0x00, 0x80, 0x1D, 0x02, 0x00, 0x85,
0x0B, 0x00, 0x80, 0x02, 0x00, 0x40, 0x02, 0x00, 0x07, 0x00, 0x80, 0x10, 0x02, 0x00, 0x80, 0x38,
0x02, 0x00, 0x8C, 0x34, 0x00, 0x10, 0x34, 0x10, 0xF4, 0x7A, 0x2E, 0x90, 0xFF, 0x1A, 0x00, 0xBC,
0x02, 0x00, 0x87, 0xDB, 0x01, 0x80, 0x87, 0x03, 0x80, 0x42, 0x07, 0x1E, 0x00, 0x10, 0x00, 0x80,
0x28, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x8C, 0x3C, 0x00, 0xA8, 0xBE,
0x2A, 0xFC, 0xFF, 0x3F, 0x50, 0x7D, 0x05, 0x00, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80,
0x3C, 0x02, 0x00, 0x80, 0x28, 0x13, 0x00, 0x2E, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02,
0x00, 0x80, 0x1E, 0x02, 0x00, 0x83, 0x0F, 0x00, 0x40, 0x07, 0x07, 0x00, 0x1E, 0x00, 0x85, 0xF0,
0xFF, 0x0B, 0x90, 0xAA, 0x06, 0x1E, 0x00, 0x2B, 0x00, 0x80, 0x24, 0x02, 0x00, 0x80, 0xBC, 0x02,
0x00, 0x80, 0x7C, 0x10, 0x00, 0x08, 0x00, 0x80, 0x04, 0x02, 0x00, 0x8E, 0x0B, 0x00, 0x40, 0x07,
0x00, 0x80, 0x03, 0x00, 0xC0, 0x02, 0x00, 0xD0, 0x01, 0x00, 0xA0, 0x02, 0x00, 0x80, 0x74, 0x02,
0x00, 0x80, 0x38, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x1D, 0x02, 0x00, 0x80, 0x0E, 0x02,
0x00, 0x8B, 0x0B, 0x00, 0x40, 0x03, 0x00, 0xC0, 0x02, 0x00, 0xD0, 0x01, 0x00, 0x40, 0x0B, 0x00,
0x07, 0x00, 0xAD, 0x55, 0x00, 0x80, 0xFF, 0x02, 0xE0, 0x42, 0x0B, 0xB0, 0x00, 0x1E, 0x74, 0x00,
0x1D, 0x78, 0x00, 0x2E, 0x78, 0xD0, 0x2F, 0x78, 0xB8, 0x2D, 0x78, 0x1E, 0x2D, 0xF8, 0x07, 0x2D,
0xB8, 0x00, 0x2D, 0x74, 0x00, 0x1D, 0xB0, 0x00, 0x0E, 0xE0, 0x96, 0x0B, 0x40, 0xFF, 0x02, 0x00,
0x14, 0x0D, 0x00, 0x0A, 0x00, 0x89, 0xB4, 0x00, 0x90, 0xBF, 0x00, 0xF0, 0xB6, 0x00, 0x10, 0xB4,
0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4,
0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4,
0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x10, 0x00, 0x07, 0x00, 0x98, 0x15, 0x00, 0xD0,
0xFF, 0x01, 0xB4, 0xD1, 0x07, 0x3C, 0x40, 0x0B, 0x2C, 0x00, 0x0B, 0x00, 0x40, 0x0B, 0x00, 0x80,
0x07, 0x00, 0xD0, 0x02, 0x00, 0xB4, 0x02, 0x00, 0x80, 0x3D, 0x02, 0x00, 0x8D, 0x0F, 0x00, 0xC0,
0x07, 0x00, 0xE0, 0x01, 0x00, 0xB8, 0x55, 0x15, 0xFC, 0xFF, 0x1F, 0x0F, 0x00, 0x07, 0x00, 0x9C,
0x15, 0x00, 0xD0, 0xFF, 0x01, 0xB4, 0xD1, 0x07, 0x38, 0x40, 0x0B, 0x14, 0x00, 0x0B, 0x00, 0x40,
0x0B, 0x00, 0xD0, 0x03, 0x40, 0xFF, 0x01, 0x00, 0xE9, 0x02, 0x00, 0x40, 0x0B, 0x02, 0x00, 0x8E,
0x0F, 0x28, 0x00, 0x0F, 0x3C, 0x40, 0x0B, 0xF4, 0xD5, 0x07, 0xD0, 0xBF, 0x01, 0x00, 0x04, 0x0D,
0x00, 0x07, 0x00, 0xAB, 0x40, 0x01, 0x00, 0xD0, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xF8, 0x03, 0x00,
0x9D, 0x03, 0x00, 0x8B, 0x03, 0x80, 0x83, 0x03, 0xD0, 0x81, 0x03, 0xB0, 0x80, 0x03, 0x78, 0x80,
0x03, 0xBC, 0xEA, 0x2B, 0xA9, 0xEA, 0x2B, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03,
0x0F, 0x00, 0x06, 0x00, 0x97, 0x40, 0x55, 0x05, 0xC0, 0xFF, 0x1F, 0xC0, 0xAA, 0x1A, 0xD0, 0x01,
0x00, 0xD0, 0x01, 0x00, 0xD0, 0x51, 0x00, 0xE0, 0xFF, 0x07, 0xE0, 0x96, 0x0F, 0x02, 0x00, 0x80,
0x1E, 0x02, 0x00, 0x80, 0x2D, 0x02, 0x00, 0x8E, 0x2C, 0x60, 0x00, 0x2C, 0xF0, 0x00, 0x1E, 0xD0,
0x97, 0x0F, 0x40, 0xFF, 0x02, 0x00, 0x10, 0x0D, 0x00, 0x07, 0x00, 0x80, 0x40, 0x02, 0x00, 0x88,
0xF9, 0x01, 0x80, 0x6F, 0x00, 0xD0, 0x02, 0x00, 0xF0, 0x02, 0x00, 0x9F, 0xB4, 0x14, 0x00, 0xB4,
0xFF, 0x02, 0xF8, 0x96, 0x0B, 0xB8, 0x00, 0x0F, 0x78, 0x00, 0x1E, 0x78, 0x00, 0x1D, 0x74, 0x00,
0x1E, 0xF0, 0x00, 0x0F, 0xD0, 0x96, 0x07, 0x40, 0xFF, 0x01, 0x00, 0x14, 0x0D, 0x00, 0x06, 0x00,
0x88, 0x54, 0x55, 0x05, 0xFC, 0xFF, 0x2F, 0x54, 0x55, 0x1E, 0x02, 0x00, 0x8E, 0x0E, 0x00, 0x40,
0x07, 0x00, 0x80, 0x03, 0x00, 0xC0, 0x02, 0x00, 0xE0, 0x01, 0x00, 0xB0, 0x02, 0x00, 0x80, 0x78,
0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x1D, 0x02, 0x00, 0x86, 0x0F, 0x00, 0x40, 0x07, 0x00,
0xC0, 0x03, 0x10, 0x00, 0x07, 0x00, 0xAD, 0x54, 0x00, 0x80, 0xFF, 0x07, 0xD0, 0x46, 0x0F, 0xE0,
0x00, 0x1E, 0xF0, 0x00, 0x1D, 0xE0, 0x00, 0x1E, 0xD0, 0x46, 0x0B, 0x40, 0xFF, 0x02, 0xD0, 0x9B,
0x0B, 0xF0, 0x00, 0x1E, 0xB4, 0x00, 0x2C, 0xB4, 0x00, 0x2C, 0xF0, 0x00, 0x2D, 0xE0, 0x96, 0x0F,
0x40, 0xFF, 0x02, 0x00, 0x10, 0x0D, 0x00, 0x07, 0x00, 0x9F, 0x15, 0x00, 0x80, 0xFF, 0x02, 0xE0,
0x92, 0x07, 0xB4, 0x00, 0x0F, 0x74, 0x00, 0x1E, 0x78, 0x00, 0x1D, 0x74, 0x00, 0x1D, 0xB4, 0x00,
0x1E, 0xE0, 0x96, 0x1F, 0x80, 0xBF, 0x1E, 0x00, 0x04, 0x0E, 0x02, 0x00, 0x88, 0x0B, 0x00, 0xD0,
0x03, 0x40, 0xFA, 0x01, 0x80, 0x2F, 0x10, 0x00, 0x10, 0x00, 0x80, 0x60, 0x02, 0x00, 0x80, 0xF8,
0x02, 0x00, 0x80, 0xF4, 0x14, 0x00, 0x80, 0x60, 0x02, 0x00, 0x80, 0xF8, 0x02, 0x00, 0x80, 0xF4,
0x10, 0x00, 0x10, 0x00, 0x80, 0x60, 0x02, 0x00, 0x80, 0xF8, 0x02, 0x00, 0x80, 0xF8, 0x17, 0x00,
0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80, 0x38, 0x02, 0x00,
0x80, 0x2C, 0x07, 0x00, 0x14, 0x00, 0x95, 0x04, 0x00, 0x90, 0x0F, 0x00, 0xF9, 0x06, 0xD0, 0x2F,
0x00, 0xF4, 0x01, 0x00, 0xE0, 0x0B, 0x00, 0x40, 0xBE, 0x01, 0x00, 0xE0, 0x0F, 0x02, 0x00, 0x80,
0x09, 0x15, 0x00, 0x15, 0x00, 0x88, 0x50, 0x55, 0x05, 0xF4, 0xFF, 0x1F, 0x50, 0x55, 0x05, 0x06,
0x00, 0x85, 0xF4, 0xFF, 0x1F, 0x50, 0x55, 0x15, 0x18, 0x00, 0x12, 0x00, 0x80, 0x14, 0x02, 0x00,
0x84, 0xF4, 0x02, 0x00, 0x90, 0x6F, 0x02, 0x00, 0x8E, 0xF8, 0x07, 0x00, 0x40, 0x1F, 0x00, 0xE4,
0x0B, 0x40, 0xBF, 0x01, 0xF4, 0x07, 0x00, 0x64, 0x17, 0x00, 0x07, 0x00, 0x8A, 0x55, 0x00, 0x80,
0xFF, 0x07, 0xE0, 0x96, 0x0F, 0xB0, 0x00, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x88, 0x0F,
0x00, 0x80, 0x0B, 0x00, 0xD0, 0x02, 0x00, 0xB4, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x2C,
0x08, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x10, 0x00, 0x07, 0x00, 0x89, 0x10, 0x00, 0x40,
0xFE, 0x06, 0xD0, 0x02, 0x0E, 0x70, 0x10, 0x02, 0x28, 0x97, 0xFD, 0x31, 0x1C, 0x8B, 0x71, 0x4C,
0x83, 0x61, 0x4D, 0xC2, 0x61, 0x8D, 0xC2, 0x70, 0x8D, 0xC2, 0x30, 0x4D, 0xFB, 0x29, 0x1C, 0x5A,
0x0B, 0x38, 0x02, 0x00, 0x85, 0xE0, 0x55, 0x01, 0x80, 0xFF, 0x01, 0x0F, 0x00, 0x07, 0x00, 0x80,
0x10, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x7D, 0x02, 0x00, 0x80, 0xBE, 0x02, 0x00, 0x80,
0xEE, 0x02, 0x00, 0x9C, 0xDB, 0x01, 0x40, 0xC7, 0x02, 0x80, 0x83, 0x03, 0xC0, 0x42, 0x07, 0xD0,
0x56, 0x0B, 0xE0, 0xFF, 0x0F, 0xB0, 0x55, 0x1E, 0x74, 0x00, 0x2C, 0x38, 0x00, 0x3C, 0x2C, 0x00,
0x78, 0x0F, 0x00, 0x06, 0x00, 0xAC, 0x50, 0x15, 0x00, 0xF4, 0xFF, 0x02, 0xB4, 0x95, 0x0F, 0xB4,
0x00, 0x1E, 0xB4, 0x00, 0x2D, 0xB4, 0x00, 0x1E, 0xB4, 0x90, 0x0B, 0xF4, 0xFF, 0x02, 0xB4, 0x95,
0x0F, 0xB4, 0x00, 0x2D, 0xB4, 0x00, 0x3C, 0xB4, 0x00, 0x3C, 0xB4, 0x00, 0x2E, 0xB4, 0xAA, 0x0F,
0xF4, 0xFF, 0x01, 0x0F, 0x00, 0x07, 0x00, 0x8E, 0x54, 0x00, 0x80, 0xFF, 0x07, 0xE0, 0x42, 0x0F,
0xB4, 0x00, 0x2D, 0x78, 0x00, 0x2C, 0x38, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02,
0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x90, 0x38, 0x00, 0x14, 0x78, 0x00, 0x2C,
0xB0, 0x00, 0x1E, 0xD0, 0x96, 0x0B, 0x40, 0xFF, 0x02, 0x00, 0x10, 0x0D, 0x00, 0x06, 0x00, 0xAB,
0x50, 0x05, 0x00, 0xF4, 0xBF, 0x01, 0xB4, 0xE5, 0x07, 0x74, 0x00, 0x0F, 0x74, 0x00, 0x2D, 0x74,
0x00, 0x3C, 0x74, 0x00, 0x38, 0x74, 0x00, 0x38, 0x74, 0x00, 0x38, 0x74, 0x00, 0x38, 0x74, 0x00,
0x2C, 0x74, 0x00, 0x1D, 0x74, 0x40, 0x0F, 0xB4, 0xE9, 0x03, 0xF4, 0x6F, 0x10, 0x00, 0x06, 0x00,
0x89, 0x50, 0x55, 0x05, 0xF4, 0xFF, 0x1F, 0xB4, 0x55, 0x05, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02,
0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x86, 0xF4, 0xFF, 0x0B, 0xB4, 0x55, 0x05,
0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x85,
0xB4, 0xAA, 0x1A, 0xF4, 0xFF, 0x2F, 0x0F, 0x00, 0x06, 0x00, 0x89, 0x50, 0x55, 0x05, 0xF0, 0xFF,
0x2F, 0xB0, 0x55, 0x15, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80,
0xB0, 0x02, 0x00, 0x86, 0xF0, 0xAA, 0x06, 0xF0, 0xAA, 0x06, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02,
0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x11,
0x00, 0x07, 0x00, 0x8E, 0x54, 0x00, 0x80, 0xFF, 0x06, 0xE0, 0x46, 0x0F, 0xB4, 0x00, 0x2D, 0x78,
0x00, 0x2C, 0x3C, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x96, 0x2C, 0xE0,
0x3F, 0x3C, 0x50, 0x3D, 0x38, 0x00, 0x3C, 0x78, 0x00, 0x3C, 0xF0, 0x00, 0x3C, 0xD0, 0x57, 0x2E,
0x40, 0xFF, 0x06, 0x00, 0x10, 0x0D, 0x00, 0x06, 0x00, 0xAC, 0x10, 0x00, 0x04, 0x38, 0x00, 0x2C,
0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x78, 0x00, 0x2D, 0xF8,
0xFF, 0x2F, 0x78, 0x55, 0x2D, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00,
0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x0F, 0x00, 0x06, 0x00, 0x8A, 0x50, 0x55, 0x05, 0xF4,
0xFF, 0x1F, 0x50, 0x7D, 0x05, 0x00, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02,
0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02,
0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x87, 0x3C, 0x00, 0xA4, 0xBE, 0x1A, 0xF4,
0xFF, 0x1F, 0x0F, 0x00, 0x08, 0x00, 0x80, 0x04, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E,
0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E,
0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x8E, 0x1E,
0x3C, 0x00, 0x0E, 0x78, 0x40, 0x0B, 0xF0, 0xE6, 0x07, 0x90, 0xBF, 0x01, 0x00, 0x04, 0x0D, 0x00,
0x06, 0x00, 0xAC, 0x10, 0x00, 0x14, 0xB4, 0x00, 0x2D, 0xB4, 0x40, 0x0F, 0xB4, 0xC0, 0x03, 0xB4,
0xF0, 0x01, 0xB4, 0x78, 0x00, 0xB4, 0x2D, 0x00, 0xB4, 0x2F, 0x00, 0xF4, 0x7B, 0x00, 0xF4, 0xF5,
0x00, 0xB4, 0xE0, 0x02, 0xB4, 0xC0, 0x07, 0xB4, 0x40, 0x0F, 0xB4, 0x00, 0x2E, 0xB4, 0x00, 0x7C,
0x0F, 0x00, 0x06, 0x00, 0x80, 0x10, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00,
0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00,
0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00,
0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x85, 0xF0, 0xAA, 0x1A, 0xF0, 0xFF, 0x2F, 0x0F,
0x00, 0x06, 0x00, 0xAC, 0x10, 0x00, 0x04, 0xF8, 0x00, 0x2E, 0xF8, 0x01, 0x2F, 0xF8, 0x42, 0x2F,
0xB8, 0x83, 0x2E, 0x78, 0xC7, 0x2D, 0x78, 0xEB, 0x2C, 0x38, 0xBE, 0x2C, 0x78, 0x7D, 0x2C, 0x78,
0x3C, 0x2C, 0x78, 0x28, 0x2C, 0x78, 0x00, 0x2C, 0x78, 0x00, 0x2C, 0x78, 0x00, 0x2C, 0x78, 0x00,
0x2C, 0x0F, 0x00, 0x06, 0x00, 0x97, 0x10, 0x00, 0x04, 0xB8, 0x00, 0x2D, 0xF8, 0x00, 0x2D, 0xF8,
0x02, 0x2D, 0xF8, 0x07, 0x2D, 0x78, 0x0B, 0x2D, 0x78, 0x1E, 0x2D, 0x78, 0x2C, 0x2D, 0x02, 0x78,
0x92, 0x2D, 0x78, 0xB0, 0x2D, 0x78, 0xE0, 0x2E, 0x78, 0xC0, 0x2F, 0x78, 0x80, 0x2F, 0x78, 0x00,
0x2F, 0x78, 0x00, 0x2D, 0x0F, 0x00, 0x07, 0x00, 0x98, 0x15, 0x00, 0x80, 0xFF, 0x02, 0xE0, 0x96,
0x0B, 0xB4, 0x00, 0x1E, 0x78, 0x00, 0x2D, 0x38, 0x00, 0x2C, 0x3C, 0x00, 0x3C, 0x2C, 0x00, 0x3C,
0x2C, 0x00, 0x02, 0x3C, 0x92, 0x00, 0x3C, 0x38, 0x00, 0x2C, 0x78, 0x00, 0x2D, 0xB0, 0x00, 0x0E,
0xD0, 0xD7, 0x07, 0x40, 0xFF, 0x01, 0x00, 0x14, 0x0D, 0x00, 0x06, 0x00, 0x9E, 0x50, 0x15, 0x00,
0xF0, 0xFF, 0x07, 0xB0, 0x55, 0x1F, 0xB0, 0x00, 0x3C, 0xB0, 0x00, 0x38, 0xB0, 0x00, 0x38, 0xB0,
0x00, 0x3C, 0xB0, 0x55, 0x1F, 0xF0, 0xFF, 0x07, 0xB0, 0x55, 0x00, 0xB0, 0x02, 0x00, 0x80, 0xB0,
0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x11, 0x00, 0x07, 0x00,
0xAE, 0x55, 0x00, 0x80, 0xFF, 0x02, 0xE0, 0x96, 0x0B, 0xB4, 0x00, 0x1E, 0x38, 0x00, 0x2C, 0x3C,
0x00, 0x3C, 0x2C, 0x00, 0x38, 0x2C, 0x00, 0x38, 0x2C, 0x00, 0x38, 0x2C, 0x00, 0x38, 0x3C, 0x00,
0x3C, 0x78, 0x00, 0x2D, 0xB4, 0x00, 0x1E, 0xE0, 0x96, 0x0B, 0x40, 0xFF, 0x07, 0x00, 0x44, 0x2F,
0x02, 0x00, 0x80, 0x38, 0x09, 0x00, 0x06, 0x00, 0xAC, 0x50, 0x15, 0x00, 0xF4, 0xFF, 0x02, 0xB4,
0x95, 0x0F, 0xB4, 0x00, 0x2D, 0xB4, 0x00, 0x2C, 0xB4, 0x00, 0x2C, 0xB4, 0x00, 0x1E, 0xB4, 0x95,
0x0B, 0xF4, 0xFF, 0x02, 0xB4, 0xE5, 0x01, 0xB4, 0xC0, 0x03, 0xB4, 0x40, 0x07, 0xB4, 0x00, 0x0F,
0xB4, 0x00, 0x1E, 0xB4, 0x00, 0x3C, 0x0F, 0x00, 0x07, 0x00, 0x8E, 0x54, 0x00, 0x80, 0xFF, 0x07,
0xE0, 0x46, 0x1F, 0xB4, 0x00, 0x2D, 0x74, 0x00, 0x2C, 0xB4, 0x02, 0x00, 0x8B, 0xE0, 0x07, 0x00,
0x80, 0xBF, 0x01, 0x00, 0xF4, 0x0B, 0x00, 0x40, 0x1F, 0x02, 0x00, 0x8E, 0x3C, 0x38, 0x00, 0x3C,
0xB4, 0x00, 0x3D, 0xE0, 0x96, 0x1F, 0x40, 0xFF, 0x06, 0x00, 0x10, 0x0D, 0x00, 0x06, 0x00, 0x8A,
0x54, 0x55, 0x15, 0xFD, 0xFF, 0x7F, 0x54, 0x7D, 0x15, 0x00, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02,
0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02,
0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x02,
0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x3C, 0x10, 0x00, 0x06, 0x00, 0xAE, 0x10, 0x00, 0x04, 0x38,
0x00, 0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00,
0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2D, 0x78, 0x00, 0x2D,
0xB4, 0x00, 0x1E, 0xE0, 0x96, 0x0B, 0x40, 0xFF, 0x01, 0x00, 0x14, 0x0D, 0x00, 0x06, 0x00, 0xA2,
0x04, 0x00, 0x10, 0x3C, 0x00, 0x3C, 0x38, 0x00, 0x2D, 0x74, 0x00, 0x1D, 0xB0, 0x00, 0x0E, 0xE0,
0x00, 0x0B, 0xE0, 0x41, 0x07, 0xD0, 0x82, 0x03, 0xC0, 0xC3, 0x02, 0x80, 0xD7, 0x01, 0x40, 0xE7,
0x01, 0x00, 0xFB, 0x02, 0x00, 0x80, 0xBE, 0x02, 0x00, 0x80, 0x7D, 0x02, 0x00, 0x80, 0x3C, 0x10,
0x00, 0x06, 0x00, 0x80, 0x04, 0x02, 0x10, 0x8A, 0x2D, 0x38, 0x74, 0x2C, 0x7C, 0x74, 0x2C, 0x7C,
0x74, 0x28, 0xBD, 0x02, 0x38, 0x80, 0xAD, 0x02, 0x38, 0x99, 0xDA, 0x38, 0x34, 0xDB, 0x2C, 0x74,
0xC7, 0x2D, 0xB4, 0xC7, 0x1E, 0xB0, 0x83, 0x1E, 0xF0, 0x83, 0x1F, 0xF0, 0x42, 0x0F, 0xE0, 0x42,
0x0F, 0xE0, 0x01, 0x0F, 0x0F, 0x00, 0x06, 0x00, 0x93, 0x14, 0x00, 0x14, 0x78, 0x00, 0x3D, 0xF0,
0x00, 0x1E, 0xD0, 0x42, 0x0B, 0xC0, 0xC3, 0x03, 0x40, 0xDB, 0x02, 0x00, 0xFE, 0x02, 0x00, 0x80,
0x7C, 0x02, 0x00, 0x80, 0xBD, 0x02, 0x00, 0x90, 0xEF, 0x01, 0x40, 0xD7, 0x02, 0xC0, 0x83, 0x07,
0xE0, 0x01, 0x0F, 0xB4, 0x00, 0x2E, 0x7C, 0x00, 0x3C, 0x0F, 0x00, 0x06, 0x00, 0x96, 0x04, 0x00,
0x14, 0x3C, 0x00, 0x2D, 0x78, 0x00, 0x1E, 0xF0, 0x00, 0x0F, 0xE0, 0x81, 0x07, 0xC0, 0xC2, 0x03,
0x80, 0xD7, 0x01, 0x00, 0xFB, 0x02, 0x00, 0x80, 0x7E, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80,
0x2C, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80, 0x2C, 0x02, 0x00, 0x80,
0x2C, 0x10, 0x00, 0x06, 0x00, 0x93, 0x54, 0x55, 0x05, 0xF8, 0xFF, 0x1F, 0x54, 0x55, 0x0F, 0x00,
0x80, 0x07, 0x00, 0xD0, 0x02, 0x00, 0xE0, 0x01, 0x00, 0xB4, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00,
0x8B, 0x1E, 0x00, 0x40, 0x0B, 0x00, 0xC0, 0x03, 0x00, 0xE0, 0x01, 0x00, 0xB4, 0x02, 0x00, 0x85,
0xB8, 0xAA, 0x1A, 0xFC, 0xFF, 0x2F, 0x0F, 0x00, 0x81, 0x00, 0x55, 0x02, 0x00, 0x80, 0xFF, 0x02,
0x00, 0x80, 0x5F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02,
0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02,
0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02,
0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02,
0x00, 0x80, 0x5F, 0x02, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x06, 0x00, 0x80, 0x40, 0x02, 0x00, 0x8A,
0xD0, 0x01, 0x00, 0xC0, 0x02, 0x00, 0x80, 0x03, 0x00, 0x40, 0x07, 0x02, 0x00, 0x80, 0x0B, 0x02,
0x00, 0x80, 0x0E, 0x02, 0x00, 0x80, 0x1D, 0x02, 0x00, 0x80, 0x38, 0x02, 0x00, 0x80, 0x74, 0x02,
0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xE0, 0x02, 0x00, 0x87, 0xD0, 0x01, 0x00, 0xC0, 0x02, 0x00,
0x40, 0x07, 0x02, 0x00, 0x80, 0x0B, 0x02, 0x00, 0x80, 0x05, 0x09, 0x00, 0x81, 0x00, 0x55, 0x02,
0x00, 0x80, 0xBF, 0x02, 0x00, 0x80, 0xB5, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02,
0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02,
0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02,
0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02,
0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB5, 0x02, 0x00, 0x80, 0xBF, 0x07, 0x00, 0x0A, 0x00, 0x80,
0x3C, 0x02, 0x00, 0x80, 0x7D, 0x02, 0x00, 0x80, 0xBE, 0x02, 0x00, 0x8D, 0xEB, 0x00, 0x80, 0xC3,
0x02, 0xC0, 0x82, 0x03, 0xD0, 0x41, 0x07, 0x50, 0x00, 0x05, 0x21, 0x00, 0x33, 0x00, 0x85, 0xF4,
0xFF, 0x1F, 0x54, 0x55, 0x15, 0x09, 0x00, 0x07, 0x00, 0x80, 0x15, 0x02, 0x00, 0x80, 0x3C, 0x02,
0x00, 0x80, 0xB4, 0x34, 0x00, 0x12, 0x00, 0xA2, 0x40, 0xAA, 0x01, 0xD0, 0xEB, 0x07, 0xF0, 0x40,
0x0F, 0x50, 0x00, 0x0E, 0x00, 0x55, 0x0E, 0xD0, 0xFF, 0x0F, 0xF0, 0x01, 0x0E, 0x74, 0x00, 0x0E,
0x74, 0x00, 0x0F, 0xF0, 0xE6, 0x1F, 0xD0, 0xBF, 0x1E, 0x00, 0x04, 0x0D, 0x00, 0x06, 0x00, 0x80,
0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0xA2,
0xB4, 0xA9, 0x01, 0xF4, 0xEF, 0x07, 0xF4, 0x41, 0x0F, 0xB4, 0x00, 0x1E, 0xB4, 0x00, 0x2D, 0xB4,
0x00, 0x2D, 0xB4, 0x00, 0x2D, 0xB4, 0x00, 0x1D, 0xB4, 0x00, 0x1E, 0xF4, 0x96, 0x0B, 0x74, 0xFE,
0x02, 0x00, 0x10, 0x0D, 0x00, 0x13, 0x00, 0x8B, 0xA9, 0x01, 0xD0, 0xEB, 0x07, 0xF0, 0x01, 0x0F,
0xB4, 0x00, 0x1D, 0x78, 0x02, 0x00, 0x80, 0x78, 0x02, 0x00, 0x80, 0x78, 0x02, 0x00, 0x8D, 0x74,
0x00, 0x04, 0xF0, 0x00, 0x1D, 0xD0, 0x96, 0x0B, 0x40, 0xFF, 0x02, 0x00, 0x10, 0x0D, 0x00, 0x08,
0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0xA3, 0x1E, 0x40,
0x6A, 0x1E, 0xD0, 0xEF, 0x1F, 0xF0, 0x41, 0x1F, 0xB4, 0x00, 0x1E, 0x78, 0x00, 0x1E, 0x78, 0x00,
0x1E, 0x78, 0x00, 0x1E, 0x74, 0x00, 0x1E, 0xF0, 0x00, 0x1E, 0xE0, 0x96, 0x1F, 0x80, 0xBF, 0x1E,
0x00, 0x04, 0x0D, 0x00, 0x13, 0x00, 0x94, 0xA9, 0x01, 0xC0, 0xEB, 0x07, 0xE0, 0x01, 0x0F, 0xB4,
0x00, 0x1D, 0x78, 0x55, 0x2D, 0xF8, 0xFF, 0x2F, 0x78, 0x55, 0x05, 0x78, 0x02, 0x00, 0x8A, 0xF0,
0x00, 0x04, 0xD0, 0x57, 0x1F, 0x40, 0xFF, 0x06, 0x00, 0x10, 0x0D, 0x00, 0x04, 0x00, 0x89, 0x40,
0x15, 0x00, 0xF4, 0x3F, 0x00, 0x7C, 0x10, 0x00, 0x1D, 0x02, 0x00, 0x89, 0x1E, 0x00, 0xA4, 0xAE,
0x0A, 0xA4, 0xBF, 0x1A, 0x00, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00,
0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00,
0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x10, 0x00, 0x12, 0x00, 0xAC, 0x40, 0x6A, 0x09, 0xD0, 0xEF,
0x1E, 0xF0, 0x41, 0x1F, 0xB4, 0x00, 0x1E, 0x78, 0x00, 0x1E, 0x78, 0x00, 0x1E, 0x78, 0x00, 0x1E,
0x74, 0x00, 0x1E, 0xF0, 0x00, 0x1E, 0xE0, 0x96, 0x1F, 0x80, 0xBF, 0x1E, 0x00, 0x04, 0x1E, 0x10,
0x00, 0x0F, 0xF0, 0xD6, 0x07, 0x80, 0xFF, 0x01, 0x03, 0x00, 0x06, 0x00, 0x80, 0xB4, 0x02, 0x00,
0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0xA0, 0xB4, 0xA8, 0x01,
0xB4, 0xEF, 0x0B, 0xF4, 0x01, 0x0F, 0xB4, 0x00, 0x1D, 0xB4, 0x00, 0x1D, 0xB4, 0x00, 0x1D, 0xB4,
0x00, 0x1D, 0xB4, 0x00, 0x1D, 0xB4, 0x00, 0x1D, 0xB4, 0x00, 0x1D, 0xB4, 0x00, 0x1D, 0x0F, 0x00,
0x07, 0x00, 0x80, 0x10, 0x02, 0x00, 0x80, 0x78, 0x02, 0x00, 0x80, 0x64, 0x04, 0x00, 0x84, 0xA0,
0x6A, 0x00, 0xF0, 0x7F, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80, 0x74,
0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x87, 0x74,
0x00, 0xA0, 0xBA, 0x1A, 0xF0, 0xFF, 0x2F, 0x0F, 0x00, 0x07, 0x00, 0x80, 0x40, 0x02, 0x00, 0x83,
0xE0, 0x01, 0x00, 0x90, 0x04, 0x00, 0xAF, 0x80, 0xAA, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xE0, 0x01,
0x00, 0xE0, 0x01, 0x00, 0xE0, 0x01, 0x00, 0xE0, 0x01, 0x00, 0xE0, 0x01, 0x00, 0xE0, 0x01, 0x00,
0xE0, 0x01, 0x00, 0xE0, 0x01, 0x00, 0xE0, 0x01, 0x00, 0xE0, 0x01, 0x00, 0xE0, 0x00, 0x50, 0xB9,
0x00, 0xF0, 0x2F, 0x00, 0x40, 0x01, 0x00, 0x06, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02,
0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0xA0, 0xB4, 0x00, 0x0A, 0xB4, 0x80, 0x07,
0xB4, 0xE0, 0x01, 0xB4, 0x78, 0x00, 0xB4, 0x1E, 0x00, 0xF4, 0x2F, 0x00, 0xF4, 0x79, 0x00, 0xB4,
0xF0, 0x01, 0xB4, 0xD0, 0x03, 0xB4, 0x40, 0x0B, 0xB4, 0x00, 0x2E, 0x0F, 0x00, 0x06, 0x00, 0x84,
0xF0, 0x7F, 0x00, 0xA0, 0x7A, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80,
0x74, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80,
0x74, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x80, 0x74, 0x02, 0x00, 0x87,
0x74, 0x00, 0xA0, 0xBA, 0x1A, 0xF0, 0xFF, 0x2F, 0x0F, 0x00, 0x12, 0x00, 0xA0, 0x58, 0x4A, 0x0A,
0xFC, 0xFF, 0x2E, 0x2C, 0x3C, 0x38, 0x2C, 0x3C, 0x38, 0x2C, 0x3C, 0x38, 0x2C, 0x3C, 0x38, 0x2C,
0x3C, 0x38, 0x2C, 0x3C, 0x38, 0x2C, 0x3C, 0x38, 0x2C, 0x3C, 0x38, 0x2C, 0x3C, 0x38, 0x0F, 0x00,
0x12, 0x00, 0xA0, 0x64, 0xA8, 0x01, 0xB4, 0xEF, 0x0B, 0xF4, 0x01, 0x0F, 0xB4, 0x00, 0x1D, 0xB4,
0x00, 0x1D, 0xB4, 0x00, 0x1D, 0xB4, 0x00, 0x1D, 0xB4, 0x00, 0x1D, 0xB4, 0x00, 0x1D, 0xB4, 0x00,
0x1D, 0xB4, 0x00, 0x1D, 0x0F, 0x00, 0x13, 0x00, 0xA1, 0xAA, 0x00, 0xD0, 0xEB, 0x07, 0xF0, 0x41,
0x0F, 0x74, 0x00, 0x1D, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x38, 0x00, 0x2C, 0x78, 0x00, 0x2D,
0xB4, 0x00, 0x1E, 0xE0, 0x96, 0x0B, 0x80, 0xFF, 0x02, 0x00, 0x14, 0x0D, 0x00, 0x12, 0x00, 0xA4,
0x64, 0xA9, 0x01, 0xB4, 0xFB, 0x07, 0xF4, 0x41, 0x0F, 0xB4, 0x00, 0x1E, 0xB4, 0x00, 0x2D, 0xB4,
0x00, 0x2D, 0xB4, 0x00, 0x2D, 0xB4, 0x00, 0x1D, 0xB4, 0x00, 0x0F, 0xF4, 0x96, 0x0B, 0xB4, 0xFE,
0x02, 0xB4, 0x10, 0x00, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x80, 0xB4, 0x05, 0x00, 0x12,
0x00, 0xA3, 0x40, 0x6A, 0x09, 0xD0, 0xEB, 0x1F, 0xF0, 0x01, 0x1F, 0xB4, 0x00, 0x1E, 0x78, 0x00,
0x1E, 0x78, 0x00, 0x1E, 0x78, 0x00, 0x1E, 0x74, 0x00, 0x1E, 0xF0, 0x00, 0x1E, 0xE0, 0x96, 0x1F,
0x80, 0xBF, 0x1E, 0x00, 0x04, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00, 0x80, 0x1E, 0x02, 0x00,
0x80, 0x1E, 0x03, 0x00, 0x12, 0x00, 0x9F, 0x40, 0x92, 0x1A, 0x80, 0xF7, 0x1F, 0x80, 0x1F, 0x00,
0x80, 0x07, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80,
0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x10, 0x00, 0x13, 0x00, 0xA1, 0xA9, 0x01, 0xD0, 0xEB,
0x0B, 0xE0, 0x01, 0x1E, 0xF0, 0x00, 0x19, 0xE0, 0x06, 0x00, 0x80, 0xBF, 0x01, 0x00, 0xA4, 0x0F,
0x10, 0x00, 0x1E, 0xB4, 0x00, 0x1D, 0xE0, 0x56, 0x0F, 0x80, 0xFF, 0x06, 0x00, 0x10, 0x0D, 0x00,
0x0D, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x89, 0x0F, 0x00, 0xA4, 0xAF, 0x0A, 0xA8, 0xAF, 0x0A, 0x00,
0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80,
0x0F, 0x02, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x80, 0x0E, 0x02, 0x00, 0x86, 0x6D, 0x09, 0x00, 0xF8,
0x1F, 0x00, 0x40, 0x0D, 0x00, 0x12, 0x00, 0xA2, 0x60, 0x00, 0x19, 0xB4, 0x00, 0x1E, 0xB4, 0x00,
0x1E, 0xB4, 0x00, 0x1E, 0xB4, 0x00, 0x1E, 0xB4, 0x00, 0x1E, 0xB4, 0x00, 0x1E, 0xB4, 0x00, 0x1E,
0xF0, 0x00, 0x1E, 0xE0, 0x96, 0x1F, 0x80, 0xBF, 0x1D, 0x00, 0x04, 0x0D, 0x00, 0x12, 0x00, 0x96,
0x28, 0x00, 0x18, 0x78, 0x00, 0x2D, 0xB4, 0x00, 0x0E, 0xE0, 0x00, 0x0B, 0xD0, 0x41, 0x07, 0xC0,
0x82, 0x03, 0x80, 0xC3, 0x02, 0x00, 0xDB, 0x02, 0x00, 0x80, 0xBE, 0x02, 0x00, 0x80, 0x7D, 0x02,
0x00, 0x80, 0x3C, 0x10, 0x00, 0x12, 0x00, 0xA0, 0x09, 0x14, 0x60, 0x1D, 0x38, 0x70, 0x1C, 0x3C,
0x74, 0x2C, 0x7D, 0x38, 0x28, 0xAA, 0x28, 0x34, 0xDA, 0x2C, 0x74, 0xD7, 0x1D, 0xB0, 0xC3, 0x0E,
0xE0, 0x82, 0x0F, 0xE0, 0x42, 0x0B, 0xD0, 0x41, 0x07, 0x0F, 0x00, 0x12, 0x00, 0x8D, 0x64, 0x00,
0x19, 0xF0, 0x00, 0x1F, 0xD0, 0x82, 0x07, 0x80, 0xD7, 0x02, 0x00, 0xFE, 0x02, 0x00, 0x80, 0x7C,
0x02, 0x00, 0x8D, 0xBE, 0x00, 0x40, 0xEB, 0x01, 0xC0, 0x83, 0x07, 0xE0, 0x01, 0x0F, 0xB8, 0x00,
0x2D, 0x0F, 0x00, 0x12, 0x00, 0x99, 0x18, 0x00, 0x24, 0x3C, 0x00, 0x2C, 0xB4, 0x00, 0x1E, 0xF0,
0x00, 0x0F, 0xD0, 0x41, 0x0B, 0xC0, 0x83, 0x03, 0x80, 0xC7, 0x02, 0x00, 0xEB, 0x01, 0x00, 0xBE,
0x02, 0x00, 0x80, 0x7D, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x1D, 0x02, 0x00, 0x88, 0x0F,
0x00, 0x90, 0x07, 0x00, 0xF4, 0x02, 0x00, 0x10, 0x02, 0x00, 0x12, 0x00, 0x8D, 0xA4, 0xAA, 0x0A,
0xF4, 0xFF, 0x1F, 0x00, 0x80, 0x0B, 0x00, 0xD0, 0x02, 0x00, 0xF4, 0x02, 0x00, 0x80, 0x7C, 0x02,
0x00, 0x8D, 0x1E, 0x00, 0x80, 0x0B, 0x00, 0xD0, 0x02, 0x00, 0xF4, 0x56, 0x15, 0xF4, 0xFF, 0x2F,
0x0F, 0x00, 0x05, 0x00, 0x85, 0x05, 0x00, 0xC0, 0x07, 0x00, 0xE0, 0x02, 0x00, 0x80, 0xB0, 0x02,
0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB4, 0x02,
0x00, 0x86, 0x78, 0x00, 0x80, 0x1F, 0x00, 0x80, 0x1F, 0x02, 0x00, 0x80, 0x78, 0x02, 0x00, 0x80,
0xB4, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80, 0xB0, 0x02, 0x00, 0x80,
0xF0, 0x02, 0x00, 0x84, 0xE0, 0x01, 0x00, 0x80, 0x07, 0x02, 0x00, 0x80, 0x05, 0x03, 0x00, 0x0A,
0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02,
0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02,
0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02,
0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x02,
0x00, 0x80, 0x28, 0x02, 0x00, 0x80, 0x28, 0x04, 0x00, 0x03, 0x00, 0x84, 0x40, 0x01, 0x00, 0x40,
0x0B, 0x02, 0x00, 0x80, 0x2D, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x80, 0x38, 0x02, 0x00, 0x80,
0x38, 0x02, 0x00, 0x80, 0x38, 0x02, 0x00, 0x80, 0x38, 0x02, 0x00, 0x80, 0xB4, 0x02, 0x00, 0x86,
0xD0, 0x0B, 0x00, 0xD0, 0x0B, 0x00, 0xB4, 0x02, 0x00, 0x80, 0x38, 0x02, 0x00, 0x80, 0x38, 0x02,
0x00, 0x80, 0x38, 0x02, 0x00, 0x80, 0x38, 0x02, 0x00, 0x80, 0x3C, 0x02, 0x00, 0x86, 0x1D, 0x00,
0x40, 0x0B, 0x00, 0x40, 0x01, 0x04, 0x00, 0x1B, 0x00, 0x8B, 0xA0, 0x06, 0x10, 0xBC, 0x1F, 0x70,
0x0D, 0xB8, 0x3E, 0x05, 0xD0, 0x1F, 0x1B, 0x00,
const uint8_t font_robotomono20[2396] = {
0x00, 0xFF, 0x14, 0x00, 0x00, 0x51, 0x46, 0x46, 0x01, 0x5C, 0x09, 0x00, 0x00, 0xA3, 0xF6, 0xFF,
0xFF, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x01, 0xFE, 0x1D, 0x01, 0x00, 0x05, 0x00,
0x00, 0x85, 0x00, 0x00, 0x06, 0x04, 0x00, 0x4D, 0x06, 0x00, 0x0B, 0x0D, 0x00, 0x4F, 0x14, 0x00,
0x4D, 0x1C, 0x00, 0x43, 0x23, 0x00, 0xC7, 0x24, 0x00, 0x07, 0x2A, 0x00, 0x89, 0x2F, 0x00, 0x4B,
0x33, 0x00, 0x04, 0x38, 0x00, 0xC6, 0x39, 0x00, 0x85, 0x3B, 0x00, 0x48, 0x3D, 0x00, 0xCB, 0x42,
0x00, 0xCB, 0x48, 0x00, 0xCB, 0x4E, 0x00, 0x0B, 0x55, 0x00, 0x0B, 0x5B, 0x00, 0x0B, 0x61, 0x00,
0x0B, 0x67, 0x00, 0x0B, 0x6D, 0x00, 0x0B, 0x73, 0x00, 0x0B, 0x79, 0x00, 0x05, 0x7F, 0x00, 0xC4,
0x81, 0x00, 0x8A, 0x84, 0x00, 0xCB, 0x88, 0x00, 0x4A, 0x8C, 0x00, 0x49, 0x90, 0x00, 0xD2, 0x95,
0x00, 0x0D, 0xA1, 0x00, 0x0C, 0xA8, 0x00, 0xCD, 0xAE, 0x00, 0x0D, 0xB6, 0x00, 0xCB, 0xBC, 0x00,
0x0B, 0xC3, 0x00, 0x0E, 0xC9, 0x00, 0x8E, 0xD0, 0x00, 0x05, 0xD8, 0x00, 0x8B, 0xDB, 0x00, 0x4D,
0xE1, 0x00, 0x8B, 0xE8, 0x00, 0xD1, 0xEE, 0x00, 0x8E, 0xF7, 0x00, 0x0E, 0xFF, 0x00, 0xCD, 0x06,
0x01, 0x8E, 0x0D, 0x01, 0xCC, 0x15, 0x01, 0x8C, 0x1C, 0x01, 0x0C, 0x23, 0x01, 0x8D, 0x29, 0x01,
0x8D, 0x30, 0x01, 0x92, 0x37, 0x01, 0xCD, 0x40, 0x01, 0xCC, 0x47, 0x01, 0x4C, 0x4E, 0x01, 0x06,
0x55, 0x01, 0x89, 0x59, 0x01, 0x45, 0x5F, 0x01, 0x08, 0x63, 0x01, 0x09, 0x66, 0x01, 0xC6, 0x67,
0x01, 0x8B, 0x69, 0x01, 0xCB, 0x6E, 0x01, 0x4A, 0x75, 0x01, 0x0B, 0x7A, 0x01, 0x8B, 0x80, 0x01,
0x87, 0x85, 0x01, 0x0B, 0x8A, 0x01, 0x8B, 0x90, 0x01, 0x45, 0x97, 0x01, 0xC5, 0x9A, 0x01, 0x8B,
0x9E, 0x01, 0x45, 0xA5, 0x01, 0xD2, 0xA8, 0x01, 0x4B, 0xB0, 0x01, 0x8B, 0xB5, 0x01, 0x8B, 0xBA,
0x01, 0xCB, 0xC0, 0x01, 0x47, 0xC7, 0x01, 0x0A, 0xCB, 0x01, 0xC7, 0xCF, 0x01, 0x4B, 0xD4, 0x01,
0x8A, 0xD9, 0x01, 0x4F, 0xDE, 0x01, 0x0A, 0xE5, 0x01, 0x0A, 0xEA, 0x01, 0x0A, 0xF0, 0x01, 0x07,
0xF5, 0x01, 0xC5, 0xFA, 0x01, 0x87, 0xFE, 0x01, 0x0E, 0x04, 0x02, 0x04, 0xFB, 0x1C, 0x08, 0x00,
0x0E, 0x00, 0x02, 0x00, 0x88, 0xC6, 0x08, 0x21, 0x84, 0x10, 0x42, 0x00, 0x60, 0x04, 0x03, 0x00,
0x85, 0x00, 0x60, 0x59, 0x96, 0x25, 0x01, 0x0B, 0x00, 0x05, 0x00, 0x95, 0x30, 0x03, 0x22, 0x40,
0x04, 0xFF, 0x83, 0x19, 0x30, 0x03, 0x22, 0x40, 0x04, 0xFF, 0x83, 0x19, 0x30, 0x03, 0x66, 0x40,
0x04, 0x88, 0x09, 0x00, 0x02, 0x00, 0x97, 0x03, 0x18, 0xE0, 0xC1, 0x1F, 0x86, 0x11, 0x8C, 0x41,
0x1C, 0xC0, 0x03, 0x78, 0x00, 0x07, 0x30, 0x83, 0x19, 0x8C, 0x3F, 0xF8, 0x00, 0x01, 0x08, 0x05,
0x00, 0x05, 0x00, 0x9A, 0x80, 0x03, 0x60, 0x02, 0x10, 0x23, 0x88, 0x19, 0xC4, 0x04, 0x26, 0x01,
0xDE, 0x00, 0xA0, 0x03, 0x68, 0x02, 0x16, 0x03, 0x89, 0x41, 0xC4, 0x20, 0x26, 0x00, 0x0E, 0x0A,
0x00, 0x05, 0x00, 0x96, 0x78, 0x80, 0x1F, 0x18, 0x03, 0x63, 0x60, 0x0C, 0xF8, 0x00, 0x07, 0xF0,
0x01, 0x67, 0x62, 0x5C, 0x0C, 0x8F, 0xC1, 0xE1, 0x3F, 0xF8, 0x0C, 0x08, 0x00, 0x82, 0x80, 0x24,
0x09, 0x06, 0x00, 0x93, 0x00, 0x10, 0x0C, 0x82, 0x41, 0x30, 0x18, 0x04, 0x83, 0xC1, 0x60, 0x30,
0x10, 0x18, 0x0C, 0x04, 0x06, 0x02, 0x03, 0x01, 0x80, 0x00, 0x02, 0x80, 0x8E, 0xC0, 0x40, 0x60,
0x30, 0x18, 0x08, 0x04, 0x06, 0x81, 0x60, 0x30, 0x18, 0x04, 0x83, 0x20, 0x02, 0x00, 0x03, 0x00,
0x89, 0x80, 0x00, 0x41, 0x92, 0x3F, 0x1C, 0x3C, 0xC8, 0x10, 0x01, 0x0C, 0x00, 0x07, 0x00, 0x8D,
0x30, 0x80, 0x01, 0x0C, 0x60, 0xF0, 0xBF, 0xFF, 0xC0, 0x00, 0x06, 0x30, 0x80, 0x01, 0x0A, 0x00,
0x07, 0x00, 0x83, 0x60, 0x66, 0x22, 0x00, 0x07, 0x00, 0x81, 0xF0, 0x01, 0x08, 0x00, 0x09, 0x00,
0x81, 0x60, 0x04, 0x03, 0x00, 0x03, 0x00, 0x02, 0x40, 0x82, 0x60, 0x20, 0x30, 0x02, 0x10, 0x81,
0x18, 0x08, 0x02, 0x0C, 0x83, 0x04, 0x06, 0x02, 0x03, 0x04, 0x00, 0x04, 0x00, 0x92, 0xF0, 0xC1,
0x1F, 0x86, 0x19, 0xCC, 0x60, 0x06, 0x33, 0x98, 0xC1, 0x0C, 0x66, 0x30, 0x83, 0x31, 0x8C, 0x3F,
0xF8, 0x08, 0x00, 0x04, 0x00, 0x02, 0x80, 0x90, 0x07, 0x3E, 0x80, 0x01, 0x0C, 0x60, 0x00, 0x03,
0x18, 0xC0, 0x00, 0x06, 0x30, 0x80, 0x01, 0x0C, 0x60, 0x08, 0x00, 0x04, 0x00, 0x93, 0xF0, 0xC1,
0x1F, 0x83, 0x19, 0x0C, 0x60, 0x00, 0x01, 0x0C, 0x30, 0xC0, 0x00, 0x03, 0x0C, 0x30, 0xC0, 0x01,
0xFE, 0x07, 0x07, 0x00, 0x04, 0x00, 0x92, 0xF0, 0xC1, 0x1F, 0x83, 0x19, 0x0C, 0x60, 0x80, 0x81,
0x07, 0x78, 0x00, 0x06, 0x30, 0x83, 0x19, 0x8C, 0x3F, 0xF8, 0x08, 0x00, 0x05, 0x00, 0x92, 0x03,
0x1C, 0xF0, 0x80, 0x06, 0x36, 0x98, 0x61, 0x0C, 0x63, 0x0C, 0xE3, 0x7F, 0xC0, 0x00, 0x06, 0x30,
0x80, 0x01, 0x07, 0x00, 0x04, 0x00, 0x92, 0xF0, 0x87, 0x3F, 0x06, 0x30, 0x80, 0x01, 0xFC, 0xE0,
0x0F, 0xC0, 0x00, 0x06, 0x20, 0x82, 0x31, 0x8C, 0x3F, 0xF0, 0x08, 0x00, 0x04, 0x00, 0x92, 0xC0,
0x01, 0x0F, 0x0C, 0x30, 0x80, 0x01, 0xF4, 0xF0, 0x8F, 0xC3, 0x0C, 0x66, 0x30, 0x82, 0x31, 0x0C,
0x3F, 0xF0, 0x08, 0x00, 0x04, 0x00, 0x92, 0xFC, 0x07, 0x30, 0x80, 0x01, 0x04, 0x30, 0x80, 0x00,
0x06, 0x10, 0xC0, 0x00, 0x06, 0x18, 0xC0, 0x00, 0x03, 0x18, 0x08, 0x00, 0x04, 0x00, 0x92, 0xF0,
0xC1, 0x1F, 0x86, 0x19, 0x8C, 0x60, 0x8C, 0xC1, 0x07, 0x7F, 0x08, 0x66, 0x30, 0x83, 0x19, 0x8C,
0x3F, 0xF8, 0x08, 0x00, 0x04, 0x00, 0x92, 0xF0, 0xC0, 0x1F, 0xC3, 0x18, 0xCC, 0x60, 0x06, 0x33,
0x18, 0xFF, 0xF0, 0x06, 0x30, 0xC0, 0x00, 0x07, 0x1F, 0x38, 0x08, 0x00, 0x04, 0x00, 0x80, 0x31,
0x04, 0x00, 0x81, 0x30, 0x04, 0x03, 0x00, 0x03, 0x00, 0x80, 0x66, 0x03, 0x00, 0x83, 0x60, 0x66,
0x26, 0x00, 0x08, 0x00, 0x81, 0x10, 0x70, 0x02, 0x78, 0x86, 0x60, 0x80, 0x07, 0x78, 0x00, 0x07,
0x10, 0x09, 0x00, 0x0B, 0x00, 0x82, 0xFE, 0xE3, 0x0F, 0x02, 0x00, 0x82, 0xE0, 0x3F, 0xFE, 0x0C,
0x00, 0x07, 0x00, 0x86, 0x20, 0x80, 0x07, 0x78, 0x80, 0x07, 0x38, 0x03, 0x78, 0x80, 0x20, 0x0A,
0x00, 0x03, 0x00, 0x85, 0xC0, 0xE3, 0xCF, 0xB0, 0x60, 0x40, 0x03, 0xC0, 0x80, 0x80, 0x02, 0x01,
0x02, 0x00, 0x81, 0x08, 0x10, 0x06, 0x00, 0x07, 0x00, 0xA7, 0xE0, 0x03, 0xE0, 0x38, 0xC0, 0x80,
0x81, 0x01, 0x0C, 0xC3, 0x23, 0x84, 0x89, 0x11, 0x23, 0x64, 0x84, 0x90, 0x11, 0x42, 0x66, 0x08,
0x99, 0x31, 0x66, 0xC6, 0x08, 0xB1, 0x33, 0x84, 0x79, 0x30, 0x00, 0x80, 0x01, 0x00, 0x1C, 0x02,
0xC0, 0x0F, 0x03, 0x00, 0x05, 0x00, 0x96, 0x60, 0x00, 0x0E, 0xC0, 0x01, 0x6C, 0x80, 0x0D, 0x10,
0x01, 0x63, 0x60, 0x0C, 0x06, 0xC3, 0x7F, 0xF8, 0x8F, 0x01, 0x33, 0x60, 0x03, 0x18, 0x08, 0x00,
0x04, 0x00, 0x95, 0xC0, 0x1F, 0xFC, 0xC3, 0x60, 0x0C, 0xC6, 0x60, 0x0C, 0xC3, 0x1F, 0xFC, 0xC3,
0x60, 0x0C, 0xC6, 0x60, 0x0C, 0xC6, 0x3F, 0xFC, 0x01, 0x07, 0x00, 0x05, 0x00, 0x8F, 0xF0, 0x80,
0x7F, 0x18, 0x0C, 0x03, 0x33, 0x60, 0x06, 0xC0, 0x00, 0x18, 0x00, 0x03, 0x60, 0xC0, 0x02, 0x18,
0x84, 0x83, 0xC1, 0x3F, 0xF0, 0x01, 0x08, 0x00, 0x05, 0x00, 0x95, 0x7E, 0xC0, 0x3F, 0x18, 0x0E,
0x83, 0x61, 0x60, 0x0C, 0x8C, 0x81, 0x31, 0x30, 0x06, 0xC6, 0xC0, 0x18, 0x0C, 0xC3, 0xE1, 0x1F,
0xFC, 0x09, 0x00, 0x04, 0x00, 0x93, 0xF8, 0xCF, 0x3F, 0x06, 0x30, 0x80, 0x01, 0x0C, 0xE0, 0x1F,
0x7F, 0x18, 0xC0, 0x00, 0x06, 0x30, 0x80, 0x7F, 0xFC, 0x07, 0x07, 0x00, 0x04, 0x00, 0x92, 0xF8,
0xC7, 0x3F, 0x06, 0x30, 0x80, 0x01, 0x0C, 0xE0, 0x1F, 0x7F, 0x18, 0xC0, 0x00, 0x06, 0x30, 0x80,
0x01, 0x0C, 0x08, 0x00, 0x05, 0x00, 0x98, 0xC0, 0x07, 0xF8, 0x07, 0x83, 0xC3, 0xC0, 0x18, 0x00,
0x06, 0x80, 0xE1, 0x63, 0xF8, 0x18, 0x30, 0x06, 0x0C, 0x03, 0xC3, 0xC1, 0xE0, 0x1F, 0xE0, 0x03,
0x09, 0x00, 0x05, 0x00, 0x98, 0x30, 0x60, 0x0C, 0x18, 0x03, 0xC6, 0x80, 0x31, 0x60, 0x0C, 0x18,
0xFF, 0xC7, 0xFF, 0x31, 0x60, 0x0C, 0x18, 0x03, 0xC6, 0x80, 0x31, 0x60, 0x0C, 0x18, 0x09, 0x00,
0x02, 0x00, 0x88, 0xC6, 0x18, 0x63, 0x8C, 0x31, 0xC6, 0x18, 0x63, 0x0C, 0x03, 0x00, 0x05, 0x00,
0x91, 0x06, 0x30, 0x80, 0x01, 0x0C, 0x60, 0x00, 0x03, 0x18, 0xC0, 0x00, 0x06, 0x10, 0xC1, 0x18,
0xC6, 0x3F, 0x78, 0x08, 0x00, 0x05, 0x00, 0x8E, 0x06, 0xC7, 0x60, 0x18, 0x06, 0x63, 0x60, 0x06,
0x6C, 0x80, 0x0F, 0xF0, 0x03, 0x66, 0xC0, 0x02, 0x18, 0x83, 0x06, 0xC3, 0x61, 0x30, 0x02, 0x0C,
0x08, 0x00, 0x04, 0x00, 0x93, 0x18, 0xC0, 0x00, 0x06, 0x30, 0x80, 0x01, 0x0C, 0x60, 0x00, 0x03,
0x18, 0xC0, 0x00, 0x06, 0x30, 0x80, 0x7F, 0xFC, 0x03, 0x07, 0x00, 0x06, 0x00, 0x9D, 0x60, 0x00,
0xC7, 0x01, 0x8E, 0x03, 0x1E, 0x0F, 0x3C, 0x1A, 0x68, 0x34, 0xD8, 0xC8, 0xB0, 0x91, 0x31, 0x63,
0x66, 0xC6, 0x6C, 0x8C, 0xD1, 0x18, 0xE3, 0x30, 0xC6, 0x61, 0x0C, 0xC3, 0x0B, 0x00, 0x05, 0x00,
0x98, 0x30, 0x60, 0x1C, 0x18, 0x07, 0xC6, 0x83, 0xF1, 0x61, 0x6C, 0x18, 0x33, 0xC6, 0x9C, 0x31,
0x66, 0x0C, 0x1B, 0xC3, 0xC7, 0xE0, 0x31, 0x70, 0x0C, 0x1C, 0x09, 0x00, 0x05, 0x00, 0x93, 0x80,
0x07, 0xF8, 0x07, 0x83, 0xC3, 0xC0, 0x18, 0x30, 0x06, 0x88, 0x01, 0x66, 0x80, 0x19, 0x20, 0x06,
0x0C, 0x03, 0xC3, 0x02, 0xE0, 0x82, 0x1F, 0xE0, 0x01, 0x09, 0x00, 0x05, 0x00, 0x95, 0xFE, 0xC0,
0x7F, 0x18, 0x0C, 0x03, 0x63, 0x60, 0x0C, 0x8C, 0xC1, 0xF0, 0x0F, 0x3E, 0xC0, 0x00, 0x18, 0x00,
0x03, 0x60, 0x00, 0x0C, 0x09, 0x00, 0x05, 0x00, 0x9B, 0xC0, 0x07, 0xF8, 0x07, 0x83, 0xC1, 0xC0,
0x18, 0x30, 0x06, 0x88, 0x01, 0x62, 0x80, 0x19, 0x20, 0x06, 0x0C, 0x03, 0xC3, 0x60, 0xE0, 0x1F,
0xF0, 0x07, 0x80, 0x03, 0xC0, 0x06, 0x00, 0x04, 0x00, 0x93, 0xC0, 0x1F, 0xFC, 0xC3, 0x60, 0x0C,
0xC6, 0x60, 0x0C, 0xC6, 0x70, 0xFC, 0xC3, 0x1F, 0x8C, 0xC1, 0x30, 0x0C, 0xC6, 0x60, 0x02, 0x0C,
0x07, 0x00, 0x05, 0x00, 0x94, 0x0F, 0xFC, 0xE3, 0x70, 0x06, 0x66, 0x00, 0x1C, 0x80, 0x0F, 0xE0,
0x03, 0x70, 0x00, 0x66, 0x60, 0x06, 0xC6, 0x3F, 0xF0, 0x01, 0x07, 0x00, 0x04, 0x00, 0x94, 0xF0,
0x7F, 0xFE, 0x07, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06,
0x60, 0x00, 0x06, 0x60, 0x08, 0x00, 0x05, 0x00, 0x96, 0x03, 0x66, 0xC0, 0x0C, 0x98, 0x01, 0x33,
0x60, 0x06, 0xCC, 0x80, 0x19, 0x30, 0x03, 0x66, 0xC0, 0x08, 0x18, 0x83, 0xC1, 0x1F, 0xF0, 0x01,
0x08, 0x00, 0x04, 0x00, 0x96, 0x80, 0x01, 0x66, 0xC0, 0x0C, 0x18, 0x83, 0x61, 0x30, 0x0C, 0x03,
0x63, 0x60, 0x0C, 0xCC, 0x00, 0x1B, 0x60, 0x03, 0x38, 0x00, 0x07, 0x60, 0x09, 0x00, 0x06, 0x00,
0x9B, 0x80, 0xC1, 0x60, 0x06, 0x83, 0x19, 0x0E, 0x66, 0x78, 0x08, 0xE3, 0x31, 0x8C, 0xC4, 0x30,
0x33, 0xC3, 0xCC, 0x04, 0x12, 0x1A, 0x78, 0x68, 0xE0, 0xE1, 0x81, 0x83, 0x03, 0x02, 0x0C, 0x02,
0x30, 0x0C, 0x00, 0x05, 0x00, 0x96, 0x03, 0xC7, 0x60, 0x18, 0x06, 0xC6, 0x80, 0x0D, 0xF0, 0x00,
0x1C, 0x80, 0x03, 0x78, 0x80, 0x1B, 0x30, 0x06, 0xC3, 0x60, 0x30, 0x06, 0x0E, 0x08, 0x00, 0x04,
0x00, 0x94, 0x70, 0xE0, 0x06, 0xC6, 0x30, 0x0C, 0x83, 0x19, 0x98, 0x01, 0x0F, 0xF0, 0x00, 0x06,
0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x08, 0x00, 0x04, 0x00, 0x95, 0xE0, 0x7F, 0xFE, 0x07,
0x30, 0x80, 0x01, 0x18, 0xC0, 0x00, 0x06, 0x70, 0x00, 0x03, 0x18, 0xC0, 0x00, 0x0C, 0xE0, 0x7F,
0xFE, 0x07, 0x07, 0x00, 0x8E, 0x80, 0xE7, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61,
0x18, 0x86, 0xE1, 0x78, 0x02, 0x00, 0x03, 0x00, 0x91, 0x10, 0x60, 0xC0, 0x00, 0x01, 0x06, 0x08,
0x30, 0x60, 0x80, 0x00, 0x03, 0x04, 0x18, 0x30, 0x40, 0x80, 0x01, 0x04, 0x00, 0x8D, 0xE0, 0x39,
0xC6, 0x18, 0x63, 0x8C, 0x31, 0xC6, 0x18, 0x63, 0x8C, 0xB9, 0x07, 0x00, 0x03, 0x00, 0x02, 0x18,
0x84, 0x38, 0x2C, 0x64, 0x66, 0x46, 0x0C, 0x00, 0x13, 0x00, 0x81, 0xFE, 0x03, 0x04, 0x00, 0x83,
0x00, 0x60, 0x30, 0x08, 0x0D, 0x00, 0x08, 0x00, 0x8F, 0xE0, 0x83, 0x3B, 0x86, 0x01, 0x08, 0x7E,
0x38, 0x63, 0x10, 0x83, 0x18, 0x86, 0x3F, 0x78, 0x03, 0x07, 0x00, 0x02, 0x00, 0x94, 0x80, 0x01,
0x0C, 0x60, 0x00, 0x03, 0xD8, 0xC3, 0x3F, 0x0E, 0x33, 0x98, 0xC1, 0x0C, 0x66, 0x30, 0x83, 0x39,
0xCC, 0x3F, 0xF6, 0x08, 0x00, 0x07, 0x00, 0x8D, 0x80, 0x0F, 0x7F, 0x0C, 0x1B, 0x6C, 0x80, 0x01,
0x06, 0x18, 0xC4, 0x30, 0x7F, 0xF8, 0x07, 0x00, 0x03, 0x00, 0x94, 0xC0, 0x00, 0x06, 0x30, 0x80,
0xE1, 0x8D, 0x7F, 0x0E, 0x33, 0x98, 0xC1, 0x0C, 0x66, 0x30, 0x83, 0x31, 0x8C, 0x7F, 0x78, 0x03,
0x07, 0x00, 0x08, 0x00, 0x8E, 0xC0, 0x83, 0x3F, 0x04, 0x31, 0x98, 0xFF, 0x0C, 0x60, 0x00, 0x03,
0x30, 0x84, 0x3F, 0xF0, 0x08, 0x00, 0x02, 0x00, 0x8C, 0x1C, 0xCF, 0x60, 0xF8, 0x18, 0x0C, 0x06,
0x83, 0xC1, 0x60, 0x30, 0x18, 0x0C, 0x05, 0x00, 0x08, 0x00, 0x94, 0xE0, 0x8D, 0x7F, 0x0E, 0x33,
0x98, 0xC1, 0x0C, 0x66, 0x30, 0x83, 0x31, 0x8C, 0x7F, 0x78, 0x03, 0x18, 0x61, 0xF8, 0x83, 0x0F,
0x02, 0x00, 0x02, 0x00, 0x95, 0x80, 0x01, 0x0C, 0x60, 0x00, 0x03, 0xD8, 0xC3, 0x3F, 0x0E, 0x31,
0x98, 0xC1, 0x0C, 0x66, 0x30, 0x83, 0x19, 0xCC, 0x60, 0x06, 0x03, 0x07, 0x00, 0x8A, 0x00, 0x10,
0x02, 0x00, 0x21, 0x84, 0x10, 0x42, 0x08, 0x21, 0x04, 0x03, 0x00, 0x8D, 0x00, 0x30, 0x06, 0x00,
0x63, 0x8C, 0x31, 0xC6, 0x18, 0x63, 0x8C, 0x31, 0x77, 0x00, 0x02, 0x00, 0x95, 0x80, 0x01, 0x0C,
0x60, 0x00, 0x03, 0x18, 0xC6, 0x18, 0x66, 0xB0, 0x83, 0x0F, 0x7C, 0x60, 0x06, 0x63, 0x18, 0xC3,
0x30, 0x06, 0x03, 0x07, 0x00, 0x8A, 0x00, 0x10, 0x42, 0x08, 0x21, 0x84, 0x10, 0x42, 0x08, 0x21,
0x04, 0x03, 0x00, 0x0D, 0x00, 0x98, 0x60, 0x8F, 0x87, 0xFF, 0x3F, 0x8E, 0xC3, 0x18, 0x0C, 0x63,
0x30, 0x8C, 0xC1, 0x30, 0x06, 0xC3, 0x18, 0x0C, 0x63, 0x30, 0x8C, 0xC1, 0x30, 0x06, 0xC3, 0x0C,
0x00, 0x08, 0x00, 0x8F, 0xD8, 0xC3, 0x3F, 0x0E, 0x31, 0x98, 0xC1, 0x0C, 0x66, 0x30, 0x83, 0x19,
0xCC, 0x60, 0x06, 0x03, 0x07, 0x00, 0x08, 0x00, 0x8E, 0xC0, 0x83, 0x3F, 0x0C, 0x33, 0x98, 0x81,
0x0C, 0x64, 0x20, 0x83, 0x31, 0x8C, 0x3B, 0xF0, 0x08, 0x00, 0x08, 0x00, 0x93, 0xD8, 0xC3, 0x3F,
0x0E, 0x33, 0x98, 0xC1, 0x0C, 0x66, 0x30, 0x83, 0x19, 0xCC, 0x3B, 0xF6, 0x30, 0x80, 0x01, 0x0C,
0x60, 0x03, 0x00, 0x08, 0x00, 0x94, 0xE0, 0x8D, 0x7F, 0x0E, 0x33, 0x98, 0xC1, 0x0C, 0x66, 0x30,
0x83, 0x39, 0x8C, 0x7B, 0x78, 0x03, 0x18, 0xC0, 0x00, 0x06, 0x30, 0x02, 0x00, 0x05, 0x00, 0x89,
0xD8, 0x7C, 0x0E, 0x83, 0xC1, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x05, 0x00, 0x07, 0x00, 0x8D, 0x80,
0x07, 0x7F, 0x86, 0x19, 0xC0, 0x01, 0x3E, 0xC0, 0x01, 0x66, 0x18, 0x7F, 0x78, 0x07, 0x00, 0x02,
0x00, 0x8C, 0x80, 0xC1, 0x60, 0xFC, 0x18, 0x0C, 0x06, 0x83, 0xC1, 0x60, 0x30, 0x78, 0x38, 0x05,
0x00, 0x08, 0x00, 0x8F, 0x18, 0xCC, 0x60, 0x06, 0x33, 0x98, 0xC1, 0x0C, 0x66, 0x30, 0x83, 0x11,
0x8E, 0x7F, 0x78, 0x03, 0x07, 0x00, 0x07, 0x00, 0x8D, 0x30, 0x98, 0x61, 0x86, 0x10, 0xC3, 0x0C,
0x13, 0x68, 0xE0, 0x81, 0x03, 0x0C, 0x30, 0x07, 0x00, 0x0B, 0x00, 0x91, 0x08, 0x82, 0x8C, 0x63,
0xC6, 0x31, 0xA3, 0x18, 0xD9, 0x84, 0x6D, 0xC3, 0xA2, 0xC1, 0x71, 0xE0, 0x38, 0x30, 0x02, 0x18,
0x80, 0x0C, 0x0A, 0x00, 0x07, 0x00, 0x8E, 0x60, 0x98, 0x31, 0xCC, 0xE0, 0x81, 0x07, 0x0C, 0x78,
0xE0, 0xC1, 0x8C, 0x71, 0x86, 0x01, 0x06, 0x00, 0x07, 0x00, 0x92, 0x30, 0x98, 0x61, 0x86, 0x18,
0xC3, 0x0C, 0x13, 0x68, 0xE0, 0x81, 0x03, 0x0C, 0x30, 0x40, 0x80, 0x81, 0x03, 0x06, 0x02, 0x00,
0x07, 0x00, 0x8E, 0xE0, 0x9F, 0x7F, 0xC0, 0x80, 0x01, 0x06, 0x0C, 0x18, 0x70, 0xC0, 0x80, 0x03,
0xFE, 0x01, 0x06, 0x00, 0x88, 0x00, 0x10, 0x0C, 0x83, 0xC1, 0x60, 0x10, 0x08, 0x86, 0x02, 0xC1,
0x84, 0x40, 0x20, 0x30, 0x18, 0x0C, 0x02, 0x06, 0x81, 0x02, 0x00, 0x02, 0x00, 0x8B, 0x42, 0x08,
0x21, 0x84, 0x10, 0x42, 0x08, 0x21, 0x84, 0x10, 0x02, 0x00, 0x80, 0x80, 0x02, 0x81, 0x83, 0xC1,
0x60, 0x30, 0x18, 0x03, 0x0C, 0x87, 0xC7, 0x60, 0x30, 0x18, 0x0C, 0x06, 0xC3, 0x30, 0x02, 0x00,
0x10, 0x00, 0x86, 0x0E, 0xC2, 0xCF, 0x18, 0x1F, 0x00, 0x02, 0x10, 0x00,
};
// clang-format on

View File

@ -1,11 +1,11 @@
// Copyright 2023 QMK -- generated source code only, font retains original copyright
// Copyright 2024 QMK -- generated source code only, font retains original copyright
// SPDX-License-Identifier: GPL-2.0-or-later
// This file was auto-generated by `qmk painter-convert-font-image -i robotomono20.png -f mono4`
// This file was auto-generated by `qmk painter-convert-font-image -i robotomono20.png -f mono2`
#pragma once
#include <qp.h>
extern const uint32_t font_robotomono20_length;
extern const uint8_t font_robotomono20[4904];
extern const uint8_t font_robotomono20[2396];

View File

@ -0,0 +1,6 @@
// Copyright 2022 Eason
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define WS2812_SPI_DRIVER SPID2

View File

@ -0,0 +1,8 @@
// Copyright 2022 Eason
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HAL_USE_SPI TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,265 @@
{
"keyboard_name": "Meow65",
"manufacturer": "Eason",
"url": "",
"maintainer": "Eason",
"usb": {
"vid": "0x68F4",
"pid": "0x70A0",
"device_version": "0.0.1",
"force_nkro": true
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"rgblight": {
"led_count": 2,
"animations": {
"breathing": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"snake": true,
"knight": true,
"christmas": true,
"static_gradient": true,
"rgb_test": true,
"alternating": true,
"twinkle": true
}
},
"ws2812": {
"pin": "B15",
"driver": "spi"
},
"indicators": {
"caps_lock": "C13"
},
"matrix_pins": {
"rows": [ "A15", "B3", "B4", "B5", "B6"],
"cols": ["A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "B10", "B11", "B12", "B13", "B14", "A8"]
},
"diode_direction": "ROW2COL",
"processor": "STM32F103",
"bootloader": "uf2boot",
"layouts":{
"LAYOUT_all": {
"layout":[
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 14], "x": 15, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 14], "x": 15, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
{"matrix": [2, 14], "x": 15, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 13, "y": 4},
{"matrix": [4, 13], "x": 14, "y": 4},
{"matrix": [4, 14], "x": 15, "y": 4}
]
},
"LAYOUT_ansi": {
"layout":[
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 14], "x": 15, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 14], "x": 15, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [2, 14], "x": 15, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 13, "y": 4},
{"matrix": [4, 13], "x": 14, "y": 4},
{"matrix": [4, 14], "x": 15, "y": 4}
]
},
"LAYOUT_iso": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 14], "x": 15, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [1, 14], "x": 15, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 14], "x": 15, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 13, "y": 4},
{"matrix": [4, 13], "x": 14, "y": 4},
{"matrix": [4, 14], "x": 15, "y": 4}
]
}
}
}

View File

@ -0,0 +1,15 @@
// Copyright 2022 Eason
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
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_DEL,
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_PGUP,
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_PGDN,
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_LSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT
)
};

View File

@ -0,0 +1,15 @@
// Copyright 2022 Eason
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
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_DEL,
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_PGUP,
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_PGDN,
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_LSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT
)
};

View File

@ -0,0 +1,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes

View File

@ -0,0 +1,9 @@
// Copyright 2022 Eason
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
#undef STM32_SPI_USE_SPI2
#define STM32_SPI_USE_SPI2 TRUE

View File

@ -0,0 +1,27 @@
# Meow65
![meow65](https://i.imgur.com/i5tM4nY.jpg)
A customizable hotswap 65% keyboard.
* Keyboard Maintainer: [EASON](https://github.com/EasonQian1)
* Hardware Supported: Meow65 PCB
* Hardware Availability: [EASON](https://github.com/EasonQian1)
Make example for this keyboard (after setting up your build environment):
make eason/meow65:default
Flashing example for this keyboard:
make eason/meow65:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down Esc in the keyboard then replug
* **Physical reset button**: Briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT`

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -20,7 +20,8 @@
},
"matrix_pins": {
"cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B1", "B0", "A7", "A6", "A5", "A4", "A3"],
"rows": ["B6", "B5", "B4", "A15", "B3", "A0", "A2", "A1"]
"rows": ["B6", "B5", "B4", "A15", "B3", "A0", "A2", "A1"],
"ghost": true
},
"processor": "STM32F103",
"url": "modelh.club",

View File

@ -0,0 +1,8 @@
{
"manufacturer": "Keebio",
"url": "https://keeb.io",
"maintainer": "Keebio",
"usb": {
"vid": "0xCB10"
}
}

View File

@ -0,0 +1,43 @@
{
"config": { "features": {"encoder_map": true, "tri_layer": true} },
"keyboard": "keebio/irispad",
"keymap": "default",
"layout": "LAYOUT",
"layers": [
[
"QK_GESC", "KC_1" , "KC_2" , "KC_3" , "KC_4" , "KC_5" ,
"KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T" ,
"KC_LCTL", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G" ,
"KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "TL_UPPR",
"KC_LGUI", "TL_LOWR", "KC_ENT"
],
[
"KC_TILD", "KC_EXLM", "KC_AT" , "KC_HASH", "KC_DLR" , "KC_PERC",
"KC_GRV" , "_______", "KC_UP" , "_______", "QK_BOOT", "_______",
"KC_DEL" , "KC_LEFT", "KC_DOWN", "KC_RGHT", "_______", "KC_LBRC",
"RGB_MOD", "EE_CLR" , "_______", "_______", "_______", "KC_LCBR", "KC_LPRN",
"_______", "_______", "KC_DEL"
],
[
"KC_F6" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5" ,
"KC_F12", "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_F11" ,
"RGB_MOD", "KC_MPRV", "KC_MNXT", "KC_VOLU", "KC_PGUP", "KC_UNDS",
"KC_MUTE", "KC_MSTP", "KC_MPLY", "KC_VOLD", "KC_PGDN", "KC_MINS", "KC_LPRN",
"_______", "_______", "_______"
]
],
"encoders": [
[
{"ccw": "KC_PGUP", "cw": "KC_PGDN"},
{"ccw": "KC_VOLD", "cw": "KC_VOLU"}
],
[
{"ccw": "_______", "cw": "_______"},
{"ccw": "_______", "cw": "_______"}
],
[
{"ccw": "_______", "cw": "_______"},
{"ccw": "_______", "cw": "_______"}
]
]
}

View File

@ -0,0 +1,43 @@
{
"config": { "features": {"encoder_map": true, "via": true} },
"keyboard": "keebio/irispad",
"keymap": "via",
"layout": "LAYOUT",
"layers": [
[
"QK_GESC", "KC_1" , "KC_2" , "KC_3" , "KC_4" , "KC_5" ,
"KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T" ,
"KC_LCTL", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G" ,
"KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "TL_UPPR",
"KC_LGUI", "TL_LOWR", "KC_ENT"
],
[
"KC_TILD", "KC_EXLM", "KC_AT" , "KC_HASH", "KC_DLR" , "KC_PERC",
"KC_GRV" , "_______", "KC_UP" , "_______", "QK_BOOT", "_______",
"KC_DEL" , "KC_LEFT", "KC_DOWN", "KC_RGHT", "_______", "KC_LBRC",
"RGB_MOD", "EE_CLR" , "_______", "_______", "_______", "KC_LCBR", "KC_LPRN",
"_______", "_______", "KC_DEL"
],
[
"KC_F6" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5" ,
"KC_F12", "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_F11" ,
"RGB_MOD", "KC_MPRV", "KC_MNXT", "KC_VOLU", "KC_PGUP", "KC_UNDS",
"KC_MUTE", "KC_MSTP", "KC_MPLY", "KC_VOLD", "KC_PGDN", "KC_MINS", "KC_LPRN",
"_______", "_______", "_______"
]
],
"encoders": [
[
{"ccw": "KC_PGUP", "cw": "KC_PGDN"},
{"ccw": "KC_VOLD", "cw": "KC_VOLU"}
],
[
{"ccw": "_______", "cw": "_______"},
{"ccw": "_______", "cw": "_______"}
],
[
{"ccw": "_______", "cw": "_______"},
{"ccw": "_______", "cw": "_______"}
]
]
}

View File

@ -0,0 +1,21 @@
# Irispad
An ergonomic gamepad based off of the Iris and sold by Keebio. [More info at Keebio](https://keeb.io).
* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges)
* Hardware Supported: RP2040
* Hardware Availability: [Keebio](https://keeb.io)
Make example for this keyboard (after setting up your build environment):
make keebio/irispad/rev8:default
Example of flashing this keyboard:
make keebio/irispad/rev8:default:flash
See [build environment setup](https://docs.qmk.fm/#/newbs_getting_started) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
A build guide for this keyboard can be found here: [Iris Build Guide](https://docs.keeb.io/iris-rev6-build-guide)
Note: The Irispad PCB is a repurposed Iris Rev. 8 PCB from a batch that had all of the diodes flipped, so if you would like to use a regular Iris Rev. 8 PCB, you will need to change `ROW2COL` to `COL2ROW` in `keyboard.json`.

View File

@ -0,0 +1,11 @@
// Copyright 2024 Danny Nguyen (danny@keeb.io)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
#define I2C_DRIVER I2CD2
#define I2C1_SDA_PIN GP10
#define I2C1_SCL_PIN GP11

View File

@ -0,0 +1,151 @@
{
"keyboard_name": "Irispad Rev. 8",
"bootloader": "rp2040",
"diode_direction": "ROW2COL",
"encoder": {
"rotary": [
{"pin_a": "GP14", "pin_b": "GP15"},
{"pin_a": "GP26", "pin_b": "GP25"}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["GP2", "GP3", "GP29", "GP27", "GP6", "GP5"],
"rows": ["GP0", "GP1", "GP7", "GP16", "GP28"]
},
"processor": "RP2040",
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"driver": "ws2812",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 5, "flags": 4},
{"x": 18, "y": 5, "flags": 2},
{"matrix": [0, 1], "x": 37, "y": 5, "flags": 4},
{"matrix": [0, 2], "x": 76, "y": 2, "flags": 4},
{"x": 91, "y": 1, "flags": 2},
{"matrix": [0, 3], "x": 110, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 146, "y": 5, "flags": 4},
{"x": 165, "y": 3, "flags": 2},
{"matrix": [0, 5], "x": 183, "y": 3, "flags": 4},
{"matrix": [1, 5], "x": 183, "y": 17, "flags": 4},
{"matrix": [1, 4], "x": 137, "y": 15, "flags": 4},
{"matrix": [1, 3], "x": 110, "y": 13, "flags": 4},
{"matrix": [1, 2], "x": 73, "y": 15, "flags": 4},
{"matrix": [1, 1], "x": 37, "y": 18, "flags": 4},
{"matrix": [1, 0], "x": 0, "y": 18, "flags": 4},
{"matrix": [2, 0], "x": 0, "y": 32, "flags": 4},
{"matrix": [2, 1], "x": 37, "y": 32, "flags": 4},
{"matrix": [2, 2], "x": 73, "y": 28, "flags": 4},
{"matrix": [2, 3], "x": 110, "y": 27, "flags": 4},
{"matrix": [2, 4], "x": 137, "y": 28, "flags": 4},
{"matrix": [2, 5], "x": 183, "y": 30, "flags": 4},
{"matrix": [3, 5], "x": 183, "y": 43, "flags": 4},
{"matrix": [3, 4], "x": 146, "y": 42, "flags": 4},
{"matrix": [3, 3], "x": 110, "y": 40, "flags": 4},
{"x": 91, "y": 50, "flags": 2},
{"matrix": [3, 2], "x": 73, "y": 42, "flags": 4},
{"matrix": [3, 1], "x": 37, "y": 45, "flags": 4},
{"x": 18, "y": 43, "flags": 2},
{"matrix": [3, 0], "x": 0, "y": 45, "flags": 4},
{"matrix": [4, 5], "x": 224, "y": 52, "flags": 4},
{"matrix": [4, 4], "x": 206, "y": 64, "flags": 4},
{"x": 183, "y": 58, "flags": 2},
{"matrix": [4, 3], "x": 165, "y": 58, "flags": 4},
{"matrix": [4, 2], "x": 128, "y": 47, "flags": 4}
],
"max_brightness": 180,
"sleep": true
},
"usb": {
"device_version": "8.0.0",
"pid": "0x8356"
},
"ws2812": {
"driver": "vendor",
"pin": "GP9"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.375},
{"matrix": [0, 1], "x": 1, "y": 0.375},
{"matrix": [0, 2], "x": 2, "y": 0.125},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0.125},
{"matrix": [0, 5], "x": 5, "y": 0.25},
{"matrix": [1, 0], "x": 0, "y": 1.375},
{"matrix": [1, 1], "x": 1, "y": 1.375},
{"matrix": [1, 2], "x": 2, "y": 1.125},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1.125},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.375},
{"matrix": [2, 1], "x": 1, "y": 2.375},
{"matrix": [2, 2], "x": 2, "y": 2.125},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2.125},
{"matrix": [2, 5], "x": 5, "y": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3.375},
{"matrix": [3, 1], "x": 1, "y": 3.375},
{"matrix": [3, 2], "x": 2, "y": 3.125},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3.125},
{"matrix": [3, 5], "x": 5, "y": 3.25},
{"matrix": [4, 5], "x": 6.15, "y": 3.75},
{"matrix": [4, 2], "x": 3.5, "y": 4.25},
{"matrix": [4, 3], "x": 4.5, "y": 4.375},
{"matrix": [4, 4], "x": 5.6, "y": 4.75}
]
}
}
}

View File

@ -0,0 +1 @@
SERIAL_DRIVER = vendor

View File

@ -0,0 +1,18 @@
// Copyright 2023 VertorWang (@itarze)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* SPI */
#define SPI_DRIVER SPIDQ
#define SPI_SCK_PIN B3
#define SPI_MOSI_PIN B5
#define SPI_MISO_PIN B4
/* Flash */
#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
/* RGB Driver */
#define WS2812_SPI_DRIVER SPIDM2
#define WS2812_SPI_MOSI_PAL_MODE 0
#define WS2812_SPI_SCK_PAL_MODE 0

View File

@ -0,0 +1,10 @@
// Copyright 2023 VertorWang (@itarze)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HAL_USE_SPI TRUE
#define SPI_USE_WAIT TRUE
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
#include_next <halconf.h>

View File

@ -0,0 +1,233 @@
{
"manufacturer": "moky",
"keyboard_name": "moky67",
"url": "",
"processor": "WB32FQ95",
"bootloader": "wb32-dfu",
"usb": {
"device_version": "1.0.0",
"vid": "0xBB4F",
"pid": "0x0002",
"suspend_wakeup_delay": 1000
},
"diode_direction": "ROW2COL",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true,
"encoder": true
},
"matrix_pins": {
"cols": ["C0", "C1", "C2", "C3", "A6", "B10", "B11", "B12", "B13", "B14", "A10", "C6", "C7", "C8", "C9", "A8", "C4"],
"rows": ["A1", "A2", "A3", "A4", "C13"]
},
"eeprom": {
"wear_leveling": {
"backing_size": 4096,
"driver": "spi_flash"
}
},
"encoder": {
"rotary": [
{"pin_a": "B6", "pin_b": "B7"}
]
},
"ws2812": {
"driver": "spi",
"pin": "B15"
},
"rgb_matrix": {
"driver": "ws2812",
"max_brightness": 100,
"animations": {
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"rainbow_moving_chevron": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"layout": [
{"flags": 4, "matrix": [2, 16], "x": 210 , "y": 32 },
{"flags": 4, "matrix": [1, 16], "x": 210 , "y": 18 },
{"flags": 4, "matrix": [0, 13], "x": 183 , "y": 4 },
{"flags": 4, "matrix": [0, 12], "x": 163 , "y": 4 },
{"flags": 4, "matrix": [0, 11], "x": 149 , "y": 4 },
{"flags": 4, "matrix": [0, 10], "x": 136 , "y": 4 },
{"flags": 4, "matrix": [0, 9], "x": 122 , "y": 4 },
{"flags": 4, "matrix": [0, 8], "x": 109 , "y": 4 },
{"flags": 4, "matrix": [0, 7], "x": 95 , "y": 4 },
{"flags": 4, "matrix": [0, 6], "x": 81 , "y": 4 },
{"flags": 4, "matrix": [0, 5], "x": 68 , "y": 4 },
{"flags": 4, "matrix": [0, 4], "x": 54 , "y": 4 },
{"flags": 4, "matrix": [0, 3], "x": 41 , "y": 4 },
{"flags": 4, "matrix": [0, 2], "x": 27 , "y": 4 },
{"flags": 4, "matrix": [0, 1], "x": 14 , "y": 4 },
{"flags": 4, "matrix": [0, 0], "x": 0 , "y": 4 },
{"flags": 4, "matrix": [1, 0], "x": 3 , "y": 18 },
{"flags": 4, "matrix": [1, 1], "x": 20 , "y": 18 },
{"flags": 4, "matrix": [1, 2], "x": 34 , "y": 18 },
{"flags": 4, "matrix": [1, 3], "x": 48 , "y": 18 },
{"flags": 4, "matrix": [1, 4], "x": 61 , "y": 18 },
{"flags": 4, "matrix": [1, 5], "x": 75 , "y": 18 },
{"flags": 4, "matrix": [1, 6], "x": 88 , "y": 18 },
{"flags": 4, "matrix": [1, 7], "x": 102 , "y": 18 },
{"flags": 4, "matrix": [1, 8], "x": 115 , "y": 18 },
{"flags": 4, "matrix": [1, 9], "x": 129 , "y": 18 },
{"flags": 4, "matrix": [1, 10], "x": 143 , "y": 18 },
{"flags": 4, "matrix": [1, 11], "x": 156 , "y": 18 },
{"flags": 4, "matrix": [1, 12], "x": 170 , "y": 18 },
{"flags": 4, "matrix": [1, 13], "x": 187 , "y": 18 },
{"flags": 4, "matrix": [2, 13], "x": 182 , "y": 32 },
{"flags": 4, "matrix": [2, 11], "x": 160 , "y": 32 },
{"flags": 4, "matrix": [2, 10], "x": 146 , "y": 32 },
{"flags": 4, "matrix": [2, 9], "x": 132 , "y": 32 },
{"flags": 4, "matrix": [2, 8], "x": 119 , "y": 32 },
{"flags": 4, "matrix": [2, 7], "x": 105 , "y": 32 },
{"flags": 4, "matrix": [2, 6], "x": 92 , "y": 32 },
{"flags": 4, "matrix": [2, 5], "x": 78 , "y": 32 },
{"flags": 4, "matrix": [2, 4], "x": 64 , "y": 32 },
{"flags": 4, "matrix": [2, 3], "x": 51 , "y": 32 },
{"flags": 4, "matrix": [2, 2], "x": 37 , "y": 32 },
{"flags": 4, "matrix": [2, 1], "x": 24 , "y": 32 },
{"flags": 4, "matrix": [2, 0], "x": 5 , "y": 32 },
{"flags": 4, "matrix": [3, 0], "x": 8 , "y": 46 },
{"flags": 4, "matrix": [3, 1], "x": 31 , "y": 46 },
{"flags": 4, "matrix": [3, 2], "x": 44 , "y": 46 },
{"flags": 4, "matrix": [3, 3], "x": 58 , "y": 46 },
{"flags": 4, "matrix": [3, 4], "x": 71 , "y": 46 },
{"flags": 4, "matrix": [3, 5], "x": 85 , "y": 46 },
{"flags": 4, "matrix": [3, 6], "x": 98 , "y": 46 },
{"flags": 4, "matrix": [3, 7], "x": 112 , "y": 46 },
{"flags": 4, "matrix": [3, 8], "x": 126 , "y": 46 },
{"flags": 4, "matrix": [3, 9], "x": 139 , "y": 46 },
{"flags": 4, "matrix": [3, 10], "x": 153 , "y": 46 },
{"flags": 4, "matrix": [3, 13], "x": 171 , "y": 46 },
{"flags": 4, "matrix": [3, 15], "x": 193 , "y": 50 },
{"flags": 4, "matrix": [4, 16], "x": 207 , "y": 64 },
{"flags": 4, "matrix": [4, 15], "x": 193 , "y": 64 },
{"flags": 4, "matrix": [4, 14], "x": 180 , "y": 64 },
{"flags": 4, "matrix": [4, 13], "x": 163 , "y": 60 },
{"flags": 4, "matrix": [4, 10], "x": 149 , "y": 60 },
{"flags": 4, "matrix": [4, 9], "x": 136 , "y": 60 },
{"flags": 4, "matrix": [4, 6], "x": 87 , "y": 60 },
{"flags": 4, "matrix": [4, 2], "x": 36 , "y": 60 },
{"flags": 4, "matrix": [4, 1], "x": 19 , "y": 60 },
{"flags": 4, "matrix": [4, 0], "x": 2 , "y": 60 },
{"flags": 4, "matrix": [0, 16], "x": 210 , "y": 4 }
],
"sleep": true
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 16], "x": 15.5, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 16], "x": 15.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [2, 16], "x": 15.5, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 15], "x": 14.25, "y": 3.25},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 9], "x": 10, "y": 4},
{"matrix": [4, 10], "x": 11, "y": 4},
{"matrix": [4, 13], "x": 12, "y": 4},
{"matrix": [4, 14], "x": 13.25, "y": 4.25},
{"matrix": [4, 15], "x": 14.25, "y": 4.25},
{"matrix": [4, 16], "x": 15.25, "y": 4.25}
]
}
}
}

View File

@ -0,0 +1,50 @@
// Copyright 2023 VertorWang (@itarze)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
KC_ESC, 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_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_SCRL,
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_ENT, KC_DEL,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT( /* Base */
KC_GRV, KC_MYCM, KC_WHOM, KC_MAIL, KC_CALC, KC_MSEL, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______,
_______, TO(0), TO(2), _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
_______, GU_TOGG, _______, EE_CLR, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI),
[2] = LAYOUT( /* Base */
KC_ESC, KC_BRMD, KC_BRMU, KC_F3, _______, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSPC, _______,
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_SCRL,
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_ENT, KC_DEL,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(3), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[3] = LAYOUT( /* FN */
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, _______, _______,
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______,
_______, TO(0), TO(2), _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
_______, _______, _______, EE_CLR, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI),
};
// clang-format on
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD)},
[1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD)},
[2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS)},
[3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS)},
};
#endif

View File

@ -0,0 +1 @@
ENCODER_MAP_ENABLE = yes

View File

@ -0,0 +1,50 @@
// Copyright 2023 VertorWang (@itarze)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
KC_ESC, 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_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_SCRL,
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_ENT, KC_DEL,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT( /* Base */
KC_GRV, KC_MYCM, KC_WHOM, KC_MAIL, KC_CALC, KC_MSEL, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______,
_______, TO(0), TO(2), _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
_______, GU_TOGG, _______, EE_CLR, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI),
[2] = LAYOUT( /* Base */
KC_ESC, KC_BRMD, KC_BRMU, KC_F3, _______, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSPC, _______,
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_SCRL,
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_ENT, KC_DEL,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(3), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[3] = LAYOUT( /* FN */
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, _______, _______,
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______,
_______, TO(0), TO(2), _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
_______, _______, _______, EE_CLR, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI),
};
// clang-format on
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD)},
[1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD)},
[2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS)},
[3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS)},
};
#endif

View File

@ -0,0 +1,2 @@
ENCODER_MAP_ENABLE = yes
VIA_ENABLE = yes

View File

@ -0,0 +1,29 @@
/* Copyright (C) 2023 Westberry Technology Corp., Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef WB32_GPT_TIM1_IRQ_PRIORITY
#define WB32_GPT_TIM1_IRQ_PRIORITY 3
#undef WB32_SPI_USE_QSPI
#define WB32_SPI_USE_QSPI TRUE
#undef WB32_SPI_USE_SPIM2
#define WB32_SPI_USE_SPIM2 TRUE

View File

@ -0,0 +1,26 @@
# moky67
![moky/moky67](https://i.imgur.com/9k4QiqR.png)
An in-switch RGB LED keyboard with RGB underglow.
* Keyboard Maintainer: [Vertor](https://github.com/VertorWang)
* Hardware Supported: moky67
* Hardware Availability: Private GB
Make example for this keyboard (after setting up your build environment):
make moky/moky67:default
Flashing example for this keyboard:
make moky/moky67:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -0,0 +1,30 @@
/* Copyright 2023 GSKY <gskyGit@gsky.com.tw>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/* External spi flash */
#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B14
/* SPI Config for LED Driver */
#define SPI_DRIVER SPIDQ
#define SPI_SCK_PIN A5
#define SPI_MOSI_PIN A7
#define SPI_MISO_PIN A6
#define AW20216S_CS_PIN_1 A15
#define AW20216S_CS_PIN_2 B15
#define AW20216S_EN_PIN C13

View File

@ -0,0 +1,23 @@
/* Copyright (C) 2023 Westberry Technology (ChangZhou) Corp., Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define HAL_USE_SPI TRUE
#define SPI_USE_WAIT TRUE
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
#include_next <halconf.h>

View File

@ -0,0 +1,287 @@
{
"manufacturer": "ProjectD",
"keyboard_name": "ProjectD 75% ISO",
"maintainer": "Gsky",
"bootloader": "wb32-dfu",
"bootmagic": {
"matrix": [1, 3]
},
"diode_direction": "COL2ROW",
"dynamic_keymap": {
"layer_count": 10
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"],
"rows": ["B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10"]
},
"processor": "WB32FQ95",
"qmk": {
"tap_keycode_delay": 10,
"locking": {
"enabled": true,
"resync": true
}
},
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"rainbow_moving_chevron": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"center_point": [78, 20],
"driver": "aw20216s",
"sleep": true,
"layout": [
{ "flags": 4, "matrix": [1, 3], "x": 0, "y": 0 },
{ "flags": 4, "matrix": [2, 6], "x": 12.5, "y": 0 },
{ "flags": 4, "matrix": [3, 6], "x": 22.5, "y": 0 },
{ "flags": 4, "matrix": [3, 1], "x": 32.5, "y": 0 },
{ "flags": 4, "matrix": [3, 3], "x": 42.5, "y": 0 },
{ "flags": 4, "matrix": [0, 7], "x": 55, "y": 0 },
{ "flags": 4, "matrix": [6, 3], "x": 65, "y": 0 },
{ "flags": 4, "matrix": [7, 1], "x": 75, "y": 0 },
{ "flags": 4, "matrix": [7, 6], "x": 85, "y": 0 },
{ "flags": 4, "matrix": [10, 6], "x": 97.5, "y": 0 },
{ "flags": 4, "matrix": [10, 7], "x": 107.5, "y": 0 },
{ "flags": 4, "matrix": [10, 3], "x": 117.5, "y": 0 },
{ "flags": 4, "matrix": [10, 5], "x": 127.5, "y": 0 },
{ "flags": 4, "matrix": [9, 7], "x": 140, "y": 0 },
{ "flags": 4, "matrix": [6, 5], "x": 155, "y": 0 },
{ "flags": 4, "matrix": [1, 6], "x": 0, "y": 12.5 },
{ "flags": 4, "matrix": [1, 7], "x": 10, "y": 12.5 },
{ "flags": 4, "matrix": [2, 7], "x": 20, "y": 12.5 },
{ "flags": 4, "matrix": [3, 7], "x": 30, "y": 12.5 },
{ "flags": 4, "matrix": [4, 7], "x": 40, "y": 12.5 },
{ "flags": 4, "matrix": [4, 6], "x": 50, "y": 12.5 },
{ "flags": 4, "matrix": [5, 6], "x": 60, "y": 12.5 },
{ "flags": 4, "matrix": [5, 7], "x": 70, "y": 12.5 },
{ "flags": 4, "matrix": [6, 7], "x": 80, "y": 12.5 },
{ "flags": 4, "matrix": [7, 7], "x": 90, "y": 12.5 },
{ "flags": 4, "matrix": [8, 7], "x": 100, "y": 12.5 },
{ "flags": 4, "matrix": [8, 6], "x": 110, "y": 12.5 },
{ "flags": 4, "matrix": [6, 6], "x": 120, "y": 12.5 },
{ "flags": 4, "matrix": [10, 1], "x": 130, "y": 12.5 },
{ "flags": 4, "matrix": [0, 2], "x": 155, "y": 12.5 },
{ "flags": 4, "matrix": [1, 1], "x": 0, "y": 22.5 },
{ "flags": 4, "matrix": [1, 0], "x": 15, "y": 22.5 },
{ "flags": 4, "matrix": [2, 0], "x": 25, "y": 22.5 },
{ "flags": 4, "matrix": [3, 0], "x": 35, "y": 22.5 },
{ "flags": 4, "matrix": [4, 0], "x": 45, "y": 22.5 },
{ "flags": 4, "matrix": [4, 1], "x": 55, "y": 22.5 },
{ "flags": 4, "matrix": [5, 1], "x": 65, "y": 22.5 },
{ "flags": 4, "matrix": [5, 0], "x": 75, "y": 22.5 },
{ "flags": 4, "matrix": [6, 0], "x": 85, "y": 22.5 },
{ "flags": 4, "matrix": [7, 0], "x": 95, "y": 22.5 },
{ "flags": 4, "matrix": [8, 0], "x": 105, "y": 22.5 },
{ "flags": 4, "matrix": [8, 1], "x": 115, "y": 22.5 },
{ "flags": 4, "matrix": [6, 1], "x": 125, "y": 22.5 },
{ "flags": 4, "matrix": [1, 5], "x": 155.5, "y": 22.5 },
{ "flags": 8, "matrix": [2, 1], "x": 0, "y": 32.5 },
{ "flags": 4, "matrix": [1, 2], "x": 17.5, "y": 32.5 },
{ "flags": 4, "matrix": [2, 2], "x": 27.5, "y": 32.5 },
{ "flags": 4, "matrix": [3, 2], "x": 37.5, "y": 32.5 },
{ "flags": 4, "matrix": [4, 2], "x": 47.5, "y": 32.5 },
{ "flags": 4, "matrix": [4, 3], "x": 57.5, "y": 32.5 },
{ "flags": 4, "matrix": [5, 3], "x": 67.5, "y": 32.5 },
{ "flags": 4, "matrix": [5, 2], "x": 77.5, "y": 32.5 },
{ "flags": 4, "matrix": [6, 2], "x": 87.5, "y": 32.5 },
{ "flags": 4, "matrix": [7, 2], "x": 97.5, "y": 32.5 },
{ "flags": 4, "matrix": [8, 2], "x": 107.5, "y": 32.5 },
{ "flags": 4, "matrix": [8, 3], "x": 117.5, "y": 32.5 },
{ "flags": 4, "matrix": [10, 2], "x": 127.5, "y": 32.5 },
{ "flags": 4, "matrix": [10, 4], "x": 137.5, "y": 22.5 },
{ "flags": 4, "matrix": [2, 5], "x": 155.5, "y": 32.5 },
{ "flags": 4, "matrix": [0, 0], "x": 0, "y": 42.5 },
{ "flags": 4, "matrix": [0, 1], "x": 12.5, "y": 42.5 },
{ "flags": 4, "matrix": [1, 4], "x": 22.5, "y": 42.5 },
{ "flags": 4, "matrix": [2, 4], "x": 32.5, "y": 42.5 },
{ "flags": 4, "matrix": [3, 4], "x": 42.5, "y": 42.5 },
{ "flags": 4, "matrix": [4, 4], "x": 52.5, "y": 42.5 },
{ "flags": 4, "matrix": [4, 5], "x": 62.5, "y": 42.5 },
{ "flags": 4, "matrix": [5, 5], "x": 72.5, "y": 42.5 },
{ "flags": 4, "matrix": [5, 4], "x": 82.5, "y": 42.5 },
{ "flags": 4, "matrix": [6, 4], "x": 92.5, "y": 42.5 },
{ "flags": 4, "matrix": [7, 4], "x": 102.5, "y": 42.5 },
{ "flags": 4, "matrix": [8, 5], "x": 112.5, "y": 42.5 },
{ "flags": 4, "matrix": [9, 1], "x": 122.5, "y": 42.5 },
{ "flags": 4, "matrix": [3, 5], "x": 142.5, "y": 45 },
{ "flags": 4, "matrix": [7, 5], "x": 155, "y": 42.5 },
{ "flags": 4, "matrix": [0, 6], "x": 0, "y": 52.5 },
{ "flags": 4, "matrix": [9, 0], "x": 12.5, "y": 52.5 },
{ "flags": 4, "matrix": [9, 3], "x": 25, "y": 52.5 },
{ "flags": 4, "x": 61.5, "y": 52.5 },
{ "flags": 4, "x": 62.5, "y": 52.5 },
{ "flags": 4, "matrix": [9, 4], "x": 65, "y": 52.5 },
{ "flags": 4, "x": 67.5, "y": 52.5 },
{ "flags": 4, "x": 68.5, "y": 52.5 },
{ "flags": 4, "matrix": [9, 5], "x": 100, "y": 52.5 },
{ "flags": 4, "matrix": [9, 2], "x": 110, "y": 52.5 },
{ "flags": 4, "matrix": [0, 4], "x": 120, "y": 52.5 },
{ "flags": 4, "matrix": [0, 3], "x": 132.5, "y": 52.5 },
{ "flags": 4, "matrix": [7, 3], "x": 142.5, "y": 52.5 },
{ "flags": 4, "matrix": [0, 5], "x": 152.5, "y": 52.5 }
]
},
"url": "",
"usb": {
"device_version": "0.0.2",
"pid": "0x0011",
"vid": "0x3233"
},
"eeprom": {
"driver": "wear_leveling",
"wear_leveling": {
"driver": "spi_flash",
"backing_size": 4096
}
},
"layouts": {
"LAYOUT": {
"layout": [
{ "label": "Esc", "matrix": [1, 3], "x": 0, "y": 0 },
{ "label": "F1", "matrix": [2, 6], "x": 1.25, "y": 0 },
{ "label": "F2", "matrix": [3, 6], "x": 2.25, "y": 0 },
{ "label": "F3", "matrix": [3, 1], "x": 3.25, "y": 0 },
{ "label": "F4", "matrix": [3, 3], "x": 4.25, "y": 0 },
{ "label": "F5", "matrix": [0, 7], "x": 5.5, "y": 0 },
{ "label": "F6", "matrix": [6, 3], "x": 6.5, "y": 0 },
{ "label": "F7", "matrix": [7, 1], "x": 7.5, "y": 0 },
{ "label": "F8", "matrix": [7, 6], "x": 8.5, "y": 0 },
{ "label": "F9", "matrix": [10, 6], "x": 9.75, "y": 0 },
{ "label": "F10", "matrix": [10, 7], "x": 10.75, "y": 0 },
{ "label": "F11", "matrix": [10, 3], "x": 11.75, "y": 0 },
{ "label": "F12", "matrix": [10, 5], "x": 12.75, "y": 0 },
{ "label": "PrintScreen", "matrix": [9, 7], "x": 14, "y": 0 },
{ "label": "Delete", "matrix": [6, 5], "x": 15.5, "y": 0 },
{ "label": "`", "matrix": [1, 6], "x": 0, "y": 1.25 },
{ "label": "1", "matrix": [1, 7], "x": 1, "y": 1.25 },
{ "label": "2", "matrix": [2, 7], "x": 2, "y": 1.25 },
{ "label": "3", "matrix": [3, 7], "x": 3, "y": 1.25 },
{ "label": "4", "matrix": [4, 7], "x": 4, "y": 1.25 },
{ "label": "5", "matrix": [4, 6], "x": 5, "y": 1.25 },
{ "label": "6", "matrix": [5, 6], "x": 6, "y": 1.25 },
{ "label": "7", "matrix": [5, 7], "x": 7, "y": 1.25 },
{ "label": "8", "matrix": [6, 7], "x": 8, "y": 1.25 },
{ "label": "9", "matrix": [7, 7], "x": 9, "y": 1.25 },
{ "label": "0", "matrix": [8, 7], "x": 10, "y": 1.25 },
{ "label": "-", "matrix": [8, 6], "x": 11, "y": 1.25 },
{ "label": "=", "matrix": [6, 6], "x": 12, "y": 1.25 },
{ "label": "Backspace", "matrix": [10, 1], "w": 2, "x": 13, "y": 1.25 },
{ "label": "Home", "matrix": [0, 2], "x": 15.5, "y": 1.25 },
{ "label": "Tab", "matrix": [1, 1], "w": 1.5, "x": 0, "y": 2.25 },
{ "label": "Q", "matrix": [1, 0], "x": 1.5, "y": 2.25 },
{ "label": "W", "matrix": [2, 0], "x": 2.5, "y": 2.25 },
{ "label": "E", "matrix": [3, 0], "x": 3.5, "y": 2.25 },
{ "label": "R", "matrix": [4, 0], "x": 4.5, "y": 2.25 },
{ "label": "T", "matrix": [4, 1], "x": 5.5, "y": 2.25 },
{ "label": "Y", "matrix": [5, 1], "x": 6.5, "y": 2.25 },
{ "label": "U", "matrix": [5, 0], "x": 7.5, "y": 2.25 },
{ "label": "I", "matrix": [6, 0], "x": 8.5, "y": 2.25 },
{ "label": "O", "matrix": [7, 0], "x": 9.5, "y": 2.25 },
{ "label": "P", "matrix": [8, 0], "x": 10.5, "y": 2.25 },
{ "label": "[", "matrix": [8, 1], "x": 11.5, "y": 2.25 },
{ "label": "]", "matrix": [6, 1], "x": 12.5, "y": 2.25 },
{ "label": "PGUP", "matrix": [1, 5], "x": 15.5, "y": 2.25 },
{ "label": "Caps Lock", "matrix": [2, 1], "w": 1.75, "x": 0, "y": 3.25 },
{ "label": "A", "matrix": [1, 2], "x": 1.75, "y": 3.25 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 3.25 },
{ "label": "D", "matrix": [3, 2], "x": 3.75, "y": 3.25 },
{ "label": "F", "matrix": [4, 2], "x": 4.75, "y": 3.25 },
{ "label": "G", "matrix": [4, 3], "x": 5.75, "y": 3.25 },
{ "label": "H", "matrix": [5, 3], "x": 6.75, "y": 3.25 },
{ "label": "J", "matrix": [5, 2], "x": 7.75, "y": 3.25 },
{ "label": "K", "matrix": [6, 2], "x": 8.75, "y": 3.25 },
{ "label": "L", "matrix": [7, 2], "x": 9.75, "y": 3.25 },
{ "label": ";", "matrix": [8, 2], "x": 10.75, "y": 3.25 },
{ "label": "'", "matrix": [8, 3], "x": 11.75, "y": 3.25 },
{ "label": "|", "matrix": [10, 2], "x": 12.75, "y": 3.25 },
{ "label": "ENTER", "matrix": [10, 4], "w": 1.25, "h": 2, "x": 13.75, "y": 2.25 },
{ "label": "PGDN", "matrix": [2, 5], "x": 15.5, "y": 3.25 },
{ "label": "L Shift", "matrix": [0, 0], "w": 1.25, "x": 0, "y": 4.25 },
{ "label": "|", "matrix": [0, 1], "x": 1.25, "y": 4.25 },
{ "label": "Z", "matrix": [1, 4], "x": 2.25, "y": 4.25 },
{ "label": "X", "matrix": [2, 4], "x": 3.25, "y": 4.25 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 4.25 },
{ "label": "V", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
{ "label": "B", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
{ "label": "N", "matrix": [5, 5], "x": 7.25, "y": 4.25 },
{ "label": "M", "matrix": [5, 4], "x": 8.25, "y": 4.25 },
{ "label": ",", "matrix": [6, 4], "x": 9.25, "y": 4.25 },
{ "label": ".", "matrix": [7, 4], "x": 10.25, "y": 4.25 },
{ "label": "/", "matrix": [8, 5], "x": 11.25, "y": 4.25 },
{ "label": "R Shift", "matrix": [9, 1], "w": 1.75, "x": 12.25, "y": 4.25 },
{ "label": "Up", "matrix": [3, 5], "x": 14.25, "y": 4.5 },
{ "label": "End", "matrix": [7, 5], "x": 15.5, "y": 4.25 },
{ "label": "L Ctrl", "matrix": [0, 6], "w": 1.25, "x": 0, "y": 5.25 },
{ "label": "L Win", "matrix": [9, 0], "w": 1.25, "x": 1.25, "y": 5.25 },
{ "label": "L Alt", "matrix": [9, 3], "w": 1.25, "x": 2.5, "y": 5.25 },
{ "label": "Space", "matrix": [9, 4], "w": 6.25, "x": 3.75, "y": 5.25 },
{ "label": "R Alt", "matrix": [9, 5], "x": 10, "y": 5.25 },
{ "label": "FN", "matrix": [9, 2], "x": 11, "y": 5.25 },
{ "label": "R Ctrl", "matrix": [0, 4], "x": 12, "y": 5.25 },
{ "label": "Left", "matrix": [0, 3], "x": 13.25, "y": 5.5 },
{ "label": "Down", "matrix": [7, 3], "x": 14.25, "y": 5.5 },
{ "label": "Right", "matrix": [0, 5], "x": 15.25, "y": 5.5 }
]
}
}
}

View File

@ -0,0 +1,206 @@
/* Copyright 2023 GSKY <gskyGit@gsky.com.tw>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "iso.h"
#ifdef RGB_MATRIX_ENABLE
const aw20216s_led_t g_aw20216s_leds[AW20216S_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
//{0, CS1_SW4, CS2_SW4, CS3_SW4}, // 0, k00, Esc
{0, SW1_CS1, SW1_CS2, SW1_CS3}, // Esc
{0, SW2_CS1, SW2_CS2, SW2_CS3}, // F1
{0, SW3_CS1, SW3_CS2, SW3_CS3}, // F2
{0, SW4_CS1, SW4_CS2, SW4_CS3}, // F3
{0, SW5_CS1, SW5_CS2, SW5_CS3}, // F4
{0, SW6_CS1, SW6_CS2, SW6_CS3}, // F5
{0, SW7_CS1, SW7_CS2, SW7_CS3}, // F6
{0, SW8_CS1, SW8_CS2, SW8_CS3}, // F7
{0, SW9_CS1, SW9_CS2, SW9_CS3}, // F8
{0, SW10_CS1, SW10_CS2, SW10_CS3}, // F9
{0, SW11_CS1, SW11_CS2, SW11_CS3}, // F10
{0, SW12_CS1, SW12_CS2, SW12_CS3}, // F11
{1, SW1_CS1, SW1_CS2, SW1_CS3}, // F12
{1, SW1_CS4, SW1_CS5, SW1_CS6}, // Printscreen
{1, SW3_CS4, SW3_CS5, SW3_CS6}, // Delete
{0, SW1_CS4, SW1_CS5, SW1_CS6}, // `
{0, SW2_CS4, SW2_CS5, SW2_CS6}, // 1
{0, SW3_CS4, SW3_CS5, SW3_CS6}, // 2
{0, SW4_CS4, SW4_CS5, SW4_CS6}, // 3
{0, SW5_CS4, SW5_CS5, SW5_CS6}, // 4
{0, SW6_CS4, SW6_CS5, SW6_CS6}, // 5
{0, SW7_CS4, SW7_CS5, SW7_CS6}, // 6
{0, SW8_CS4, SW8_CS5, SW8_CS6}, // 7
{0, SW9_CS4, SW9_CS5, SW9_CS6}, // 8
{0, SW10_CS4, SW10_CS5, SW10_CS6}, // 9
{0, SW11_CS4, SW11_CS5, SW11_CS6}, // 0
{0, SW12_CS4, SW12_CS5, SW12_CS6}, // -
{1, SW5_CS1, SW5_CS2, SW5_CS3}, // =
{1, SW7_CS1, SW7_CS2, SW7_CS3}, // Backspace
{1, SW5_CS4, SW5_CS5, SW5_CS6}, // Home
{0, SW1_CS7, SW1_CS8, SW1_CS9}, // Tab
{0, SW2_CS7, SW2_CS8, SW2_CS9}, // Q
{0, SW3_CS7, SW3_CS8, SW3_CS9}, // W
{0, SW4_CS7, SW4_CS8, SW4_CS9}, // E
{0, SW5_CS7, SW5_CS8, SW5_CS9}, // R
{0, SW6_CS7, SW6_CS8, SW6_CS9}, // T
{0, SW7_CS7, SW7_CS8, SW7_CS9}, // Y
{0, SW8_CS7, SW8_CS8, SW8_CS9}, // U
{0, SW9_CS7, SW9_CS8, SW9_CS9}, // I
{0, SW10_CS7, SW10_CS8, SW10_CS9}, // O
{0, SW11_CS7, SW11_CS8, SW11_CS9}, // P
{0, SW12_CS7, SW12_CS8, SW12_CS9}, // [
{1, SW8_CS1, SW8_CS2, SW8_CS3}, // ]
{1, SW4_CS4, SW4_CS5, SW4_CS6}, // PGUP
{0, SW1_CS10, SW1_CS11, SW1_CS12}, // Caps Lock
{0, SW2_CS10, SW2_CS11, SW2_CS12}, // A
{0, SW3_CS10, SW3_CS11, SW3_CS12}, // S
{0, SW4_CS10, SW4_CS11, SW4_CS12}, // D
{0, SW5_CS10, SW5_CS11, SW5_CS12}, // F
{0, SW6_CS10, SW6_CS11, SW6_CS12}, // G
{0, SW7_CS10, SW7_CS11, SW7_CS12}, // H
{0, SW8_CS10, SW8_CS11, SW8_CS12}, // J
{0, SW9_CS10, SW9_CS11, SW9_CS12}, // K
{0, SW10_CS10, SW10_CS11, SW10_CS12}, // L
{0, SW11_CS10, SW11_CS11, SW11_CS12}, // ;
{0, SW12_CS10, SW12_CS11, SW12_CS12}, // '
{1, SW9_CS1, SW9_CS2, SW9_CS3}, // ||
{1, SW11_CS1, SW11_CS2, SW11_CS3}, // Enter
{1, SW7_CS4, SW7_CS5, SW7_CS6}, // PGDN
{0, SW1_CS13, SW1_CS14, SW1_CS15}, // L Shift
{0, SW12_CS13, SW12_CS14, SW12_CS15}, // |
{0, SW2_CS13, SW2_CS14, SW2_CS15}, // Z
{0, SW3_CS13, SW3_CS14, SW3_CS15}, // X
{0, SW4_CS13, SW4_CS14, SW4_CS15}, // C
{0, SW5_CS13, SW5_CS14, SW5_CS15}, // V
{0, SW6_CS13, SW6_CS14, SW6_CS15}, // B
{0, SW7_CS13, SW7_CS14, SW7_CS15}, // N
{0, SW8_CS13, SW8_CS14, SW8_CS15}, // M
{0, SW9_CS13, SW9_CS14, SW9_CS15}, // ,
{0, SW10_CS13, SW10_CS14, SW10_CS15}, // .
{0, SW11_CS13, SW11_CS14, SW11_CS15}, // "/""
{1, SW8_CS4, SW8_CS5, SW8_CS6}, // R Shift
{1, SW9_CS4, SW9_CS5, SW9_CS6}, // Up
{1, SW6_CS4, SW6_CS5, SW6_CS6}, // END
{0, SW1_CS16, SW1_CS17, SW1_CS18}, // L Ctrl
{0, SW2_CS16, SW2_CS17, SW2_CS18}, // L Win
{0, SW3_CS16, SW3_CS17, SW3_CS18}, // L Alt
{0, SW4_CS16, SW4_CS17, SW4_CS18}, // LED1
{0, SW5_CS16, SW5_CS17, SW5_CS18}, // LED2
{0, SW6_CS16, SW6_CS17, SW6_CS18}, // Space
{0, SW7_CS16, SW7_CS17, SW7_CS18}, // LED3
{0, SW8_CS16, SW8_CS17, SW8_CS18}, // LED4
{0, SW9_CS16, SW9_CS17, SW9_CS18}, // R Alt
{0, SW10_CS16, SW10_CS17, SW10_CS18}, // FN
{0, SW12_CS16, SW12_CS17, SW12_CS18}, // R Ctrl
{1, SW10_CS4, SW10_CS5, SW10_CS6}, // Left
{1, SW11_CS4, SW11_CS5, SW11_CS6}, // Down
{1, SW5_CS10, SW5_CS11, SW5_CS12}, // Right
};
#endif
#ifdef EEPROM_ENABLE
#include "spi_master.h"
void spi_init(void) {
static bool is_initialised = false;
if (!is_initialised) {
is_initialised = true;
// Try releasing special pins for a short time
gpio_set_pin_input(SPI_SCK_PIN);
gpio_set_pin_input(SPI_MOSI_PIN);
gpio_set_pin_input(SPI_MISO_PIN);
chThdSleepMilliseconds(10);
palSetPadMode(PAL_PORT(SPI_SCK_PIN), PAL_PAD(SPI_SCK_PIN), PAL_MODE_ALTERNATE(SPI_SCK_PAL_MODE) | PAL_OUTPUT_TYPE_PUSHPULL | PAL_OUTPUT_SPEED_HIGHEST | PAL_WB32_CURRENT_LEVEL3);
palSetPadMode(PAL_PORT(SPI_MOSI_PIN), PAL_PAD(SPI_MOSI_PIN), PAL_MODE_ALTERNATE(SPI_MOSI_PAL_MODE) | PAL_OUTPUT_TYPE_PUSHPULL | PAL_OUTPUT_SPEED_HIGHEST);
palSetPadMode(PAL_PORT(SPI_MISO_PIN), PAL_PAD(SPI_MISO_PIN), PAL_MODE_ALTERNATE(SPI_MISO_PAL_MODE) | PAL_OUTPUT_TYPE_PUSHPULL | PAL_OUTPUT_SPEED_HIGHEST);
}
}
#endif
bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
return false;
}
if (host_keyboard_led_state().caps_lock) {
RGB_MATRIX_INDICATOR_SET_COLOR(44, 255, 255, 255);
}
return false;
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
}
switch (keycode) {
case RGB_R:
if (record->event.pressed) {
rgb_matrix_sethsv(0, 255, 255);
rgb_matrix_mode(1);
}
return false; /* Skip all further processing of this key */
case RGB_G:
if (record->event.pressed) {
rgb_matrix_sethsv(85, 255, 255);
rgb_matrix_mode(1);
}
return false; /* Skip all further processing of this key */
case RGB_B:
if (record->event.pressed) {
rgb_matrix_sethsv(170, 255, 255);
rgb_matrix_mode(1);
}
return false; /* Skip all further processing of this key */
case RGB_W:
if (record->event.pressed) {
rgb_matrix_sethsv(0, 0, 255);
rgb_matrix_mode(1);
}
return false; /* Skip all further processing of this key */
case SW_cy:
rgb_matrix_sethsv(0, 255, 255);
rgb_matrix_mode(13);
return false; /* Skip all further processing of this key */
default:
return true; /* Process all other keycodes normally */
}
};

View File

@ -0,0 +1,27 @@
/* Copyright 2023 GSKY <gskyGit@gsky.com.tw>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
enum my_keycodes {
RGB_R = QK_KB,
RGB_G,
RGB_B,
RGB_W,
SW_cy,
};

View File

@ -0,0 +1,46 @@
/* Copyright 2023 GSKY <gskyGit@gsky.com.tw>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: Base Layer (Default Layer)
*/
[0] = LAYOUT(
QK_GESC, 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_DEL,
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_HOME,
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_PGUP,
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_PGDN,
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_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, RGB_TOG, RGB_MOD, RGB_RMOD, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______,
_______, _______, _______, _______, MO(2), _______, _______, RGB_SPD, RGB_VAD, RGB_SPI),
[2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_R, RGB_G, RGB_B, RGB_W, SW_cy, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};

View File

@ -0,0 +1,46 @@
/* Copyright 2023 GSKY <gskyGit@gsky.com.tw>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: Base Layer (Default Layer)
*/
[0] = LAYOUT(
QK_GESC, 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_DEL,
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_HOME,
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_PGUP,
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_PGDN,
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_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, RGB_TOG, RGB_MOD, RGB_RMOD, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______,
_______, _______, _______, _______, MO(2), _______, _______, RGB_SPD, RGB_VAD, RGB_SPI),
[2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_R, RGB_G, RGB_B, RGB_W, SW_cy, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};

View File

@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@ -0,0 +1,25 @@
/* Copyright (C) 2023 Westberry Technology (ChangZhou) Corp., Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef WB32_SPI_USE_QSPI
#define WB32_SPI_USE_QSPI TRUE
#undef WB32_SPI_USE_SPIM2
#define WB32_SPI_USE_SPIM2 TRUE

View File

@ -0,0 +1,25 @@
# ProjectD 75% ISO
![ProjectD 75 ISO](https://imgur.com/pbGXTUd.png)
A 75% keyboard with the WestBerry Q95 microcontroller integrated into PCB.
* Keyboard Maintainer: [GSKY](https://github.com/gksygithub)
* Hardware Supported: ProjectD 75% ISO PCB
* Hardware Availability: [GSKY](https://github.com/gskygithub/projectd_75_iso)
Make example for this keyboard (after setting up your build environment):
make projectd/75/iso:default
Flashing example for this keyboard:
make projectd/75/iso:default:flash
To reset the board into bootloader mode, do one of the following:
* Hold the Reset switch mounted under the space key after the USB cable is connected
* Hold the Esc key while connecting the USB cable (also erases persistent settings)
* Fn+Alt+Tab will reset the board to bootloader mode
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

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -0,0 +1,159 @@
{
"manufacturer": "rot13labs",
"keyboard_name": "H4CKB0ARD",
"maintainer": "c0ldbru",
"bootloader": "usbasploader",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["C0", "C1", "C2", "C3", "C4", "C5", "D0", "D1", "B5", "D7", "D6", "D4"],
"rows": ["B0", "B1", "B2", "B3"]
},
"processor": "atmega328p",
"usb": {
"pid": "0xBABE",
"vid": "0xBEEF",
"device_version": "13.3.7",
"no_startup_check": true
},
"ws2812": {
"pin": "B4"
},
"rgb_matrix": {
"animations": {
"cycle_up_down": true,
"jellybean_raindrops": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"pixel_fractal": true,
"rainbow_moving_chevron": true,
"cycle_pinwheel": true,
"pixel_rain": true,
"dual_beacon": true,
"hue_breathing": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_reactive_cross": true
},
"driver": "ws2812",
"default": {
"animation": "cycle_up_down"
},
"layout": [
{"flags": 4, "matrix": [0, 11], "x": 0, "y": 0},
{"flags": 4, "matrix": [0, 10], "x": 1, "y": 0},
{"flags": 4, "matrix": [0, 9], "x": 2, "y": 0},
{"flags": 4, "matrix": [0, 8], "x": 3, "y": 0},
{"flags": 4, "matrix": [0, 7], "x": 4, "y": 0},
{"flags": 4, "matrix": [0, 6], "x": 5, "y": 0},
{"flags": 4, "matrix": [0, 5], "x": 6, "y": 0},
{"flags": 4, "matrix": [0, 4], "x": 7, "y": 0},
{"flags": 4, "matrix": [0, 3], "x": 8, "y": 0},
{"flags": 4, "matrix": [0, 2], "x": 9, "y": 0},
{"flags": 4, "matrix": [0, 1], "x": 10, "y": 0},
{"flags": 4, "matrix": [0, 0], "x": 11, "y": 0},
{"flags": 4, "matrix": [1, 0], "x": 0, "y": 1},
{"flags": 4, "matrix": [1, 1], "x": 1.25, "y": 1},
{"flags": 4, "matrix": [1, 2], "x": 2.25, "y": 1},
{"flags": 4, "matrix": [1, 3], "x": 3.25, "y": 1},
{"flags": 4, "matrix": [1, 4], "x": 4.25, "y": 1},
{"flags": 4, "matrix": [1, 5], "x": 5.25, "y": 1},
{"flags": 4, "matrix": [1, 6], "x": 6.25, "y": 1},
{"flags": 4, "matrix": [1, 7], "x": 7.25, "y": 1},
{"flags": 4, "matrix": [1, 8], "x": 8.25, "y": 1},
{"flags": 4, "matrix": [1, 9], "x": 9.25, "y": 1},
{"flags": 4, "matrix": [1, 11], "x": 10.25, "y": 1},
{"flags": 4, "matrix": [2, 11], "x": 0, "y": 2},
{"flags": 4, "matrix": [2, 10], "x": 1.75, "y": 2},
{"flags": 4, "matrix": [2, 8], "x": 2.75, "y": 2},
{"flags": 4, "matrix": [2, 7], "x": 3.75, "y": 2},
{"flags": 4, "matrix": [2, 6], "x": 4.75, "y": 2},
{"flags": 4, "matrix": [2, 5], "x": 5.75, "y": 2},
{"flags": 4, "matrix": [2, 4], "x": 6.75, "y": 2},
{"flags": 4, "matrix": [2, 3], "x": 7.75, "y": 2},
{"flags": 4, "matrix": [2, 2], "x": 8.75, "y": 2},
{"flags": 4, "matrix": [2, 1], "x": 10.5, "y": 2},
{"flags": 4, "matrix": [2, 0], "x": 11.5, "y": 2},
{"flags": 4, "matrix": [3, 0], "x": 0, "y": 3},
{"flags": 4, "matrix": [3, 1], "x": 1.25, "y": 3},
{"flags": 4, "matrix": [3, 2], "x": 2.5, "y": 3},
{"flags": 4, "matrix": [3, 4], "x": 3.5, "y": 3},
{"flags": 4, "matrix": [3, 6], "x": 5.75, "y": 3},
{"flags": 4, "matrix": [3, 8], "x": 8.5, "y": 3},
{"flags": 4, "matrix": [3, 9], "x": 9.5, "y": 3},
{"flags": 4, "matrix": [3, 10], "x": 10.5, "y": 3},
{"flags": 4, "matrix": [3, 11], "x": 11.5, "y": 3}
],
"max_brightness": 100
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0, "w": 1.5},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 1},
{"matrix": [1, 2], "x": 2.25, "y": 1},
{"matrix": [1, 3], "x": 3.25, "y": 1},
{"matrix": [1, 4], "x": 4.25, "y": 1},
{"matrix": [1, 5], "x": 5.25, "y": 1},
{"matrix": [1, 6], "x": 6.25, "y": 1},
{"matrix": [1, 7], "x": 7.25, "y": 1},
{"matrix": [1, 8], "x": 8.25, "y": 1},
{"matrix": [1, 9], "x": 9.25, "y": 1},
{"matrix": [1, 11], "x": 10.25, "y": 1, "w": 2.25},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2, "w": 1.75},
{"matrix": [2, 10], "x": 10.5, "y": 2},
{"matrix": [2, 11], "x": 11.5, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
{"matrix": [3, 2], "x": 2.5, "y": 3},
{"matrix": [3, 4], "x": 3.5, "y": 3, "w": 2.25},
{"matrix": [3, 6], "x": 5.75, "y": 3, "w": 2.75},
{"matrix": [3, 8], "x": 8.5, "y": 3},
{"matrix": [3, 9], "x": 9.5, "y": 3},
{"matrix": [3, 10], "x": 10.5, "y": 3},
{"matrix": [3, 11], "x": 11.5, "y": 3}
]
}
}
}

View File

@ -0,0 +1,45 @@
/* Copyright 2024 rot13labs
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_RCTL, KC_UP, DF(1),
KC_LCTL, KC_LGUI, MO(2), KC_SPC, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT),
/* FN - symbols & audio controls */
[1] = LAYOUT(
KC_ESC, KC_MINS, KC_EQL, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_LBRC, KC_RBRC, KC_BSLS, KC_BSPC,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_COMM, KC_DOT, KC_SLSH, KC_RCTL, KC_VOLU, DF(2),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
/* ALT - numbers */
[2] = LAYOUT(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_RCTL, KC_UP, DF(3),
KC_LCTL, KC_LGUI, _______, MO(3), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT),
/* SPC - RGB control layer */
[3] = LAYOUT(
KC_ESC, KC_Q, RGB_M_SW, KC_E, RGB_M_R, KC_T, KC_Y, RGB_SPD, RGB_SPI, RGB_RMOD, RGB_MOD, KC_DEL,
KC_TAB, KC_A, RGB_M_P, KC_D, KC_F, KC_G, KC_H, RGB_SAD, RGB_SAI, RGB_TOG, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, RGB_M_B, KC_N, KC_M, KC_RCTL, RGB_VAI, DF(0),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, _______, RGB_HUD, RGB_VAD, RGB_HUI),
};

View File

@ -0,0 +1,19 @@
# h4ckb0ard
![h4ckb0ard](https://i.imgur.com/U325abR.jpg)
A 40% keyboard for hackers using the c0ldbru layout, designed to minimize space without requiring users to buy extra keycaps just to use less.
* Keyboard Maintainer: [c0ldbru](https://github.com/c0ldbru)
* Hardware Supported: h4ckb0ard // atmega328p
* Hardware Availability: [rot13labs](https://rot13labs.com)
Make example for this keyboard (after setting up your build environment):
make rot13labs/h4ckb0ard:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
You can enter the bootloader to flash on new firmware by holding down the ESC key while plugging the h4ckb0ard in.

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -0,0 +1,92 @@
{
"manufacturer": "Sleepy Craft Studios",
"keyboard_name": "sleepy_keeb",
"maintainer": "Sleepy Craft Studios",
"development_board": "promicro",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"matrix_pins": {
"cols": ["D7", "E6", "B4", "B5", "F4", "F5", "F6", "F7", "B1", "B3", "B2", "B6"],
"rows": ["D1", "D0", "D4", "C6"]
},
"rgblight": {
"animations": {
"alternating": true,
"breathing": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"static_gradient": true,
"twinkle": true
},
"led_count": 17
},
"url": "https://sleepycraftstudios.com/downloads/sleepy-keeb",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
"vid": "0x7373"
},
"ws2812": {
"pin": "D2"
},
"community_layouts": ["planck_mit"],
"layouts": {
"LAYOUT_planck_mit": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1},
{"matrix": [1, 5], "x": 5, "y": 1},
{"matrix": [1, 6], "x": 6, "y": 1},
{"matrix": [1, 7], "x": 7, "y": 1},
{"matrix": [1, 8], "x": 8, "y": 1},
{"matrix": [1, 9], "x": 9, "y": 1},
{"matrix": [1, 10], "x": 10, "y": 1},
{"matrix": [1, 11], "x": 11, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2},
{"matrix": [2, 5], "x": 5, "y": 2},
{"matrix": [2, 6], "x": 6, "y": 2},
{"matrix": [2, 7], "x": 7, "y": 2},
{"matrix": [2, 8], "x": 8, "y": 2},
{"matrix": [2, 9], "x": 9, "y": 2},
{"matrix": [2, 10], "x": 10, "y": 2},
{"matrix": [2, 11], "x": 11, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1, "y": 3},
{"matrix": [3, 2], "x": 2, "y": 3},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3},
{"matrix": [3, 6], "x": 5, "y": 3, "w": 2},
{"matrix": [3, 7], "x": 7, "y": 3},
{"matrix": [3, 8], "x": 8, "y": 3},
{"matrix": [3, 9], "x": 9, "y": 3},
{"matrix": [3, 10], "x": 10, "y": 3},
{"matrix": [3, 11], "x": 11, "y": 3}
]
}
}
}

View File

@ -0,0 +1,31 @@
// Copyright 2024 Sleepy Craft Studios
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum keeb_layers {
_BASE,
_RAISE,
_FN
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_planck_mit(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_UP, KC_DOWN, KC_LEFT, KC_RGHT
),
[_RAISE] = LAYOUT_planck_mit(
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, RGB_MOD,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
_______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
[_FN] = LAYOUT_planck_mit(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RGB_TOG,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
};

View File

@ -0,0 +1,31 @@
// Copyright 2024 Sleepy Craft Studios
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum keeb_layers {
_BASE,
_RAISE,
_FN
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_planck_mit(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_UP, KC_DOWN, KC_LEFT, KC_RGHT
),
[_RAISE] = LAYOUT_planck_mit(
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, RGB_MOD,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
_______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
[_FN] = LAYOUT_planck_mit(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RGB_TOG,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
};

View File

@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@ -0,0 +1,27 @@
# Sleepy Keeb
![sleepy_keeb](https://i.imgur.com/y3cessF.jpeg)
The Sleepy Keeb is a hand-wired keyboard based on the 4x12 Planck layout. The Sleepy Keeb integrates hot-swap socket and diode holders into the plate for easier building.
- Keyboard Maintainer: [Sleepy Craft Studios](https://github.com/sleepy-craft-studios)
- Hardware Supported: Pro Micro development board (and clones/adapations of)
- Hardware Availability: [Sleepy Craft Studios Shop](https://sleepycraftstudios.com/shop) for kits and full builds, [Sleepy Craft Studios Downloads](https://sleepycraftstudios.com/downloads) for CC-BY-SA-NC licensed stl files for 3D printing.
Make example for this keyboard (after setting up your build environment):
make sleepy_keeb:default
Flashing example for this keyboard:
make sleepy_keeb:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
- **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
- **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
- **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -0,0 +1,19 @@
/* Copyright 2022 Eason
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define WS2812_SPI_DRIVER SPID2
#define WS2812_SPI_MOSI_PAL_MODE 5

View File

@ -0,0 +1,21 @@
/* Copyright 2022 Eason
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define HAL_USE_SPI TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,739 @@
{
"keyboard_name": "Cycle7",
"manufacturer": "vertex",
"maintainer": "Eason",
"usb": {
"vid": "0x9A94",
"pid": "0x9F70",
"device_version": "0.0.1",
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"rgblight": {
"led_count": 1,
"animations": {
"breathing": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"snake": true,
"knight": true,
"christmas": true,
"static_gradient": true,
"rgb_test": true,
"alternating": true,
"twinkle": true
}
},
"ws2812": {
"pin": "B15",
"driver": "spi"
},
"matrix_pins": {
"rows": [ "A8", "A9", "A10", "B3", "A15"],
"cols": [ "A3", "A2", "A1", "A0", "C15", "C14", "B9", "B8", "B7", "B6", "A7", "A6", "A5", "A4", "B5", "B4"]
},
"diode_direction": "ROW2COL",
"processor": "STM32F103",
"bootloader": "uf2boot",
"community_layouts": [
"tkl_nofrow_ansi",
"tkl_nofrow_iso"
],
"layouts": {
"LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [4, 7], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [2, 14], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 14], "x": 15.25, "y": 1},
{"matrix": [1, 15], "x": 16.25, "y": 1},
{"matrix": [2, 15], "x": 17.25, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 16.25, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25},
{"matrix": [4, 14], "x": 15.25, "y": 4},
{"matrix": [4, 15], "x": 16.25, "y": 4},
{"matrix": [3, 14], "x": 17.25, "y": 4}
]
},
"LAYOUT_tkl_nofrow_ansi_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [4, 7], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [2, 14], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 14], "x": 15.25, "y": 1},
{"matrix": [1, 15], "x": 16.25, "y": 1},
{"matrix": [2, 15], "x": 17.25, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 16.25, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25},
{"matrix": [4, 14], "x": 15.25, "y": 4},
{"matrix": [4, 15], "x": 16.25, "y": 4},
{"matrix": [3, 14], "x": 17.25, "y": 4}
]
},
"LAYOUT_tkl_nofrow_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [2, 14], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 14], "x": 15.25, "y": 1},
{"matrix": [1, 15], "x": 16.25, "y": 1},
{"matrix": [2, 15], "x": 17.25, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [3, 15], "x": 16.25, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25},
{"matrix": [4, 14], "x": 15.25, "y": 4},
{"matrix": [4, 15], "x": 16.25, "y": 4},
{"matrix": [3, 14], "x": 17.25, "y": 4}
]
},
"LAYOUT_tkl_nofrow_iso": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [2, 14], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 14], "x": 15.25, "y": 1},
{"matrix": [1, 15], "x": 16.25, "y": 1},
{"matrix": [2, 15], "x": 17.25, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [3, 15], "x": 16.25, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25},
{"matrix": [4, 14], "x": 15.25, "y": 4},
{"matrix": [4, 15], "x": 16.25, "y": 4},
{"matrix": [3, 14], "x": 17.25, "y": 4}
]
},
"LAYOUT_tkl_nofrow_iso_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [4, 7], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [2, 14], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 14], "x": 15.25, "y": 1},
{"matrix": [1, 15], "x": 16.25, "y": 1},
{"matrix": [2, 15], "x": 17.25, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 16.25, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25},
{"matrix": [4, 14], "x": 15.25, "y": 4},
{"matrix": [4, 15], "x": 16.25, "y": 4},
{"matrix": [3, 14], "x": 17.25, "y": 4}
]
},
"LAYOUT_tkl_nofrow_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [4, 7], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [2, 14], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 14], "x": 15.25, "y": 1},
{"matrix": [1, 15], "x": 16.25, "y": 1},
{"matrix": [2, 15], "x": 17.25, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 16.25, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5},
{"matrix": [4, 14], "x": 15.25, "y": 4},
{"matrix": [4, 15], "x": 16.25, "y": 4},
{"matrix": [3, 14], "x": 17.25, "y": 4}
]
},
"LAYOUT_tkl_nofrow_ansi_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [2, 14], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 14], "x": 15.25, "y": 1},
{"matrix": [1, 15], "x": 16.25, "y": 1},
{"matrix": [2, 15], "x": 17.25, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [3, 15], "x": 16.25, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5},
{"matrix": [4, 14], "x": 15.25, "y": 4},
{"matrix": [4, 15], "x": 16.25, "y": 4},
{"matrix": [3, 14], "x": 17.25, "y": 4}
]
},
"LAYOUT_tkl_nofrow_iso_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [2, 14], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 14], "x": 15.25, "y": 1},
{"matrix": [1, 15], "x": 16.25, "y": 1},
{"matrix": [2, 15], "x": 17.25, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [3, 15], "x": 16.25, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5},
{"matrix": [4, 14], "x": 15.25, "y": 4},
{"matrix": [4, 15], "x": 16.25, "y": 4},
{"matrix": [3, 14], "x": 17.25, "y": 4}
]
},
"LAYOUT_tkl_nofrow_iso_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [4, 7], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [2, 14], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 14], "x": 15.25, "y": 1},
{"matrix": [1, 15], "x": 16.25, "y": 1},
{"matrix": [2, 15], "x": 17.25, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 16.25, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5},
{"matrix": [4, 14], "x": 15.25, "y": 4},
{"matrix": [4, 15], "x": 16.25, "y": 4},
{"matrix": [3, 14], "x": 17.25, "y": 4}
]
}
}
}

View File

@ -0,0 +1,27 @@
/* Copyright 2022 vertex
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
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_1, KC_INS, KC_HOME, 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_DEL, KC_END, 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_LSFT, KC_SLSH, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
)
};

View File

@ -0,0 +1,27 @@
/* Copyright 2022 vertex
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
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_1, KC_INS, KC_HOME, 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_DEL, KC_END, 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_LSFT, KC_SLSH, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
)
};

View File

@ -0,0 +1,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes

View File

@ -0,0 +1,22 @@
/* Copyright 2022 Eason
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef STM32_SPI_USE_SPI2
#define STM32_SPI_USE_SPI2 TRUE

View File

@ -0,0 +1,25 @@
# Cycle7
![Cycle7](https://i.imgur.com/v5d8D7h.png)
* A customizable hotswap 70% keyboard.
* Keyboard Maintainer: [EASON](https://github.com/EasonQian1)
* Hardware Supported: Cycle7 PCB
* Hardware Availability: [EASON](https://github.com/EasonQian1)
Make example for this keyboard (after setting up your build environment):
make vertex/cycle7:default
Flashing example for this keyboard:
make vertex/cycle7:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down ESC in the keyboard then replug
* **Physical reset button**: Briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT`

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -0,0 +1,54 @@
{
"manufacturer": "Viktus Design LLC",
"keyboard_name": "TX Roundup Pad",
"maintainer": "BlindAssassin111",
"build": {
"lto": true
},
"development_board": "promicro",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["F7", "F6", "F5", "F4"],
"rows": ["B5", "B4", "E6", "D7", "C6", "D4"]
},
"url": "https://viktus.design",
"usb": {
"device_version": "1.0.0",
"pid": "0x5458",
"vid": "0x5644"
},
"community_layouts": [ "numpad_6x4" ],
"layouts": {
"LAYOUT_numpad_6x4": {
"layout": [
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "K02", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "K03", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "K10", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "K11", "matrix": [1, 1], "x": 1, "y": 1},
{"label": "K12", "matrix": [1, 2], "x": 2, "y": 1},
{"label": "K13", "matrix": [1, 3], "x": 3, "y": 1},
{"label": "K20", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "K21", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "K22", "matrix": [2, 2], "x": 2, "y": 2},
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "K31", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "K23", "matrix": [2, 3], "x": 3, "y": 2, "h": 2},
{"label": "K40", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "K41", "matrix": [4, 1], "x": 1, "y": 4},
{"label": "K42", "matrix": [4, 2], "x": 2, "y": 4},
{"label": "K51", "matrix": [5, 1], "x": 0, "y": 5, "w": 2},
{"label": "K52", "matrix": [5, 2], "x": 2, "y": 5},
{"label": "K53", "matrix": [5, 3], "x": 3, "y": 4, "h": 2}
]
}
}
}

View File

@ -0,0 +1,28 @@
/* Copyright 2024 Viktus Design LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_numpad_6x4(
KC_F1, KC_F2, KC_F3, KC_F4,
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3,
KC_P0, KC_PDOT, KC_PENT
)
};

View File

@ -0,0 +1,28 @@
/* Copyright 2024 Viktus Design LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_numpad_6x4(
KC_F1, KC_F2, KC_F3, KC_F4,
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3,
KC_P0, KC_PDOT, KC_PENT
)
};

View File

@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@ -0,0 +1,27 @@
# TX Roundup Pad
![tx_roundup_pad](https://i.imgur.com/7O9CkPw.jpeg)
The PCB badge for the April 27, 2024 Texas Roundup meet in Dallas, Tx.
- Keyboard Maintainer: BlindAssassin111
- Hardware Supported: TX Roundup Pad Badge PCB
- Hardware Availability: At meetup only
Make example for this keyboard (after setting up your build environment):
make viktus/tx_roundup_pad:default
Flashing example for this keyboard:
make viktus/tx_roundup_pad:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -35,4 +35,4 @@ def userspace_compile(cli):
if len(keyboard_keymap_targets) > 0:
build_targets.extend(search_keymap_targets(keyboard_keymap_targets))
mass_compile_targets(list(set(build_targets)), cli.args.clean, cli.args.dry_run, cli.config.userspace_compile.no_temp, cli.config.userspace_compile.parallel, **build_environment(cli.args.env))
return mass_compile_targets(list(set(build_targets)), cli.args.clean, cli.args.dry_run, cli.config.userspace_compile.no_temp, cli.config.userspace_compile.parallel, **build_environment(cli.args.env))

View File

@ -222,8 +222,8 @@ def _filter_keymap_targets(target_list: List[Tuple[str, str]], filters: List[str
continue
valid_keymaps = filter(filter_class.apply, valid_keymaps)
value_str = f", {{fg_cyan}}{value}{{fg_reset}})" if value is not None else ""
cli.log.info(f'Filtering on condition: {{fg_green}}{func_name}{{fg_reset}}({{fg_cyan}}{key}{{fg_reset}}{value_str}...')
value_str = f", {{fg_cyan}}{value}{{fg_reset}}" if value is not None else ""
cli.log.info(f'Filtering on condition: {{fg_green}}{func_name}{{fg_reset}}({{fg_cyan}}{key}{{fg_reset}}{value_str})...')
elif equals_match is not None:
key = equals_match.group('key')

View File

@ -12,29 +12,29 @@ from qmk.json_encoders import UserspaceJSONEncoder
def qmk_userspace_paths():
test_dirs = {}
test_dirs = set()
# If we're already in a directory with a qmk.json and a keyboards or layouts directory, interpret it as userspace
if environ.get('ORIG_CWD') is not None:
current_dir = Path(environ['ORIG_CWD'])
while len(current_dir.parts) > 1:
if (current_dir / 'qmk.json').is_file():
test_dirs[current_dir] = True
test_dirs.add(current_dir)
current_dir = current_dir.parent
# If we have a QMK_USERSPACE environment variable, use that
if environ.get('QMK_USERSPACE') is not None:
current_dir = Path(environ['QMK_USERSPACE'])
current_dir = Path(environ['QMK_USERSPACE']).expanduser()
if current_dir.is_dir():
test_dirs[current_dir] = True
test_dirs.add(current_dir)
# If someone has configured a directory, use that
if cli.config.user.overlay_dir is not None:
current_dir = Path(cli.config.user.overlay_dir)
current_dir = Path(cli.config.user.overlay_dir).expanduser().resolve()
if current_dir.is_dir():
test_dirs[current_dir] = True
test_dirs.add(current_dir)
return list(test_dirs.keys())
return list(test_dirs)
def qmk_userspace_validate(path):

View File

@ -710,16 +710,17 @@ static bool pointing_handlers_master(matrix_row_t master_matrix[], matrix_row_t
return true;
}
# endif
static uint32_t last_update = 0;
static uint16_t last_cpi = 0;
static uint32_t last_update = 0;
static uint32_t last_cpi_update = 0;
static uint16_t last_cpi = 0;
report_mouse_t temp_state;
uint16_t temp_cpi;
bool okay = read_if_checksum_mismatch(GET_POINTING_CHECKSUM, GET_POINTING_DATA, &last_update, &temp_state, &split_shmem->pointing.report, sizeof(temp_state));
if (okay) pointing_device_set_shared_report(temp_state);
temp_cpi = pointing_device_get_shared_cpi();
if (temp_cpi && last_cpi != temp_cpi) {
if (temp_cpi) {
split_shmem->pointing.cpi = temp_cpi;
okay = transport_write(PUT_POINTING_CPI, &split_shmem->pointing.cpi, sizeof(split_shmem->pointing.cpi));
okay = send_if_condition(PUT_POINTING_CPI, &last_cpi_update, last_cpi != temp_cpi, &split_shmem->pointing.cpi, sizeof(split_shmem->pointing.cpi));
if (okay) {
last_cpi = temp_cpi;
}

View File

@ -0,0 +1,19 @@
/* Copyright 2024 leep-frog
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "test_common.h"

View File

@ -0,0 +1,18 @@
# Copyright 2024 leep-frog
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# --------------------------------------------------------------------------------
# Keep this file, even if it is empty, as a marker that this folder contains tests
# --------------------------------------------------------------------------------

View File

@ -0,0 +1,68 @@
/* Copyright 2024 leep-frog
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "keyboard_report_util.hpp"
#include "keycode.h"
#include "test_common.hpp"
#include "action_tapping.h"
#include "test_keymap_key.hpp"
using testing::_;
class HousekeepingMock {
public:
virtual ~HousekeepingMock() {}
// mock methods
MOCK_METHOD0(housekeeping_task_kb, void(void));
MOCK_METHOD0(housekeeping_task_user, void(void));
};
class Housekeeping : public TestFixture {
public:
Housekeeping() {
_housekeepingMock.reset(new ::testing::NiceMock<HousekeepingMock>());
}
virtual ~Housekeeping() {
_housekeepingMock.reset();
}
static std::unique_ptr<HousekeepingMock> _housekeepingMock;
};
std::unique_ptr<HousekeepingMock> Housekeeping::_housekeepingMock;
extern "C" {
void housekeeping_task_kb(void) {
if (Housekeeping::_housekeepingMock) {
Housekeeping::_housekeepingMock->housekeeping_task_kb();
}
}
void housekeeping_task_user(void) {
if (Housekeeping::_housekeepingMock) {
Housekeeping::_housekeepingMock->housekeeping_task_user();
}
}
}
TEST_F(Housekeeping, Works) {
TestDriver driver;
EXPECT_CALL(*_housekeepingMock, housekeeping_task_kb()).Times(1);
EXPECT_CALL(*_housekeepingMock, housekeeping_task_user()).Times(1);
run_one_scan_loop();
}

View File

@ -58,7 +58,8 @@ void TestFixture::TearDownTestCase() {}
TestFixture::TestFixture() {
m_this = this;
timer_clear();
test_logger.info() << "tapping term is " << +GET_TAPPING_TERM(KC_TRANSPARENT, &(keyrecord_t){}) << "ms" << std::endl;
keyrecord_t empty_keyrecord = {0};
test_logger.info() << "tapping term is " << +GET_TAPPING_TERM(KC_TRANSPARENT, &empty_keyrecord) << "ms" << std::endl;
}
TestFixture::~TestFixture() {
@ -175,6 +176,7 @@ void TestFixture::idle_for(unsigned time) {
test_logger.trace() << +time << " keyboard task " << (time > 1 ? "loops" : "loop") << std::endl;
for (unsigned i = 0; i < time; i++) {
keyboard_task();
housekeeping_task();
advance_time(1);
}
}

View File

@ -9,7 +9,7 @@ _qmk_install_prepare() {
return 1
fi
brew update && brew upgrade --formulae --ignore-pinned
brew update && brew upgrade --formulae
}
_qmk_install() {