Merge remote-tracking branch 'upstream/master' into docusaurus

This commit is contained in:
Nick Brassel 2023-05-01 17:26:43 +10:00
commit 6d53f61608
No known key found for this signature in database
68 changed files with 2819 additions and 113 deletions

View File

@ -37,9 +37,9 @@ For more information on bitwise operators in C, click [here](https://en.wikipedi
In practice, this means that you can check whether a given modifier is active with `get_mods() & MOD_BIT(KC_<modifier>)` (see the [list of modifier keycodes](keycodes_basic.md#modifiers)) or with `get_mods() & MOD_MASK_<modifier>` if the difference between left and right hand modifiers is not important and you want to match both. Same thing can be done for one-shot modifiers if you replace `get_mods()` with `get_oneshot_mods()`.
To check that *only* a specific set of mods is active at a time, AND the modifier state and your desired mod mask as explained above and compare the result to the mod mask itself: `get_mods() & <mod mask> == <mod mask>`.
To check that *only* a specific set of mods is active at a time, use a simple equality operator: `get_mods() == <mod mask>`.
For example, let's say you want to trigger a piece of custom code if one-shot left control and one-shot left shift are on but every other one-shot mods are off. To do so, you can compose the desired mod mask by combining the mod bits for left control and shift with `(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))` and then plug it in: `get_oneshot_mods() & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT)) == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))`. Using `MOD_MASK_CS` instead for the mod bitmask would have forced you to press four modifier keys (both versions of control and shift) to fulfill the condition.
For example, let's say you want to trigger a piece of custom code if one-shot left control and one-shot left shift are on but every other one-shot mods are off. To do so, you can compose the desired mod mask by combining the mod bits for left control and shift with `(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))` and then plug it in: `get_oneshot_mods() == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))`. Using `MOD_MASK_CS` instead for the mod bitmask would have forced you to press four modifier keys (both versions of control and shift) to fulfill the condition.
The full list of mod masks is as follows:
@ -91,7 +91,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ESC:
// Detect the activation of only Left Alt
if ((get_mods() & MOD_BIT(KC_LALT)) == MOD_BIT(KC_LALT)) {
if (get_mods() == MOD_BIT(KC_LALT)) {
if (record->event.pressed) {
// No need to register KC_LALT because it's already active.
// The Alt modifier will apply on this KC_TAB.

View File

@ -58,7 +58,7 @@ const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM sd_combo[] = {KC_S, KC_D, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
[AB_ESC] = COMBO(ab_combo, KC_ESC),
[JK_TAB] = COMBO(jk_combo, KC_TAB),
[QW_SFT] = COMBO(qw_combo, KC_LSFT),

View File

@ -450,6 +450,75 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
This allows you to toggle between scrolling and cursor movement by pressing the DRAG_SCROLL key.
### Advanced Drag Scroll
Sometimes, like with the Cirque trackpad, you will run into issues where the scrolling may be too fast.
Here is a slightly more advanced example of drag scrolling. You will be able to change the scroll speed based on the values in set in `SCROLL_DIVISOR_H` and `SCROLL_DIVISOR_V`. This bit of code is also set up so that instead of toggling the scrolling state with set_scrolling = !set_scrolling, the set_scrolling variable is set directly to record->event.pressed. This way, the drag scrolling will only be active while the DRAG_SCROLL button is held down.
```c
enum custom_keycodes {
DRAG_SCROLL = SAFE_RANGE,
};
bool set_scrolling = false;
// Modify these values to adjust the scrolling speed
#define SCROLL_DIVISOR_H 8.0
#define SCROLL_DIVISOR_V 8.0
// Variables to store accumulated scroll values
float scroll_accumulated_h = 0;
float scroll_accumulated_v = 0;
// Function to handle mouse reports and perform drag scrolling
report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
// Check if drag scrolling is active
if (set_scrolling) {
// Calculate and accumulate scroll values based on mouse movement and divisors
scroll_accumulated_h += (float)mouse_report.x / SCROLL_DIVISOR_H;
scroll_accumulated_v += (float)mouse_report.y / SCROLL_DIVISOR_V;
// Assign integer parts of accumulated scroll values to the mouse report
mouse_report.h = (int8_t)scroll_accumulated_h;
mouse_report.v = (int8_t)scroll_accumulated_v;
// Update accumulated scroll values by subtracting the integer parts
scroll_accumulated_h -= (int8_t)scroll_accumulated_h;
scroll_accumulated_v -= (int8_t)scroll_accumulated_v;
// Clear the X and Y values of the mouse report
mouse_report.x = 0;
mouse_report.y = 0;
}
return mouse_report;
}
// Function to handle key events and enable/disable drag scrolling
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case DRAG_SCROLL:
// Toggle set_scrolling when DRAG_SCROLL key is pressed or released
set_scrolling = record->event.pressed;
break;
default:
break;
}
return true;
}
// Function to handle layer changes and disable drag scrolling when not in AUTO_MOUSE_DEFAULT_LAYER
layer_state_t layer_state_set_user(layer_state_t state) {
// Disable set_scrolling if the current layer is not the AUTO_MOUSE_DEFAULT_LAYER
if (get_highest_layer(state) != AUTO_MOUSE_DEFAULT_LAYER) {
set_scrolling = false;
}
return state;
}
```
## Split Examples
The following examples make use the `SPLIT_POINTING_ENABLE` functionality and show how to manipulate the mouse report for a scrolling mode.

View File

@ -0,0 +1,336 @@
{
"manufacturer": "Mechlovin Studio",
"keyboard_name": "Aster Ergo",
"maintainer": "Bahm",
"processor": "STM32F103",
"bootloader": "stm32duino",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": true,
"console": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B1", "B0", "A7", "A6", "B4", "B3", "A15", "A5", "A2", "A1"],
"rows": ["B7", "B6", "B5", "B11", "B10", "A4"]
},
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x8701",
"vid": "0xBA00"
},
"indicators": {
"caps_lock": "B2",
"scroll_lock": "C13"
},
"layouts": {
"LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.25, "y": 0},
{"matrix": [0, 2], "x": 2.25, "y": 0},
{"matrix": [0, 3], "x": 3.25, "y": 0},
{"matrix": [0, 4], "x": 4.25, "y": 0},
{"matrix": [0, 5], "x": 5.25, "y": 0},
{"matrix": [0, 6], "x": 6.25, "y": 0},
{"matrix": [0, 7], "x": 8.25, "y": 0},
{"matrix": [0, 8], "x": 9.25, "y": 0},
{"matrix": [0, 9], "x": 10.25, "y": 0},
{"matrix": [0, 10], "x": 11.25, "y": 0},
{"matrix": [0, 11], "x": 12.25, "y": 0},
{"matrix": [0, 12], "x": 13.25, "y": 0},
{"matrix": [0, 13], "x": 14.5, "y": 0},
{"matrix": [0, 14], "x": 17.25, "y": 0},
{"matrix": [0, 15], "x": 18.25, "y": 0},
{"matrix": [0, 16], "x": 19.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
{"matrix": [1, 3], "x": 3, "y": 1.25},
{"matrix": [1, 4], "x": 4, "y": 1.25},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [1, 6], "x": 6, "y": 1.25},
{"matrix": [1, 7], "x": 8.5, "y": 1.25},
{"matrix": [1, 8], "x": 9.5, "y": 1.25},
{"matrix": [1, 9], "x": 10.5, "y": 1.25},
{"matrix": [1, 10], "x": 11.5, "y": 1.25},
{"matrix": [1, 11], "x": 12.5, "y": 1.25},
{"matrix": [1, 12], "x": 13.5, "y": 1.25},
{"matrix": [1, 13], "x": 14.5, "y": 1.25},
{"matrix": [2, 13], "x": 15.5, "y": 1.25},
{"matrix": [1, 14], "x": 17.25, "y": 1.25},
{"matrix": [1, 15], "x": 18.25, "y": 1.25},
{"matrix": [1, 16], "x": 19.25, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
{"matrix": [2, 3], "x": 3.5, "y": 2.25},
{"matrix": [2, 4], "x": 4.5, "y": 2.25},
{"matrix": [2, 5], "x": 5.5, "y": 2.25},
{"matrix": [2, 6], "x": 8, "y": 2.25},
{"matrix": [2, 7], "x": 9, "y": 2.25},
{"matrix": [2, 8], "x": 10, "y": 2.25},
{"matrix": [2, 9], "x": 11, "y": 2.25},
{"matrix": [2, 10], "x": 12, "y": 2.25},
{"matrix": [2, 11], "x": 13, "y": 2.25},
{"matrix": [2, 12], "x": 14, "y": 2.25},
{"matrix": [3, 13], "x": 15, "y": 2.25, "w": 1.5},
{"matrix": [2, 14], "x": 17.25, "y": 2.25},
{"matrix": [2, 15], "x": 18.25, "y": 2.25},
{"matrix": [2, 16], "x": 19.25, "y": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
{"matrix": [3, 3], "x": 3.75, "y": 3.25},
{"matrix": [3, 4], "x": 4.75, "y": 3.25},
{"matrix": [3, 5], "x": 5.75, "y": 3.25},
{"matrix": [3, 6], "x": 8.25, "y": 3.25},
{"matrix": [3, 7], "x": 9.25, "y": 3.25},
{"matrix": [3, 8], "x": 10.25, "y": 3.25},
{"matrix": [3, 9], "x": 11.25, "y": 3.25},
{"matrix": [3, 10], "x": 12.25, "y": 3.25},
{"matrix": [3, 11], "x": 13.25, "y": 3.25},
{"matrix": [3, 12], "x": 14.25, "y": 3.25, "w": 2.25},
{"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
{"matrix": [4, 5], "x": 5.25, "y": 4.25},
{"matrix": [4, 6], "x": 6.25, "y": 4.25},
{"matrix": [5, 7], "x": 7.75, "y": 4.25},
{"matrix": [4, 7], "x": 8.75, "y": 4.25},
{"matrix": [4, 8], "x": 9.75, "y": 4.25},
{"matrix": [4, 9], "x": 10.75, "y": 4.25},
{"matrix": [4, 10], "x": 11.75, "y": 4.25},
{"matrix": [4, 11], "x": 12.75, "y": 4.25},
{"matrix": [4, 12], "x": 13.75, "y": 4.25, "w": 1.75},
{"matrix": [4, 13], "x": 15.5, "y": 4.25},
{"matrix": [4, 15], "x": 18.25, "y": 4.25},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 4], "x": 3.75, "y": 5.25, "w": 1.25},
{"matrix": [5, 5], "x": 5, "y": 5.25, "w": 2.25},
{"matrix": [5, 8], "x": 7.75, "y": 5.25, "w": 2.75},
{"matrix": [5, 9], "x": 10.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 10], "x": 11.75, "y": 5.25, "w": 1.25},
{"matrix": [5, 11], "x": 13, "y": 5.25, "w": 1.25},
{"matrix": [5, 12], "x": 14.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 14], "x": 17.25, "y": 5.25},
{"matrix": [5, 15], "x": 18.25, "y": 5.25},
{"matrix": [5, 16], "x": 19.25, "y": 5.25}
]
},
"LAYOUT_tkl_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.25, "y": 0},
{"matrix": [0, 2], "x": 2.25, "y": 0},
{"matrix": [0, 3], "x": 3.25, "y": 0},
{"matrix": [0, 4], "x": 4.25, "y": 0},
{"matrix": [0, 5], "x": 5.25, "y": 0},
{"matrix": [0, 6], "x": 6.25, "y": 0},
{"matrix": [0, 7], "x": 8.25, "y": 0},
{"matrix": [0, 8], "x": 9.25, "y": 0},
{"matrix": [0, 9], "x": 10.25, "y": 0},
{"matrix": [0, 10], "x": 11.25, "y": 0},
{"matrix": [0, 11], "x": 12.25, "y": 0},
{"matrix": [0, 12], "x": 13.25, "y": 0},
{"matrix": [0, 13], "x": 14.5, "y": 0},
{"matrix": [0, 14], "x": 17.25, "y": 0},
{"matrix": [0, 15], "x": 18.25, "y": 0},
{"matrix": [0, 16], "x": 19.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
{"matrix": [1, 3], "x": 3, "y": 1.25},
{"matrix": [1, 4], "x": 4, "y": 1.25},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [1, 6], "x": 6, "y": 1.25},
{"matrix": [1, 7], "x": 8.5, "y": 1.25},
{"matrix": [1, 8], "x": 9.5, "y": 1.25},
{"matrix": [1, 9], "x": 10.5, "y": 1.25},
{"matrix": [1, 10], "x": 11.5, "y": 1.25},
{"matrix": [1, 11], "x": 12.5, "y": 1.25},
{"matrix": [1, 12], "x": 13.5, "y": 1.25},
{"matrix": [1, 13], "x": 14.5, "y": 1.25, "w": 2},
{"matrix": [1, 14], "x": 17.25, "y": 1.25},
{"matrix": [1, 15], "x": 18.25, "y": 1.25},
{"matrix": [1, 16], "x": 19.25, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
{"matrix": [2, 3], "x": 3.5, "y": 2.25},
{"matrix": [2, 4], "x": 4.5, "y": 2.25},
{"matrix": [2, 5], "x": 5.5, "y": 2.25},
{"matrix": [2, 6], "x": 8, "y": 2.25},
{"matrix": [2, 7], "x": 9, "y": 2.25},
{"matrix": [2, 8], "x": 10, "y": 2.25},
{"matrix": [2, 9], "x": 11, "y": 2.25},
{"matrix": [2, 10], "x": 12, "y": 2.25},
{"matrix": [2, 11], "x": 13, "y": 2.25},
{"matrix": [2, 12], "x": 14, "y": 2.25},
{"matrix": [3, 13], "x": 15, "y": 2.25, "w": 1.5},
{"matrix": [2, 14], "x": 17.25, "y": 2.25},
{"matrix": [2, 15], "x": 18.25, "y": 2.25},
{"matrix": [2, 16], "x": 19.25, "y": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
{"matrix": [3, 3], "x": 3.75, "y": 3.25},
{"matrix": [3, 4], "x": 4.75, "y": 3.25},
{"matrix": [3, 5], "x": 5.75, "y": 3.25},
{"matrix": [3, 6], "x": 8.25, "y": 3.25},
{"matrix": [3, 7], "x": 9.25, "y": 3.25},
{"matrix": [3, 8], "x": 10.25, "y": 3.25},
{"matrix": [3, 9], "x": 11.25, "y": 3.25},
{"matrix": [3, 10], "x": 12.25, "y": 3.25},
{"matrix": [3, 11], "x": 13.25, "y": 3.25},
{"matrix": [3, 12], "x": 14.25, "y": 3.25, "w": 2.25},
{"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
{"matrix": [4, 5], "x": 5.25, "y": 4.25},
{"matrix": [4, 6], "x": 6.25, "y": 4.25},
{"matrix": [5, 7], "x": 7.75, "y": 4.25},
{"matrix": [4, 7], "x": 8.75, "y": 4.25},
{"matrix": [4, 8], "x": 9.75, "y": 4.25},
{"matrix": [4, 9], "x": 10.75, "y": 4.25},
{"matrix": [4, 10], "x": 11.75, "y": 4.25},
{"matrix": [4, 11], "x": 12.75, "y": 4.25},
{"matrix": [4, 12], "x": 13.75, "y": 4.25, "w": 2.75},
{"matrix": [4, 15], "x": 18.25, "y": 4.25},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 4], "x": 3.75, "y": 5.25, "w": 1.25},
{"matrix": [5, 5], "x": 5, "y": 5.25, "w": 2.25},
{"matrix": [5, 8], "x": 7.75, "y": 5.25, "w": 2.75},
{"matrix": [5, 9], "x": 10.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 10], "x": 11.75, "y": 5.25, "w": 1.25},
{"matrix": [5, 11], "x": 13, "y": 5.25, "w": 1.25},
{"matrix": [5, 12], "x": 14.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 14], "x": 17.25, "y": 5.25},
{"matrix": [5, 15], "x": 18.25, "y": 5.25},
{"matrix": [5, 16], "x": 19.25, "y": 5.25}
]
},
"LAYOUT_tkl_iso": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.25, "y": 0},
{"matrix": [0, 2], "x": 2.25, "y": 0},
{"matrix": [0, 3], "x": 3.25, "y": 0},
{"matrix": [0, 4], "x": 4.25, "y": 0},
{"matrix": [0, 5], "x": 5.25, "y": 0},
{"matrix": [0, 6], "x": 6.25, "y": 0},
{"matrix": [0, 7], "x": 8.25, "y": 0},
{"matrix": [0, 8], "x": 9.25, "y": 0},
{"matrix": [0, 9], "x": 10.25, "y": 0},
{"matrix": [0, 10], "x": 11.25, "y": 0},
{"matrix": [0, 11], "x": 12.25, "y": 0},
{"matrix": [0, 12], "x": 13.25, "y": 0},
{"matrix": [0, 13], "x": 14.5, "y": 0},
{"matrix": [0, 14], "x": 17.25, "y": 0},
{"matrix": [0, 15], "x": 18.25, "y": 0},
{"matrix": [0, 16], "x": 19.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
{"matrix": [1, 3], "x": 3, "y": 1.25},
{"matrix": [1, 4], "x": 4, "y": 1.25},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [1, 6], "x": 6, "y": 1.25},
{"matrix": [1, 7], "x": 8.5, "y": 1.25},
{"matrix": [1, 8], "x": 9.5, "y": 1.25},
{"matrix": [1, 9], "x": 10.5, "y": 1.25},
{"matrix": [1, 10], "x": 11.5, "y": 1.25},
{"matrix": [1, 11], "x": 12.5, "y": 1.25},
{"matrix": [1, 12], "x": 13.5, "y": 1.25},
{"matrix": [1, 13], "x": 14.5, "y": 1.25, "w": 2},
{"matrix": [1, 14], "x": 17.25, "y": 1.25},
{"matrix": [1, 15], "x": 18.25, "y": 1.25},
{"matrix": [1, 16], "x": 19.25, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
{"matrix": [2, 3], "x": 3.5, "y": 2.25},
{"matrix": [2, 4], "x": 4.5, "y": 2.25},
{"matrix": [2, 5], "x": 5.5, "y": 2.25},
{"matrix": [2, 6], "x": 8, "y": 2.25},
{"matrix": [2, 7], "x": 9, "y": 2.25},
{"matrix": [2, 8], "x": 10, "y": 2.25},
{"matrix": [2, 9], "x": 11, "y": 2.25},
{"matrix": [2, 10], "x": 12, "y": 2.25},
{"matrix": [2, 11], "x": 13, "y": 2.25},
{"matrix": [2, 12], "x": 14, "y": 2.25},
{"matrix": [3, 13], "x": 15.25, "y": 2.25, "w": 1.25, "h": 2},
{"matrix": [2, 14], "x": 17.25, "y": 2.25},
{"matrix": [2, 15], "x": 18.25, "y": 2.25},
{"matrix": [2, 16], "x": 19.25, "y": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
{"matrix": [3, 3], "x": 3.75, "y": 3.25},
{"matrix": [3, 4], "x": 4.75, "y": 3.25},
{"matrix": [3, 5], "x": 5.75, "y": 3.25},
{"matrix": [3, 6], "x": 8.25, "y": 3.25},
{"matrix": [3, 7], "x": 9.25, "y": 3.25},
{"matrix": [3, 8], "x": 10.25, "y": 3.25},
{"matrix": [3, 9], "x": 11.25, "y": 3.25},
{"matrix": [3, 10], "x": 12.25, "y": 3.25},
{"matrix": [3, 11], "x": 13.25, "y": 3.25},
{"matrix": [3, 12], "x": 14.25, "y": 3.25},
{"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
{"matrix": [4, 5], "x": 5.25, "y": 4.25},
{"matrix": [4, 6], "x": 6.25, "y": 4.25},
{"matrix": [5, 7], "x": 7.75, "y": 4.25},
{"matrix": [4, 7], "x": 8.75, "y": 4.25},
{"matrix": [4, 8], "x": 9.75, "y": 4.25},
{"matrix": [4, 9], "x": 10.75, "y": 4.25},
{"matrix": [4, 10], "x": 11.75, "y": 4.25},
{"matrix": [4, 11], "x": 12.75, "y": 4.25},
{"matrix": [4, 12], "x": 13.75, "y": 4.25, "w": 2.75},
{"matrix": [4, 15], "x": 18.25, "y": 4.25},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 4], "x": 3.75, "y": 5.25, "w": 1.25},
{"matrix": [5, 5], "x": 5, "y": 5.25, "w": 2.25},
{"matrix": [5, 8], "x": 7.75, "y": 5.25, "w": 2.75},
{"matrix": [5, 9], "x": 10.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 10], "x": 11.75, "y": 5.25, "w": 1.25},
{"matrix": [5, 11], "x": 13, "y": 5.25, "w": 1.25},
{"matrix": [5, 12], "x": 14.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 14], "x": 17.25, "y": 5.25},
{"matrix": [5, 15], "x": 18.25, "y": 5.25},
{"matrix": [5, 16], "x": 19.25, "y": 5.25}
]
}
}
}

View File

@ -0,0 +1,28 @@
/* Copyright 2023 Mechlovin' Studio
*
* 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_tkl_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
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_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_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPACE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
)
};

View File

@ -0,0 +1,52 @@
/* Copyright 2023 Mechlovin' Studio
*
* 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_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
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_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_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(2), KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPACE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@ -0,0 +1,3 @@
# This file intentionally left blank
VIA_ENABLE = yes
LTO_ENABLE = yes

View File

@ -0,0 +1,25 @@
# bahm/aster_ergo
The Aster Ergo PCB for the Aster Ergo keyboard (A TKL ergo keyboarđ)
* Keyboard Maintainer: [mechlovin](https://github.com/mechlovin)
* Hardware Supported: Aster Ergo PCB, APM32F103
* Hardware Availability: [GH](https://geekhack.org/index.php?topic=116962.0)
Make example for this keyboard (after setting up your build environment):
make bahm/aster_ergo:default
Flashing example for this keyboard:
make bahm/aster_ergo: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

@ -5,9 +5,9 @@
"maintainer": "SamuraiKek",
"debounce": 2,
"usb": {
"vid": "0xFEED",
"pid": "0x0000",
"device_version": "0.0.2"
"vid": "0x424D",
"pid": "0x4D4E",
"device_version": "1.0.0"
},
"split": {
"soft_serial_pin": "D0"
@ -16,7 +16,7 @@
"bootloader": "atmel-dfu",
"layouts": {
"LAYOUT": {
"layout": [
"layout": [
{"label":"Esc", "x":0, "y":0.75},
{"label":"1", "x":1, "y":0.5},
{"label":"2", "x":2, "y":0.25},

View File

@ -16,4 +16,3 @@
#pragma once
#define EE_HANDS

View File

@ -15,13 +15,13 @@
*/
#include QMK_KEYBOARD_H
enum custom_keycodes {
_QWERTY,
_LOWER
enum custom_layers {
_QWERTY,
_LOWER
};
#define LOWER MO(_LOWER)
/*
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05,
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15,
@ -57,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_LCTL, KC_HOME, KC_INS, KC_DEL, KC_LGUI, KC_SPC, KC_LALT, KC_ENT, KC_BSPC, LOWER, KC_LBRC, KC_RBRC, KC_END, KC_GRV
KC_LCTL, KC_HOME, KC_INS, KC_DEL, KC_LGUI, KC_SPC, KC_LALT, KC_ENT, KC_BSPC, LOWER, KC_LBRC, KC_RBRC, KC_END, KC_GRV
// └────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
),

View File

@ -0,0 +1,76 @@
/* Copyright 2021 SamuraiKek
*
* 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
enum custom_layers {
_QWERTY,
_FN1
};
#define FN1 MO(_FN1)
/*
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05,
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15,
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25,
L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35,
L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46,
[_UNIVERSAL] = LAYOUT(
// ┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
// └────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
)
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
// ┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_LCTL, KC_HOME, KC_INS, KC_DEL, KC_LGUI, KC_SPC, KC_LALT, KC_ENT, KC_BSPC, FN1, KC_LBRC, KC_RBRC, KC_END, KC_GRV
// └────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
),
[_FN1] = LAYOUT(
// ┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, QK_BOOT, _______, _______, _______, KC_UP, _______, KC_MPLY, KC_F12,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT,KC_VOLD, KC_VOLU,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_MPRV, KC_MNXT, _______, _______,
// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
_______, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, _______
// └────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
)
};

View File

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

View File

@ -2,7 +2,7 @@
"manufacturer": "Zach White",
"keyboard_name": "DirectPins ProMicro",
"maintainer": "skullydazed",
"bootloader": "atmel-dfu",
"development_board": "promicro",
"features": {
"bootmagic": true,
"extrakey": true,
@ -22,7 +22,6 @@
["B5", "B6"]
]
},
"processor": "atmega32u4",
"usb": {
"device_version": "0.0.1",
"pid": "0x2320",

View File

@ -0,0 +1,98 @@
/*
* Copyright 2023 KBDCraft
* Copyright 2023 Adophoxia <andyao1528@gmail.com>
*
* 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 "quantum.h"
#ifdef RGB_MATRIX_ENABLE
const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, CS14_SW1, CS13_SW1, CS15_SW1},
{0, CS14_SW2, CS13_SW2, CS15_SW2},
{0, CS14_SW3, CS13_SW3, CS15_SW3},
{0, CS14_SW4, CS13_SW4, CS15_SW4},
{0, CS14_SW5, CS13_SW5, CS15_SW5},
{0, CS14_SW6, CS13_SW6, CS15_SW6},
{0, CS14_SW7, CS13_SW7, CS15_SW7},
{0, CS32_SW1, CS31_SW1, CS33_SW1},
{0, CS32_SW2, CS31_SW2, CS33_SW2},
{0, CS32_SW3, CS31_SW3, CS33_SW3},
{0, CS32_SW4, CS31_SW4, CS33_SW4},
{0, CS32_SW5, CS31_SW5, CS33_SW5},
{0, CS32_SW6, CS31_SW6, CS33_SW6},
{0, CS32_SW7, CS31_SW7, CS33_SW7},
{0, CS23_SW1, CS24_SW1, CS22_SW1},
{0, CS23_SW2, CS24_SW2, CS22_SW2},
{0, CS23_SW3, CS24_SW3, CS22_SW3},
{0, CS23_SW4, CS24_SW4, CS22_SW4},
{0, CS23_SW5, CS24_SW5, CS22_SW5},
{0, CS23_SW6, CS24_SW6, CS22_SW6},
{0, CS23_SW7, CS24_SW7, CS22_SW7},
{0, CS35_SW1, CS34_SW1, CS36_SW1},
{0, CS35_SW2, CS34_SW2, CS36_SW2},
{0, CS35_SW3, CS34_SW3, CS36_SW3},
{0, CS35_SW4, CS34_SW4, CS36_SW4},
{0, CS35_SW5, CS34_SW5, CS36_SW5},
{0, CS35_SW6, CS34_SW6, CS36_SW6},
{0, CS35_SW7, CS34_SW7, CS36_SW7},
{0, CS17_SW1, CS16_SW1, CS18_SW1},
{0, CS17_SW2, CS16_SW2, CS18_SW2},
{0, CS17_SW3, CS16_SW3, CS18_SW3},
{0, CS17_SW4, CS16_SW4, CS18_SW4},
{0, CS17_SW5, CS16_SW5, CS18_SW5},
{0, CS17_SW6, CS16_SW6, CS18_SW6},
{0, CS17_SW7, CS16_SW7, CS18_SW7},
{0, CS26_SW1, CS25_SW1, CS27_SW1},
{0, CS26_SW2, CS25_SW2, CS27_SW2},
{0, CS26_SW3, CS25_SW3, CS27_SW3},
{0, CS26_SW4, CS25_SW4, CS27_SW4},
{0, CS26_SW5, CS25_SW5, CS27_SW5},
{0, CS26_SW7, CS25_SW7, CS27_SW7},
{0, CS20_SW1, CS19_SW1, CS21_SW1},
{0, CS20_SW2, CS19_SW2, CS21_SW2},
{0, CS20_SW3, CS19_SW3, CS21_SW3},
{0, CS20_SW4, CS19_SW4, CS21_SW4},
{0, CS20_SW5, CS19_SW5, CS21_SW5},
{0, CS20_SW6, CS19_SW6, CS21_SW6},
{0, CS20_SW7, CS19_SW7, CS21_SW7},
{0, CS29_SW1, CS28_SW1, CS30_SW1},
{0, CS29_SW2, CS28_SW2, CS30_SW2},
{0, CS29_SW3, CS28_SW3, CS30_SW3},
{0, CS29_SW4, CS28_SW4, CS30_SW4},
{0, CS29_SW5, CS28_SW5, CS30_SW5},
{0, CS29_SW6, CS28_SW6, CS30_SW6},
{0, CS29_SW7, CS28_SW7, CS30_SW7},
{0, CS9_SW1, CS10_SW1, CS8_SW1},
{0, CS9_SW2, CS10_SW2, CS8_SW2},
{0, CS9_SW3, CS10_SW3, CS8_SW3},
{0, CS9_SW6, CS10_SW6, CS8_SW6},
{0, CS2_SW3, CS1_SW3, CS3_SW3},
{0, CS2_SW4, CS1_SW4, CS3_SW4},
{0, CS2_SW5, CS1_SW5, CS3_SW5},
{0, CS2_SW6, CS1_SW6, CS3_SW6},
{0, CS2_SW7, CS1_SW7, CS3_SW7}
};
#endif

View File

@ -0,0 +1,34 @@
/*
* Copyright 2023 KBDCraft
* Copyright 2023 Adophoxia <andyao1528@gmail.com>
*
* 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 I2C1_SCL_PIN B8
#define I2C1_SDA_PIN B9
#define I2C1_CLOCK_SPEED 400000
#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_16_9
#define DRIVER_COUNT 1
#define DRIVER_ADDR_1 0b0110000
#define RGB_MATRIX_LED_COUNT 64
/* turn off effects when suspended */
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_KEYPRESSES

View File

@ -0,0 +1,23 @@
/*
* Copyright 2023 KBDCraft
* Copyright 2023 Adophoxia <andyao1528@gmail.com>
*
* 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_I2C TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,213 @@
{
"keyboard_name": "Adam64",
"manufacturer": "KBDCRAFT",
"url": "https://kbdcraft.store/products/adam",
"maintainer": "KBDCraft",
"usb": {
"vid": "0x586A",
"pid": "0xB001",
"device_version": "0.0.1"
},
"processor": "STM32F401",
"bootloader": "stm32-dfu",
"diode_direction": "ROW2COL",
"matrix_pins": {
"rows": ["C8", "C9", "A8", "A10", "B14"],
"cols": ["B15", "C6", "C7", "A15", "B7", "C10", "C11", "C12", "D2", "B3", "B4", "B5", "A0", "A1"]
},
"features":{
"bootmagic": true,
"mousekey": true,
"extrakey": true,
"nkro": true,
"console": false,
"command": false,
"rgb_matrix": true
},
"rgb_matrix":{
"driver": "IS31FL3741",
"max_brightness": 150,
"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,
"rainbow_moving_chevron": true,
"cycle_out_in": true,
"cycle_out_in_dual": 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_rain": true,
"pixel_flow": true,
"pixel_fractal": true,
"typing_heatmap": true,
"digital_rain": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"layout": [
{"flags": 4, "matrix": [0, 0], "x": 0, "y": 0 },
{"flags": 4, "matrix": [0, 1], "x": 16, "y": 0 },
{"flags": 4, "matrix": [0, 2], "x": 32, "y": 0 },
{"flags": 4, "matrix": [0, 3], "x": 48, "y": 0 },
{"flags": 4, "matrix": [0, 4], "x": 64, "y": 0 },
{"flags": 4, "matrix": [0, 5], "x": 80, "y": 0 },
{"flags": 4, "matrix": [0, 6], "x": 96, "y": 0 },
{"flags": 4, "matrix": [0, 7], "x": 112, "y": 0 },
{"flags": 4, "matrix": [0, 8], "x": 128, "y": 0 },
{"flags": 4, "matrix": [0, 9], "x": 144, "y": 0 },
{"flags": 4, "matrix": [0, 10], "x": 160, "y": 0 },
{"flags": 4, "matrix": [0, 11], "x": 176, "y": 0 },
{"flags": 4, "matrix": [0, 12], "x": 192, "y": 0 },
{"flags": 4, "matrix": [0, 13], "x": 208, "y": 0 },
{"flags": 4, "matrix": [1, 0], "x": 0, "y": 10 },
{"flags": 4, "matrix": [1, 1], "x": 16, "y": 10 },
{"flags": 4, "matrix": [1, 2], "x": 32, "y": 10 },
{"flags": 4, "matrix": [1, 3], "x": 48, "y": 10 },
{"flags": 4, "matrix": [1, 4], "x": 64, "y": 10 },
{"flags": 4, "matrix": [1, 5], "x": 80, "y": 10 },
{"flags": 4, "matrix": [1, 6], "x": 96, "y": 10 },
{"flags": 4, "matrix": [1, 7], "x": 112, "y": 10 },
{"flags": 4, "matrix": [1, 8], "x": 128, "y": 10 },
{"flags": 4, "matrix": [1, 9], "x": 144, "y": 10 },
{"flags": 4, "matrix": [1, 10], "x": 160, "y": 10 },
{"flags": 4, "matrix": [1, 11], "x": 176, "y": 10 },
{"flags": 4, "matrix": [1, 12], "x": 192, "y": 10 },
{"flags": 4, "matrix": [1, 13], "x": 208, "y": 10 },
{"flags": 4, "matrix": [2, 0], "x": 0, "y": 20 },
{"flags": 4, "matrix": [2, 1], "x": 16, "y": 20 },
{"flags": 4, "matrix": [2, 2], "x": 32, "y": 20 },
{"flags": 4, "matrix": [2, 3], "x": 48, "y": 20 },
{"flags": 4, "matrix": [2, 4], "x": 64, "y": 20 },
{"flags": 4, "matrix": [2, 5], "x": 80, "y": 20 },
{"flags": 4, "matrix": [2, 6], "x": 96, "y": 20 },
{"flags": 4, "matrix": [2, 7], "x": 112, "y": 20 },
{"flags": 4, "matrix": [2, 8], "x": 128, "y": 20 },
{"flags": 4, "matrix": [2, 9], "x": 144, "y": 20 },
{"flags": 4, "matrix": [2, 10], "x": 160, "y": 20 },
{"flags": 4, "matrix": [2, 11], "x": 176, "y": 20 },
{"flags": 4, "matrix": [2, 13], "x": 208, "y": 20 },
{"flags": 4, "matrix": [3, 0], "x": 0, "y": 30 },
{"flags": 4, "matrix": [3, 1], "x": 16, "y": 30 },
{"flags": 4, "matrix": [3, 2], "x": 32, "y": 30 },
{"flags": 4, "matrix": [3, 3], "x": 48, "y": 30 },
{"flags": 4, "matrix": [3, 4], "x": 64, "y": 30 },
{"flags": 4, "matrix": [3, 5], "x": 80, "y": 30 },
{"flags": 4, "matrix": [3, 6], "x": 96, "y": 30 },
{"flags": 4, "matrix": [3, 7], "x": 112, "y": 30 },
{"flags": 4, "matrix": [3, 8], "x": 128, "y": 30 },
{"flags": 4, "matrix": [3, 9], "x": 144, "y": 30 },
{"flags": 4, "matrix": [3, 10], "x": 160, "y": 30 },
{"flags": 4, "matrix": [3, 11], "x": 176, "y": 30 },
{"flags": 4, "matrix": [3, 12], "x": 192, "y": 30 },
{"flags": 4, "matrix": [3, 13], "x": 208, "y": 30 },
{"flags": 4, "matrix": [4, 0], "x": 0, "y": 40 },
{"flags": 4, "matrix": [4, 1], "x": 16, "y": 40 },
{"flags": 4, "matrix": [4, 2], "x": 32, "y": 40 },
{"flags": 4, "matrix": [4, 5], "x": 80, "y": 40 },
{"flags": 4, "matrix": [4, 9], "x": 144, "y": 40 },
{"flags": 4, "matrix": [4, 10], "x": 160, "y": 40 },
{"flags": 4, "matrix": [4, 11], "x": 176, "y": 40 },
{"flags": 4, "matrix": [4, 12], "x": 192, "y": 40 },
{"flags": 4, "matrix": [4, 13], "x": 208, "y": 40 }
]
},
"layouts": {
"LAYOUT_64_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], "w": 2, "x": 13, "y": 0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "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], "w": 1.5, "x": 13.5, "y": 1 },
{ "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "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], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [3, 0], "w": 2, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 2, "y": 3 },
{ "matrix": [3, 2], "x": 3, "y": 3 },
{ "matrix": [3, 3], "x": 4, "y": 3 },
{ "matrix": [3, 4], "x": 5, "y": 3 },
{ "matrix": [3, 5], "x": 6, "y": 3 },
{ "matrix": [3, 6], "x": 7, "y": 3 },
{ "matrix": [3, 7], "x": 8, "y": 3 },
{ "matrix": [3, 8], "x": 9, "y": 3 },
{ "matrix": [3, 9], "x": 10, "y": 3 },
{ "matrix": [3, 10], "x": 11, "y": 3 },
{ "matrix": [3, 11], "x": 12, "y": 3 },
{ "matrix": [3, 12], "x": 13, "y": 3 },
{ "matrix": [3, 13], "x": 14, "y": 3 },
{ "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "matrix": [4, 9], "x": 10, "y": 4 },
{ "matrix": [4, 10], "x": 11, "y": 4 },
{ "matrix": [4, 11], "x": 12, "y": 4 },
{ "matrix": [4, 12], "x": 13, "y": 4 },
{ "matrix": [4, 13], "x": 14, "y": 4 }
]
}
}
}

View File

@ -0,0 +1,37 @@
/*
* Copyright 2023 KBDCraft
* Copyright 2023 Adophoxia <andyao1528@gmail.com>
*
* 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_64_ansi(
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_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_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_DEL,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_64_ansi(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
KC_NO, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, KC_PSCR, KC_SCRL, KC_PAUS, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_SPI, RGB_SPD, KC_HOME, KC_PGUP, EE_CLR,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, NK_TOGG, KC_NO, KC_NO, KC_INS, KC_END, KC_PGDN, KC_VOLU, KC_MUTE,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, RGB_MOD, KC_VOLD, RGB_TOG
)
};

View File

@ -0,0 +1,37 @@
/*
* Copyright 2023 KBDCraft
* Copyright 2023 Adophoxia <andyao1528@gmail.com>
*
* 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_64_ansi(
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_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_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_DEL,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_64_ansi(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, KC_PSCR, KC_SCRL, KC_PAUS, _______,
_______, _______, _______, _______, _______, _______, _______, _______, RGB_SPI, RGB_SPD, KC_HOME, KC_PGUP, EE_CLR,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, KC_INS, KC_END, KC_PGDN, KC_VOLU, KC_MUTE,
_______, _______, _______, _______, _______, _______, RGB_MOD, KC_VOLD, RGB_TOG
)
};

View File

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

View File

@ -0,0 +1,24 @@
/*
* Copyright 2023 KBDCraft
* Copyright 2023 Adophoxia <andyao1528@gmail.com>
*
* 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_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE

View File

@ -0,0 +1,27 @@
# KBDCraft Adam64
![Adam64](https://i.imgur.com/6m2yyTUh.jpg)
A custom 64-key mechanical keyboard comprised of Legos.
* Keyboard Maintainer: The QMK Community
* Hardware Supported: STM32F401
* Hardware Availability: https://kbdcraft.store/products/adam
Make example for this keyboard (after setting up your build environment):
make kbdcraft/adam64:default
Flashing example for this keyboard:
make kbdcraft/adam64: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,2 @@
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE

View File

@ -0,0 +1,23 @@
/*
Copyright 2023 Jesse Estes (@jestes5111)
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 EE_HANDS
#define RGBLIGHT_SPLIT
#define RGBLIGHT_SLEEP
#define ENABLE_COMPILE_KEYCODE

View File

@ -0,0 +1,163 @@
/*
Copyright 2023 Jesse Estes (@jestes5111)
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
// Combinations of two keystrokes for easier reading
#define CSFT LCTL(KC_LSFT)
#define GSFT LGUI(KC_LSFT)
enum layers {
_QWERTY,
_LOWER,
_RAISE,
_ADJUST,
_FUNC,
_PASTA,
};
enum custom_keycodes {
THUMB = QK_USER,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
// ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, 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_APP,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RCTL,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
// └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
KC_LGUI, TL_LOWR, KC_SPC, KC_ENT, TL_UPPR, KC_RGUI
// └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
),
[_LOWER] = LAYOUT(
// ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_VOLU, KC_VOLD, KC_NO, KC_NO, KC_NO, KC_NO, KC_INS, KC_DEL,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_NO, KC_F13, KC_F14, KC_F15, KC_F16, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
CSFT, KC_F17, KC_F18, KC_F19, KC_F20, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, RCS(KC_L),
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
GSFT, KC_F21, KC_F22, KC_F23, KC_F24, KC_WHOM, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
// └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
KC_NO, KC_TRNS, KC_NO, KC_UNDS, KC_TRNS, KC_NO
// └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
),
[_RAISE] = LAYOUT(
// ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_TAB, KC_NO, KC_NO, KC_NO, KC_AMPR, KC_LPRN, KC_RPRN, KC_ASTR, KC_EQL, KC_MINS, KC_PLUS, KC_BSLS,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_ENT, KC_NO, KC_NO, KC_NO, KC_PIPE, KC_LBRC, KC_RBRC, KC_NO, KC_NO, KC_NO, KC_DQUO, KC_QUOT,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_CAPS, KC_NO, KC_NO, KC_NO, KC_LABK, KC_LCBR, KC_MENU, KC_NO, KC_RCBR, KC_RABK, KC_NO, KC_NO, KC_NO, KC_NO,
// └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
KC_NO, KC_TRNS, KC_UNDS, KC_NO, KC_TRNS, KC_NO
// └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
),
[_ADJUST] = LAYOUT(
// ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
RGB_TOG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_NO, KC_NO, KC_NO, KC_NO, LCA(KC_R), LCA(KC_T), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_NO, KC_NO, LCA(KC_V), LCA(KC_D), KC_NO, KC_NO, KC_NO, TO(_FUNC), KC_NO, QK_LOCK, TO(_PASTA), QK_MAKE,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, EE_CLR,
// └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
KC_NO, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO
// └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
),
[_FUNC] = LAYOUT(
// ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
KC_ESC, KC_SLSH, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSPC,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_TAB, KC_7, KC_8, KC_9, KC_LPRN, KC_RPRN, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_NO,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_LCTL, KC_4, KC_5, KC_6, KC_DOT, KC_NUM, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_LSFT, KC_1, KC_2, KC_3, KC_0, KC_ENT, KC_LALT, KC_BTN2, KC_BTN1, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
// └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
TO(_QWERTY), KC_CIRC, KC_SPC, KC_ENT, KC_BTN5, KC_BTN4
// └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
),
[_PASTA] = LAYOUT(
// ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, THUMB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
// └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
TO(_QWERTY), KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO
// └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case THUMB:
if (record->event.pressed) {
SEND_STRING(":disguised_face: :thumbsup:");
wait_ms(100);
tap_code(KC_ENTER);
}
return false;
}
return true;
}
void keyboard_post_init_user(void) {
rgblight_enable_noeeprom();
rgblight_sethsv_noeeprom(HSV_PURPLE);
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
}
layer_state_t layer_state_set_user(layer_state_t state) {
switch (get_highest_layer(state)) {
case _LOWER:
rgblight_sethsv_noeeprom(HSV_GREEN);
break;
case _RAISE:
rgblight_sethsv_noeeprom(HSV_RED);
break;
case _ADJUST:
rgblight_sethsv_noeeprom(HSV_WHITE);
break;
case _FUNC:
rgblight_sethsv_noeeprom(HSV_BLUE);
break;
case _PASTA:
rgblight_sethsv_noeeprom(HSV_ORANGE);
break;
default:
rgblight_sethsv_noeeprom(HSV_PURPLE);
break;
}
return state;
}

View File

@ -0,0 +1,6 @@
![Keymap SVG](https://i.imgur.com/mPKFzVWh.png)
# My Iris
Designed for creating/editing in VIM and Excel, gaming, and general keyboard-focused media consumption.
WIP.

View File

@ -0,0 +1,9 @@
MOUSEKEY_ENABLE = yes
EXTRAKEY_ENABLE = yes
NKRO_ENABLE = yes
BACKLIGHT_ENABLE = no
KEY_LOCK_ENABLE = yes
UNICODE_ENABLE = yes
ENCODER_ENABLE = no
TRI_LAYER_ENABLE = yes

View File

@ -0,0 +1,28 @@
/*
Copyright 2023 John Stegeman
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 USE_I2C
#define EE_HANDS
#define RGBLIGHT_LAYERS
#define TAPPING_TOGGLE 1 // tap just once for TT() to toggle the layer
#define TAPPING_TERM 200
#define IGNORE_MOD_TAP_INTERRUPT
#define RGBLIGHT_LAYERS_RETAIN_VAL

View File

@ -0,0 +1,144 @@
/*
Copyright 2023 John Stegeman
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
#include "print.h"
#include "light_layers.h"
enum layers {
_COLEMAK,
_NAVNUM,
_CONTROL,
};
// Enter when tapped, shift when held
#define SHEN MT(MOD_LSFT, KC_ENT)
// Enter when tapped, alt when held
#define ALEN MT(MOD_LALT, KC_ENT)
#define CTX LT(0,KC_X)
#define CPC LT(0,KC_C)
#define PSV LT(0,KC_V)
// Space when tapped, shift when held
#define SHSP MT(MOD_RSFT, KC_SPC)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_COLEMAK] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_MINS, KC_SCLN,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_LSFT, KC_Z, CTX, CPC, KC_D, PSV, KC_HOME, KC_RALT, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_EQL,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
MO(1), ALEN, KC_LGUI, KC_BSPC, SHSP, LT(2,KC_ENT)
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
[_NAVNUM] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
QK_BOOT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_DEL, _______, KC_LEFT, KC_RGHT, KC_UP, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_PIPE,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, KC_DOWN, KC_LCBR, KC_END, KC_RALT, KC_RCBR, KC_P1, KC_P2, KC_P3, KC_MINS, _______,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
_______, _______, KC_DEL, KC_DEL, _______, KC_P0
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
[_CONTROL] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
RGB_TOG, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
RGB_MOD, KC_MPRV, KC_MNXT, KC_VOLU, KC_PGUP, KC_UNDS, KC_EQL, KC_HOME, RGB_HUI, RGB_SAI, RGB_VAI, KC_BSLS,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, KC_PGDN, KC_MINS, KC_LPRN, _______, KC_PLUS, KC_END, RGB_HUD, RGB_SAD, RGB_VAD, _______,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
_______, _______, _______, _______, _______, _______
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case LT(0,KC_X):
if (!record->tap.count && record->event.pressed) {
tap_code16(G(KC_X)); // Intercept hold function to send GUI-X
return false;
}
return true;
break;
case LT(0,KC_C):
if (!record->tap.count && record->event.pressed) {
tap_code16(G(KC_C)); // Intercept hold function to send GUI-C
return false;
}
return true;
break;
case LT(0,KC_V):
if (!record->tap.count && record->event.pressed) {
tap_code16(G(KC_V)); // Intercept hold function to send GUI-V
return false;
}
return true;
break;
}
return true;
}
// Key overrides
// GUI + esc = ~
const key_override_t tilde_esc_override = ko_make_basic(MOD_MASK_GUI, KC_ESC, S(KC_GRV));
// Shift + esc = `
const key_override_t grave_esc_override = ko_make_basic(MOD_MASK_SHIFT, KC_ESC, KC_GRV);
// Shift + bkspc = delete word
const key_override_t shift_bkspc_override = ko_make_basic(MOD_MASK_SHIFT, KC_BSPC, A(KC_BSPC));
const key_override_t **key_overrides = (const key_override_t *[]){
&tilde_esc_override,
&grave_esc_override,
// &shift_bkspc_override,
NULL
};
void keyboard_post_init_user(void) {
rgblight_layers = MY_LIGHT_LAYERS;
}
layer_state_t layer_state_set_user(layer_state_t state) {
rgblight_set_layer_state(_COLEMAK, layer_state_cmp(state, _COLEMAK));
rgblight_set_layer_state(_NAVNUM, layer_state_cmp(state, _NAVNUM));
return state;
}

View File

@ -0,0 +1,83 @@
/*
Copyright 2023 John Stegeman
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
/*
LED index mapping:
(31) (32) (33) (67) (66) (65)
0 1 2 3 4 5 39 38 37 36 35 34
11 10 9 8 7 6 40 41 42 43 44 45
12 13 14 15 16 17 51 50 49 48 47 46
23 22 21 20 19 18 27 61 52 53 54 55 56 57
24 25 26 60 59 58
(30) (29) (28) (62) (63) (64)
*/
const rgblight_segment_t PROGMEM COLEMAK_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
// left side
{0, 6, HSV_BLUE},
{6, 5, HSV_AZURE},
{11, 2, HSV_BLUE},
{13, 10, HSV_AZURE},
{23, 2, HSV_BLUE},
{25, 1, HSV_RED},
{26, 2, HSV_BLUE},
{28, 3, HSV_BLUE}, // underglow
{31, 3, HSV_BLUE}, // underglow
// right side
{34, 6, HSV_BLUE},
{40, 4, HSV_AZURE},
{44, 3, HSV_BLUE},
{47, 7, HSV_AZURE},
{54, 5, HSV_BLUE},
{59, 1, HSV_RED},
{60, 2, HSV_BLUE},
{62, 3, HSV_BLUE}, // underglow
{65, 3, HSV_BLUE} // underglow
);
const rgblight_segment_t PROGMEM NAVNUM_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
{0, 14, HSV_BLACK},
{14, 3, HSV_GREEN},
{17, 2, HSV_BLACK},
{19, 1, HSV_GREEN},
{20, 21, RGB_OFF},
{41, 3, HSV_GREEN},
{44, 4, HSV_BLACK},
{48, 3, HSV_GREEN},
{51, 2, HSV_BLACK},
{53, 3, HSV_GREEN},
{56, 2, HSV_BLACK},
{58, 1, HSV_GREEN},
{59, 9, HSV_BLACK}
);
const rgblight_segment_t* const PROGMEM MY_LIGHT_LAYERS[] = RGBLIGHT_LAYERS_LIST(
COLEMAK_LIGHT_LAYER,
NAVNUM_LIGHT_LAYER
);

View File

@ -0,0 +1 @@
# Keebio Iris Colemak layout

View File

@ -0,0 +1,24 @@
# Build Options
BOOTMAGIC_ENABLE = no
MOUSEKEY_ENABLE = no
COMMAND_ENABLE = no
NKRO_ENABLE = no
BACKLIGHT_ENABLE = no
AUDIO_ENABLE = no
ENCODER_ENABLE = no
SPACE_CADET_ENABLE = no
GRAVE_ESC_ENABLE = no
MAGIC_ENABLE = no
TAP_DANCE_ENABLE = no
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
RGBLIGHT_ENABLE = yes
RGB_MATRIX_ENABLE = no
#RGB_MATRIX_ENABLE = yes
#RGB_MATRIX_DRIVER = WS2812
LTO_ENABLE = yes
VIA_ENABLE = yes
KEY_OVERRIDE_ENABLE = yes

View File

@ -85,7 +85,7 @@
{"matrix":[3,12], "x":14.75, "y":3.25},
{"matrix":[3,13], "x":15.75, "y":3.25},
{"matrix":[3,14], "x":16.75, "y":3.25},
{"matrix":[2,14], "x":17.75, "y":3.25, "w":1.25, "h":2},
{"matrix":[2,14], "x":17.75, "y":2.25, "w":1.25, "h":2},
{"matrix":[3,15], "x":19.5, "y":3.25},
{"matrix":[4, 0], "x":0, "y":4.25},

View File

@ -102,7 +102,7 @@
{"matrix":[3,15], "x":21.5, "y":2.25, "h":2},
{"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
{"matrix":[4, 1], "x":2.25, "y":4.25},
{"matrix":[4, 1], "x":1.25, "y":4.25},
{"matrix":[4, 2], "x":2.25, "y":4.25},
{"matrix":[4, 3], "x":3.25, "y":4.25},
{"matrix":[4, 4], "x":4.25, "y":4.25},

View File

@ -85,7 +85,7 @@
{"matrix":[3,12], "x":14.75, "y":3.25},
{"matrix":[3,13], "x":15.75, "y":3.25},
{"matrix":[3,14], "x":16.75, "y":3.25},
{"matrix":[2,14], "x":17.75, "y":3.25, "w":1.25, "h":2},
{"matrix":[2,14], "x":17.75, "y":2.25, "w":1.25, "h":2},
{"matrix":[3,15], "x":19.5, "y":3.25},
{"matrix":[4, 0], "x":0, "y":4.25},

View File

@ -102,7 +102,7 @@
{"matrix":[3,15], "x":21.5, "y":2.25, "h":2},
{"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
{"matrix":[4, 1], "x":2.25, "y":4.25},
{"matrix":[4, 1], "x":1.25, "y":4.25},
{"matrix":[4, 2], "x":2.25, "y":4.25},
{"matrix":[4, 3], "x":3.25, "y":4.25},
{"matrix":[4, 4], "x":4.25, "y":4.25},

View File

@ -0,0 +1,74 @@
/* Copyright 2020 lmlask
*
* 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 MOUSEKEY_DELAY 50
#define MIDI_ADVANCED
#define TAPPING_TERM 175 //For fast typing
#define QUICK_TAP_TERM 0 //No autorepeat in tap-hold keys
#define HOLD_ON_OTHER_KEY_PRESS //For fast typing
// Min 0, max 32
#define JOYSTICK_BUTTON_COUNT 32
// Min 0, max 6: X, Y, Z, Rx, Ry, Rz
#define JOYSTICK_AXIS_COUNT 0
// Min 8, max 16
#define JOYSTICK_AXIS_RESOLUTION 8
#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
//#undef ENABLE_RGB_MATRIX_ALPHAS_MODS // Enables RGB_MATRIX_ALPHAS_MODS
#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Enables RGB_MATRIX_GRADIENT_UP_DOWN
#undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Enables RGB_MATRIX_GRADIENT_LEFT_RIGHT
//#undef ENABLE_RGB_MATRIX_BREATHING // Enables RGB_MATRIX_BREATHING
//#undef ENABLE_RGB_MATRIX_BAND_SAT // Enables RGB_MATRIX_BAND_SAT
//#undef ENABLE_RGB_MATRIX_BAND_VAL //Enables RGB_MATRIX_BAND_VAL
#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Enables RGB_MATRIX_BAND_PINWHEEL_SAT
#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Enables RGB_MATRIX_BAND_PINWHEEL_VAL
#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Enables RGB_MATRIX_BAND_SPIRAL_SAT
#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Enables RGB_MATRIX_BAND_SPIRAL_VAL
#undef ENABLE_RGB_MATRIX_CYCLE_ALL // Enables RGB_MATRIX_CYCLE_ALL
#undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Enables RGB_MATRIX_CYCLE_LEFT_RIGHT
#undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Enables RGB_MATRIX_CYCLE_UP_DOWN
#undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Enables RGB_MATRIX_RAINBOW_MOVING_CHEVRON
#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN //Enables RGB_MATRIX_CYCLE_OUT_IN
#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Enables RGB_MATRIX_CYCLE_OUT_IN_DUAL
#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Enables RGB_MATRIX_CYCLE_PINWHEEL
#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Enables RGB_MATRIX_CYCLE_SPIRAL
#undef ENABLE_RGB_MATRIX_DUAL_BEACON //Enables RGB_MATRIX_DUAL_BEACON
#undef ENABLE_RGB_MATRIX_RAINBOW_BEACON// Enables RGB_MATRIX_RAINBOW_BEACON
#undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Enables RGB_MATRIX_RAINBOW_PINWHEELS
#undef ENABLE_RGB_MATRIX_RAINDROPS //Enables RGB_MATRIX_RAINDROPS
#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS// Enables RGB_MATRIX_JELLYBEAN_RAINDROPS
//#undef ENABLE_RGB_MATRIX_HUE_BREATHING // Enables RGB_MATRIX_HUE_BREATHING
#undef ENABLE_RGB_MATRIX_HUE_PENDULUM //Enables RGB_MATRIX_HUE_PENDULUM
#undef ENABLE_RGB_MATRIX_HUE_WAVE //Enables RGB_MATRIX_HUE_WAVE
#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL //Enables RGB_MATRIX_PIXEL_FRACTAL
#undef ENABLE_RGB_MATRIX_PIXEL_FLOW //Enables RGB_MATRIX_PIXEL_FLOW
#undef ENABLE_RGB_MATRIX_PIXEL_RAIN //Enables RGB_MATRIX_PIXEL_RAIN
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Enables RGB_MATRIX_SOLID_REACTIVE_SIMPLE
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE // Enables RGB_MATRIX_SOLID_REACTIVE
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE //Enables RGB_MATRIX_SOLID_REACTIVE_WIDE
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Enables RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Enables RGB_MATRIX_SOLID_REACTIVE_CROSS
#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Enables RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS //Enables RGB_MATRIX_SOLID_REACTIVE_NEXUS
#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS //Enables RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
//#undef ENABLE_RGB_MATRIX_SPLASH //Enables RGB_MATRIX_SPLASH
#undef ENABLE_RGB_MATRIX_MULTISPLASH // Enables RGB_MATRIX_MULTISPLASH
//#undef ENABLE_RGB_MATRIX_SOLID_SPLASH //Enables RGB_MATRIX_SOLID_SPLASH
#undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Enables RGB_MATRIX_SOLID_MULTISPLASH

View File

@ -1,4 +1,4 @@
/* Copyright 2021 lmlmask
/* Copyright 2020 lmlask
*
* 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
@ -15,119 +15,149 @@
*/
#include QMK_KEYBOARD_H
#include "keymap_brazilian_abnt2.h"
#include <keymap_brazilian_abnt2.h>
enum layers {
_WORKMAN,
_QWERTY,
_DVORAK,
_COLEMAK,
_MIDI,
_GAME,
_SYM,
_FUNCTION,
_MIDI,
_NAV,
_NUM,
_ADJUST
_ADJUST,
_MOUSE,
_CPY,
_SWP
};
enum planck_keycodes {
WORKMAN = SAFE_RANGE,
WORKMAN = QK_USER,
QWERTY,
DVORAK,
COLEMAK,
MIDI
MIDI,
GAME,
TOG_CPY,
TOG_SWP,
};
#define SYM MO(_SYM)
#define FUN LT(_FUNCTION, KC_ENT)
#define MYTAB LT(_NAV, KC_TAB)
#define MYNAV LT(_NAV, KC_DEL)
#define MYNUM LT(_NUM, KC_BSPC)
#define NAVTAB LT(_NAV, KC_TAB)
#define SYM LT(_SYM, KC_BSPC)
#define NUM LT(_NUM, KC_DEL)
#define FUN MO(_FUNCTION)
#define CTL_ENT RCTL_T(KC_ENT)
//Hand swap config, similar to Planck
const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0} },
{{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1} },
{{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2} },
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}, {7, 3}, {8, 3}, {9, 3}, {10, 3}},
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//qwerty base layer ok
//BASE LAYERS
[_QWERTY] = 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, BR_TILD,
MYTAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, BR_CCED, BR_ACUT,
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, BR_ACUT,
NAVTAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, BR_CCED, BR_TILD,
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, BR_SLSH, SC_RSPC,
KC_LCTL, KC_LALT, KC_LGUI, SYM, MYNAV, KC_SPC, MYNUM, FUN, KC_RGUI, KC_LALT, RCTL_T(KC_ENT)
KC_LCTL, KC_LGUI, KC_LALT, KC_MEH, NUM, KC_SPC, SYM, FUN, KC_RALT, KC_HYPR, CTL_ENT
),
//workman base layer ok
[_WORKMAN] = LAYOUT_planck_mit(
KC_ESC, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, BR_CCED, BR_TILD,
MYTAB, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, BR_ACUT,
KC_ESC, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, BR_CCED, BR_ACUT,
NAVTAB, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, BR_TILD,
SC_LSPO, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, BR_SLSH, SC_RSPC,
KC_LCTL, KC_LALT, KC_LGUI, SYM, MYNAV, KC_SPC, MYNUM, FUN, KC_RGUI, KC_LALT, RCTL_T(KC_ENT)
KC_LCTL, KC_LGUI, KC_LALT, KC_MEH, NUM, KC_SPC, SYM, FUN, KC_RALT, KC_HYPR, CTL_ENT
),
//dvorak base layer ok
[_DVORAK] = LAYOUT_planck_mit(
KC_ESC, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, BR_SLSH, BR_TILD,
MYTAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, BR_ACUT,
KC_ESC, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, BR_SLSH, BR_ACUT,
NAVTAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, BR_TILD,
SC_LSPO, BR_CCED, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SC_RSPC,
KC_LCTL, KC_LALT, KC_LGUI, SYM, MYNAV, KC_SPC, MYNUM, FUN, KC_RGUI, KC_LALT, RCTL_T(KC_ENT)
KC_LCTL, KC_LGUI, KC_LALT, KC_MEH, NUM, KC_SPC, SYM, FUN, KC_RALT, KC_HYPR, CTL_ENT
),
//colemak base layer ok
[_COLEMAK] = LAYOUT_planck_mit(
KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, BR_CCED, BR_TILD,
MYTAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, BR_ACUT,
KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, BR_CCED, BR_ACUT,
NAVTAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, BR_TILD,
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, BR_SLSH, SC_RSPC,
KC_LCTL, KC_LALT, KC_LGUI, SYM, MYNAV, KC_SPC, MYNUM, FUN, KC_RGUI, KC_LALT, RCTL_T(KC_ENT)
KC_LCTL, KC_LGUI, KC_LALT, KC_MEH, NUM, KC_SPC, SYM, FUN, KC_RALT, KC_HYPR, CTL_ENT
),
//navigation and utility layer ok
//UTILITY LAYERS - SHORTCUT (CPY), SWAP HANDS (SWP)
[_CPY] = LAYOUT_planck_mit(
_______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, _______, _______, _______,
_______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______,
_______, C(KC_Z), C(KC_X), C(KC_C), C(KC_V), _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_SWP] = LAYOUT_planck_mit(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, NUM, SH_T(KC_BSPC),_______, _______, _______, _______, _______, _______
),
//AUX LAYERS (NAV, SYM, NUM, FN)
[_NAV] = LAYOUT_planck_mit(
KC_TRNS, _______, _______, _______, _______, _______, _______, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_VOLU,
_______, _______, _______, _______, BR_QUOT, _______, KC_ENT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_VOLD,
KC_TRNS, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, _______, _______, KC_BSPC, KC_DEL, _______, _______, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, MYNUM, _______, KC_MPRV, KC_MPLY, KC_MNXT
KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, C(KC_V), C(KC_Z),
_______, KC_LALT, KC_LGUI, KC_LSFT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, C(KC_C), C(KC_X),
_______, _______, _______, _______, _______, _______, KC_ENT, KC_BSPC, KC_DEL, KC_VOLD, KC_VOLU, _______,
_______, _______, _______, _______, _______, KC_ENT, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
),
//symbols layer ok
[_SYM] = LAYOUT_planck_mit(
BR_DQUO, BR_EXLM, BR_AT, BR_HASH, BR_DLR, BR_PERC, BR_DIAE, BR_AMPR, BR_ASTR, BR_LPRN, BR_RPRN, BR_COLN,
BR_QUOT, BR_PIPE, _______, _______, _______, _______, _______, BR_PLUS, BR_UNDS, BR_LBRC, BR_RBRC, BR_SCLN,
KC_TRNS, BR_BSLS, _______, _______, _______, _______, _______, BR_EQL, BR_MINS, BR_LCBR, BR_RCBR, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, KC_TRNS, KC_TRNS, KC_TRNS
BR_DQUO, BR_EXLM, BR_AT, BR_HASH, BR_DLR, BR_PERC, BR_DIAE, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
BR_QUOT, BR_BSLS, BR_SCLN, KC_MINS, BR_QUOT, _______, _______, KC_PLUS, _______, BR_LBRC, BR_RBRC, _______,
_______, BR_PIPE, BR_COLN, KC_UNDS, BR_DQUO, _______, _______, KC_EQL, _______, BR_LCBR, BR_RCBR, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
//numbers layer ok
[_NUM] = LAYOUT_planck_mit(
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, BR_MINS,
_______, BR_ASTR, BR_SLSH, BR_MINS, BR_PLUS, _______, _______, KC_4, KC_5, KC_6, BR_COMM, BR_PLUS,
KC_TRNS, BR_PERC, BR_EQL, BR_DOT, BR_COMM, _______, _______, KC_1, KC_2, KC_3, BR_DOT, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, _______, MYNAV, _______, _______, KC_0, KC_0, KC_COMM, KC_ENT
_______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, BR_SLSH, BR_MINS,
_______, BR_SLSH, KC_ASTR, KC_MINS, KC_PLUS, _______, _______, KC_4, KC_5, KC_6, BR_ASTR, BR_PLUS,
_______, BR_PERC, KC_EQL, KC_DOT, KC_COMM, _______, _______, KC_1, KC_2, KC_3, BR_COLN, BR_DOT,
_______, _______, _______, _______, _______, _______, KC_0, KC_BSPC, BR_COMM, BR_EQL, KC_ENT
),
//FN layer
[_FUNCTION] = LAYOUT_planck_mit(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_INS,
KC_PSCR, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, KC_F17, KC_F18, KC_F19, KC_F20, KC_PAUS,
KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_F21, KC_F22, KC_F23, KC_F24, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, KC_TRNS, KC_TRNS, KC_TRNS
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_SCRL, _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_INS,
_______, KC_F5, KC_F6, KC_F7, KC_F8, KC_NUM, _______, KC_F17, KC_F18, KC_F19, KC_F20, KC_PAUS,
_______, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______, KC_F21, KC_F22, KC_F23, KC_F24, KC_APP,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
),
// adjust layer ok
//ADJUST LAYER FOR KEYBOARD CONTROL
[_ADJUST] = LAYOUT_planck_mit(
QK_BOOT, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, _______, _______, _______, _______, _______, _______,
KC_CAPS, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, _______, QWERTY, DVORAK, COLEMAK, WORKMAN, MIDI,
_______, MI_ON, MI_OFF, MI_TOGG, MU_ON, MU_OFF, MU_TOGG, MU_NEXT, AU_ON, AU_OFF, _______, _______,
QK_BOOT, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, _______, MIDI, GAME, _______, _______, _______,
KC_CAPS, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, _______, QWERTY, DVORAK, COLEMAK, WORKMAN, _______,
QK_RBT, _______, _______, _______, _______, _______, _______, TOG_CPY, TOG_SWP, _______, _______, _______,
RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
// midi layer
//MOUSE LAYER
[_MOUSE] = LAYOUT_planck_mit(
KC_ESC, KC_BTN6, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN6, KC_NO,
_______, KC_BTN4, KC_BTN2, KC_BTN3, KC_BTN1, KC_NO, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_NO,
_______, KC_BTN5, KC_ACL2, KC_ACL1, KC_ACL0, KC_NO, KC_BTN7, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN5, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
//MIDI
[_MIDI] = LAYOUT_planck_mit(
MI_Cs, MI_Ds, _______, MI_Fs, MI_Gs, MI_As, _______, MI_Cs, MI_Ds, _______, MI_Fs, MI_Gs,
MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C, MI_D, MI_E, MI_F, MI_G,
MI_BNDU, MI_OCTU, MI_TRSU, MI_VELU, _______, _______, _______, _______, _______, MI_ON, MI_CHNU, MI_TOGG,
MI_BNDD, MI_OCTD, MI_TRSD, MI_VELD, MYNAV, MI_SUST, MYNUM, _______, MI_OFF, MI_CHND, MI_AOFF
)
MI_Cs, MI_Ds, MI_F, MI_Fs, MI_Gs, MI_As, MI_C, MI_Cs1, MI_Ds1, MI_F1, MI_Fs1, MI_Gs1,
MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C1, MI_D1, MI_E, MI_F1, MI_G1,
MI_BNDU, MI_OCTU, MI_TRSU, MI_VELU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_MODU,MI_CHNU, MI_TOGG,
MI_BNDD, MI_OCTD, MI_TRSD, MI_VELD, MI_SOFT, MI_SUST, SYM, FUN, MI_MODD,MI_CHND, MI_AOFF
),
//GAME
[_GAME] = LAYOUT_planck_mit(
KC_ESC, JS_0, JS_1, JS_2, JS_3, JS_4, JS_5, JS_6, JS_7, JS_8, JS_9, KC_P,
KC_TAB, JS_10, JS_11, JS_12, JS_13, JS_14, JS_15, JS_16, JS_17, JS_18, JS_19, KC_O,
KC_LSFT, JS_20, JS_21, JS_22, JS_23, JS_24, JS_25, JS_26, JS_27, JS_28, JS_29, KC_L,
KC_LCTL, KC_LGUI, KC_LALT, KC_MEH, NUM, KC_SPC, SYM, FUN, KC_RALT, KC_HYPR, CTL_ENT
),
};
//Custom keycodes code for layer switching
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
@ -155,10 +185,32 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
set_single_persistent_default_layer(_MIDI);
}
return false;
case GAME:
if (record->event.pressed) {
set_single_persistent_default_layer(_GAME);
}
return false;
case TOG_CPY:
if (record->event.pressed) {
layer_invert(_CPY);
}
return false;
case TOG_SWP:
if (record->event.pressed) {
layer_invert(_SWP);
}
return false;
}
return true;
}
//ADJUST and MOUSE layers activation code
layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _NAV, _NUM, _ADJUST);
state = update_tri_layer_state(state, _FUNCTION, _SYM, _ADJUST);
state = update_tri_layer_state(state, _NAV, _NUM, _MOUSE);
return state;
}

View File

@ -1,35 +1,79 @@
# Brazilian keymap for the BM40RGB keyboard
![qwerty](https://user-images.githubusercontent.com/62627597/133505514-466192cf-c58f-4b6f-9b7c-53ec36078401.png)
![photo](https://user-images.githubusercontent.com/62627597/228396721-b38ea064-6e80-4aff-90ec-01164d0515ae.jpg)
This keymap deviates somewhat from the generally used conventions of Planck style keyboards.
It's built on the following principles:
1. Availability of different base layers. QWERTY, Dvorak, Colemak and Workman are available. They can be chosen with the four right hand home row keys on the ADJUST layer (NAV + NUM keys). The base layout you choose gets stored on the keyboard EEPROM, so it will still be set if you unplug or reset the keyboard. I use Workman, so it's the default, but you can change to QWERTY easily with NAV + NUM + J (the J in QWERTY).
2. Frequent use of navigation keys such as the arrow keys, home, end, and hotkeys using those keycodes. For that reason, it keeps the navigation keys on a dedicated nav layer, on the home row, under the right hand. The nav layer gets the highly accessible layer toggle button usually used for the LOWER layer on most Planck style keymaps. I find this much better than using dedicated arrow keys on the bottom right of the keyboard, as the very reason I swapped to a 40% is to move my hands less.
1. Availability of different base layouts. QWERTY, Dvorak, Colemak and Workman are available. They can be chosen with the four right hand home row keys on the ADJUST layer (NAV + NUM keys). The base layout you choose gets stored on the keyboard EEPROM, so it will still be set if you unplug or reset the keyboard.
2. Frequent use of navigation keys such as the arrow keys, home, end, and hotkeys using those keycodes. For that reason, it keeps the navigation keys on a dedicated nav layer, on the home row, under the right hand. The nav layer is activated by the first button of the home row (the usual caps lock position). I find this much better than using dedicated arrow keys on the bottom right of the keyboard, as the very reason I swapped to a 40% is to move my hands less.
3. Accessibility of the ´ ` ^ ~ ç symbols. There are several blank spaces left on the symbols layer, if you need access to other symbols or diacritics.
4. Proper touch typing, and hotkey access, with the Ctrl, Shift, Win/Super and Alt modifiers on both sides. I found my hands very much expect Ctrl to be on the edge of the keyboard, and as such I've kept both bottom corner keys as Ctrl. Using those keys as layer modifiers, albeit common in many keymaps, is something I found to be somewhat awkward, as it makes it basically impossible to use the hand used to press them.
4. Proper touch typing, and hotkey access, with the Shift key on both sides. I found my hands very much expect Ctrl to be on the edge of the keyboard, and as such I've kept both bottom corner keys as Ctrl. The right Ctrl will act as an Enter key if tapped.
5. Numbers and navigation keys should be slightly more accessible than symbols and function keys. If you use symbols more often, consider swapping the NUM and SYM layer toggle keys.
6. It's easier to remember layers when they make sense conceptually. Hence, there are dedicated layers for navigation/utility (NAV), numbers (NUM), symbols (SYM) and function keys (FN). There's a dedicated MIDI layer. Don't forget to add #define MIDI_ADVANCED to your config.h if you plan on using it.
7. Tap hold is a good tool and you should use it if you can. Backspace and Delete are set as tap functions on the two more accessible layer toggle keys.
6. It's easier to remember layers when they make sense conceptually, so no "lower" and "raise" layers. Instead, there are dedicated layers for navigation/utility (NAV), numbers (NUM), symbols (SYM) and function keys (FN). There's also dedicated MIDI layers, a layer for one-hand typing, a mouse-emulating layer, and a layer for one-hand navigation and copy-pasting.
7. Tap hold is a good tool and you should use it if you can. Backspace and Delete are set as tap functions on the two more accessible layer toggle keys. The bottom right Ctrl behaves as Enter when tapped. The Nav layer button is Tab when tapped.
8. Easy-to-access shortcut modifiers. This layout includes a Master key (Shift+Ctrl+Alt) and a Hyper key (Shift+Ctrl+Alt+Super) for configuring system shortcuts.
It will only work as intended if your system keyboard layout is set to Brazilian ABNT2. It may work with other international layouts, but some keys, including brackets and the ´ ` ~ ^ keys, will get broken.
It will only work as intended if your system keyboard layout is set to Brazilian ABNT2. It may work with other international layouts, but some keys, including brackets and the ´ ` ~ ^ keys, will get broken. If your system layout is another one, it should be relatively easy to change keymap.c (search and replace each key with the equivalent one from the international keymaps file).
# Layers and functions
# Base Layers
In each key:
Top left: Symbols;
Top right: Functions;
Bottom left: Navigation;
Bottom right: Numbers;
Bottom: secondary function (tap/hold)
These are selected as the base by a button in the Adjust layer.
# BASE (Qwerty, Dvorak, Colemak, Workman)
![qwerty](https://user-images.githubusercontent.com/62627597/133505788-e8410162-8491-4f52-bc94-62dacb752171.png)
## Normal
# Adjust (NAV+NUM)
![adjust](https://user-images.githubusercontent.com/62627597/133182475-1994e733-71a2-42ee-88fe-9a15e711b938.png)
![bm40rgb-wolff-base](https://user-images.githubusercontent.com/62627597/228848191-cb403c12-c090-4aeb-b207-506e5c80c547.png)
# MIDI
![midi](https://user-images.githubusercontent.com/62627597/133505599-8ae3ea32-5f8f-451f-b191-f74c514d22c0.png)
QWERTY, Dvorak, Colemak and Workman are built-in.
## MIDI
![bm40rgb-wolff-midi](https://user-images.githubusercontent.com/62627597/228708182-5ba2b9f4-e1f4-4e10-be6e-58ff373f274a.png)
One and a half octaves piano on the top rows, control signals in the bottom rows. SYM and FUN remain accessible so the ADJ layer can be accessed.
## Joystick
![bm40rgb-wolff-game](https://user-images.githubusercontent.com/62627597/228849208-9fb10cf3-0a11-4799-877a-48eafe811078.png)
Emulates a 32-button joystick for using as a button-box or dedicated game controller.
# Modifier layers
These are activated by holding down modifier keys.
## Navigation Layer (NAV)
![bm40rgb-wolff-nav](https://user-images.githubusercontent.com/62627597/228853095-6c254027-adfb-4afb-9536-4f00e11ab3cb.png)
The layer you'll access most often. Navigation keys right on the right-hand homerow, plus a few common utilities.
## Functions Layer (FUN)
![bm40rgb-wolff-fun](https://user-images.githubusercontent.com/62627597/228852255-3c12d3c8-733a-4680-888c-35a4162cd3a3.png)
## Mouse Layer
![bm40rgb-wolff-mouse](https://user-images.githubusercontent.com/62627597/228853517-08934862-ca70-444d-a6bc-9dec584c6bb5.png)
Emulates mouse actions so you can perform simple tasks without reaching for the mouse.
## Adjust Layer (SYM + FUN)
![bm40rgb-wolff-adj](https://user-images.githubusercontent.com/62627597/228851675-ec61ad2b-95a9-402b-933a-009e9f52fbd3.png)
# Additional/utility layers
These are utility overlays toggled by a key in the Adjust layer.
## Handswap Layer
![bm40rgb-swap-hands](https://user-images.githubusercontent.com/62627597/228849174-e3bca496-9f5a-49d6-a41e-9b65adbc6c34.png)
For one-hand typing. The three top rows are mirrorred when SWAP is held down.
## CPY Layer (One-hand navigation layer)
![bm40rgb-copy](https://user-images.githubusercontent.com/62627597/228847641-4caa777e-c368-4921-a0a4-10c47afa2537.png)
For general navigation and quick copy-paste one-handed stuff. I don't like using it, but my job demands it sometimes.

View File

@ -0,0 +1,19 @@
LTO_ENABLE = yes
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
TERMINAL_ENABLE = no
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
SPLIT_KEYBOARD = no
KEY_LOCK_ENABLE = no
RGB_MATRIX_ENABLE = yes
LAYOUTS = planck_mit
MIDI_ENABLE = yes
JOYSTICK_ENABLE = yes
JOYSTICK_DRIVER = digital
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
SWAP_HANDS_ENABLE = yes
STENO_ENABLE = no # Enabling steno requires disabling all options in the previous block.

View File

@ -0,0 +1,127 @@
{
"keyboard_name": "Velvet Hotswap",
"manufacturer": "FJLaboratories",
"url": "http://www.makerkeyboards.com",
"maintainer": "Maker Keyboards",
"usb": {
"device_version": "1.0.0",
"pid": "0x0008",
"vid": "0x7667"
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["F2", "F3", "F4", "F5", "F6", "F7", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "D5", "D6", "D7"],
"rows": ["B4", "B5", "B6", "C0", "E1", "E0"]
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"processor": "at90usb646",
"bootloader": "atmel-dfu",
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "label":"Esc", "x":0, "y":0},
{"matrix": [0, 1], "label":"F1", "x":1.25, "y":0},
{"matrix": [0, 2], "label":"F2", "x":2.25, "y":0},
{"matrix": [0, 3], "label":"F3", "x":3.25, "y":0},
{"matrix": [0, 4], "label":"F4", "x":4.25, "y":0},
{"matrix": [0, 5], "label":"F5", "x":5.5, "y":0},
{"matrix": [0, 6], "label":"F6", "x":6.5, "y":0},
{"matrix": [0, 7], "label":"F7", "x":7.5, "y":0},
{"matrix": [0, 8], "label":"F8", "x":8.5, "y":0},
{"matrix": [0, 9], "label":"F9", "x":9.75, "y":0},
{"matrix": [0, 10], "label":"F10", "x":10.75, "y":0},
{"matrix": [0, 11], "label":"F11", "x":11.75, "y":0},
{"matrix": [0, 12], "label":"F12", "x":12.75, "y":0},
{"matrix": [0, 13], "label":"F13", "x":14, "y":0},
{"matrix": [0, 14], "label":"PrtSc", "x":15.25, "y":0},
{"matrix": [0, 15], "label":"Scroll Lock", "x":16.25, "y":0},
{"matrix": [0, 16], "label":"Pause", "x":17.25, "y":0},
{"matrix": [1, 0], "label":"~", "x":0, "y":1.25},
{"matrix": [1, 1], "label":"!", "x":1, "y":1.25},
{"matrix": [1, 2], "label":"@", "x":2, "y":1.25},
{"matrix": [1, 3], "label":"#", "x":3, "y":1.25},
{"matrix": [1, 4], "label":"$", "x":4, "y":1.25},
{"matrix": [1, 5], "label":"%", "x":5, "y":1.25},
{"matrix": [1, 6], "label":"^", "x":6, "y":1.25},
{"matrix": [1, 7], "label":"&", "x":7, "y":1.25},
{"matrix": [1, 8], "label":"*", "x":8, "y":1.25},
{"matrix": [1, 9], "label":"(", "x":9, "y":1.25},
{"matrix": [1, 10], "label":")", "x":10, "y":1.25},
{"matrix": [1, 11], "label":"_", "x":11, "y":1.25},
{"matrix": [1, 12], "label":"+", "x":12, "y":1.25},
{"matrix": [3, 12], "label":"Back Space", "x":13, "y":1.25},
{"matrix": [1, 13], "label":"Back Space", "x":14, "y":1.25},
{"matrix": [1, 14], "label":"Insert", "x":15.25, "y":1.25},
{"matrix": [1, 15], "label":"Home", "x":16.25, "y":1.25},
{"matrix": [1, 16], "label":"PgUp", "x":17.25, "y":1.25},
{"matrix": [2, 0], "label":"Tab", "x":0, "y":2.25, "w":1.5},
{"matrix": [2, 1], "label":"Q", "x":1.5, "y":2.25},
{"matrix": [2, 2], "label":"W", "x":2.5, "y":2.25},
{"matrix": [2, 3], "label":"E", "x":3.5, "y":2.25},
{"matrix": [2, 4], "label":"R", "x":4.5, "y":2.25},
{"matrix": [2, 5], "label":"T", "x":5.5, "y":2.25},
{"matrix": [2, 6], "label":"Y", "x":6.5, "y":2.25},
{"matrix": [2, 7], "label":"U", "x":7.5, "y":2.25},
{"matrix": [2, 8], "label":"I", "x":8.5, "y":2.25},
{"matrix": [2, 9], "label":"O", "x":9.5, "y":2.25},
{"matrix": [2, 10], "label":"P", "x":10.5, "y":2.25},
{"matrix": [2, 11], "label":"{", "x":11.5, "y":2.25},
{"matrix": [2, 12], "label":"}", "x":12.5, "y":2.25},
{"matrix": [2, 13], "label":"|", "x":13.5, "y":2.25, "w":1.5},
{"matrix": [2, 14], "label":"Delete", "x":15.25, "y":2.25},
{"matrix": [2, 15], "label":"End", "x":16.25, "y":2.25},
{"matrix": [2, 16], "label":"PgDn", "x":17.25, "y":2.25},
{"matrix": [3, 0], "label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
{"matrix": [3, 1], "label":"A", "x":1.75, "y":3.25},
{"matrix": [3, 2], "label":"S", "x":2.75, "y":3.25},
{"matrix": [3, 3], "label":"D", "x":3.75, "y":3.25},
{"matrix": [3, 4], "label":"F", "x":4.75, "y":3.25},
{"matrix": [3, 5], "label":"G", "x":5.75, "y":3.25},
{"matrix": [3, 6], "label":"H", "x":6.75, "y":3.25},
{"matrix": [3, 7], "label":"J", "x":7.75, "y":3.25},
{"matrix": [3, 8], "label":"K", "x":8.75, "y":3.25},
{"matrix": [3, 9], "label":"L", "x":9.75, "y":3.25},
{"matrix": [3, 10], "label":":", "x":10.75, "y":3.25},
{"matrix": [3, 11], "label":"SQ", "x":11.75, "y":3.25},
{"matrix": [3, 13], "label":"Enter", "x":12.75, "y":3.25, "w":2.25},
{"matrix": [4, 0], "label":"Left Shift", "x":0, "y":4.25, "w":2.25},
{"matrix": [4, 1], "label":"Z", "x":2.25, "y":4.25},
{"matrix": [4, 2], "label":"X", "x":3.25, "y":4.25},
{"matrix": [4, 3], "label":"C", "x":4.25, "y":4.25},
{"matrix": [4, 4], "label":"V", "x":5.25, "y":4.25},
{"matrix": [4, 5], "label":"B", "x":6.25, "y":4.25},
{"matrix": [4, 6], "label":"N", "x":7.25, "y":4.25},
{"matrix": [4, 7], "label":"M", "x":8.25, "y":4.25},
{"matrix": [4, 8], "label":"<", "x":9.25, "y":4.25},
{"matrix": [4, 9], "label":">", "x":10.25, "y":4.25},
{"matrix": [4, 10], "label":"?", "x":11.25, "y":4.25},
{"matrix": [4, 12], "label":"Right Shift", "x":12.25, "y":4.25, "w":1.75},
{"matrix": [4, 13], "label":"Right Shift", "x":12.25, "y":4.25},
{"matrix": [4, 15], "label":"\u2191", "x":16.25, "y":4.25},
{"matrix": [5, 0], "label":"Ctrl", "x":0, "y":5.25, "w":1.25},
{"matrix": [5, 1], "label":"Win", "x":1.25, "y":5.25, "w":1.25},
{"matrix": [5, 2], "label":"Alt", "x":2.5, "y":5.25, "w":1.25},
{"matrix": [5, 5], "x":3.75, "y":5.25, "w":6.25},
{"matrix": [5, 9], "label":"Alt", "x":10, "y":5.25, "w":1.25},
{"matrix": [5, 10], "label":"Win", "x":11.25, "y":5.25, "w":1.25},
{"matrix": [5, 11], "label":"Menu", "x":12.5, "y":5.25, "w":1.25},
{"matrix": [5, 13], "label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
{"matrix": [5, 14], "label":"\u2190", "x":15.25, "y":5.25},
{"matrix": [5, 15], "label":"\u2193", "x":16.25, "y":5.25},
{"matrix": [5, 16], "label":"\u2192", "x":17.25, "y":5.25}
]
}
}
}

View File

@ -0,0 +1,41 @@
/*
Copyright 2022 <hello@makerkeyboards.com>
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
enum layers {
_LAYER0,
_LAYER1,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAYER0] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
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_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_BSPC, KC_ENT,
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_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_LAYER1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@ -0,0 +1,61 @@
/*
Copyright 2022 <hello@makerkeyboards.com>
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
enum layers {
_LAYER0,
_LAYER1,
_LAYER2,
_LAYER3,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAYER0] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
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_BSPC, 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_ENT,
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_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_LAYER1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[_LAYER2] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[_LAYER3] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

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

View File

@ -0,0 +1,20 @@
# Velvet Hotswap PCB by Lucid
The following is the QMK Firmware for the Velvet Hotswap PCB by [Maker Keyboards](http://www.makerkeyboards.com).
* Keyboard Maintainer: Maker Keyboards
* Hardware Supported: Velvet
Make example for this keyboard (after setting up your build environment):
make lucid/velvet_hotswap: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
Enter the bootloader in 2 ways:
* **Bootmagic reset**: Hold down the top left key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available (Fn+Backslash by default)
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

View File

@ -0,0 +1,2 @@
# Processor frequency
F_CPU = 8000000

View File

@ -0,0 +1,130 @@
{
"keyboard_name": "Velvet Solder",
"manufacturer": "FJLaboratories",
"url": "http://www.makerkeyboards.com",
"maintainer": "Maker Keyboards",
"usb": {
"device_version": "1.0.0",
"pid": "0x0007",
"vid": "0x7667"
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["F2", "F3", "F4", "F5", "F6", "F7", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "D5", "D6", "D7"],
"rows": ["B4", "B5", "B6", "C0", "E1", "E0"]
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"processor": "at90usb646",
"bootloader": "atmel-dfu",
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "label":"Esc", "x":0, "y":0},
{"matrix": [0, 1], "label":"F1", "x":1.25, "y":0},
{"matrix": [0, 2], "label":"F2", "x":2.25, "y":0},
{"matrix": [0, 3], "label":"F3", "x":3.25, "y":0},
{"matrix": [0, 4], "label":"F4", "x":4.25, "y":0},
{"matrix": [0, 5], "label":"F5", "x":5.5, "y":0},
{"matrix": [0, 6], "label":"F6", "x":6.5, "y":0},
{"matrix": [0, 7], "label":"F7", "x":7.5, "y":0},
{"matrix": [0, 8], "label":"F8", "x":8.5, "y":0},
{"matrix": [0, 9], "label":"F9", "x":9.75, "y":0},
{"matrix": [0, 10], "label":"F10", "x":10.75, "y":0},
{"matrix": [0, 11], "label":"F11", "x":11.75, "y":0},
{"matrix": [0, 12], "label":"F12", "x":12.75, "y":0},
{"matrix": [0, 13], "label":"F13", "x":14, "y":0},
{"matrix": [0, 14], "label":"PrtSc", "x":15.25, "y":0},
{"matrix": [0, 15], "label":"Scroll Lock", "x":16.25, "y":0},
{"matrix": [0, 16], "label":"Pause", "x":17.25, "y":0},
{"matrix": [1, 0], "label":"~", "x":0, "y":1.25},
{"matrix": [1, 1], "label":"!", "x":1, "y":1.25},
{"matrix": [1, 2], "label":"@", "x":2, "y":1.25},
{"matrix": [1, 3], "label":"#", "x":3, "y":1.25},
{"matrix": [1, 4], "label":"$", "x":4, "y":1.25},
{"matrix": [1, 5], "label":"%", "x":5, "y":1.25},
{"matrix": [1, 6], "label":"^", "x":6, "y":1.25},
{"matrix": [1, 7], "label":"&", "x":7, "y":1.25},
{"matrix": [1, 8], "label":"*", "x":8, "y":1.25},
{"matrix": [1, 9], "label":"(", "x":9, "y":1.25},
{"matrix": [1, 10], "label":")", "x":10, "y":1.25},
{"matrix": [1, 11], "label":"_", "x":11, "y":1.25},
{"matrix": [1, 12], "label":"+", "x":12, "y":1.25},
{"matrix": [1, 13], "label":"Back Space", "x":13, "y":1.25},
{"matrix": [3, 14], "label":"Back Space", "x":14, "y":1.25},
{"matrix": [1, 14], "label":"Insert", "x":15.25, "y":1.25},
{"matrix": [1, 15], "label":"Home", "x":16.25, "y":1.25},
{"matrix": [1, 16], "label":"PgUp", "x":17.25, "y":1.25},
{"matrix": [2, 0], "label":"Tab", "x":0, "y":2.25, "w":1.5},
{"matrix": [2, 1], "label":"Q", "x":1.5, "y":2.25},
{"matrix": [2, 2], "label":"W", "x":2.5, "y":2.25},
{"matrix": [2, 3], "label":"E", "x":3.5, "y":2.25},
{"matrix": [2, 4], "label":"R", "x":4.5, "y":2.25},
{"matrix": [2, 5], "label":"T", "x":5.5, "y":2.25},
{"matrix": [2, 6], "label":"Y", "x":6.5, "y":2.25},
{"matrix": [2, 7], "label":"U", "x":7.5, "y":2.25},
{"matrix": [2, 8], "label":"I", "x":8.5, "y":2.25},
{"matrix": [2, 9], "label":"O", "x":9.5, "y":2.25},
{"matrix": [2, 10], "label":"P", "x":10.5, "y":2.25},
{"matrix": [2, 11], "label":"{", "x":11.5, "y":2.25},
{"matrix": [2, 12], "label":"}", "x":12.5, "y":2.25},
{"matrix": [2, 13], "label":"|", "x":13.5, "y":2.25, "w":1.5},
{"matrix": [2, 14], "label":"Delete", "x":15.25, "y":2.25},
{"matrix": [2, 15], "label":"End", "x":16.25, "y":2.25},
{"matrix": [2, 16], "label":"PgDn", "x":17.25, "y":2.25},
{"matrix": [3, 0], "label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
{"matrix": [3, 1], "label":"A", "x":1.75, "y":3.25},
{"matrix": [3, 2], "label":"S", "x":2.75, "y":3.25},
{"matrix": [3, 3], "label":"D", "x":3.75, "y":3.25},
{"matrix": [3, 4], "label":"F", "x":4.75, "y":3.25},
{"matrix": [3, 5], "label":"G", "x":5.75, "y":3.25},
{"matrix": [3, 6], "label":"H", "x":6.75, "y":3.25},
{"matrix": [3, 7], "label":"J", "x":7.75, "y":3.25},
{"matrix": [3, 8], "label":"K", "x":8.75, "y":3.25},
{"matrix": [3, 9], "label":"L", "x":9.75, "y":3.25},
{"matrix": [3, 10], "label":":", "x":10.75, "y":3.25},
{"matrix": [3, 11], "label":"SQ", "x":11.75, "y":3.25},
{"matrix": [3, 13], "label":"Enter", "x":12.75, "y":3.25, "w":2.25},
{"matrix": [4, 0], "label":"Left Shift", "x":0, "y":4.25, "w":1.25},
{"matrix": [4, 1], "label":"Left Shift", "x":1.25, "y":4.25, "w":1},
{"matrix": [4, 2], "label":"Z", "x":2.25, "y":4.25},
{"matrix": [4, 3], "label":"X", "x":3.25, "y":4.25},
{"matrix": [4, 4], "label":"C", "x":4.25, "y":4.25},
{"matrix": [4, 5], "label":"V", "x":5.25, "y":4.25},
{"matrix": [4, 6], "label":"B", "x":6.25, "y":4.25},
{"matrix": [4, 7], "label":"N", "x":7.25, "y":4.25},
{"matrix": [4, 8], "label":"M", "x":8.25, "y":4.25},
{"matrix": [4, 9], "label":"<", "x":9.25, "y":4.25},
{"matrix": [4, 10], "label":">", "x":10.25, "y":4.25},
{"matrix": [4, 11], "label":"?", "x":11.25, "y":4.25},
{"matrix": [4, 12], "label":"Right Shift", "x":12.25, "y":4.25, "w":1.75},
{"matrix": [4, 13], "label":"Right Shift", "x":12.25, "y":4.25},
{"matrix": [4, 15], "label":"\u2191", "x":16.25, "y":4.25},
{"matrix": [5, 0], "label":"Ctrl", "x":0, "y":5.25, "w":1.25},
{"matrix": [5, 1], "label":"Win", "x":1.25, "y":5.25, "w":1.25},
{"matrix": [5, 2], "label":"Alt", "x":2.5, "y":5.25, "w":1.25},
{"matrix": [5, 4], "x":3.75, "y":5.25, "w":2.75},
{"matrix": [5, 5], "x":6.5, "y":5.25, "w":1.25},
{"matrix": [5, 8], "x":6.75, "y":5.25, "w":2.25},
{"matrix": [5, 9], "label":"Alt", "x":10, "y":5.25, "w":1.25},
{"matrix": [5, 10], "label":"Win", "x":11.25, "y":5.25, "w":1.25},
{"matrix": [5, 11], "label":"Menu", "x":12.5, "y":5.25, "w":1.25},
{"matrix": [5, 13], "label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
{"matrix": [5, 14], "label":"\u2190", "x":15.25, "y":5.25},
{"matrix": [5, 15], "label":"\u2193", "x":16.25, "y":5.25},
{"matrix": [5, 16], "label":"\u2192", "x":17.25, "y":5.25}
]
}
}
}

View File

@ -0,0 +1,41 @@
/*
Copyright 2022 <hello@makerkeyboards.com>
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
enum layers {
_LAYER0,
_LAYER1,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAYER0] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
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_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_BSPC, KC_ENT,
KC_LSFT, 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_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_LAYER1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@ -0,0 +1,61 @@
/*
Copyright 2022 <hello@makerkeyboards.com>
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
enum layers {
_LAYER0,
_LAYER1,
_LAYER2,
_LAYER3,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAYER0] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
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_BSPC, 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_ENT,
KC_LSFT, 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_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_LAYER1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[_LAYER2] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[_LAYER3] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

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

View File

@ -0,0 +1,20 @@
# Velvet Solder PCB by Lucid
The following is the QMK Firmware for the Velvet Solder PCB by [Maker Keyboards](http://www.makerkeyboards.com).
* Keyboard Maintainer: Maker Keyboards
* Hardware Supported: Velvet
Make example for this keyboard (after setting up your build environment):
make lucid/velvet_solder: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
Enter the bootloader in 2 ways:
* **Bootmagic reset**: Hold down the top left key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available (Fn+Backslash by default)
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

View File

@ -0,0 +1,2 @@
# Processor frequency
F_CPU = 8000000

View File

@ -0,0 +1,80 @@
/*
Copyright 2022 Yiancar
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
/* RGB options */
#define WS2812_PWM_DRIVER PWMD3
#define WS2812_PWM_CHANNEL 1
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA1_STREAM3
#define WS2812_DMA_CHANNEL 3
#define RGB_MATRIX_LED_COUNT 76
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
// RGB Matrix Animation modes. Explicitly enabled
// For full list of effects, see:
// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
#define ENABLE_RGB_MATRIX_ALPHAS_MODS
#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
#define ENABLE_RGB_MATRIX_BREATHING
#define ENABLE_RGB_MATRIX_BAND_SAT
#define ENABLE_RGB_MATRIX_BAND_VAL
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
#define ENABLE_RGB_MATRIX_CYCLE_ALL
#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
#define ENABLE_RGB_MATRIX_DUAL_BEACON
#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
#define ENABLE_RGB_MATRIX_RAINDROPS
#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
#define ENABLE_RGB_MATRIX_HUE_BREATHING
#define ENABLE_RGB_MATRIX_HUE_PENDULUM
#define ENABLE_RGB_MATRIX_HUE_WAVE
#define ENABLE_RGB_MATRIX_PIXEL_RAIN
#define ENABLE_RGB_MATRIX_PIXEL_FLOW
#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
#define ENABLE_RGB_MATRIX_SPLASH
#define ENABLE_RGB_MATRIX_MULTISPLASH
#define ENABLE_RGB_MATRIX_SOLID_SPLASH
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH

View File

@ -0,0 +1,21 @@
/* Copyright 2022 Yiancar
*
* 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_PWM TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,196 @@
{
"keyboard_name": "NK+",
"manufacturer": "Yiancar-Designs",
"url": "www.yiancar-designs.com",
"maintainer": "Yiancar",
"usb": {
"vid": "0x8968",
"pid": "0x4E51",
"device_version": "0.0.1"
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["A2", "A1", "A0", "A3", "A4", "A5", "A6", "A7", "B11", "B12", "B13", "B14", "B15", "A8", "A9", "A10", "A14"],
"rows": ["B2", "B1", "B0", "B10", "B3"]
},
"features": {
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true,
"rgblight": false
},
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"rgb_matrix": {
"driver": "WS2812",
"layout": [
{ "flags": 1, "matrix": [0, 0], "x": 0, "y": 0 },
{ "flags": 1, "matrix": [0, 1], "x": 13, "y": 0 },
{ "flags": 1, "matrix": [0, 2], "x": 32, "y": 0 },
{ "flags": 4, "matrix": [0, 3], "x": 45, "y": 0 },
{ "flags": 4, "matrix": [0, 4], "x": 58, "y": 0 },
{ "flags": 4, "matrix": [0, 5], "x": 70, "y": 0 },
{ "flags": 4, "matrix": [0, 6], "x": 83, "y": 0 },
{ "flags": 4, "matrix": [0, 7], "x": 96, "y": 0 },
{ "flags": 4, "matrix": [0, 8], "x": 109, "y": 0 },
{ "flags": 4, "matrix": [0, 9], "x": 122, "y": 0 },
{ "flags": 4, "matrix": [0, 10], "x": 134, "y": 0 },
{ "flags": 4, "matrix": [0, 11], "x": 147, "y": 0 },
{ "flags": 4, "matrix": [0, 12], "x": 160, "y": 0 },
{ "flags": 4, "matrix": [0, 13], "x": 173, "y": 0 },
{ "flags": 4, "matrix": [0, 14], "x": 186, "y": 0 },
{ "flags": 1, "matrix": [0, 15], "x": 205, "y": 0 },
{ "flags": 1, "matrix": [0, 16], "x": 224, "y": 0 },
{ "flags": 1, "matrix": [1, 16], "x": 224, "y": 16 },
{ "flags": 4, "matrix": [1, 15], "x": 208, "y": 16 },
{ "flags": 4, "matrix": [1, 14], "x": 192, "y": 16 },
{ "flags": 4, "matrix": [1, 13], "x": 179, "y": 16 },
{ "flags": 4, "matrix": [1, 12], "x": 166, "y": 16 },
{ "flags": 4, "matrix": [1, 11], "x": 154, "y": 16 },
{ "flags": 4, "matrix": [1, 10], "x": 141, "y": 16 },
{ "flags": 4, "matrix": [1, 9], "x": 128, "y": 16 },
{ "flags": 4, "matrix": [1, 8], "x": 115, "y": 16 },
{ "flags": 4, "matrix": [1, 7], "x": 102, "y": 16 },
{ "flags": 4, "matrix": [1, 6], "x": 90, "y": 16 },
{ "flags": 4, "matrix": [1, 5], "x": 77, "y": 16 },
{ "flags": 4, "matrix": [1, 4], "x": 64, "y": 16 },
{ "flags": 4, "matrix": [1, 3], "x": 51, "y": 16 },
{ "flags": 1, "matrix": [1, 2], "x": 35, "y": 16 },
{ "flags": 1, "matrix": [1, 1], "x": 13, "y": 16 },
{ "flags": 1, "matrix": [1, 0], "x": 0, "y": 16 },
{ "flags": 1, "matrix": [2, 0], "x": 0, "y": 32 },
{ "flags": 1, "matrix": [2, 1], "x": 13, "y": 32 },
{ "flags": 1, "matrix": [2, 2], "x": 37, "y": 32 },
{ "flags": 4, "matrix": [2, 3], "x": 54, "y": 32 },
{ "flags": 4, "matrix": [2, 4], "x": 67, "y": 32 },
{ "flags": 4, "matrix": [2, 5], "x": 80, "y": 32 },
{ "flags": 4, "matrix": [2, 6], "x": 93, "y": 32 },
{ "flags": 4, "matrix": [2, 7], "x": 106, "y": 32 },
{ "flags": 4, "matrix": [2, 8], "x": 118, "y": 32 },
{ "flags": 4, "matrix": [2, 9], "x": 131, "y": 32 },
{ "flags": 4, "matrix": [2, 10], "x": 144, "y": 32 },
{ "flags": 4, "matrix": [2, 11], "x": 157, "y": 32 },
{ "flags": 4, "matrix": [2, 12], "x": 170, "y": 32 },
{ "flags": 4, "matrix": [2, 13], "x": 182, "y": 32 },
{ "flags": 1, "matrix": [2, 15], "x": 203, "y": 32 },
{ "flags": 1, "matrix": [2, 16], "x": 224, "y": 32 },
{ "flags": 1, "matrix": [3, 16], "x": 224, "y": 48 },
{ "flags": 1, "matrix": [3, 15], "x": 211, "y": 48 },
{ "flags": 1, "matrix": [3, 14], "x": 194, "y": 48 },
{ "flags": 4, "matrix": [3, 13], "x": 176, "y": 48 },
{ "flags": 4, "matrix": [3, 12], "x": 163, "y": 48 },
{ "flags": 4, "matrix": [3, 11], "x": 150, "y": 48 },
{ "flags": 4, "matrix": [3, 10], "x": 138, "y": 48 },
{ "flags": 4, "matrix": [3, 9], "x": 125, "y": 48 },
{ "flags": 4, "matrix": [3, 8], "x": 112, "y": 48 },
{ "flags": 4, "matrix": [3, 7], "x": 99, "y": 48 },
{ "flags": 4, "matrix": [3, 6], "x": 86, "y": 48 },
{ "flags": 4, "matrix": [3, 5], "x": 74, "y": 48 },
{ "flags": 4, "matrix": [3, 4], "x": 61, "y": 48 },
{ "flags": 1, "matrix": [3, 2], "x": 40, "y": 48 },
{ "flags": 1, "matrix": [3, 1], "x": 13, "y": 48 },
{ "flags": 1, "matrix": [3, 0], "x": 0, "y": 48 },
{ "flags": 1, "matrix": [4, 0], "x": 0, "y": 64 },
{ "flags": 1, "matrix": [4, 1], "x": 13, "y": 64 },
{ "flags": 1, "matrix": [4, 2], "x": 35, "y": 64 },
{ "flags": 1, "matrix": [4, 3], "x": 51, "y": 64 },
{ "flags": 1, "matrix": [4, 4], "x": 67, "y": 64 },
{ "flags": 4, "matrix": [4, 8], "x": 122, "y": 64 },
{ "flags": 1, "matrix": [4, 13], "x": 176, "y": 64 },
{ "flags": 1, "matrix": [4, 14], "x": 198, "y": 64 },
{ "flags": 1, "matrix": [4, 15], "x": 211, "y": 64 },
{ "flags": 1, "matrix": [4, 16], "x": 224, "y": 64 }
],
"max_brightness": 120
},
"rgblight": {
"pin": "B4"
},
"layouts": {
"LAYOUT": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2.5, "y": 0 },
{ "matrix": [0, 3], "x": 3.5, "y": 0 },
{ "matrix": [0, 4], "x": 4.5, "y": 0 },
{ "matrix": [0, 5], "x": 5.5, "y": 0 },
{ "matrix": [0, 6], "x": 6.5, "y": 0 },
{ "matrix": [0, 7], "x": 7.5, "y": 0 },
{ "matrix": [0, 8], "x": 8.5, "y": 0 },
{ "matrix": [0, 9], "x": 9.5, "y": 0 },
{ "matrix": [0, 10], "x": 10.5, "y": 0 },
{ "matrix": [0, 11], "x": 11.5, "y": 0 },
{ "matrix": [0, 12], "x": 12.5, "y": 0 },
{ "matrix": [0, 13], "x": 13.5, "y": 0 },
{ "matrix": [0, 14], "x": 14.5, "y": 0 },
{ "matrix": [0, 15], "x": 15.5, "y": 0 },
{ "matrix": [0, 16], "x": 17.5, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1, "y": 1 },
{ "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "matrix": [1, 3], "x": 4, "y": 1 },
{ "matrix": [1, 4], "x": 5, "y": 1 },
{ "matrix": [1, 5], "x": 6, "y": 1 },
{ "matrix": [1, 6], "x": 7, "y": 1 },
{ "matrix": [1, 7], "x": 8, "y": 1 },
{ "matrix": [1, 8], "x": 9, "y": 1 },
{ "matrix": [1, 9], "x": 10, "y": 1 },
{ "matrix": [1, 10], "x": 11, "y": 1 },
{ "matrix": [1, 11], "x": 12, "y": 1 },
{ "matrix": [1, 12], "x": 13, "y": 1 },
{ "matrix": [1, 13], "x": 14, "y": 1 },
{ "matrix": [1, 14], "x": 15, "y": 1 },
{ "matrix": [1, 15], "x": 16, "y": 1 },
{ "matrix": [1, 16], "x": 17.5, "y": 1 },
{ "matrix": [2, 0], "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1, "y": 2 },
{ "matrix": [2, 2], "x": 2.5, "y": 2 },
{ "matrix": [2, 3], "x": 4.25, "y": 2 },
{ "matrix": [2, 4], "x": 5.25, "y": 2 },
{ "matrix": [2, 5], "x": 6.25, "y": 2 },
{ "matrix": [2, 6], "x": 7.25, "y": 2 },
{ "matrix": [2, 7], "x": 8.25, "y": 2 },
{ "matrix": [2, 8], "x": 9.25, "y": 2 },
{ "matrix": [2, 9], "x": 10.25, "y": 2 },
{ "matrix": [2, 10], "x": 11.25, "y": 2 },
{ "matrix": [2, 11], "x": 12.25, "y": 2 },
{ "matrix": [2, 12], "x": 13.25, "y": 2 },
{ "matrix": [2, 13], "x": 14.25, "y": 2 },
{ "matrix": [2, 15], "x": 15.25, "y": 2 },
{ "matrix": [2, 16], "x": 17.5, "y": 2 },
{ "matrix": [3, 0], "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 1, "y": 3 },
{ "matrix": [3, 2], "x": 2.5, "y": 3 },
{ "matrix": [3, 4], "x": 4.75, "y": 3 },
{ "matrix": [3, 5], "x": 5.75, "y": 3 },
{ "matrix": [3, 6], "x": 6.75, "y": 3 },
{ "matrix": [3, 7], "x": 7.75, "y": 3 },
{ "matrix": [3, 8], "x": 8.75, "y": 3 },
{ "matrix": [3, 9], "x": 9.75, "y": 3 },
{ "matrix": [3, 10], "x": 10.75, "y": 3 },
{ "matrix": [3, 11], "x": 11.75, "y": 3 },
{ "matrix": [3, 12], "x": 12.75, "y": 3 },
{ "matrix": [3, 13], "x": 13.75, "y": 3 },
{ "matrix": [3, 14], "x": 14.75, "y": 3 },
{ "matrix": [3, 15], "x": 16.5, "y": 3 },
{ "matrix": [3, 16], "x": 17.5, "y": 3 },
{ "matrix": [4, 0], "x": 0, "y": 4 },
{ "matrix": [4, 1], "x": 1, "y": 4 },
{ "matrix": [4, 2], "x": 2.5, "y": 4 },
{ "matrix": [4, 3], "x": 4, "y": 4 },
{ "matrix": [4, 4], "x": 5, "y": 4 },
{ "matrix": [4, 8], "x": 6.5, "y": 4 },
{ "matrix": [4, 13], "x": 13.5, "y": 4 },
{ "matrix": [4, 14], "x": 15.5, "y": 4 },
{ "matrix": [4, 15], "x": 16.5, "y": 4 },
{ "matrix": [4, 16], "x": 17.5, "y": 4 }
]
}
}
}

View File

@ -0,0 +1,32 @@
/* Copyright 2022 Yiancar
*
* 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( /* Base */
KC_F1, KC_F2, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
KC_F3, KC_F4, 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_F5, KC_F6, 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_PGDN,
KC_F7, KC_F8, 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_END,
KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT( /* FN */
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

View File

@ -0,0 +1,33 @@
/* Copyright 2022 Yiancar
*
* 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( /* Base */
KC_F1, KC_F2, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
KC_F3, KC_F4, 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_F5, KC_F6, 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_PGDN,
KC_F7, KC_F8, 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_END,
KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT( /* FN */
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};

View File

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

View File

@ -0,0 +1,22 @@
/* Copyright 2022 Yiancar
*
* 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_PWM_USE_TIM3
#define STM32_PWM_USE_TIM3 TRUE

View File

@ -0,0 +1,32 @@
# NK+
This is a 65% with macro keys PCB. It supports VIA and full per-key RGB.
* Keyboard Maintainer: [Yiancar](https://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
* Hardware Supported: A 65% with macro keys keyboard with STM32F072CB or APM compatible
* Hardware Availability: https://novelkeys.com/
## Instructions
### Build
Make example for this keyboard (after setting up your build environment):
make novelkeys/nk_plus: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).
### Reset
- Unplug
- Hold Escape
- Plug In
- Unplug
- Release Escape
### Flash
- Unplug
- Hold Escape
- Plug In
- Flash using QMK Toolbox or dfu-util (`make novelkeys/nk_plus:<keymap>:dfu-util`)

View File

@ -0,0 +1,12 @@
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
# Build Options
# change yes to no to disable
#
WS2812_DRIVER = pwm # Per-key RGB MCU Driver

View File

@ -22,7 +22,7 @@
# define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE
#endif // POINTING_DEVICE_ENABLE
#define I2C_DRIVER I2CD1
#define I2C_DRIVER I2CD0
#define I2C1_SDA_PIN GP16
#define I2C1_SCL_PIN GP17

View File

@ -4,7 +4,7 @@
#include QMK_KEYBOARD_H
// Double tap TD(0) to enter bootloader
static void enter_qk_boot(qk_tap_dance_state_t *state, void *user_data) {
static void enter_qk_boot(tap_dance_state_t *state, void *user_data) {
if (state->count >= 2) {
reset_keyboard();
reset_tap_dance(state);
@ -13,7 +13,7 @@ static void enter_qk_boot(qk_tap_dance_state_t *state, void *user_data) {
enum SpleebLayer { _BASE = 0, _FN, _MOUSE };
qk_tap_dance_action_t tap_dance_actions[] = {[0] = ACTION_TAP_DANCE_FN(enter_qk_boot)};
tap_dance_action_t tap_dance_actions[] = {[0] = ACTION_TAP_DANCE_FN(enter_qk_boot)};
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

View File

@ -18,4 +18,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define SOLENOID_PIN A2
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
#define RGB_DI_PIN B15
#define RGBLED_NUM 9
#define WS2812_SPI SPID2
#define WS2812_SPI_MOSI_PAL_MODE 5
#define FORCE_NKRO

View File

@ -8,7 +8,7 @@ CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
HAPTIC_ENABLE = yes

View File

@ -171,9 +171,9 @@ static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata) {
matrix_row_t out = 0;
for (uint8_t col = 0; col < MATRIX_COLS; col++) {
// read each key in the row data and check if the keymap defines it as a real key
if (keycode_at_keymap_location(0, row, col) && (rowdata & (1 << col))) {
if (keycode_at_keymap_location(0, row, col) && (rowdata & (((matrix_row_t)1) << col))) {
// this creates new row data, if a key is defined in the keymap, it will be set here
out |= 1 << col;
out |= ((matrix_row_t)1) << col;
}
}
return out;