Merge branch 'vial-kb:vial' into HLB_PoorKoi

This commit is contained in:
H3lli0n 2024-10-18 18:11:28 +02:00 committed by GitHub
commit ce8c875e71
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
67 changed files with 4315 additions and 2 deletions

View file

@ -0,0 +1,43 @@
/* Copyright 2023 9R
*
* 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 "leds.h"
#include <stdbool.h>
#include "gpio.h"
//////////// Status LEDs //////////////
void init_leds(void) {
// Both LEDs off, they have inverted logic
gpio_set_pin_output(STATUS_LED_A_PIN);
gpio_set_pin_output(STATUS_LED_B_PIN);
gpio_write_pin_high(STATUS_LED_A_PIN);
gpio_write_pin_high(STATUS_LED_B_PIN);
}
void set_leds(uint8_t highest_active_layer) {
// any layer other than 0-3, quit and LEDs off
if (highest_active_layer > 3) {
gpio_write_pin_high(STATUS_LED_A_PIN);
gpio_write_pin_high(STATUS_LED_B_PIN);
return;
}
// use bitwise operations to display active layer in binary
bool bit1 = !(highest_active_layer & 1);
bool bit2 = !(highest_active_layer & 2);
gpio_write_pin(STATUS_LED_A_PIN, bit1);
gpio_write_pin(STATUS_LED_B_PIN, bit2);
}

View file

@ -0,0 +1,23 @@
/* Copyright 2023 9R
*
* 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 <stdint.h>
void init_leds(void);
void set_leds(uint8_t active_layer);

View file

@ -0,0 +1,96 @@
/* Copyright 2023 9R
*
* 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 "oled.h"
#include "oled_driver.h"
#include "progmem.h"
#include "util.h"
uint8_t shiftbits =32 ;
//////////// OLED output helpers //////////////
void draw_mode(controller_state_t controller_state) {
//draw oled row showing thumbstick mode
oled_write_P(PSTR("Mode: "), false);
if (controller_state.wasdShiftMode) {
oled_write_ln_P(PSTR("WASD + Shift"), false);
} else if (controller_state.wasdMode) {
oled_write_ln_P(PSTR("WASD"), false);
} else {
oled_write_ln_P(PSTR("JoyStick"), false);
}
}
void draw_wasd_key(wasd_state_t wasd_state) {
//draw oled row showing active keypresses emulated from thumbstick
const char* keys = "wasd";
bool keystates [] = { wasd_state.w, wasd_state.a, wasd_state.s, wasd_state.d };
// iterate over keystates
for (uint8_t i = 0 ; i < ARRAY_SIZE(keystates); ++i) {
if (keystates[i]) {
char k = keys[i] ;
//bitshift char to upper case
if (wasd_state.shift) {
k &= ~shiftbits;
}
oled_write_char(k, false);
} else {
oled_write_P(PSTR(" "), false);
}
}
}
void draw_thumb_debug(thumbstick_polar_position_t thumbstick_polar_position) {
//draw oled row showing thumbstick direction and distance from center
oled_write_P(PSTR("Dir:"), false);
oled_write(get_u16_str(thumbstick_polar_position.angle, ' '), false);
oled_write_P(PSTR(" Dist:"), false);
oled_write_ln(get_u16_str(thumbstick_polar_position.distance, ' '), false);
//print registered key codes
oled_write_P(PSTR("Keycodes: "), false);
draw_wasd_key( wasd_state );
}
//////////// draw OLED output //////////////
void draw_oled(controller_state_t controller_state) {
oled_write_P(PSTR("Layer: "), false);
switch (controller_state.highestActiveLayer) {
case _SHOOTER:
oled_write_ln_P(PSTR("Shooter"), false);
break;
case _MISC:
oled_write_ln_P(PSTR("Misc"), false);
break;
case _SETTINGS:
oled_write_ln_P(PSTR("Settings"), false);
break;
default:
oled_write_ln_P(PSTR("Default"), false);
}
draw_mode(controller_state);
if (controller_state.highestActiveLayer == _SETTINGS ) {
draw_thumb_debug(thumbstick_polar_position);
}
else {
oled_write_ln_P(PSTR(" "), false);
}
oled_write_ln_P(PSTR(" "), false);
}

View file

@ -0,0 +1,34 @@
/* Copyright 2023 9R
*
* 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 "replicazeron.h"
#include <stdint.h>
#include "state.h"
#include "thumbstick.h"
uint8_t shiftbits;
char stringbuffer[8];
void draw_oled(controller_state_t controller_state);
void draw_mode(controller_state_t controller_state);
void draw_thumb_debug(thumbstick_polar_position_t thumbstick_polar_position);
void draw_wasd_key(wasd_state_t wasd_state);

View file

@ -0,0 +1,28 @@
/* Copyright 2023 9R
*
* 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 "state.h"
controller_state_t init_state (void) {
controller_state_t controller_state = {
.wasdMode = true,
.wasdShiftMode = false,
.autoRun = false,
.highestActiveLayer = 0,
};
return controller_state;
}

View file

@ -0,0 +1,28 @@
/* Copyright 2023 9R
*
* 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 <stdbool.h>
#include <stdint.h>
typedef struct {
bool wasdMode;
bool wasdShiftMode;
bool autoRun;
uint8_t highestActiveLayer;
} controller_state_t;
controller_state_t init_state(void);

View file

@ -0,0 +1,111 @@
/* Copyright 2023 9R
*
* 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 "thumbstick.h"
#include <math.h>
#include "action.h"
#include "keycode.h"
#include "debug.h"
void init_wasd_state (void) {
wasd_state.w = wasd_state.a = wasd_state.s = wasd_state.d = false;
last_wasd_state = wasd_state;
wasd_state.shift = false;
}
thumbstick_polar_position_t get_thumbstick_polar_position(int16_t x, int16_t y) {
static thumbstick_polar_position_t position;
#ifdef THUMBSTICK_DEBUG
dprintf("xN: %4d yN: %4d\n", x, y);
#endif
//transform to carthesian coordinates to polar coordinates
//get distance from center as int in range [0-600]
position.distance = (double)sqrt((double)x * (double)x + (double)y * (double)y);
//get direction as int in range [0 to 359]
position.angle = (double)atan2(y, x) * (180 /M_PI) + 180;
//apply thumbstick rotation const to modify forward direction
position.angle = (position.angle + _THUMBSTICK_ROTATION) % 360;
return position;
}
bool update_keystate(uint16_t angle_from, uint16_t angle_to, uint16_t angle) {
return (angle_from < angle && angle <= angle_to);
}
void update_keycode(uint16_t keycode, bool keystate, bool last_keystate) {
if (keystate && keystate != last_keystate) {
register_code16(keycode);
} else if (!keystate) {
unregister_code16(keycode);
}
}
void thumbstick(controller_state_t controller_state) {
xPos = joystick_state.axes[0];
yPos = joystick_state.axes[1];
thumbstick_polar_position = get_thumbstick_polar_position(xPos, yPos);
#ifdef THUMBSTICK_DEBUG
dprintf("distance: %5d angle: %5d\n", thumbstick_polar_position.distance, thumbstick_polar_position.angle);
#endif
// Update WASD state depending on thumbstick position
// if thumbstick out of of deadzone
if (thumbstick_polar_position.distance >= _DEADZONE) {
wasd_state.w = update_keystate( 0, 90, thumbstick_polar_position.angle);
// A angle: 45 - 180
wasd_state.a = update_keystate( 45, 181, thumbstick_polar_position.angle);
// S angle: 135 - 270
wasd_state.s = update_keystate(135, 270, thumbstick_polar_position.angle);
// D angle: 225 - 359
wasd_state.d = update_keystate(225, 359, thumbstick_polar_position.angle);
if (!wasd_state.w ) {
wasd_state.w = update_keystate(315, 360, thumbstick_polar_position.angle);
}
} else {
//reset WASD state when in _DEADZONE
init_wasd_state();
}
#ifdef THUMBSTICK_DEBUG
dprintf("w: %2d a: %2d s: %2d d: %2d\n", wasd_state.w, wasd_state.a, wasd_state.s, wasd_state.d);
#endif
update_keycode(KC_W, wasd_state.w, last_wasd_state.w);
update_keycode(KC_A, wasd_state.a, last_wasd_state.a);
update_keycode(KC_S, wasd_state.s, last_wasd_state.s);
update_keycode(KC_D, wasd_state.d, last_wasd_state.d);
last_wasd_state = wasd_state ;
// handle WASD-Shift mode
if (controller_state.wasdShiftMode) {
bool Shifted = thumbstick_polar_position.distance > _SHIFTZONE;
if (!wasd_state.shift && Shifted) {
register_code(KC_LSFT);
wasd_state.shift = true;
} else if (wasd_state.shift && !Shifted) {
unregister_code(KC_LSFT);
wasd_state.shift = false;
}
}
}

View file

@ -0,0 +1,51 @@
/* Copyright 2023 9R
*
* 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 <stdint.h>
#include "state.h"
#include "quantum.h"
int16_t xPos;
int16_t yPos;
typedef struct {
uint16_t angle;
uint16_t distance;
} thumbstick_polar_position_t;
typedef struct {
bool w;
bool a;
bool s;
bool d;
bool shift;
} wasd_state_t;
thumbstick_polar_position_t thumbstick_polar_position ;
wasd_state_t wasd_state;
wasd_state_t last_wasd_state;
void init_wasd_state(void);
thumbstick_polar_position_t get_thumbstick_polar_position(int16_t x, int16_t y);
bool update_keystate(uint16_t angle_from, uint16_t angle_to, uint16_t angle);
void update_keycode(uint16_t keycode, bool keystate, bool last_keystate);
void thumbstick(controller_state_t controller_state);

View file

@ -0,0 +1,31 @@
/* Copyright 2023 9R
*
* 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 THUMBSTICK_DEBUG
/* joystick configuration */
#define JOYSTICK_BUTTON_COUNT 0
#define JOYSTICK_AXIS_COUNT 2
#define JOYSTICK_AXIS_RESOLUTION 10
#define _DEADZONE 100 // 0 to _SHIFTZONE-1
#define _SHIFTZONE 350 // _DEADZONE+1 to 600
#define _THUMBSTICK_ROTATION 100 //degrees, adjusts forward direction
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE

View file

@ -0,0 +1,47 @@
{
"manufacturer": "9R",
"keyboard_name": "Replicazeron",
"maintainer": "9R",
"diode_direction": "COL2ROW",
"url": "https://github.com/9R/replicazeron",
"usb": {
"pid": "0x2305",
"vid": "0x4142"
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "K04", "matrix": [0, 0], "x": 1.75, "y": 0.25, "w": 1.25},
{"label": "K10", "matrix": [0, 1], "x": 3, "y": 0.25, "w": 1.25},
{"label": "K16", "matrix": [0, 2], "x": 4.25, "y": 0.25, "w": 1.25},
{"label": "K22", "matrix": [0, 3], "x": 5.5, "y": 0.25, "w": 1.25},
{"label": "dwn", "matrix": [0, 4], "x": 9.5, "y": 2, "w": 1.25},
{"label": "K03", "matrix": [1, 0], "x": 1.75, "y": 1, "w": 1.25, "h": 1.25},
{"label": "K09", "matrix": [1, 1], "x": 3, "y": 1, "w": 1.25, "h": 1.25},
{"label": "K15", "matrix": [1, 2], "x": 4.25, "y": 1, "w": 1.25, "h": 1.25},
{"label": "K21", "matrix": [1, 3], "x": 5.5, "y": 1, "w": 1.25, "h": 1.25},
{"label": "lft", "matrix": [1, 4], "x": 8.25, "y": 1, "w": 1.25},
{"label": "K02", "matrix": [2, 0], "x": 1.75, "y": 2.5, "w": 1.25, "h": 1.25},
{"label": "K08", "matrix": [2, 1], "x": 3, "y": 2.5, "w": 1.25, "h": 1.25},
{"label": "K14", "matrix": [2, 2], "x": 4.25, "y": 2.5, "w": 1.25, "h": 1.25},
{"label": "K20", "matrix": [2, 3], "x": 5.5, "y": 2.5, "w": 1.25, "h": 1.25},
{"label": "ent", "matrix": [2, 4], "x": 9.5, "y": 1, "w": 1.25},
{"label": "K01", "matrix": [3, 0], "x": 1.75, "y": 3.75, "w": 1.25},
{"label": "K07", "matrix": [3, 1], "x": 3, "y": 3.75, "w": 1.25},
{"label": "K13", "matrix": [3, 2], "x": 4.25, "y": 3.75, "w": 1.25},
{"label": "K19", "matrix": [3, 3], "x": 5.5, "y": 3.75, "w": 1.25},
{"label": "rgt", "matrix": [3, 4], "x": 10.75, "y": 1, "w": 1.25},
{"label": "K00", "matrix": [4, 0], "x": 1.75, "y": 4.75, "w": 1.25},
{"label": "K06", "matrix": [4, 1], "x": 3, "y": 4.75, "w": 1.25},
{"label": "K12", "matrix": [4, 2], "x": 4.25, "y": 4.75, "w": 1.25},
{"label": "K18", "matrix": [4, 3], "x": 5.5, "y": 4.75, "w": 1.25},
{"label": "up ", "matrix": [4, 4], "x": 9.5, "y": 0, "w": 1.25},
{"label": "K05", "matrix": [5, 0], "x": 0, "y": 2.5, "w": 1.75},
{"label": "lyr", "matrix": [5, 1], "x": 7.5, "y": 4.25, "w": 1.5},
{"label": "K17", "matrix": [5, 2], "x": 10.75, "y": 4, "w": 1.5},
{"label": "K23", "matrix": [5, 3], "x": 6.75, "y": 2.5, "w": 1.5},
{"label": "spc", "matrix": [5, 4], "x": 10.75, "y": 3, "w": 1.25}
]
}
}
}

View file

@ -0,0 +1,57 @@
/* Copyright 2023 9R
*
* 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] = {
[_BASE] = LAYOUT(
// little | ring | middle | index | 5way-dpad | -finger
KC_GRV, KC_ESC, KC_J, KC_M, KC_RIGHT, // up
KC_T, KC_3, KC_4, KC_R, KC_ENT, // forward
KC_X, KC_LCTL, KC_LCTL, KC_LALT, KC_DOWN, // down
KC_LSFT, KC_SPC, KC_C, KC_F, KC_LEFT, // back 2
KC_LSFT, KC_6, KC_Z, KC_V, KC_UP, // back 1
KC_TAB, TG(_SHOOTER), KC_I, KC_B, KC_P // special
// ^side_l | ^case | ^thumb | ^side_r | ^analog click <= special row mapping
),
[_SHOOTER] = LAYOUT(
KC_NO, KC_NO, KC_NO, KC_NO, KC_RIGHT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_DOWN,
KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_UP,
KC_NO, TG(_MISC), KC_NO, KC_NO, KC_P
),
[_MISC] = LAYOUT(
KC_NO, KC_NO, KC_NO, KC_NO, KC_RIGHT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_DOWN,
KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_UP,
KC_NO, TG(_SETTINGS), KC_NO, KC_NO, KC_P
),
[_SETTINGS] = LAYOUT(
RGB_M_P, RGB_M_B, RGB_M_K, RGB_M_T, KC_RIGHT,
KC_NO, RGB_SAI, RGB_VAI, RGB_HUI, KC_ENT,
RGB_TOG, KC_NO, KC_NO, KC_NO , KC_DOWN,
EE_CLR, RGB_SAD, RGB_VAD, RGB_HUD, KC_LEFT,
QK_BOOT, AUTORUN, JOYMODE, KC_V, KC_UP,
RGB_MOD, TO(_BASE), KC_NO, RGB_RMOD, KC_P
)
};

View file

@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0x3E, 0x15, 0xC1, 0x32, 0xC3, 0xDE, 0xCD, 0x83}
#define VIAL_UNLOCK_COMBO_ROWS { 4, 4 }
#define VIAL_UNLOCK_COMBO_COLS { 0, 3 }

View file

@ -0,0 +1,57 @@
/* Copyright 2023 9R
*
* 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] = {
[_BASE] = LAYOUT(
// little | ring | middle | index | 5way-dpad | -finger
KC_GRV, KC_ESC, KC_J, KC_M, KC_RIGHT, // up
KC_T, KC_3, KC_4, KC_R, KC_ENT, // forward
KC_X, KC_LCTL, KC_LCTL, KC_LALT, KC_DOWN, // down
KC_LSFT, KC_SPC, KC_C, KC_F, KC_LEFT, // back 2
KC_LSFT, KC_6, KC_Z, KC_V, KC_UP, // back 1
KC_TAB, TG(_SHOOTER), KC_I, KC_B, KC_P // special
// ^side_l | ^case | ^thumb | ^side_r | ^analog click <= special row mapping
),
[_SHOOTER] = LAYOUT(
KC_NO, KC_NO, KC_NO, KC_NO, KC_RIGHT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_DOWN,
KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_UP,
KC_NO, TG(_MISC), KC_NO, KC_NO, KC_P
),
[_MISC] = LAYOUT(
KC_NO, KC_NO, KC_NO, KC_NO, KC_RIGHT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_DOWN,
KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT,
KC_NO, KC_NO, KC_NO, KC_NO, KC_UP,
KC_NO, TG(_SETTINGS), KC_NO, KC_NO, KC_P
),
[_SETTINGS] = LAYOUT(
RGB_M_P, RGB_M_B, RGB_M_K, RGB_M_T, KC_RIGHT,
KC_NO, RGB_SAI, RGB_VAI, RGB_HUI, KC_ENT,
RGB_TOG, KC_NO, KC_NO, KC_NO , KC_DOWN,
EE_CLR, RGB_SAD, RGB_VAD, RGB_HUD, KC_LEFT,
QK_BOOT, AUTORUN, JOYMODE, KC_V, KC_UP,
RGB_MOD, TO(_BASE), KC_NO, RGB_RMOD, KC_P
)
};

View file

@ -0,0 +1,5 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
COMBO_ENABLE = no
QMK_SETTINGS = no

View file

@ -0,0 +1,133 @@
{
"lighting": "none",
"matrix": {
"rows": 6,
"cols": 5
},
"layouts": {
"keymap": [
[
{
"x": 1.75
},
"0,0",
"0,1",
"0,2",
"0,3",
{
"x": 2.5
},
"0,4"
],
[
{
"x": 1.75,
"h": 1.25
},
"1,0",
{
"h": 1.25
},
"1,1",
{
"h": 1.25
},
"1,2",
{
"h": 1.25
},
"1,3",
{
"x": 1.5
},
"4,4",
"1,4",
"2,4"
],
[
{
"x": 8.25
},
"3,4"
],
[
{
"y": -0.75,
"x": 1.75,
"h": 1.5
},
"2,0",
{
"h": 1.5
},
"2,1",
{
"h": 1.5
},
"2,2",
{
"h": 1.5
},
"2,3"
],
[
{
"y": 0.5,
"x": 1.75
},
"3,0",
"3,1",
"3,2",
"3,3",
{
"x": 1.5,
"h": 1.5,
"w": 1.5
},
"5,4"
],
[
{
"x": 1.75
},
"4,0",
"4,1",
"4,2",
"4,3",
{
"x": 0.25
},
"5,1"
],
[
{
"r": 15,
"rx": 0.5,
"ry": 3,
"y": -0.75,
"x": -0.5,
"w": 1.5
},
"5,0"
],
[
{
"rx": 7,
"y": 0.5,
"x": 2.75,
"w": 1.5
},
"5,2"
],
[
{
"r": -15,
"y": -2.25,
"x": -1,
"w": 1.5
},
"5,3"
]
]
}
}

View file

@ -0,0 +1,14 @@
ifeq ($(strip $(LEDS_ENABLE)), yes)
OPT_DEFS += -DLEDS_ENABLE
SRC += leds.c
endif
ifeq ($(strip $(OLED_ENABLE)), yes)
SRC += oled.c
endif
ifeq ($(strip $(THUMBSTICK_ENABLE)), yes)
OPT_DEFS += -DTHUMBSTICK_ENABLE
SRC += thumbstick.c
ANALOG_DRIVER_REQUIRED = yes
endif

View file

@ -0,0 +1,23 @@
/* Copyright 2023 9R
*
* 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 STATUS_LED_A_PIN D2
#define STATUS_LED_B_PIN D3
#define ANALOG_AXIS_PIN_X F4
#define ANALOG_AXIS_PIN_Y F5

View file

@ -0,0 +1,18 @@
{
"usb": {
"device_version": "0.0.1"
},
"matrix_pins": {
"cols": ["C6", "D4", "D7", "E6", "F7"],
"rows": ["B1", "B3", "B2", "B6", "B5", "B4"]
},
"development_board": "promicro",
"features": {
"bootmagic": false,
"console": false,
"extrakey": false,
"mousekey": false,
"nkro": false,
"rgblight": false,
}
}

View file

@ -0,0 +1,69 @@
# Replicazeron
This is a config to run a 3dprinted keyboard controller with qmk based on this project:
https://sites.google.com/view/alvaro-rosati/azeron-keypad-diy-tutorial
Some additional and redesigned files (i.e. for the OLED-display) can be found in [this repo](https://github.com/9R/replicazeron).
![Replicazeron](https://i.imgur.com/WTys4SM.jpg)
[Gallery](https://imgur.com/a/2qlEPVl)
## Features
* 23 keys
* analog stick with WASD emulation
* 5way dpad
* 2 status LEDS
* 6x WS2812 RGB-LED lighting
## Supported MCUs
Currently configs for STM32F103 and atmega32U4 are available, but STM32 is recommended, since the atmega may run out of flash with all features enabled.
With minor adjustments to Pinconfig it should be possible to use other MCUs that are supported by QMK
## Wirering
Full schematics can be found in this repo:
https://github.com/9R/replicazeron_schematics
### Rows
|row| promiro gpios | promicro pin | stm32F103 gpios | color |
|---|---------------|--------------|-----------------|---------|
| 0 | B1 | 15 | B15 | red |
| 1 | B3 | 14 | A8 | blue |
| 2 | B2 | 16 | A9 | yellow |
| 3 | B6 | 10 | A10 | brown |
| 4 | B5 | 9 | A15 | orange |
| 5 | B4 | 8 | B3 | green |
### Columns
|col| promiro gpios | promicro pin | stm32F103 gpios | color |
|---|---------------|--------------|-----------------|---------|
| 0 | C6 | 5 | A7 | white |
| 1 | D4 | 4 | A6 | grey |
| 2 | D7 | 6 | A5 | violet |
| 3 | E6 | 7 | A4 | grey |
| 4 | F7 | A0 | B4 | white |
### Analog
| promicro gpio | stm32F103 gpio | pin | color |
|---------------|----------------|-----|-------|
| GND | GND | GND | white |
| VCC | VCC | VCC | red |
| F4 | B1 | VRx | brown |
| F5 | B0 | VRy | yellow|
| | | SW | blue |
### OLED
| promicro gpio | stm32F103 gpio | pin | color |
|---------------|----------------|-----|-------|
| GND | GND | GND | white |
| VCC | VCC | VCC | red |
| D4 | B10 | SDA | green |
| C6 | B11 | SCL | yellow|

View file

@ -0,0 +1,103 @@
/* Copyright 2023 9R
*
* 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 "replicazeron.h"
controller_state_t controller_state;
#ifdef JOYSTICK_ENABLE
joystick_config_t joystick_axes[JOYSTICK_AXIS_COUNT] = {
JOYSTICK_AXIS_IN(ANALOG_AXIS_PIN_X , 0, 512, 1023),
JOYSTICK_AXIS_IN(ANALOG_AXIS_PIN_Y , 0, 512, 1023)
};
#endif
#ifdef THUMBSTICK_ENABLE
void housekeeping_task_kb(void) {
if (controller_state.wasdMode) {
thumbstick(controller_state);
}
}
#endif
void keyboard_post_init_kb(void) {
// Customise these values to desired behaviour
debug_enable = true;
debug_matrix = true;
// debug_keyboard = true;
// debug_mouse = true;
#ifdef LEDS_ENABLE
init_leds();
#endif // LEDS_ENABLE
#ifdef THUMBSTICK_ENABLE
init_wasd_state();
#endif // THUMBSTICK_ENABLE
controller_state = init_state();
keyboard_post_init_user();
}
#ifdef OLED_ENABLE
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
draw_oled(controller_state);
return false;
}
#endif
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
}
if (keycode == JOYMODE && record->event.pressed) {
if (!controller_state.wasdMode) {
controller_state.wasdMode = true;
} else if (controller_state.wasdMode && !controller_state.wasdShiftMode) {
controller_state.wasdShiftMode = true;
} else {
controller_state.wasdMode = false;
controller_state.wasdShiftMode = false;
}
} else if (keycode == AUTORUN && record->event.pressed) {
if (!controller_state.autoRun) {
controller_state.autoRun = true;
register_code(KC_W);
} else {
controller_state.autoRun = false;
unregister_code(KC_W);
}
}
return true;
};
layer_state_t layer_state_set_kb(layer_state_t state) {
state = layer_state_set_user(state);
controller_state.highestActiveLayer = get_highest_layer(state) ;
#ifdef LEDS_ENABLE
set_leds(controller_state.highestActiveLayer) ;
#endif // LEDS_ENABLE
return state;
}

View file

@ -0,0 +1,50 @@
/* Copyright 2023 9R
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
#include "state.h"
#ifdef LEDS_ENABLE
# include "leds.h"
#endif
#ifdef OLED_ENABLE
# include "oled.h"
#endif
#ifdef THUMBSTICK_ENABLE
# include "thumbstick.h"
#endif
enum kb_layers {
_BASE,
_SHOOTER,
_MISC,
_SETTINGS,
};
enum kb_keycodes {
JOYMODE = QK_USER,
AUTORUN,
M_UP,
M_DWN,
M_L,
M_R,
M_SEL
};

View file

@ -0,0 +1,14 @@
JOYSTICK_ENABLE = yes
OLED_ENABLE = yes
LEDS_ENABLE = yes
THUMBSTICK_ENABLE = yes
LTO_ENABLE = yes
SRC += state.c
VPATH += keyboards/handwired/replicazeron/common
# redirect compilation against "handwired/replicazeron" to the stm32 variant
DEFAULT_FOLDER = handwired/replicazeron/stm32f103

View file

@ -0,0 +1,29 @@
/* Copyright 2023 9R
*
* 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
/* I2C Config */
#define I2C_DRIVER I2CD2
#define I2C1_SDA_PIN B11
#define I2C1_SCL_PIN B10
#define STATUS_LED_A_PIN B13
#define STATUS_LED_B_PIN B12
#define ANALOG_AXIS_PIN_X B0
#define ANALOG_AXIS_PIN_Y B1

View file

@ -0,0 +1,31 @@
{
"development_board": "bluepill",
"features": {
"bootmagic": true,
"console": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"matrix_pins": {
"cols": ["A7", "A6", "A5", "A4", "B4"],
"rows": ["B15", "A8", "A9", "A10", "A15", "B3"]
},
"rgblight": {
"led_count": 6
"animations": {
"breathing": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"twinkle": true
}
},
"usb": {
"device_version": "0.0.2"
},
"ws2812": {
"pin": "B14"
}
}

View file

@ -0,0 +1,31 @@
/* Copyright 2022 9R
*
* 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>
//enable i2c for OLED
#undef STM32_I2C_USE_I2C2
#define STM32_I2C_USE_I2C2 TRUE
#undef STM32_PWM_USE_TIM1
#define STM32_PWM_USE_TIM1 TRUE
//enable ADC for thumbstick
#undef STM32_ADC_USE_ADC1
#define STM32_ADC_USE_ADC1 TRUE

View file

@ -0,0 +1,35 @@
#pragma once
#define VIAL_KEYBOARD_UID {0xDC, 0x0B, 0x71, 0xF9, 0x24, 0xBD, 0x07, 0xB4}
#define VIAL_UNLOCK_COMBO_ROWS {0, 1}
#define VIAL_UNLOCK_COMBO_COLS {0, 1}
//#define DYNAMIC_KEYMAP_LAYER_COUNT 4
//#define DYNAMIC_KEYMAP_MACRO_COUNT 8
//#define VIAL_COMBO_ENTRIES 8 // number of combos used, each entry take 10 byte in EEPROM
//#define VIAL_TAP_DANCE_ENTRIES 8 // number of tap dances used, each entry take 10 byte in EEPROM
//#define VIAL_KEY_OVERRIDE_ENTRIES 8 // number of key override used, each entry take 10 byte in EEPROM
//#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
//#define RGB_MATRIX_KEYPRESSES
#undef LOCKING_SUPPORT_ENABLE
#undef LOCKING_RESYNC_ENABLE
#define NO_ACTION_ONESHOT
#define NO_ACTION_TAPPING
#define NO_MUSIC_MODE
#define LAYER_STATE_8BIT
#undef RGBLIGHT_EFFECT_BREATHING
#undef RGBLIGHT_EFFECT_SNAKE
#undef RGBLIGHT_EFFECT_KNIGHT
#undef RGBLIGHT_EFFECT_CHRISTMAS
#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
#undef RGBLIGHT_EFFECT_RGB_TEST
#undef RGBLIGHT_EFFECT_ALTERNATING
#undef RGBLIGHT_EFFECT_TWINKLE
//#define RGB_MATRIX_LED_COUNT 16
//#define DRIVER_LED_TOTAL 48

View file

@ -0,0 +1,52 @@
/* Copyright 2020 IFo Hancroft
*
* 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_ortho_5x15(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_PSCR,
KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_CAPS,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, LCA(KC_A), KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_SPC, TG(1), KC_RALT, KC_RCTL, LGUI(KC_L), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_ortho_5x15(
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PWR,
EE_CLR, KC_BRIU, RGB_SAI, RGB_VAI, RGB_HUI, RGB_SPI, RGB_MOD, KC_WH_U, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_NO, KC_SLEP, KC_WAKE,
DB_TOGG, KC_BRID, RGB_SAD, RGB_VAD, RGB_HUD, RGB_SPD, RGB_RMOD, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, KC_NO, KC_NO, KC_HOME,
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_TOG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLU, KC_END,
KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_VOLD, KC_MNXT
),
[2] = LAYOUT_ortho_5x15(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, 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_ortho_5x15(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, 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,43 @@
# Typematrix-like keymap with VIAL support for Idobao/ID75 v1 5x15 ortholinear keyboard
I use it with bépo configured system.
Compatible with VIA and VIAL. Underglow available.
![image](https://github.com/user-attachments/assets/11690e69-5a90-4032-96fa-311df556acb2)
Due to limitations of atmega32u4 chip, some features where disabled to get enougth space to enable VIAL based on this documentation: https://docs.qmk.fm/#/squeezing_avr. It maybe possible to reenable some of them depending on what you may need.
```
* The firmware size is fine - 26640/28672 (92%, 2032 bytes free)
```
## Compatibility
This keymap should work with both v1 and v2 boards as they feature the same chip (Atmega32u4) but v2's RGB matrix is not enabled.
I only have a v1 board and can't test anything regarding v2.
## List of disabled features
RGB matrix is not disabled explicitly.
In rules.mk
- SPACE_CADET_ENABLE = no
- GRAVE_ESC_ENABLE = no
- MAGIC_ENABLE = no
- MUSIC_ENABLE = no
In config.h
- #undef LOCKING_SUPPORT_ENABLE #Disables Cherry MX lock switch
- #undef LOCKING_RESYNC_ENABLE #Disables Cherry MX lock switch
- #define NO_ACTION_ONESHOT #Disables oneshots
- #define NO_ACTION_TAPPING #Disables tapping keys
- #define NO_MUSIC_MODE #Disables RGB matrix feature, you won't miss as RGB matrix is disabled too (v1 of the keeb has no RGB matrix anyway)
- #define LAYER_STATE_8BIT #Limits number of layers to 8, you may try up to 16 layers with `LAYER_STATE_16BIT`
The following ones disable some underglow effects, this is a good way to limit firmware size, choose the ones you like (I kept `RGBLIGHT_EFFECT_RAINBOW_MOOD` and `RGBLIGHT_EFFECT_RAINBOW_SWIRL`)
- #undef RGBLIGHT_EFFECT_BREATHING
- #undef RGBLIGHT_EFFECT_SNAKE
- #undef RGBLIGHT_EFFECT_KNIGHT
- #undef RGBLIGHT_EFFECT_CHRISTMAS
- #undef RGBLIGHT_EFFECT_STATIC_GRADIENT
- #undef RGBLIGHT_EFFECT_RGB_TEST
- #undef RGBLIGHT_EFFECT_ALTERNATING
- #undef RGBLIGHT_EFFECT_TWINKLE

View file

@ -0,0 +1,19 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
LTO_ENABLE = yes # reduce firmware size
#VIALRGB_ENABLE = yes
#RGB_MATRIX_ENABLE= yes
#RGB_MATRIX_DRIVER = is31fl3746a
COMBO_ENABLE = no
SPACE_CADET_ENABLE = no
GRAVE_ESC_ENABLE = no
MAGIC_ENABLE = no
AVR_USE_MINIMAL_PRINTF = yes
MUSIC_ENABLE = no

View file

@ -0,0 +1,96 @@
{
"name": "Idobao ID75 V1",
"vendorId": "0x6964",
"productId": "0x0075",
"lighting": "qmk_rgblight",
"matrix": { "rows": 5, "cols": 15 },
"layouts": {
"keymap": [
[
"0,0",
"0,1",
"0,2",
"0,3",
"0,4",
"0,5",
"0,6",
"0,7",
"0,8",
"0,9",
"0,10",
"0,11",
"0,12",
"0,13",
"0,14"
],
[
"1,0",
"1,1",
"1,2",
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
"1,8",
"1,9",
"1,10",
"1,11",
"1,12",
"1,13",
"1,14"
],
[
"2,0",
"2,1",
"2,2",
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
"2,8",
"2,9",
"2,10",
"2,11",
"2,12",
"2,13",
"2,14"
],
[
"3,0",
"3,1",
"3,2",
"3,3",
"3,4",
"3,5",
"3,6",
"3,7",
"3,8",
"3,9",
"3,10",
"3,11",
"3,12",
"3,13",
"3,14"
],
[
"4,0",
"4,1",
"4,2",
"4,3",
"4,4",
"4,5",
"4,6",
"4,7",
"4,8",
"4,9",
"4,10",
"4,11",
"4,12",
"4,13",
"4,14"
]
]
}
}

View file

@ -119,7 +119,7 @@
"2,1\n\n\n0,0",
"2,2\n\n\n0,0",
"2,3\n\n\n0,0",
"2,4\n\n\n0,0",
"2,5\n\n\n0,0",
"2,6\n\n\n0,0",
"2,7\n\n\n0,0",
"2,8\n\n\n0,0",
@ -585,7 +585,7 @@
"2,1\n\n\n0,5",
"2,2\n\n\n0,5",
"2,3\n\n\n0,5",
"2,4\n\n\n0,5",
"2,5\n\n\n0,5",
"2,6\n\n\n0,5",
"2,7\n\n\n0,5",
"2,8\n\n\n0,5",

View file

@ -0,0 +1,10 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
/* copied from cantor */
#define VIAL_UNLOCK_COMBO_ROWS { 0, 4 }
#define VIAL_UNLOCK_COMBO_COLS { 0, 5 }
#define VIAL_KEYBOARD_UID {0x15, 0x56, 0x94, 0x28, 0x02, 0xBB, 0x66, 0xBE}

View file

@ -0,0 +1,27 @@
// Copyright 2023 Kael Soares Augusto (@Dwctor)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* Tab Q W E R T Y U I O P Bsp
*
* Ctl A S D F G H J K L ; '
*
* Sft Z X C V B N M , . / Sft
*
*
* GUI Alt
* Bsp Ent
*
*
*/
[0] = LAYOUT_split_3x6_3(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_LCTL, 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_RSFT,
KC_LGUI, KC_BSPC, KC_SPC, KC_SPC, KC_ENT, KC_RALT
)
};

View file

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

View file

@ -0,0 +1,269 @@
{
"name": "kaly42",
"lighting": "none",
"vendorId": "0xFEED",
"productId": "0x0000",
"matrix": {
"rows": 8,
"cols": 6
},
"layouts": {
"keymap": [
[
{
"x": 3
},
"0,3",
{
"x": 7
},
"4,2"
],
[
{
"y": -0.75,
"x": 2
},
"0,2",
{
"x": 1
},
"0,4",
{
"x": 5
},
"4,1",
{
"x": 1
},
"4,3"
],
[
{
"y": -0.85,
"x": 5
},
"0,5",
{
"x": 3
},
"4,0"
],
[
{
"y": -0.4999999999999999
},
"0,0",
"0,1",
{
"x": 11
},
"4,4",
"4,5"
],
[
{
"y": -0.8999999999999999,
"x": 3
},
"1,3",
{
"x": 7
},
"5,2"
],
[
{
"y": -0.75,
"x": 2
},
"1,2",
{
"x": 1
},
"1,4",
{
"x": 5
},
"5,1",
{
"x": 1
},
"5,3"
],
[
{
"y": -0.8500000000000001,
"x": 5
},
"1,5",
{
"x": 3
},
"5,0"
],
[
{
"y": -0.5
},
"1,0",
"1,1",
{
"x": 11
},
"5,4",
"5,5"
],
[
{
"y": -0.8999999999999999,
"x": 3
},
"2,3",
{
"x": 7
},
"6,2"
],
[
{
"y": -0.75,
"x": 2
},
"2,2",
{
"x": 1
},
"2,4",
{
"x": 5
},
"6,1",
{
"x": 1
},
"6,3"
],
[
{
"y": -0.8500000000000001,
"x": 5
},
"2,5",
{
"x": 3
},
"6,0"
],
[
{
"y": -0.5
},
"2,0",
"2,1",
{
"x": 11
},
"6,4",
"6,5"
],
[
{
"r": 15,
"y": -1.9,
"x": 5.25
},
"3,0"
],
[
{
"r": 32,
"y": -2.95,
"x": 6.85
},
"3,1"
],
[
{
"r": 46,
"rx": 15,
"y": 7.9,
"x": -1.6099999999999994
},
"7,0"
],
[
{
"r": -46,
"rx": 0,
"y": 7.9,
"x": 0.61
},
"3,2"
],
[
{
"r": -32,
"rx": 15,
"y": 0.05,
"x": -7.85
},
"7,1"
],
[
{
"r": -15,
"y": 0.95,
"x": -6.25
},
"7,2"
]
],
"LAYOUT_split_3x6_3": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0.25 },
{ "matrix": [0, 1], "x": 1, "y": 0.25 },
{ "matrix": [0, 2], "x": 2, "y": 0.125 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0.125 },
{ "matrix": [0, 5], "x": 5, "y": 0.25 },
{ "matrix": [4, 0], "x": 8, "y": 0.25 },
{ "matrix": [4, 1], "x": 9, "y": 0.125 },
{ "matrix": [4, 2], "x": 10, "y": 0 },
{ "matrix": [4, 3], "x": 11, "y": 0.125 },
{ "matrix": [4, 4], "x": 12, "y": 0.25 },
{ "matrix": [4, 5], "x": 13, "y": 0.25 },
{ "matrix": [1, 0], "x": 0, "y": 1.25 },
{ "matrix": [1, 1], "x": 1, "y": 1.25 },
{ "matrix": [1, 2], "x": 2, "y": 1.125 },
{ "matrix": [1, 3], "x": 3, "y": 1 },
{ "matrix": [1, 4], "x": 4, "y": 1.125 },
{ "matrix": [1, 5], "x": 5, "y": 1.25 },
{ "matrix": [5, 0], "x": 8, "y": 1.25 },
{ "matrix": [5, 1], "x": 9, "y": 1.125 },
{ "matrix": [5, 2], "x": 10, "y": 1 },
{ "matrix": [5, 3], "x": 11, "y": 1.125 },
{ "matrix": [5, 4], "x": 12, "y": 1.25 },
{ "matrix": [5, 5], "x": 13, "y": 1.25 },
{ "matrix": [2, 0], "x": 0, "y": 2.25 },
{ "matrix": [2, 1], "x": 1, "y": 2.25 },
{ "matrix": [2, 2], "x": 2, "y": 2.125 },
{ "matrix": [2, 3], "x": 3, "y": 2 },
{ "matrix": [2, 4], "x": 4, "y": 2.125 },
{ "matrix": [2, 5], "x": 5, "y": 2.25 },
{ "matrix": [6, 0], "x": 8, "y": 2.25 },
{ "matrix": [6, 1], "x": 9, "y": 2.125 },
{ "matrix": [6, 2], "x": 10, "y": 2 },
{ "matrix": [6, 3], "x": 11, "y": 2.125 },
{ "matrix": [6, 4], "x": 12, "y": 2.25 },
{ "matrix": [6, 5], "x": 13, "y": 2.25 },
{ "matrix": [3, 0], "x": 3.5, "y": 3.25 },
{ "matrix": [3, 1], "x": 4.5, "y": 3.5 },
{ "matrix": [3, 2], "x": 5.5, "y": 3.75 },
{ "matrix": [7, 0], "x": 7.5, "y": 3.75 },
{ "matrix": [7, 1], "x": 8.5, "y": 3.5 },
{ "matrix": [7, 2], "x": 9.5, "y": 3.25 }
]
}
}
}

View file

@ -0,0 +1,13 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0xBF, 0x59, 0x7D, 0x4C, 0xDF, 0x1C, 0xBC, 0x81}
#define VIAL_UNLOCK_COMBO_ROWS { 0, 7 }
#define VIAL_UNLOCK_COMBO_COLS { 2, 7 }
// Reduce the firmware size!
#undef LOCKING_SUPPORT_ENABLE
#undef LOCKING_RESYNC_ENABLE
#define LAYER_STATE_8BIT

View file

@ -0,0 +1,48 @@
// Copyright 2022 Danny Nguyen (@nooges)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum custom_layer {
_BASE,
_FN1,
};
enum custom_keycodes {
QWERTY = SAFE_RANGE,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_65_with_macro(
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_DEL, 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_END,
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_PGUP,
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_PGDN,
KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, MO(_FN1),KC_SPC, MO(_FN1),KC_SPC, KC_RALT, KC_RCTL, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FN1] = LAYOUT_65_with_macro(
_______, _______, QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC, _______,
_______, _______, RGB_TOG, RGB_MOD, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, KC_TILD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
[1] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD), ENCODER_CCW_CW(KC_MNXT, KC_MPRV) }
};
#endif
#ifndef MAGIC_ENABLE
uint16_t keycode_config(uint16_t keycode) {
return keycode;
}
#endif

View file

@ -0,0 +1,26 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
LTO_ENABLE = yes
QMK_SETTINGS = yes
ENCODER_ENABLE = yes
ENCODER_MAP_ENABLE = yes
AVR_USE_MINIMAL_PRINTF = yes
EXTRAKEY_ENABLE = yes
# Reduce the firmware size:
BACKLIGHT_ENABLE = no
BOOTMAGIC_ENABLE = no
COMBO_ENABLE = no
COMMAND_ENABLE = no
CONSOLE_ENABLE = no
GRAVE_ESC_ENABLE = no
KEY_OVERRIDE_ENABLE = no
LEADER_ENABLE = no
MAGIC_ENABLE = no
MOUSEKEY_ENABLE = no
RGB_MATRIX_ENABLE = no
SPACE_CADET_ENABLE = no
TAP_DANCE_ENABLE = no
VIALRGB_ENABLE = no

View file

@ -0,0 +1,504 @@
{
"name": "Quefrency Rev. 3",
"vendorId": "0xCB10",
"productId": "0x3357",
"matrix": {
"rows": 10,
"cols": 9
},
"lighting": "qmk_backlight_rgblight",
"layouts": {
"labels": [
[
"Left Macropad",
"Enabled",
"W/Encoder",
"No Macro"
],
"Split Left Shift",
[
"Left Space",
"1.25-2.25u",
"2.25-1.25u",
"1.25-1-1.25u"
],
"Split Backspace",
"ISO Enter",
[
"Right Column",
"Enabled",
"W/Encoder",
"Disabled"
],
[
"Right Shift",
"1.75u Shift-1u",
"2.75u",
"1.75u /"
],
[
"Right Mods",
"6x1u",
"2x1.25u__3x1u",
"4x1.25u-1u"
],
"Split Right Space"
],
"keymap": [
[
{
"x": 1.75
},
"0,0\n\n\n0,1\n\n\n\n\n\ne",
{
"c": "#aaaaaa"
},
"0,1\n\n\n0,1\n\n\n\n\n\ne",
{
"x": 0.25,
"c": "#cccccc",
"d": true
},
"\n\n\n0,0",
{
"d": true
},
"\n\n\n0,0",
{
"x": 16.5,
"c": "#aaaaaa",
"d": true
},
"\n\n\n5,0",
{
"d": true
},
"\n\n\n5,0",
{
"x": 3.75
},
"1,0\n\n\n5,1\n\n\n\n\n\ne",
"1,1\n\n\n5,1\n\n\n\n\n\ne"
],
[
{
"c": "#cccccc",
"d": true
},
"0,0\n\n\n0,2",
{
"d": true
},
"0,1\n\n\n0,2",
{
"x": 0.25,
"c": "#aaaaaa"
},
"0,0\n\n\n0,1",
"0,1\n\n\n0,1",
{
"x": 0.25
},
"0,0\n\n\n0,0",
"0,1\n\n\n0,0",
{
"x": 0.5,
"c": "#777777"
},
"0,2",
{
"c": "#cccccc"
},
"0,3",
"0,4",
"0,5",
"0,6",
"0,7",
"0,8",
{
"x": 1
},
"5,0",
"5,1",
"5,2",
"5,3",
"5,4",
"5,5",
{
"c": "#aaaaaa",
"w": 2
},
"5,7\n\n\n3,0",
"5,8\n\n\n5,0",
{
"x": 0.75
},
"5,6\n\n\n3,1",
"5,7\n\n\n3,1",
{
"x": 2
},
"5,8\n\n\n5,1\n\n\n\n\n\ne1",
{
"x": 0.25,
"c": "#cccccc",
"d": true
},
"5,8\n\n\n5,2"
],
[
{
"d": true
},
"1,0\n\n\n0,2",
{
"d": true
},
"1,1\n\n\n0,2",
{
"x": 0.25,
"c": "#aaaaaa"
},
"1,0\n\n\n0,1",
"1,1\n\n\n0,1",
{
"x": 0.25
},
"1,0\n\n\n0,0",
"1,1\n\n\n0,0",
{
"x": 0.5,
"w": 1.5
},
"1,2",
{
"c": "#cccccc"
},
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
{
"x": 1
},
"6,0",
"6,1",
"6,2",
"6,3",
"6,4",
"6,5",
"6,6",
{
"w": 1.5
},
"6,7\n\n\n4,0",
{
"c": "#aaaaaa"
},
"6,8\n\n\n5,0",
{
"x": 2,
"c": "#777777",
"w": 1.25,
"h": 2,
"w2": 1.5,
"h2": 1,
"x2": -0.25
},
"7,7\n\n\n4,1",
{
"x": 1.5,
"c": "#aaaaaa"
},
"6,8\n\n\n5,1",
{
"x": 0.25,
"c": "#cccccc",
"d": true
},
"6,8\n\n\n5,2"
],
[
{
"d": true
},
"2,0\n\n\n0,2",
{
"d": true
},
"2,1\n\n\n0,2",
{
"x": 0.25,
"c": "#aaaaaa"
},
"2,0\n\n\n0,1",
"2,1\n\n\n0,1",
{
"x": 0.25
},
"2,0\n\n\n0,0",
"2,1\n\n\n0,0",
{
"x": 0.5,
"w": 1.75
},
"2,2",
{
"c": "#cccccc"
},
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
{
"x": 1
},
"7,0",
"7,1",
"7,2",
"7,3",
"7,4",
"7,5",
{
"c": "#777777",
"w": 2.25
},
"7,7\n\n\n4,0",
{
"c": "#aaaaaa"
},
"7,8\n\n\n5,0",
{
"x": 1,
"c": "#cccccc"
},
"7,6\n\n\n4,1",
{
"x": 2.75,
"c": "#aaaaaa"
},
"7,8\n\n\n5,1",
{
"x": 0.25,
"c": "#cccccc",
"d": true
},
"7,8\n\n\n5,2"
],
[
{
"d": true
},
"3,0\n\n\n0,2",
{
"d": true
},
"3,1\n\n\n0,2",
{
"x": 0.25,
"c": "#aaaaaa"
},
"3,0\n\n\n0,1",
"3,1\n\n\n0,1",
{
"x": 0.25
},
"3,0\n\n\n0,0",
"3,1\n\n\n0,0",
{
"x": 0.5,
"w": 2.25
},
"3,2\n\n\n1,0",
{
"c": "#cccccc"
},
"3,4",
"3,5",
"3,6",
"3,7",
"3,8",
{
"x": 1
},
"8,0",
"8,1",
"8,2",
"8,3",
"8,4\n\n\n6,0",
{
"c": "#aaaaaa",
"w": 1.75
},
"8,6\n\n\n6,0",
"8,7\n\n\n6,0",
"8,8\n\n\n5,0",
{
"x": 0.75,
"c": "#cccccc"
},
"8,4\n\n\n6,1",
{
"c": "#aaaaaa",
"w": 2.75
},
"8,6\n\n\n6,1",
{
"x": 0.25
},
"8,8\n\n\n5,1",
{
"x": 0.25,
"c": "#cccccc",
"d": true
},
"8,8\n\n\n5,2"
],
[
{
"d": true
},
"4,0\n\n\n0,2",
{
"d": true
},
"4,1\n\n\n0,2",
{
"x": 0.25,
"c": "#aaaaaa"
},
"4,0\n\n\n0,1",
"4,1\n\n\n0,1",
{
"x": 0.25
},
"4,0\n\n\n0,0",
"4,1\n\n\n0,0",
{
"x": 0.5,
"w": 1.25
},
"4,2",
{
"w": 1.25
},
"4,3",
{
"w": 1.25
},
"4,4",
{
"w": 1.25
},
"4,5\n\n\n2,0",
{
"w": 2.25
},
"4,7\n\n\n2,0",
{
"x": 1,
"w": 2.75
},
"9,1\n\n\n8,0",
"9,2\n\n\n7,0",
"9,3\n\n\n7,0",
"9,4\n\n\n7,0",
"9,6\n\n\n7,0",
"9,7\n\n\n7,0",
"9,8\n\n\n5,0",
{
"x": 0.75,
"c": "#cccccc",
"w": 1.75
},
"8,4\n\n\n6,2",
{
"c": "#aaaaaa"
},
"8,6\n\n\n6,2",
"8,7\n\n\n6,2",
{
"x": 0.25
},
"9,8\n\n\n5,1",
{
"x": 0.25,
"c": "#cccccc",
"d": true
},
"9,8\n\n\n5,2"
],
[
{
"x": 7,
"c": "#aaaaaa",
"w": 1.25
},
"3,2\n\n\n1,1",
"3,3\n\n\n1,1",
{
"x": 1.5,
"w": 2.25
},
"4,5\n\n\n2,1",
{
"w": 1.25
},
"4,7\n\n\n2,1",
{
"x": 1,
"w": 1.25
},
"9,0\n\n\n8,1",
{
"w": 1.5
},
"9,1\n\n\n8,1",
{
"w": 1.25
},
"9,2\n\n\n7,1",
{
"w": 1.25
},
"9,3\n\n\n7,1",
{
"x": 0.5
},
"9,6\n\n\n7,1",
"9,7\n\n\n7,1"
],
[
{
"x": 10.75,
"w": 1.25
},
"4,5\n\n\n2,2",
"4,6\n\n\n2,2",
{
"w": 1.25
},
"4,7\n\n\n2,2",
{
"x": 3.75,
"w": 1.25
},
"9,2\n\n\n7,2",
{
"w": 1.25
},
"9,3\n\n\n7,2",
{
"w": 1.25
},
"9,6\n\n\n7,2",
{
"w": 1.25
},
"9,7\n\n\n7,2"
]
]
}
}

View file

@ -0,0 +1,12 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0x71, 0xE4, 0x34, 0x62, 0x9C, 0x8E, 0x31, 0x68}
#define VIAL_UNLOCK_COMBO_ROWS { 0, 7 }
#define VIAL_UNLOCK_COMBO_COLS { 2, 7 }
// Reduce the firmware size!
#undef LOCKING_SUPPORT_ENABLE
#undef LOCKING_RESYNC_ENABLE

View file

@ -0,0 +1,42 @@
// Copyright 2022 Danny Nguyen (@nooges)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum custom_layer {
_BASE,
_FN1,
};
enum custom_keycodes {
QWERTY = SAFE_RANGE,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_65_with_macro(
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_DEL, 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_END,
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_PGUP,
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_PGDN,
KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, MO(_FN1),KC_SPC, MO(_FN1),KC_SPC, KC_RALT, KC_RCTL, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FN1] = LAYOUT_65_with_macro(
_______, _______, QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC, _______,
_______, _______, RGB_TOG, RGB_MOD, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, KC_TILD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
[1] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD), ENCODER_CCW_CW(KC_MNXT, KC_MPRV) }
};
#endif

View file

@ -0,0 +1,26 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
LTO_ENABLE = yes
QMK_SETTINGS = yes
ENCODER_ENABLE = yes
ENCODER_MAP_ENABLE = yes
AVR_USE_MINIMAL_PRINTF = yes
EXTRAKEY_ENABLE = yes
# Reduce the firmware size:
BACKLIGHT_ENABLE = no
BOOTMAGIC_ENABLE = no
COMBO_ENABLE = no
COMMAND_ENABLE = no
CONSOLE_ENABLE = no
GRAVE_ESC_ENABLE = no
KEY_OVERRIDE_ENABLE = no
LEADER_ENABLE = no
MAGIC_ENABLE = no
MOUSEKEY_ENABLE = no
RGB_MATRIX_ENABLE = no
SPACE_CADET_ENABLE = no
TAP_DANCE_ENABLE = no
VIALRGB_ENABLE = no

View file

@ -0,0 +1,292 @@
{
"name": "Quefrency Rev. 5",
"vendorId": "0xCB10",
"productId": "0x5357",
"matrix": {
"rows": 10,
"cols": 9
},
"lighting": "qmk_rgblight",
"layouts": {
"labels": [
"Split Backspace",
[
"Left Macropad",
"Enabled",
"W/Encoder",
"No Macro"
],
[
"Right Mods",
"6x1u",
"2x1.25u__3x1u"
],
"Right Encoder"
],
"keymap": [
[
{
"y": 1,
"x": 1.75
},
"0,0\n\n\n1,1\n\n\n\n\n\ne",
{
"c": "#aaaaaa"
},
"0,1\n\n\n1,1\n\n\n\n\n\ne",
{
"x": 0.25,
"d": true
},
"\n\n\n1,0",
{
"d": true
},
"\n\n\n1,0",
{
"x": 16.5,
"c": "#cccccc",
"d": true
},
"\n\n\n3,0",
{
"d": true
},
"\n\n\n3,0",
{
"x": 0.25
},
"1,0\n\n\n3,1\n\n\n\n\n\ne",
"1,1\n\n\n3,1\n\n\n\n\n\ne"
],
[
{
"x": 2.25,
"c": "#aaaaaa"
},
"0,0\n\n\n1,1",
"0,1\n\n\n1,1",
{
"x": 0.25
},
"0,0\n\n\n1,0",
"0,1\n\n\n1,0",
{
"x": 0.5,
"c": "#777777"
},
"0,2",
{
"c": "#cccccc"
},
"0,3",
"0,4",
"0,5",
"0,6",
"0,7",
"0,8",
{
"x": 1
},
"5,0",
"5,1",
"5,2",
"5,3",
"5,4",
"5,5",
{
"c": "#aaaaaa",
"w": 2
},
"5,7\n\n\n0,0",
"5,8",
{
"x": 0.5
},
"5,6\n\n\n0,1",
"5,7\n\n\n0,1"
],
[
{
"x": 2.25
},
"1,0\n\n\n1,1",
"1,1\n\n\n1,1",
{
"x": 0.25
},
"1,0\n\n\n1,0",
"1,1\n\n\n1,0",
{
"x": 0.5,
"w": 1.5
},
"1,2",
{
"c": "#cccccc"
},
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
{
"x": 1
},
"6,0",
"6,1",
"6,2",
"6,3",
"6,4",
"6,5",
"6,6",
{
"w": 1.5
},
"6,7",
{
"c": "#aaaaaa"
},
"6,8"
],
[
{
"x": 2.25
},
"2,0\n\n\n1,1",
"2,1\n\n\n1,1",
{
"x": 0.25
},
"2,0\n\n\n1,0",
"2,1\n\n\n1,0",
{
"x": 0.5,
"w": 1.75
},
"2,2",
{
"c": "#cccccc"
},
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
{
"x": 1
},
"7,0",
"7,1",
"7,2",
"7,3",
"7,4",
"7,5",
{
"c": "#777777",
"w": 2.25
},
"7,7",
{
"c": "#aaaaaa"
},
"7,8"
],
[
{
"x": 2.25
},
"3,0\n\n\n1,1",
"3,1\n\n\n1,1",
{
"x": 0.25
},
"3,0\n\n\n1,0",
"3,1\n\n\n1,0",
{
"x": 0.5,
"w": 2.25
},
"3,2",
{
"c": "#cccccc"
},
"3,4",
"3,5",
"3,6",
"3,7",
"3,8",
{
"x": 1
},
"8,0",
"8,1",
"8,2",
"8,3",
"8,4",
{
"c": "#aaaaaa",
"w": 1.75
},
"8,6",
"8,7",
"8,8"
],
[
{
"x": 2.25
},
"4,0\n\n\n1,1",
"4,1\n\n\n1,1",
{
"x": 0.25
},
"4,0\n\n\n1,0",
"4,1\n\n\n1,0",
{
"x": 0.5,
"w": 1.25
},
"4,2",
{
"w": 1.25
},
"4,3",
{
"w": 1.25
},
"4,4",
{
"w": 1.25
},
"4,5",
{
"w": 2.25
},
"4,7",
{
"x": 1,
"w": 2.75
},
"9,1",
"9,2\n\n\n2,0",
"9,3\n\n\n2,0",
"9,4\n\n\n2,0",
"9,6",
"9,7",
"9,8"
],
[
{
"x": 18,
"w": 1.25
},
"9,2\n\n\n2,1",
{
"w": 1.25
},
"9,3\n\n\n2,1"
]
]
}
}

View file

@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0xA4, 0x1E, 0xA5, 0x3C, 0xCC, 0x66, 0x08, 0xCD}
#define VIAL_UNLOCK_COMBO_ROWS { 0, 9 }
#define VIAL_UNLOCK_COMBO_COLS { 1, 7 }

View file

@ -0,0 +1,69 @@
/* Copyright 2023 @ Keychron (https://www.keychron.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{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN,
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_92_iso(
KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
_______, 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_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_PGDN,
_______, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
_______, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
_______, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[MAC_FN] = LAYOUT_92_iso(
RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[WIN_BASE] = LAYOUT_92_iso(
KC_MUTE, 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_INS, KC_DEL, KC_MUTE,
_______, 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_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_PGDN,
_______, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
_______, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
_______, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_FN] = LAYOUT_92_iso(
RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
[WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
};
#endif // ENCODER_MAP_ENABLE

View file

@ -0,0 +1,7 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
VIALRGB_ENABLE = yes
ENCODER_MAP_ENABLE = yes
VPATH += keyboards/keychron/common
SRC += keychron_common.c

View file

@ -0,0 +1,312 @@
{
"name": "Keychron Q11 ISO Knob",
"vendorId": "0x3434",
"productId": "0x01E1",
"lighting": "vialrgb",
"customKeycodes": [
{
"name": "Mission Control",
"title": "Mission Control in macOS",
"shortName": "MCtrl"
},
{
"name": "Launch Pad",
"title": "Launch Pad in macOS",
"shortName": "LPad"
},
{
"name": "Left Option",
"title": "Left Option in macOS",
"shortName": "LOpt"
},
{
"name": "Right Option",
"title": "Right Option in macOS",
"shortName": "ROpt"
},
{
"name": "Left Cmd",
"title": "Left Command in macOS",
"shortName": "LCmd"
},
{
"name": "Right Cmd",
"title": "Right Command in macOS",
"shortName": "RCmd"
},
{
"name": "Siri",
"title": "Siri in macOS",
"shortName": "Siri"
},
{
"name": "Task View",
"title": "Task View in windows",
"shortName": "Task"
},
{
"name": "File Explorer",
"title": "File Explorer in windows",
"shortName": "File"
},
{
"name": "Screen Shot",
"title": "Screenshot in macOS",
"shortName": "SShot"
},
{
"name": "Cortana",
"title": "Cortana in windows",
"shortName": "Cortana"
}
],
"matrix": {"rows": 12, "cols": 9},
"layouts": {
"keymap": [
[
{
"x": 0.25
},
"0,0\n\n\n\n\n\n\n\n\ne",
"0,1\n\n\n\n\n\n\n\n\ne",
{
"x": 15
},
"1,0\n\n\n\n\n\n\n\n\ne",
"1,1\n\n\n\n\n\n\n\n\ne"
],
[
{
"c": "#aaaaaa"
},
"0,0",
{
"x": 0.25,
"c": "#777777"
},
"0,1\nESC",
{
"c": "#cccccc"
},
"0,2",
"0,3",
"0,4",
"0,5",
{
"c": "#aaaaaa"
},
"0,6",
"0,7",
{
"x": 0.75
},
"6,0",
"6,1",
{
"c": "#cccccc"
},
"6,2",
"6,3",
"6,4",
"6,5",
{
"c": "#aaaaaa"
},
"6,6",
"6,7",
{
"x": 0.25
},
"6,8"
],
[
{
"y": 0.25
},
"1,0",
{
"x": 0.25
},
"1,1",
{
"c": "#cccccc"
},
"1,2",
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
{
"x": 0.75
},
"7,0",
"7,1",
"7,2",
"7,3",
"7,4",
"7,5",
{
"c": "#aaaaaa",
"w": 2
},
"7,6",
{
"x": 0.25
},
"7,8"
],
[
"2,0",
{
"x": 0.25,
"w": 1.5
},
"2,1",
{
"c": "#cccccc"
},
"2,2",
"2,3",
"2,4",
"2,6",
"2,7",
{
"x": 0.75
},
"8,0",
"8,1",
"8,2",
"8,3",
"8,4",
"8,5",
"8,6",
{
"x": 0.25,
"c": "#777777",
"w": 1.25,
"h": 2,
"w2": 1.5,
"h2": 1,
"x2": -0.25
},
"8,7",
{
"x": 0.25,
"c": "#aaaaaa"
},
"8,8"
],
[
"3,0",
{
"x": 0.25,
"w": 1.75
},
"3,1",
{
"c": "#cccccc"
},
"3,2",
"3,3",
"3,4",
"3,5",
"3,6",
{
"x": 0.75
},
"9,0",
"9,1",
"9,2",
"9,3",
"9,4",
"9,5",
{
"c": "#aaaaaa"
},
"9,7",
{
"x": 1.5
},
"9,8"
],
[
"4,0",
{
"x": 0.25,
"w": 1.25
},
"4,1",
"4,2",
{
"c": "#cccccc"
},
"4,3",
"4,4",
"4,5",
"4,6",
"4,7",
{
"x": 0.75
},
"10,0",
"10,1",
"10,2",
"10,3",
"10,4",
{
"c": "#aaaaaa",
"w": 1.75
},
"10,5",
{
"x": 0.25,
"c": "#777777"
},
"10,7"
],
[
{
"c": "#aaaaaa"
},
"5,0",
{
"x": 0.25,
"w": 1.25
},
"5,1",
{
"w": 1.25
},
"5,2",
{
"w": 1.25
},
"5,3",
{
"w": 1.25
},
"5,4",
{
"w": 2.25
},
"5,6",
{
"x": 0.75,
"w": 2.75
},
"11,1",
"11,2",
"11,3",
"11,4",
{
"x": 0.25,
"c": "#777777"
},
"11,6",
"11,7",
"11,8"
]
]
}
}

View file

@ -0,0 +1,36 @@
/* Copyright 2021 omkbd
*
* 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 VIAL_KEYBOARD_UID {0x0F, 0x8A, 0x08, 0x8B, 0x22, 0x25, 0xAA, 0xA8}
#define DYNAMIC_KEYMAP_LAYER_COUNT 4
// ~ + BACKSPACE = UNLOCK
#define VIAL_UNLOCK_COMBO_ROWS { 0, 5 }
#define VIAL_UNLOCK_COMBO_COLS { 2, 0 }
//#define USE_MATRIX_I2C
/* Select hand configuration */
#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
#define RGBLIGHT_SLEEP // enable rgblight_suspend() and rgblight_wakeup() in keymap.c
#define RGBLIGHT_TIMEOUT 600000 // ms to wait until rgblight time out, 600K ms is 10min.

View file

@ -0,0 +1,112 @@
/* Copyright 2021 omkbd
*
* 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 layer_number {
_QWERTY = 0,
_ADJUST
};
// Fillers to make layering more clear
#define EISU LALT(KC_GRV)
#define ADJUST MO(_ADJUST)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* QWERTY
* ,-----------------------------------------. ,--------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | = | Bksp |
* |------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | [ | ] | \ |
* |------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* | Ctrl | A | S | D | F | G | | H | J | K | L | ; | " | Enter| Enter|
* |------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | | N | M | , | . | / | Shift| Up | Shift|
* |------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* | Ctrl | GUI | Alt | EISU | Space| Space| | Space| Space| Alt |Adjust| Ctrl | Left | Down | Right|
* `-----------------------------------------' `-------------------------------------------------------'
*/
[_QWERTY] = LAYOUT(
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_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_LCTL, 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_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_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, ADJUST, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, ADJUST, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
/* Adjust
* ,-----------------------------------------. ,--------------------------------------------------------.
* | ESC | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | F12 | |
* |------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* | | | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* | | TOG | HUI | SAI | VAI | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* | | MOD | HUD | SAD | VAD | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* | | | | | | | | | | | | | | | |
* `-----------------------------------------' `-------------------------------------------------------'
*/
[_ADJUST] = 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, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
static uint32_t key_timer; // timer for last keyboard activity, use 32bit value and function to make longer idle time possible
static void refresh_rgb(void); // refreshes the activity timer and RGB, invoke whenever any activity happens
static void check_rgb_timeout(void); // checks if enough time has passed for RGB to timeout
bool is_rgb_timeout = false; // store if RGB has timed out or not in a boolean
void refresh_rgb(void) {
key_timer = timer_read32(); // store time of last refresh
if (is_rgb_timeout)
{
is_rgb_timeout = false;
rgblight_wakeup();
}
}
void check_rgb_timeout(void) {
if (!is_rgb_timeout && timer_elapsed32(key_timer) > RGBLIGHT_TIMEOUT) // check if RGB has already timeout and if enough time has passed
{
rgblight_suspend();
is_rgb_timeout = true;
}
}
/* Then, call the above functions from QMK's built in post processing functions like so */
/* Runs at the end of each scan loop, check if RGB timeout has occured or not */
void housekeeping_task_user(void) {
#ifdef RGBLIGHT_TIMEOUT
check_rgb_timeout();
#endif
}
/* Runs after each key press, check if activity occurred */
void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef RGBLIGHT_TIMEOUT
if (record->event.pressed)
refresh_rgb();
#endif
}
/* Runs after each encoder tick, check if activity occurred */
void post_encoder_update_user(uint8_t index, bool clockwise) {
#ifdef RGBLIGHT_TIMEOUT
refresh_rgb();
#endif
}

View file

@ -0,0 +1,13 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
RGBLIGHT_ENABLE = yes
CONSOLE_ENABLE = yes
QMK_SETTINGS = yes
TAP_DANCE_ENABLE = yes
COMBO_ENABLE = yes
KEY_OVERRIDE_ENABLE = yes
CONVERT_TO = promicro_rp2040

View file

@ -0,0 +1,20 @@
{
"name": "runner3680 5x6+5x8",
"vendorId": "0x3680",
"productId": "0x5658",
"firmwareVersion": "0.0.5",
"lighting": "qmk_rgblight",
"matrix": {
"rows": 10,
"cols": 8
},
"layouts": {
"keymap": [
[{"c":"#777777"},"0,2",{"c":"#cccccc"},"0,3","0,4","0,5","0,6","0,7",{"x":0.75},"5,7","5,6","5,5","5,4","5,3",{"c":"#aaaaaa"},"5,2","5,1","5,0"],
["1,2","1,3",{"c":"#cccccc"},"1,4","1,5","1,6","1,7",{"x":0.75},"6,7","6,6","6,5","6,4","6,3",{"c":"#aaaaaa"},"6,2","6,1","6,0"],
["2,2","2,3",{"c":"#cccccc"},"2,4","2,5","2,6","2,7",{"x":0.75},"7,7","7,6","7,5","7,4",{"c":"#aaaaaa"},"7,3","7,2",{"c":"#777777"},"7,1","7,0"],
[{"c":"#aaaaaa"},"3,2","3,3",{"c":"#cccccc"},"3,4","3,5","3,6","3,7",{"x":0.75},"8,7","8,6",{"c":"#aaaaaa"},"8,5","8,4","8,3","8,2","8,1","8,0"],
["4,2","4,3","4,4","4,5","4,6","4,7",{"x":0.75},"9,7","9,6","9,5","9,4","9,3","9,2","9,1","9,0"]
]
}
}

View file

@ -0,0 +1,12 @@
// Copyright 2022 beekeeb
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
#define SERIAL_USART_FULL_DUPLEX
#define SERIAL_USART_TX_PIN GP0
#define SERIAL_USART_RX_PIN GP1

View file

@ -0,0 +1,98 @@
{
"manufacturer": "azhizhinov",
"keyboard_name": "PIANTORUV44",
"maintainer": "azhizhinov",
"bootloader": "rp2040",
"bootmagic": {
"matrix": [0, 5]
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"direct": [
["GP5", "GP4", "GP11", "GP15", "GP3", "GP2"],
["GP22", "GP20", "GP10", "GP14", "GP9", "GP8"],
["GP21", "GP19", "GP6", "GP7", "GP13", "GP12"],
["GP17", "GP18", "GP16", "GP26", null, null]
]
},
"processor": "RP2040",
"split": {
"enabled": true,
"matrix_pins": {
"right": {
"direct": [
["GP2", "GP3", "GP15", "GP11", "GP4", "GP5"],
["GP8", "GP9", "GP14", "GP10", "GP20", "GP22"],
["GP12", "GP13", "GP7", "GP6", "GP19", "GP21"],
["GP26", "GP16", "GP18", "GP17", null, null]
]
}
},
"serial": {
"driver": "vendor"
}
},
"url": "https://github.com/azhizhinov/PIANTORUV44",
"usb": {
"device_version": "1.0.0",
"pid": "0x0004",
"vid": "0x415A"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.25},
{"matrix": [0, 1], "x": 1, "y": 0.25},
{"matrix": [0, 2], "x": 2, "y": 0.125},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0.125},
{"matrix": [0, 5], "x": 5, "y": 0.25},
{"matrix": [4, 0], "x": 8, "y": 0.25},
{"matrix": [4, 1], "x": 9, "y": 0.125},
{"matrix": [4, 2], "x": 10, "y": 0},
{"matrix": [4, 3], "x": 11, "y": 0.125},
{"matrix": [4, 4], "x": 12, "y": 0.25},
{"matrix": [4, 5], "x": 13, "y": 0.25},
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.125},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1.125},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [5, 0], "x": 8, "y": 1.25},
{"matrix": [5, 1], "x": 9, "y": 1.125},
{"matrix": [5, 2], "x": 10, "y": 1},
{"matrix": [5, 3], "x": 11, "y": 1.125},
{"matrix": [5, 4], "x": 12, "y": 1.25},
{"matrix": [5, 5], "x": 13, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.25},
{"matrix": [2, 1], "x": 1, "y": 2.25},
{"matrix": [2, 2], "x": 2, "y": 2.125},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2.125},
{"matrix": [2, 5], "x": 5, "y": 2.25},
{"matrix": [6, 0], "x": 8, "y": 2.25},
{"matrix": [6, 1], "x": 9, "y": 2.125},
{"matrix": [6, 2], "x": 10, "y": 2},
{"matrix": [6, 3], "x": 11, "y": 2.125},
{"matrix": [6, 4], "x": 12, "y": 2.25},
{"matrix": [6, 5], "x": 13, "y": 2.25},
{"matrix": [3, 0], "x": 2.5, "y": 3},
{"matrix": [3, 1], "x": 3.5, "y": 3.25},
{"matrix": [3, 2], "x": 4.5, "y": 3.5},
{"matrix": [3, 3], "x": 5.5, "y": 3.75},
{"matrix": [7, 0], "x": 7.5, "y": 3.75},
{"matrix": [7, 1], "x": 8.5, "y": 3.5},
{"matrix": [7, 2], "x": 9.5, "y": 3.25},
{"matrix": [7, 3], "x": 10.5, "y": 3}
]
}
}
}

View file

@ -0,0 +1,30 @@
// Copyright 2021 azhizhinov (@azhizhinov)
// SPDX-License-Identifier: GPL-2.0-or-late
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_TAB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RBRC,
KC_LALT, KC_LSFT, MO(1), KC_BSPC, KC_ENT, MO(2), KC_SPC, RCTL(KC_BSPC)
),
[1] = LAYOUT(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_UP, KC_RGHT, KC_NO, KC_HOME, KC_NO,
KC_LSFT, KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DOWN, KC_NO, KC_NO, KC_END, KC_RALT,
KC_LALT, KC_LGUI, KC_TRNS, KC_ESC, KC_ENT, MO(3), KC_SPC, RCTL(KC_BSPC)
),
[2] = LAYOUT(
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_LCTL, KC_BSPC, KC_C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_LSFT, KC_X, KC_V, KC_S, KC_L, KC_NO, KC_UNDS, KC_PLUS, KC_PMNS, KC_NO, KC_NO, KC_RALT,
KC_LALT, KC_LGUI, MO(3), KC_ESC, KC_ENT, KC_TRNS, KC_SPC, RCTL(KC_BSPC)
),
[3] = LAYOUT(
KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
KC_LSFT, KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_RALT,
KC_LALT, KC_LGUI, KC_TRNS, KC_ESC, KC_ENT, KC_TRNS, KC_SPC, RCTL(KC_BSPC)
)
};

View file

@ -0,0 +1,9 @@
/* keyboard uid */
#define VIAL_KEYBOARD_UID {0x09, 0xA9, 0x7F, 0x52, 0x09, 0x0A, 0xAA, 0x6F}
#define VIAL_UNLOCK_COMBO_ROWS { 0, 4 }
#define VIAL_UNLOCK_COMBO_COLS { 0, 5 }
/* default layer count */
#define DYNAMIC_KEYMAP_LAYER_COUNT 10

View file

@ -0,0 +1,30 @@
// Copyright 2021 azhizhinov (@azhizhinov)
// SPDX-License-Identifier: GPL-2.0-or-late
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_TAB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RBRC,
KC_LALT, KC_LSFT, MO(1), KC_BSPC, KC_ENT, MO(2), KC_SPC, RCTL(KC_BSPC)
),
[1] = LAYOUT(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_UP, KC_RGHT, KC_NO, KC_HOME, KC_NO,
KC_LSFT, KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DOWN, KC_NO, KC_NO, KC_END, KC_RALT,
KC_LALT, KC_LGUI, KC_TRNS, KC_ESC, KC_ENT, MO(3), KC_SPC, RCTL(KC_BSPC)
),
[2] = LAYOUT(
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_LCTL, KC_BSPC, KC_C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_LSFT, KC_X, KC_V, KC_S, KC_L, KC_NO, KC_UNDS, KC_PLUS, KC_PMNS, KC_NO, KC_NO, KC_RALT,
KC_LALT, KC_LGUI, MO(3), KC_ESC, KC_ENT, KC_TRNS, KC_SPC, RCTL(KC_BSPC)
),
[3] = LAYOUT(
KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
KC_LSFT, KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_RALT,
KC_LALT, KC_LGUI, KC_TRNS, KC_ESC, KC_ENT, KC_TRNS, KC_SPC, RCTL(KC_BSPC)
)
};

View file

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

View file

@ -0,0 +1,233 @@
{
"name": "piantoruv44",
"lighting": "none",
"vendorId": "0x415A",
"productId": "0x0004",
"matrix": {
"rows": 8,
"cols": 6
},
"layouts": {
"keymap": [
[
{
"x": 3
},
"0,3",
{
"x": 8.25
},
"4,2"
],
[
{
"y": -0.75,
"x": 2
},
"0,2",
{
"x": 1
},
"0,4",
{
"x": 6.25
},
"4,1",
{
"x": 1
},
"4,3"
],
[
{
"y": -0.9,
"x": 5
},
"0,5",
{
"x": 4.25
},
"4,0"
],
[
{
"y": -0.3500000000000001
},
"0,0",
"0,1",
{
"x": 1
},
"1,3",
{
"x": 8.25
},
"5,2",
{
"x": 1
},
"4,4",
"4,5"
],
[
{
"y": -0.75,
"x": 2
},
"1,2",
{
"x": 1,
"n": true
},
"1,4",
{
"x": 6.25,
"n": true
},
"5,1",
{
"x": 1
},
"5,3"
],
[
{
"y": -0.8999999999999999,
"x": 5
},
"1,5",
{
"x": 4.25
},
"5,0"
],
[
{
"y": -0.3500000000000001
},
"1,0",
"1,1",
{
"x": 1
},
"2,3",
{
"x": 8.25
},
"6,2",
{
"x": 1
},
"5,4",
"5,5"
],
[
{
"y": -0.75,
"x": 2
},
"2,2",
{
"x": 1
},
"2,4",
{
"x": 6.25
},
"6,1",
{
"x": 1
},
"6,3"
],
[
{
"y": -0.8999999999999999,
"x": 5
},
"2,5",
{
"x": 4.25
},
"6,0"
],
[
{
"y": -0.3500000000000001
},
"2,0",
"2,1",
{
"x": 12.25
},
"6,4",
"6,5"
],
[
{
"y": -0.5,
"x": 4
},
"3,0",
"3,1",
"3,2",
"3,3",
{
"x": 0.25
},
"7,0",
"7,1",
"7,2",
"7,3"
]
],
"LAYOUT": {
"layout": [
{"matrix": [0,3], "x": 3, "y": 0},
{"matrix": [4,2], "x": 12.25, "y": 0},
{"matrix": [0,2], "x": 2, "y": 0.25},
{"matrix": [0,4], "x": 4, "y": 0.25},
{"matrix": [4,1], "x": 11.25, "y": 0.25},
{"matrix": [4,3], "x": 13.25, "y": 0.25},
{"matrix": [0,5], "x": 5, "y": 0.35},
{"matrix": [4,0], "x": 10.25, "y": 0.35},
{"matrix": [0,0], "x": 0, "y": 1.0},
{"matrix": [0,1], "x": 1, "y": 1.0},
{"matrix": [1,3], "x": 3, "y": 1.0},
{"matrix": [5,2], "x": 12.25, "y": 1.0},
{"matrix": [4,4], "x": 14.25, "y": 1.0},
{"matrix": [4,5], "x": 15.25, "y": 1.0},
{"matrix": [1,2], "x": 2, "y": 1.25},
{"matrix": [1,4], "x": 4, "y": 1.25},
{"matrix": [5,1], "x": 11.25, "y": 1.25},
{"matrix": [5,3], "x": 13.25, "y": 1.25},
{"matrix": [1,5], "x": 5, "y": 1.35},
{"matrix": [5,0], "x": 10.25, "y": 1.35},
{"matrix": [1,0], "x": 0, "y": 2.0},
{"matrix": [1,1], "x": 1, "y": 2.0},
{"matrix": [2,3], "x": 3, "y": 2.0},
{"matrix": [6,2], "x": 12.25, "y": 2.0},
{"matrix": [5,4], "x": 14.25, "y": 2.0},
{"matrix": [5,5], "x": 15.25, "y": 2.0},
{"matrix": [2,2], "x": 2, "y": 2.25},
{"matrix": [2,4], "x": 4, "y": 2.25},
{"matrix": [6,1], "x": 11.25, "y": 2.25},
{"matrix": [6,3], "x": 13.25, "y": 2.25},
{"matrix": [2,5], "x": 5, "y": 2.35},
{"matrix": [6,0], "x": 10.25, "y": 2.35},
{"matrix": [2,0], "x": 0, "y": 3.0},
{"matrix": [2,1], "x": 1, "y": 3.0},
{"matrix": [6,4], "x": 14.25, "y": 3.0},
{"matrix": [6,5], "x": 15.25, "y": 3.0},
{"matrix": [3,0], "x": 4, "y": 3.5},
{"matrix": [3,1], "x": 5, "y": 3.5},
{"matrix": [3,2], "x": 6, "y": 3.5},
{"matrix": [3,3], "x": 7, "y": 3.5},
{"matrix": [7,0], "x": 8.25, "y": 3.5},
{"matrix": [7,1], "x": 9.25, "y": 3.5},
{"matrix": [7,2], "x": 10.25, "y": 3.5},
{"matrix": [7,3], "x": 11.25, "y": 3.5}
]
}
}
}

View file

@ -0,0 +1,27 @@
# Piantor UV 44
![Piantor UV 44](https://i.ibb.co/QvJM1GR/20240806-PIANTORUV44-00.png)
PiantorUV44 is a Piantor/Cantor fork with Raspberry Pi Pico, hybrid hotswap socket and soldered-in switches support and flippable PCB.
* Keyboard Maintainer: [azhizhinov](https://github.com/azhizhinov)
* Hardware Supported: RP2040
* Hardware Availability: https://github.com/azhizhinov/PIANTORUV44
Make example for this keyboard (after setting up your build environment):
make piantoruv44:default
Flashing example for this keyboard:
make piantoruv44: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 2 ways:
* **Physical reset button**: Hold the `BOOT` button on the Pico and press the `RST` button on the Pico, release the the `RST` button before the `BOOT` button.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
Once you enter the bootloader, the keyboard will show up as a USB device on your computer, you could drag and drop a firmware file to flash it, but I recommend using the flash commands for the respective side.

View file

@ -0,0 +1,36 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#ifdef AUDIO_ENABLE
# define STARTUP_SONG SONG(PLANCK_SOUND)
// #define STARTUP_SONG SONG(NO_SOUND)
#endif
/*
* MIDI options
*/
/* enable basic MIDI features:
- MIDI notes can be sent when in Music mode is on
*/
#define MIDI_BASIC
/* enable advanced MIDI features:
- MIDI notes can be added to the keymap
- Octave shift and transpose
- Virtual sustain, portamento, and modulation wheel
- etc.
*/
//#define MIDI_ADVANCED
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 2
#define VIAL_KEYBOARD_UID {0x7B, 0xA5, 0x7F, 0x5C, 0x13, 0x4C, 0x8D, 0x69}
#define DYNAMIC_KEYMAP_LAYER_COUNT 8
// Unlock combo is set to 'Escape' + 'Space'
#define VIAL_UNLOCK_COMBO_ROWS { 0, 3 }
#define VIAL_UNLOCK_COMBO_COLS { 0, 5 }

View file

@ -0,0 +1,94 @@
/* Copyright 2015-2017 Jack Humbert
* Updated 2020 mixedfeelings
*
* 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] = {
/* Qwerty
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[0] = LAYOUT_ortho_4x12 (
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_ESC, 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, SC_SENT,
KC_NO, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
/* Lower
* ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | |Adjust| Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[1] = LAYOUT_ortho_4x12 (
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
/* Raise
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | |Adjust| | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[2] = LAYOUT_ortho_4x12 (
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
/* Utility
* ,-----------------------------------------------------------------------------------.
* | |Boot | | | | | | | | | |Del |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[3] = LAYOUT_ortho_4x12 (
KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
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,7 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
VIALRGB_ENABLE = yes
LTO_ENABLE = yes
# Not enough USB endpoints
CONSOLE_ENABLE = no

View file

@ -0,0 +1,81 @@
{
"name": "OLKB Planck Light",
"lighting": "vialrgb",
"matrix": {"rows": 4, "cols": 12},
"layouts": {
"labels": [["Layout", "MIT (1x2u)", "Grid (2x1u)"]],
"keymap": [
[
{"c":"#aaaaaa"},
"0,0",
{"c":"#cccccc"},
"0,1",
"0,2",
"0,3",
"0,4",
"0,5",
"0,6",
"0,7",
"0,8",
"0,9",
"0,10",
{"c":"#aaaaaa"},
"0,11"
],
[
"1,0",
{"c":"#cccccc"},
"1,1",
"1,2",
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
"1,8",
"1,9",
"1,10",
{"c":"#aaaaaa"},
"1,11"
],
[
"2,0",
{"c":"#cccccc"},
"2,1",
"2,2",
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
"2,8",
"2,9",
"2,10",
{"c":"#aaaaaa"},
"2,11"
],
[
"3,0",
"3,1",
"3,2",
"3,3",
{"c":"#777777"},
"3,4",
{"c":"#cccccc","w":2},
"3,5\n\n\n0,0",
{"c":"#777777"},
"3,7",
{"c":"#aaaaaa"},
"3,8",
"3,9",
"3,10",
"3,11"
],
[
{"y":0.25,"x":5,"c":"#cccccc"},
"3,5\n\n\n0,1",
"3,6\n\n\n0,1"
]
]
}
}

View file

@ -0,0 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0x44, 0xF1, 0x06, 0xC9, 0x51, 0x2B, 0x4F, 0x2F}
#define VIAL_UNLOCK_COMBO_ROWS { 0, 2 }
#define VIAL_UNLOCK_COMBO_COLS { 0, 13 }

View file

@ -0,0 +1,55 @@
/* Copyright 2023 Moritz Plattner
*
* 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( /* keymap for layer 0 */
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, LT(2, KC_MUTE),
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_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, LT(1, KC_APP), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_all( /* keymap for layer 1 */
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_all( /* keymap for layer 2 */
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) },
[2] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
};
#endif

View file

@ -0,0 +1,5 @@
ENCODER_MAP_ENABLE = yes
# VIAL support: https://get.vial.today/docs/porting-to-vial.html
VIA_ENABLE = yes
VIAL_ENABLE = yes

View file

@ -0,0 +1,359 @@
{
"name": "werk.technica's One",
"vendorId": "0x7774",
"productId": "0x0001",
"matrix": {
"rows": 6,
"cols": 15
},
"layouts": {
"labels": [
"Split Backspace",
"ISO Enter",
"Split Left Shift",
[
"Bottom Row",
"6.25u Regular",
"6u Tsangan",
"Split 2.75/1.25/2.25",
"Split 2.25/1.25/2.75"
],
"Encoder"
],
"keymap": [
[
{
"x": 2.75,
"c": "#777777"
},
"0,0",
{
"x": 0.25,
"c": "#cccccc"
},
"0,1",
"0,2",
"0,3",
"0,4",
{
"x": 0.25,
"c": "#aaaaaa"
},
"0,5",
"0,6",
"0,7",
"0,8",
{
"x": 0.25,
"c": "#cccccc"
},
"0,9",
"0,10",
"0,11",
"0,12",
{
"x": 0.25,
"c": "#aaaaaa"
},
"0,13",
{
"x": 0.25,
"d": true
},
"\n\n\n4,0",
{
"x": 0.75
},
"3,13\n\n\n4,1\n\n\n\n\n\ne0"
],
[
{
"y": 0.25,
"x": 2.75,
"c": "#cccccc"
},
"1,0",
"1,1",
"1,2",
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
"1,8",
"1,9",
"1,10",
"1,11",
"1,12",
{
"c": "#aaaaaa",
"w": 2
},
"0,14\n\n\n0,0",
{
"x": 0.25
},
"1,14",
{
"x": 0.75,
"c": "#cccccc"
},
"1,13\n\n\n0,1",
{
"c": "#aaaaaa"
},
"0,14\n\n\n0,1"
],
[
{
"x": 2.75,
"w": 1.5
},
"2,0",
{
"c": "#cccccc"
},
"2,1",
"2,2",
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
"2,8",
"2,9",
"2,10",
"2,11",
"2,12",
{
"w": 1.5
},
"2,13\n\n\n1,0",
{
"x": 0.25,
"c": "#aaaaaa"
},
"2,14",
{
"x": 1.5,
"c": "#777777",
"w": 1.25,
"h": 2,
"w2": 1.5,
"h2": 1,
"x2": -0.25
},
"2,13\n\n\n1,1"
],
[
{
"x": 2.75,
"c": "#aaaaaa",
"w": 1.75
},
"3,0",
{
"c": "#cccccc"
},
"3,1",
"3,2",
"3,3",
"3,4",
{
"n": true
},
"3,5",
"3,6",
"3,7",
{
"n": true
},
"3,8",
"3,9",
"3,10",
"3,11",
{
"c": "#777777",
"w": 2.25
},
"3,12\n\n\n1,0",
{
"x": 0.25,
"c": "#aaaaaa"
},
"3,14",
{
"x": 0.5,
"c": "#cccccc"
},
"3,12\n\n\n1,1"
],
[
{
"c": "#aaaaaa",
"w": 1.25
},
"4,0\n\n\n2,1",
{
"c": "#cccccc"
},
"4,1\n\n\n2,1",
{
"x": 0.5,
"c": "#aaaaaa",
"w": 2.25
},
"4,0\n\n\n2,0",
{
"c": "#cccccc"
},
"4,2",
"4,3",
"4,4",
"4,5",
"4,6",
"4,7",
"4,8",
"4,9",
"4,10",
"4,11",
{
"c": "#aaaaaa",
"w": 1.75
},
"4,12"
],
[
{
"y": -0.75,
"x": 17,
"c": "#cccccc"
},
"4,13"
],
[
{
"y": -0.25,
"x": 2.75,
"c": "#aaaaaa",
"w": 1.25
},
"5,0\n\n\n3,0",
{
"w": 1.25
},
"5,1\n\n\n3,0",
{
"w": 1.25
},
"5,2\n\n\n3,0",
{
"c": "#cccccc",
"w": 6.25
},
"5,6\n\n\n3,0",
{
"c": "#aaaaaa",
"w": 1.5
},
"5,10",
{
"w": 1.5
},
"5,11"
],
[
{
"y": -0.75,
"x": 16,
"c": "#cccccc"
},
"5,12",
"5,13",
"5,14"
],
[
{
"x": 2.75,
"c": "#aaaaaa",
"w": 1.5
},
"5,0\n\n\n3,1",
"5,1\n\n\n3,1",
{
"w": 1.5
},
"5,2\n\n\n3,1",
{
"c": "#cccccc",
"w": 6
},
"5,6\n\n\n3,1"
],
[
{
"y": 0.25,
"x": 2.75,
"c": "#aaaaaa",
"w": 1.25
},
"5,0\n\n\n3,2",
{
"w": 1.25
},
"5,1\n\n\n3,2",
{
"w": 1.25
},
"5,2\n\n\n3,2",
{
"c": "#cccccc",
"w": 2.75
},
"5,4\n\n\n3,2",
{
"c": "#aaaaaa",
"w": 1.25
},
"5,6\n\n\n3,2",
{
"c": "#cccccc",
"w": 2.25
},
"5,8\n\n\n3,2"
],
[
{
"y": 0.25,
"x": 2.75,
"c": "#aaaaaa",
"w": 1.25
},
"5,0\n\n\n3,3",
{
"w": 1.25
},
"5,1\n\n\n3,3",
{
"w": 1.25
},
"5,2\n\n\n3,3",
{
"c": "#cccccc",
"w": 2.25
},
"5,4\n\n\n3,3",
{
"c": "#aaaaaa",
"w": 1.25
},
"5,6\n\n\n3,3",
{
"c": "#cccccc",
"w": 2.75
},
"5,8\n\n\n3,3"
]
]
}
}