Compare commits

...

12 Commits

Author SHA1 Message Date
spacehangover
0f60630b12
Merge c72f3e0485 into 9bea332a21 2024-11-20 22:22:14 -08:00
Ryan
9bea332a21
qmk via2json: Improve macro parsing (#24345) 2024-11-21 17:20:05 +11:00
Ryan
8cbcdcac62
qmk new-keymap: validate keymap name (#23420) 2024-11-21 17:18:51 +11:00
spacehangover
c72f3e0485
Update keyboards/handwired/wwa/soyuzxl_encoder/keyboard.json
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-10-15 21:56:50 -03:00
spacehangover
7f86ef4639
Update keyboards/handwired/wwa/soyuzxl_encoder/config.h
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-10-15 21:56:45 -03:00
spacehangover
802e6d2fd7
Update keyboards/handwired/wwa/soyuzxl_encoder/keyboard.json
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-10-10 23:33:30 -03:00
spacehangover
b7c59f7100
Update keyboards/handwired/wwa/soyuzxl_encoder/keymaps/default/rules.mk
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-10-10 23:33:21 -03:00
spacehangover
9f2d393074
Update keyboards/handwired/wwa/soyuzxl_encoder/keymaps/default/keymap.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-10-10 23:33:12 -03:00
spacehangover
a9d7240b2c Added encoder & slider keymaps 2024-10-08 23:55:20 -03:00
spacehangover
5902ff1097 Changes as requested 2024-10-08 20:22:39 -03:00
spacehangover
b490ef41c8 Added SoyuzXL_Encoder 2024-09-27 18:04:42 -03:00
spacehangover
2a6271319f Added SoyuzXL_Encoder 2024-09-26 10:22:14 -03:00
7 changed files with 192 additions and 9 deletions

View File

@ -0,0 +1,5 @@
#pragma once
#define POT1_PIN GP26
#define ENCODER_DIRECTION_FLIP

View File

@ -0,0 +1,79 @@
{
"manufacturer": "spacehangover",
"keyboard_name": "SoyuzXL_Encoder",
"maintainer": "spacehangover",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"encoder": true,
},
"matrix_pins": {
"cols": ["GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6"],
"rows": ["GP7", "GP8", "GP9"]
},
"processor": "RP2040",
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0007",
"vid": "0x5757"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1},
{"matrix": [1, 5], "x": 5, "y": 1},
{"matrix": [1, 6], "x": 6, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2},
{"matrix": [2, 5], "x": 5, "y": 2},
{"matrix": [2, 6], "x": 6, "y": 2}
]
}
},
"encoder": {
"rotary": [
{
"pin_a": "GP14",
"pin_b": "GP15",
"resolution": 4
},
{
"pin_a": "GP16",
"pin_b": "GP17",
"resolution": 4
},
{
"pin_a": "GP18",
"pin_b": "GP19",
"resolution": 4
},
{
"pin_a": "GP20",
"pin_b": "GP21",
"resolution": 4
}
]
}
}

View File

@ -0,0 +1,41 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "analog.h"
#include "qmk_midi.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17,
KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24
)
};
uint8_t divisor = 0;
void slider(void) {
static int previousPotValue = 0;
int currentPotValue = analogReadPin(POT1_PIN);
int threshold = 75;
if (abs(currentPotValue - previousPotValue) > threshold) {
midi_send_cc(&midi_device, 2, 0x0A, 0x7F - (currentPotValue >> 3));
previousPotValue = currentPotValue;
}
}
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
};
#endif
void housekeeping_task_user(void) {
slider();
}

View File

@ -0,0 +1,3 @@
ENCODER_MAP_ENABLE = yes
MIDI_ENABLE = yes
ANALOG_DRIVER_REQUIRED = yes

View File

@ -0,0 +1,27 @@
# soyuzxl_encoder
![soyuzxl_encoder](https://i.imgur.com/KwwORGSh.jpeg)
21 Key, 4 Encoder and 1 Slider Macro Keyboard
* Keyboard Maintainer: [spacehangover](https://github.com/spacehangover)
* Hardware Supported: RP2040 Handwired
* Hardware Availability: RP2040 Pico
Make example for this keyboard (after setting up your build environment):
make handwired/wwa/soyuzxl_encoder:default
Flashing example for this keyboard:
make handwired/wwa/soyuzxl_encoder:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -1,5 +1,6 @@
"""This script automates the copying of the default keymap into your own keymap. """This script automates the copying of the default keymap into your own keymap.
""" """
import re
import shutil import shutil
from milc import cli from milc import cli
@ -13,6 +14,13 @@ from qmk.keyboard import keyboard_completer, keyboard_folder
from qmk.userspace import UserspaceDefs from qmk.userspace import UserspaceDefs
def validate_keymap_name(name):
"""Returns True if the given keymap name contains only a-z, 0-9 and underscore characters.
"""
regex = re.compile(r'^[a-zA-Z0-9][a-zA-Z0-9_]+$')
return bool(regex.match(name))
def prompt_keyboard(): def prompt_keyboard():
prompt = """{fg_yellow}Select Keyboard{style_reset_all} prompt = """{fg_yellow}Select Keyboard{style_reset_all}
If you`re unsure you can view a full list of supported keyboards with {fg_yellow}qmk list-keyboards{style_reset_all}. If you`re unsure you can view a full list of supported keyboards with {fg_yellow}qmk list-keyboards{style_reset_all}.
@ -60,6 +68,10 @@ def new_keymap(cli):
cli.log.error(f'Default keymap {{fg_cyan}}{keymap_path_default}{{fg_reset}} does not exist!') cli.log.error(f'Default keymap {{fg_cyan}}{keymap_path_default}{{fg_reset}} does not exist!')
return False return False
if not validate_keymap_name(user_name):
cli.log.error('Keymap names must contain only {fg_cyan}a-z{fg_reset}, {fg_cyan}0-9{fg_reset} and {fg_cyan}_{fg_reset}! Please choose a different name.')
return False
if keymap_path_new.exists(): if keymap_path_new.exists():
cli.log.error(f'Keymap {{fg_cyan}}{user_name}{{fg_reset}} already exists! Please choose a different name.') cli.log.error(f'Keymap {{fg_cyan}}{user_name}{{fg_reset}} already exists! Please choose a different name.')
return False return False

View File

@ -29,6 +29,7 @@ def _convert_macros(via_macros):
if len(via_macros) == 0: if len(via_macros) == 0:
return list() return list()
split_regex = re.compile(r'(}\,)|(\,{)') split_regex = re.compile(r'(}\,)|(\,{)')
macro_group_regex = re.compile(r'({.+?})')
macros = list() macros = list()
for via_macro in via_macros: for via_macro in via_macros:
# Split VIA macro to its elements # Split VIA macro to its elements
@ -38,13 +39,28 @@ def _convert_macros(via_macros):
macro_data = list() macro_data = list()
for m in macro: for m in macro:
if '{' in m or '}' in m: if '{' in m or '}' in m:
# Found keycode(s) # Split macro groups
keycodes = m.split(',') macro_groups = macro_group_regex.findall(m)
# Remove whitespaces and curly braces from around keycodes for macro_group in macro_groups:
keycodes = list(map(lambda s: s.strip(' {}'), keycodes)) # Remove whitespaces and curly braces from around group
# Remove the KC prefix macro_group = macro_group.strip(' {}')
keycodes = list(map(lambda s: s.replace('KC_', ''), keycodes))
macro_data.append({"action": "tap", "keycodes": keycodes}) macro_action = 'tap'
macro_keycodes = []
if macro_group[0] == '+':
macro_action = 'down'
macro_keycodes.append(macro_group[1:])
elif macro_group[0] == '-':
macro_action = 'up'
macro_keycodes.append(macro_group[1:])
else:
macro_keycodes.extend(macro_group.split(',') if ',' in macro_group else [macro_group])
# Remove the KC prefixes
macro_keycodes = list(map(lambda s: s.replace('KC_', ''), macro_keycodes))
macro_data.append({"action": macro_action, "keycodes": macro_keycodes})
else: else:
# Found text # Found text
macro_data.append(m) macro_data.append(m)
@ -54,13 +70,13 @@ def _convert_macros(via_macros):
def _fix_macro_keys(keymap_data): def _fix_macro_keys(keymap_data):
macro_no = re.compile(r'MACRO0?([0-9]{1,2})') macro_no = re.compile(r'MACRO0?\(([0-9]{1,2})\)')
for i in range(0, len(keymap_data)): for i in range(0, len(keymap_data)):
for j in range(0, len(keymap_data[i])): for j in range(0, len(keymap_data[i])):
kc = keymap_data[i][j] kc = keymap_data[i][j]
m = macro_no.match(kc) m = macro_no.match(kc)
if m: if m:
keymap_data[i][j] = f'MACRO_{m.group(1)}' keymap_data[i][j] = f'MC_{m.group(1)}'
return keymap_data return keymap_data