Merge branch 'develop' of github.com:qmk/qmk_firmware into develop
This commit is contained in:
Vendored
+2
-1
@@ -6,7 +6,8 @@
|
||||
"files.exclude": {
|
||||
"**/.build": true,
|
||||
"**/*.hex": true,
|
||||
"**/*.bin": true
|
||||
"**/*.bin": true,
|
||||
"**/*.uf2": true
|
||||
},
|
||||
"files.associations": {
|
||||
"*.h": "c",
|
||||
|
||||
@@ -428,7 +428,6 @@ include $(BUILDDEFS_PATH)/common_features.mk
|
||||
include $(BUILDDEFS_PATH)/generic_features.mk
|
||||
include $(TMK_PATH)/protocol.mk
|
||||
include $(PLATFORM_PATH)/common.mk
|
||||
include $(BUILDDEFS_PATH)/bootloader.mk
|
||||
|
||||
SRC += $(patsubst %.c,%.clib,$(LIB_SRC))
|
||||
SRC += $(patsubst %.c,%.clib,$(QUANTUM_LIB_SRC))
|
||||
@@ -443,6 +442,7 @@ ifneq ($(REQUIRE_PLATFORM_KEY),)
|
||||
endif
|
||||
endif
|
||||
|
||||
-include $(PLATFORM_PATH)/$(PLATFORM_KEY)/bootloader.mk
|
||||
include $(PLATFORM_PATH)/$(PLATFORM_KEY)/platform.mk
|
||||
-include $(PLATFORM_PATH)/$(PLATFORM_KEY)/flash.mk
|
||||
|
||||
|
||||
@@ -805,31 +805,25 @@ ifeq ($(strip $(PS2_MOUSE_ENABLE)), yes)
|
||||
OPT_DEFS += -DMOUSE_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(PS2_USE_BUSYWAIT)), yes)
|
||||
PS2_ENABLE := yes
|
||||
SRC += ps2_busywait.c
|
||||
SRC += ps2_io.c
|
||||
OPT_DEFS += -DPS2_USE_BUSYWAIT
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(PS2_USE_INT)), yes)
|
||||
PS2_ENABLE := yes
|
||||
SRC += ps2_interrupt.c
|
||||
SRC += ps2_io.c
|
||||
OPT_DEFS += -DPS2_USE_INT
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(PS2_USE_USART)), yes)
|
||||
PS2_ENABLE := yes
|
||||
SRC += ps2_usart.c
|
||||
SRC += ps2_io.c
|
||||
OPT_DEFS += -DPS2_USE_USART
|
||||
endif
|
||||
VALID_PS2_DRIVER_TYPES := busywait interrupt usart vendor
|
||||
|
||||
PS2_DRIVER ?= busywait
|
||||
ifeq ($(strip $(PS2_ENABLE)), yes)
|
||||
ifeq ($(filter $(PS2_DRIVER),$(VALID_PS2_DRIVER_TYPES)),)
|
||||
$(call CATASTROPHIC_ERROR,Invalid PS2_DRIVER,PS2_DRIVER="$(PS2_DRIVER)" is not a valid PS/2 driver)
|
||||
endif
|
||||
|
||||
OPT_DEFS += -DPS2_DRIVER_$(strip $(shell echo $(PS2_DRIVER) | tr '[:lower:]' '[:upper:]'))
|
||||
|
||||
COMMON_VPATH += $(DRIVER_PATH)/ps2
|
||||
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/ps2
|
||||
OPT_DEFS += -DPS2_ENABLE
|
||||
|
||||
ifneq ($(strip $(PS2_DRIVER)), vendor)
|
||||
SRC += ps2_io.c
|
||||
endif
|
||||
|
||||
SRC += ps2_$(strip $(PS2_DRIVER)).c
|
||||
endif
|
||||
|
||||
JOYSTICK_ENABLE ?= no
|
||||
|
||||
@@ -66,7 +66,9 @@ OTHER_OPTION_NAMES = \
|
||||
KEYLOGGER_ENABLE \
|
||||
LCD_BACKLIGHT_ENABLE \
|
||||
MACROS_ENABLED \
|
||||
PS2_ENABLE \
|
||||
PS2_MOUSE_ENABLE \
|
||||
PS2_DRIVER \
|
||||
RAW_ENABLE \
|
||||
SWAP_HANDS_ENABLE \
|
||||
RING_BUFFERED_6KRO_REPORT_ENABLE \
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
"LED_COMPOSE_PIN": {"info_key": "indicators.compose"},
|
||||
"LED_KANA_PIN": {"info_key": "indicators.kana"},
|
||||
"LED_PIN_ON_STATE": {"info_key": "indicators.on_state", "value_type": "int"},
|
||||
"MANUFACTURER": {"info_key": "manufacturer"},
|
||||
"MANUFACTURER": {"info_key": "manufacturer", "value_type": "str"},
|
||||
"MATRIX_HAS_GHOST": {"info_key": "matrix_pins.ghost", "value_type": "bool"},
|
||||
"MATRIX_IO_DELAY": {"info_key": "matrix_pins.io_delay", "value_type": "int"},
|
||||
"MOUSEKEY_DELAY": {"info_key": "mousekey.delay", "value_type": "int"},
|
||||
@@ -52,6 +52,8 @@
|
||||
"ONESHOT_TAP_TOGGLE": {"info_key": "oneshot.tap_toggle", "value_type": "int"},
|
||||
"PERMISSIVE_HOLD": {"info_key": "tapping.permissive_hold", "value_type": "bool"},
|
||||
"PERMISSIVE_HOLD_PER_KEY": {"info_key": "tapping.permissive_hold_per_key", "value_type": "bool"},
|
||||
"PS2_CLOCK_PIN": {"info_key": "ps2.clock_pin"},
|
||||
"PS2_DATA_PIN": {"info_key": "ps2.data_pin"},
|
||||
"RETRO_TAPPING": {"info_key": "tapping.retro", "value_type": "bool"},
|
||||
"RETRO_TAPPING_PER_KEY": {"info_key": "tapping.retro_per_key", "value_type": "bool"},
|
||||
"RGB_DI_PIN": {"info_key": "rgblight.pin"},
|
||||
@@ -78,7 +80,7 @@
|
||||
"RGBLIGHT_SLEEP": {"info_key": "rgblight.sleep", "value_type": "bool"},
|
||||
"RGBLIGHT_SPLIT": {"info_key": "rgblight.split", "value_type": "bool"},
|
||||
"RGBW": {"info_key": "rgblight.rgbw", "value_type": "bool"},
|
||||
"PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false},
|
||||
"PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false, "value_type": "str"},
|
||||
"PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex"},
|
||||
"VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex"},
|
||||
"QMK_ESC_OUTPUT": {"info_key": "qmk_lufa_bootloader.esc_output"},
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
# replace_with: use with a key marked deprecated or invalid to designate a replacement
|
||||
"BOARD": {"info_key": "board"},
|
||||
"BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false},
|
||||
"BLUETOOTH": {"info_key": "bluetooth.driver"},
|
||||
"BLUETOOTH_DRIVER": {"info_key": "bluetooth.driver"},
|
||||
"CAPS_WORD_ENABLE": {"info_key": "caps_word.enabled", "value_type": "bool"},
|
||||
"ENCODER_ENABLE": {"info_key": "encoder.enabled", "value_type": "bool"},
|
||||
"FIRMWARE_FORMAT": {"info_key": "build.firmware_format"},
|
||||
@@ -32,6 +32,9 @@
|
||||
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"},
|
||||
"STENO_ENABLE": {"info_key": "stenography.enabled", "value_type": "bool"},
|
||||
"STENO_PROTOCOL": {"info_key": "stenography.protocol"},
|
||||
"PS2_ENABLE": {"info_key": "ps2.enabled", "value_type": "bool"},
|
||||
"PS2_MOUSE_ENABLE": {"info_key": "ps2.mouse_enabled", "value_type": "bool"},
|
||||
"PS2_DRIVER": {"info_key": "ps2.driver"},
|
||||
|
||||
# Items we want flagged in lint
|
||||
"CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"},
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
"properties": {
|
||||
"url": {"type": "string"}
|
||||
}
|
||||
|
||||
},
|
||||
"parse_errors": {"$ref": "qmk.definitions.v1#/string_array"},
|
||||
"parse_warnings": {"$ref": "qmk.definitions.v1#/string_array"},
|
||||
|
||||
@@ -75,8 +75,7 @@
|
||||
"driver": {
|
||||
"type": "string",
|
||||
"enum": ["BluefruitLE", "RN42"]
|
||||
},
|
||||
"lto": {"type": "boolean"},
|
||||
}
|
||||
}
|
||||
},
|
||||
"board": {
|
||||
@@ -86,7 +85,27 @@
|
||||
},
|
||||
"bootloader": {
|
||||
"type": "string",
|
||||
"enum": ["atmel-dfu", "bootloadhid", "bootloadHID", "custom", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "md-boot", "qmk-dfu", "qmk-hid", "stm32-dfu", "stm32duino", "gd32v-dfu", "wb32-dfu", "unknown", "usbasploader", "USBasp", "tinyuf2", "rp2040"],
|
||||
"enum": [
|
||||
"atmel-dfu",
|
||||
"bootloadhid",
|
||||
"caterina",
|
||||
"custom",
|
||||
"gd32v-dfu",
|
||||
"halfkay",
|
||||
"kiibohd",
|
||||
"lufa-dfu",
|
||||
"lufa-ms",
|
||||
"md-boot",
|
||||
"qmk-dfu",
|
||||
"qmk-hid",
|
||||
"rp2040",
|
||||
"stm32-dfu",
|
||||
"stm32duino",
|
||||
"tinyuf2",
|
||||
"unknown",
|
||||
"usbasploader",
|
||||
"wb32-dfu"
|
||||
]
|
||||
},
|
||||
"bootloader_instructions": {
|
||||
"type": "string",
|
||||
@@ -104,7 +123,7 @@
|
||||
"type": "string",
|
||||
"enum": ["bin", "hex", "uf2"]
|
||||
},
|
||||
"lto": {"type": "boolean"},
|
||||
"lto": {"type": "boolean"}
|
||||
}
|
||||
},
|
||||
"diode_direction": {
|
||||
@@ -119,8 +138,8 @@
|
||||
"enabled": {"type": "boolean"},
|
||||
"both_shifts_turns_on": {"type": "boolean"},
|
||||
"double_tap_shift_turns_on": {"type": "boolean"},
|
||||
"idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"},
|
||||
},
|
||||
"idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}
|
||||
}
|
||||
},
|
||||
"combo": {
|
||||
"type": "object",
|
||||
@@ -228,10 +247,10 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"enabled": {"type": "boolean"},
|
||||
"delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
|
||||
"interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
|
||||
"max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
|
||||
"time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
|
||||
"delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
|
||||
"interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
|
||||
"max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
|
||||
"time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
|
||||
"wheel_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
|
||||
}
|
||||
},
|
||||
@@ -371,6 +390,20 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"ps2": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"enabled": {"type": "boolean"},
|
||||
"mouse_enabled": {"type": "boolean"},
|
||||
"clock_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
|
||||
"data_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
|
||||
"driver": {
|
||||
"type": "string",
|
||||
"enum": ["busywait", "interrupt", "usart", "vendor"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
@@ -458,7 +491,7 @@
|
||||
"retro_per_key": {"type": "boolean"},
|
||||
"term": {"$ref": "qmk.definitions.v1#/unsigned_int"},
|
||||
"term_per_key": {"type": "boolean"},
|
||||
"toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"},
|
||||
"toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"}
|
||||
}
|
||||
},
|
||||
"usb": {
|
||||
@@ -482,7 +515,7 @@
|
||||
}
|
||||
},
|
||||
"suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
|
||||
"wait_for": {"type": "boolean"},
|
||||
"wait_for": {"type": "boolean"}
|
||||
}
|
||||
},
|
||||
"qmk": {
|
||||
@@ -491,7 +524,7 @@
|
||||
"properties": {
|
||||
"keys_per_scan": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
|
||||
"tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
|
||||
"tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
|
||||
"tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}
|
||||
}
|
||||
},
|
||||
"qmk_lufa_bootloader": {
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"properties": {
|
||||
"action": {
|
||||
"type": "string",
|
||||
"enum": ['beep', 'delay', 'down', 'tap', 'up']
|
||||
"enum": ["beep", "delay", "down", "tap", "up"]
|
||||
},
|
||||
"keycodes": {
|
||||
"type": "array",
|
||||
|
||||
@@ -39,11 +39,11 @@ This is a C header file that is one of the first things included, and will persi
|
||||
* defines your VID, and for most DIY projects, can be whatever you want
|
||||
* `#define PRODUCT_ID 0x5678`
|
||||
* defines your PID, and for most DIY projects, can be whatever you want
|
||||
* `#define DEVICE_VER 0`
|
||||
* `#define DEVICE_VER 0x0100`
|
||||
* defines the device version (often used for revisions)
|
||||
* `#define MANUFACTURER Me`
|
||||
* `#define MANUFACTURER "Me"`
|
||||
* generally who/whatever brand produced the board
|
||||
* `#define PRODUCT Board`
|
||||
* `#define PRODUCT "Board"`
|
||||
* the name of the keyboard
|
||||
* `#define MATRIX_ROWS 5`
|
||||
* the number of rows in your keyboard's matrix
|
||||
|
||||
@@ -6,9 +6,9 @@ a modern alternative to Caps Lock:
|
||||
|
||||
* Letters are capitalized while active, and Caps Word automatically disables
|
||||
itself at the end of the word. That is, it stops by default once a space or
|
||||
any key other than `a`--`z`, `0`--`9`, `-`, `_`, delete, or backspace is
|
||||
pressed. Caps Word also disables itself if the keyboard is idle for 5 seconds.
|
||||
This is configurable, see below.
|
||||
any key other than `KC_A`--`KC_Z`, `KC_0`--`KC_9`, `KC_MINS`, `KC_UNDS`,
|
||||
`KC_DELETE`, or `KC_BACKSPACE` is pressed. Caps Word also disables itself if
|
||||
the keyboard is idle for 5 seconds. This is configurable, see below.
|
||||
|
||||
* To avoid requiring a dedicated key for Caps Word, there is an option
|
||||
(`BOTH_SHIFTS_TURNS_ON_CAPS_WORD`) to activate Caps Word by simultaneously
|
||||
@@ -16,7 +16,17 @@ a modern alternative to Caps Lock:
|
||||
|
||||
* The implementation does not use the Caps Lock (`KC_CAPS`) keycode. Caps Word
|
||||
works even if you're remapping Caps Lock at the OS level to Ctrl or something
|
||||
else, as Emacs and Vim users often do.
|
||||
else, as Emacs and Vim users often do. As a consequence, Caps Word does not
|
||||
follow the typical Caps Lock behaviour and may thus act in potentially
|
||||
unexpected ways, especially when using an *OS* keyboard layout other than US
|
||||
or UK. For example, Dvorak's <kbd>, <</kbd> key (`DV_COMM` aka `KC_W`) will
|
||||
get shifted because Caps Word interprets that keycode as the letter 'W' by
|
||||
default, the Spanish <kbd>Ñ</kbd> key (`ES_NTIL` aka `KC_SCLN`) will not get
|
||||
capitalized because Caps Word interprets it as the semicolon ';' punctuation
|
||||
character, and the US hyphen key (`KC_MINS`), while unaffected by Caps Lock,
|
||||
is shifted by Caps Word. However, this is not really a problem because you can
|
||||
[configure which keys should Caps Word
|
||||
shift](#configure-which-keys-are-word-breaking).
|
||||
|
||||
|
||||
## How do I enable Caps Word :id=how-do-i-enable-caps-word
|
||||
@@ -60,7 +70,7 @@ time, since both use the Left Shift + Right Shift key combination."**
|
||||
|
||||
Many keyboards enable the [Command feature](feature_command.md), which by
|
||||
default is also activated using the Left Shift + Right Shift key combination. To
|
||||
fix this conflict, please disable Command by adding in rules.mk:
|
||||
fix this conflict, please disable Command by adding in rules.mk:
|
||||
|
||||
```make
|
||||
COMMAND_ENABLE = no
|
||||
@@ -81,7 +91,7 @@ by defining `IS_COMMAND()` in config.h:
|
||||
|
||||
Caps Word turns off automatically if no keys are pressed for
|
||||
`CAPS_WORD_IDLE_TIMEOUT` milliseconds. The default is 5000 (5 seconds).
|
||||
Configure the timeout duration in config.h, for instance
|
||||
Configure the timeout duration in config.h, for instance
|
||||
|
||||
```c
|
||||
#define CAPS_WORD_IDLE_TIMEOUT 3000 // 3 seconds.
|
||||
|
||||
@@ -255,7 +255,7 @@ bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode
|
||||
```
|
||||
|
||||
## Variable Length Combos
|
||||
If you leave `COMBO_COUNT` undefined in `config.h`, it allows you to programmatically declare the size of the Combo data structure and avoid updating `COMBO_COUNT`. Instead a variable called `COMBO_LEN` has to be set. It can be set with something similar to the following in `keymap.c`: `uint16_t COMBO_LEN = sizeof(key_combos) / sizeof(key_combos[0]);` or by adding `COMBO_LENGTH` as the *last* entry in the combo enum and then `uint16_t COMBO_LEN = COMBO_LENGTH;` as such:
|
||||
If you leave `COMBO_COUNT` undefined in `config.h`, it allows you to programmatically declare the size of the Combo data structure and avoid updating `COMBO_COUNT`. Instead a variable called `COMBO_LEN` has to be set. It can be set with something similar to the following in `keymap.c`: `uint16_t COMBO_LEN = ARRAY_SIZE(key_combos);` or by adding `COMBO_LENGTH` as the *last* entry in the combo enum and then `uint16_t COMBO_LEN = COMBO_LENGTH;` as such:
|
||||
```c
|
||||
enum myCombos {
|
||||
...,
|
||||
|
||||
@@ -88,6 +88,14 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
|
||||
#endif
|
||||
```
|
||||
|
||||
Using encoder mapping pumps events through the normal QMK keycode processing pipeline, resulting in a _keydown/keyup_ combination pushed through `process_record_xxxxx()`. To configure the amount of time between the encoder "keyup" and "keydown", you can add the following to your `config.h`:
|
||||
|
||||
```c
|
||||
#define ENCODER_MAP_KEY_DELAY 10
|
||||
```
|
||||
|
||||
?> By default, the encoder map delay matches the value of `TAP_CODE_DELAY`.
|
||||
|
||||
## Callbacks
|
||||
|
||||
When not using `ENCODER_MAP_ENABLE = yes`, the callback functions can be inserted into your `<keyboard>.c`:
|
||||
@@ -119,7 +127,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
}
|
||||
```
|
||||
|
||||
!> If you return `true`, it will allow the keyboard level code to run as well. Returning `false` will override the keyboard level code, depending on how the keyboard function is set up.
|
||||
!> If you return `true`, it will allow the keyboard level code to run as well. Returning `false` will override the keyboard level code, depending on how the keyboard function is set up.
|
||||
|
||||
Layer conditions can also be used with the callback function like the following:
|
||||
|
||||
@@ -172,7 +180,7 @@ The A an B lines of the encoders should be wired directly to the MCU, and the C/
|
||||
Multiple encoders may share pins so long as each encoder has a distinct pair of pins when the following conditions are met:
|
||||
- using detent encoders
|
||||
- pads must be high at the detent stability point which is called 'default position' in QMK
|
||||
- no more than two encoders sharing a pin can be turned at the same time
|
||||
- no more than two encoders sharing a pin can be turned at the same time
|
||||
|
||||
For example you can support two encoders using only 3 pins like this
|
||||
```
|
||||
@@ -185,4 +193,4 @@ You could even support three encoders using only three pins (one per encoder) ho
|
||||
#define ENCODERS_PAD_A { B1, B1, B2 }
|
||||
#define ENCODERS_PAD_B { B2, B3, B3 }
|
||||
```
|
||||
Here rotating Encoder 0 `B1 B2` and Encoder 1 `B1 B3` could be interpreted as rotating Encoder 2 `B2 B3` or `B3 B2` depending on the timing. This may still be a useful configuration depending on your use case
|
||||
Here rotating Encoder 0 `B1 B2` and Encoder 1 `B1 B3` could be interpreted as rotating Encoder 2 `B2 B3` or `B3 B2` depending on the timing. This may still be a useful configuration depending on your use case
|
||||
|
||||
@@ -487,3 +487,13 @@ report_mouse_t pointing_device_task_combined_user(report_mouse_t left_report, re
|
||||
return pointing_device_combine_reports(left_report, right_report);
|
||||
}
|
||||
```
|
||||
|
||||
# Troubleshooting
|
||||
|
||||
If you are having issues with pointing device drivers debug messages can be enabled that will give you insights in the inner workings. To enable these add to your keyboards `config.h` file:
|
||||
|
||||
```c
|
||||
#define POINTING_DEVICE_DEBUG
|
||||
```
|
||||
|
||||
?> The messages will be printed out to the `CONSOLE` output. For additional information, refer to [Debugging/Troubleshooting QMK](faq_debug.md).
|
||||
|
||||
@@ -32,13 +32,14 @@ In rules.mk:
|
||||
|
||||
```make
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_BUSYWAIT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = busywait
|
||||
```
|
||||
|
||||
In your keyboard config.h:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_BUSYWAIT
|
||||
#ifdef PS2_DRIVER_BUSYWAIT
|
||||
# define PS2_CLOCK_PIN D1
|
||||
# define PS2_DATA_PIN D2
|
||||
#endif
|
||||
@@ -52,13 +53,14 @@ In rules.mk:
|
||||
|
||||
```make
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_INT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = interrupt
|
||||
```
|
||||
|
||||
In your keyboard config.h:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_INT
|
||||
#ifdef PS2_DRIVER_INTERRUPT
|
||||
#define PS2_CLOCK_PIN D2
|
||||
#define PS2_DATA_PIN D5
|
||||
|
||||
@@ -84,7 +86,8 @@ In rules.mk:
|
||||
|
||||
```
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_INT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = interrupt
|
||||
```
|
||||
|
||||
In your keyboard config.h:
|
||||
@@ -108,13 +111,14 @@ In rules.mk:
|
||||
|
||||
```make
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_USART = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = usart
|
||||
```
|
||||
|
||||
In your keyboard config.h:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_DRIVER_USART
|
||||
#define PS2_CLOCK_PIN D5
|
||||
#define PS2_DATA_PIN D2
|
||||
|
||||
|
||||
@@ -206,6 +206,17 @@ The functions for starting and finishing Unicode input on your platform can be o
|
||||
|
||||
You can find the default implementations of these functions in [`process_unicode_common.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicode_common.c).
|
||||
|
||||
### Input Mode Callbacks
|
||||
|
||||
There are callbacks functions available that are called whenever the unicode input mode changes. The new input mode is passed to the function.
|
||||
|
||||
|Callback |Description |
|
||||
|---------------------------------------------------|-----------------------------------------------------|
|
||||
| `unicode_input_mode_set_kb(uint8_t input_mode)` | Callback for unicode input mode set, for keyboard. |
|
||||
| `unicode_input_mode_set_user(uint8_t input_mode)` | Callback for unicode input mode set, for users. |
|
||||
|
||||
This feature can be used, for instance, to implement LED indicators for the current unicode input mode.
|
||||
|
||||
### Input Key Configuration
|
||||
|
||||
You can customize the keys used to trigger Unicode input for macOS, Linux and WinCompose by adding corresponding defines to your `config.h`. The default values match the platforms' default settings, so you shouldn't need to change this unless Unicode input isn't working, or you want to use a different key (e.g. in order to free up left or right Alt).
|
||||
|
||||
@@ -36,13 +36,14 @@ rules.mk で:
|
||||
|
||||
```makefile
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_BUSYWAIT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = busywait
|
||||
```
|
||||
|
||||
キーボードの config.h で:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_BUSYWAIT
|
||||
#ifdef PS2_DRIVER_BUSYWAIT
|
||||
# define PS2_CLOCK_PIN D1
|
||||
# define PS2_DATA_PIN D2
|
||||
#endif
|
||||
@@ -56,13 +57,14 @@ rules.mk で:
|
||||
|
||||
```makefile
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_INT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = interrupt
|
||||
```
|
||||
|
||||
キーボードの config.h で:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_INT
|
||||
#ifdef PS2_DRIVER_INTERRUPT
|
||||
#define PS2_CLOCK_PIN D2
|
||||
#define PS2_DATA_PIN D5
|
||||
|
||||
@@ -88,14 +90,14 @@ rules.mk で:
|
||||
|
||||
```makefile
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_USART = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = usart
|
||||
```
|
||||
|
||||
キーボードの config.h で:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_DRIVER_USART
|
||||
#define PS2_CLOCK_PIN D5
|
||||
#define PS2_DATA_PIN D2
|
||||
|
||||
|
||||
@@ -20,11 +20,12 @@
|
||||
#include "haptic.h"
|
||||
#include "gpio.h"
|
||||
#include "usb_device_state.h"
|
||||
#include "util.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
uint8_t solenoid_dwell = SOLENOID_DEFAULT_DWELL;
|
||||
static pin_t solenoid_pads[] = SOLENOID_PINS;
|
||||
#define NUMBER_OF_SOLENOIDS (sizeof(solenoid_pads) / sizeof(pin_t))
|
||||
#define NUMBER_OF_SOLENOIDS ARRAY_SIZE(solenoid_pads)
|
||||
bool solenoid_on[NUMBER_OF_SOLENOIDS] = {false};
|
||||
bool solenoid_buzzing[NUMBER_OF_SOLENOIDS] = {false};
|
||||
uint16_t solenoid_start[NUMBER_OF_SOLENOIDS] = {0};
|
||||
@@ -147,7 +148,7 @@ void solenoid_check(void) {
|
||||
void solenoid_setup(void) {
|
||||
#ifdef SOLENOID_PINS_ACTIVE_STATE
|
||||
bool state_temp[] = SOLENOID_PINS_ACTIVE_STATE;
|
||||
uint8_t bound_check = (sizeof(state_temp) / sizeof(bool));
|
||||
uint8_t bound_check = ARRAY_SIZE(state_temp);
|
||||
#endif
|
||||
|
||||
for (uint8_t i = 0; i < NUMBER_OF_SOLENOIDS; i++) {
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
// refer to documentation: Gen2 and Gen3 (Pinnacle ASIC) at https://www.cirque.com/documentation
|
||||
|
||||
#include "cirque_pinnacle.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "wait.h"
|
||||
#include "timer.h"
|
||||
|
||||
@@ -27,12 +25,6 @@ void cirque_pinnacle_enable_feed(bool feedEnable);
|
||||
void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count);
|
||||
void RAP_Write(uint8_t address, uint8_t data);
|
||||
|
||||
#ifdef CONSOLE_ENABLE
|
||||
void print_byte(uint8_t byte) {
|
||||
xprintf("%c%c%c%c%c%c%c%c|", (byte & 0x80 ? '1' : '0'), (byte & 0x40 ? '1' : '0'), (byte & 0x20 ? '1' : '0'), (byte & 0x10 ? '1' : '0'), (byte & 0x08 ? '1' : '0'), (byte & 0x04 ? '1' : '0'), (byte & 0x02 ? '1' : '0'), (byte & 0x01 ? '1' : '0'));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CIRQUE_PINNACLE_POSITION_MODE
|
||||
/* Logical Scaling Functions */
|
||||
// Clips raw coordinates to "reachable" window of sensor
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "cirque_pinnacle_regdefs.h"
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "pointing_device_internal.h"
|
||||
|
||||
#ifndef CIRQUE_PINNACLE_TIMEOUT
|
||||
# define CIRQUE_PINNACLE_TIMEOUT 20 // I2C timeout in milliseconds
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
// Copyright (c) 2018 Cirque Corp. Restrictions apply. See: www.cirque.com/sw-license
|
||||
#include "cirque_pinnacle.h"
|
||||
#include "i2c_master.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "stdio.h"
|
||||
|
||||
// Masks for Cirque Register Access Protocol (RAP)
|
||||
@@ -18,9 +16,7 @@ void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) {
|
||||
if (touchpad_init) {
|
||||
i2c_writeReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, NULL, 0, CIRQUE_PINNACLE_TIMEOUT);
|
||||
if (i2c_readReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, data, count, CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) {
|
||||
#ifdef CONSOLE_ENABLE
|
||||
dprintf("error cirque_pinnacle i2c_readReg\n");
|
||||
#endif
|
||||
pd_dprintf("error cirque_pinnacle i2c_readReg\n");
|
||||
touchpad_init = false;
|
||||
}
|
||||
i2c_stop();
|
||||
@@ -33,9 +29,7 @@ void RAP_Write(uint8_t address, uint8_t data) {
|
||||
|
||||
if (touchpad_init) {
|
||||
if (i2c_writeReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, &data, sizeof(data), CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) {
|
||||
#ifdef CONSOLE_ENABLE
|
||||
dprintf("error cirque_pinnacle i2c_writeReg\n");
|
||||
#endif
|
||||
pd_dprintf("error cirque_pinnacle i2c_writeReg\n");
|
||||
touchpad_init = false;
|
||||
}
|
||||
i2c_stop();
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
// Copyright (c) 2018 Cirque Corp. Restrictions apply. See: www.cirque.com/sw-license
|
||||
#include "cirque_pinnacle.h"
|
||||
#include "spi_master.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
|
||||
// Masks for Cirque Register Access Protocol (RAP)
|
||||
#define WRITE_MASK 0x80
|
||||
@@ -24,9 +22,7 @@ void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) {
|
||||
data[i] = spi_write(FILLER_BYTE); // write filler, receive data on the third filler send
|
||||
}
|
||||
} else {
|
||||
#ifdef CONSOLE_ENABLE
|
||||
dprintf("error cirque_pinnacle spi_start read\n");
|
||||
#endif
|
||||
pd_dprintf("error cirque_pinnacle spi_start read\n");
|
||||
touchpad_init = false;
|
||||
}
|
||||
spi_stop();
|
||||
@@ -42,9 +38,7 @@ void RAP_Write(uint8_t address, uint8_t data) {
|
||||
spi_write(cmdByte);
|
||||
spi_write(data);
|
||||
} else {
|
||||
#ifdef CONSOLE_ENABLE
|
||||
dprintf("error cirque_pinnacle spi_start write\n");
|
||||
#endif
|
||||
pd_dprintf("error cirque_pinnacle spi_start write\n");
|
||||
touchpad_init = false;
|
||||
}
|
||||
spi_stop();
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
* 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 "pointing_device_internal.h"
|
||||
#include "pimoroni_trackball.h"
|
||||
#include "i2c_master.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "timer.h"
|
||||
|
||||
// clang-format off
|
||||
@@ -58,20 +58,17 @@ void pimoroni_trackball_set_rgbw(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
|
||||
uint8_t data[4] = {r, g, b, w};
|
||||
__attribute__((unused)) i2c_status_t status = i2c_writeReg(PIMORONI_TRACKBALL_ADDRESS << 1, PIMORONI_TRACKBALL_REG_LED_RED, data, sizeof(data), PIMORONI_TRACKBALL_TIMEOUT);
|
||||
|
||||
#ifdef CONSOLE_ENABLE
|
||||
if (debug_mouse) dprintf("Trackball RGBW i2c_status_t: %d\n", status);
|
||||
#endif
|
||||
pd_dprintf("Trackball RGBW i2c_status_t: %d\n", status);
|
||||
}
|
||||
|
||||
i2c_status_t read_pimoroni_trackball(pimoroni_data_t* data) {
|
||||
i2c_status_t status = i2c_readReg(PIMORONI_TRACKBALL_ADDRESS << 1, PIMORONI_TRACKBALL_REG_LEFT, (uint8_t*)data, sizeof(*data), PIMORONI_TRACKBALL_TIMEOUT);
|
||||
#ifdef CONSOLE_ENABLE
|
||||
if (debug_mouse) {
|
||||
static uint16_t d_timer;
|
||||
if (timer_elapsed(d_timer) > PIMORONI_TRACKBALL_DEBUG_INTERVAL) {
|
||||
dprintf("Trackball READ i2c_status_t: %d L: %d R: %d Up: %d D: %d SW: %d\n", status, data->left, data->right, data->up, data->down, data->click);
|
||||
d_timer = timer_read();
|
||||
}
|
||||
|
||||
#ifdef POINTING_DEVICE_DEBUG
|
||||
static uint16_t d_timer;
|
||||
if (timer_elapsed(d_timer) > PIMORONI_TRACKBALL_DEBUG_INTERVAL) {
|
||||
pd_dprintf("Trackball READ i2c_status_t: %d L: %d R: %d Up: %d D: %d SW: %d\n", status, data->left, data->right, data->up, data->down, data->click);
|
||||
d_timer = timer_read();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -7,9 +7,8 @@
|
||||
// Copyright 2020 Ploopy Corporation
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "debug.h"
|
||||
#include "pointing_device_internal.h"
|
||||
#include "pmw33xx_common.h"
|
||||
#include "print.h"
|
||||
#include "string.h"
|
||||
#include "wait.h"
|
||||
#include "spi_master.h"
|
||||
@@ -18,10 +17,10 @@
|
||||
extern const uint8_t pmw33xx_firmware_data[PMW33XX_FIRMWARE_LENGTH] PROGMEM;
|
||||
extern const uint8_t pmw33xx_firmware_signature[3] PROGMEM;
|
||||
|
||||
static const pin_t cs_pins[] = PMW33XX_CS_PINS;
|
||||
static bool in_burst[sizeof(cs_pins) / sizeof(pin_t)] = {0};
|
||||
static const pin_t cs_pins[] = PMW33XX_CS_PINS;
|
||||
static bool in_burst[ARRAY_SIZE(cs_pins)] = {0};
|
||||
|
||||
const size_t pmw33xx_number_of_sensors = sizeof(cs_pins) / sizeof(pin_t);
|
||||
const size_t pmw33xx_number_of_sensors = ARRAY_SIZE(cs_pins);
|
||||
|
||||
bool __attribute__((cold)) pmw33xx_upload_firmware(uint8_t sensor);
|
||||
bool __attribute__((cold)) pmw33xx_check_signature(uint8_t sensor);
|
||||
@@ -154,7 +153,7 @@ bool pmw33xx_init(uint8_t sensor) {
|
||||
pmw33xx_read(sensor, REG_Delta_Y_H);
|
||||
|
||||
if (!pmw33xx_upload_firmware(sensor)) {
|
||||
dprintf("PMW33XX (%d): firmware upload failed!\n", sensor);
|
||||
pd_dprintf("PMW33XX (%d): firmware upload failed!\n", sensor);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -170,7 +169,7 @@ bool pmw33xx_init(uint8_t sensor) {
|
||||
pmw33xx_write(sensor, REG_Lift_Config, PMW33XX_LIFTOFF_DISTANCE);
|
||||
|
||||
if (!pmw33xx_check_signature(sensor)) {
|
||||
dprintf("PMW33XX (%d): firmware signature verification failed!\n", sensor);
|
||||
pd_dprintf("PMW33XX (%d): firmware signature verification failed!\n", sensor);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -185,7 +184,7 @@ pmw33xx_report_t pmw33xx_read_burst(uint8_t sensor) {
|
||||
}
|
||||
|
||||
if (!in_burst[sensor]) {
|
||||
dprintf("PMW33XX (%d): burst\n", sensor);
|
||||
pd_dprintf("PMW33XX (%d): burst\n", sensor);
|
||||
if (!pmw33xx_write(sensor, REG_Motion_Burst, 0x00)) {
|
||||
return report;
|
||||
}
|
||||
@@ -208,9 +207,7 @@ pmw33xx_report_t pmw33xx_read_burst(uint8_t sensor) {
|
||||
|
||||
spi_stop();
|
||||
|
||||
if (debug_config.mouse) {
|
||||
dprintf("PMW33XX (%d): motion: 0x%x dx: %i dy: %i\n", sensor, report.motion.w, report.delta_x, report.delta_y);
|
||||
}
|
||||
pd_dprintf("PMW33XX (%d): motion: 0x%x dx: %i dy: %i\n", sensor, report.motion.w, report.delta_x, report.delta_y);
|
||||
|
||||
report.delta_x *= -1;
|
||||
report.delta_y *= -1;
|
||||
|
||||
@@ -333,7 +333,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
aqours_num++;
|
||||
aqours_next_color_timer_count = 0;
|
||||
target_col = 0;
|
||||
if (aqours_num == sizeof(aqours_h) / sizeof(int)) {
|
||||
if (aqours_num == ARRAY_SIZE(aqours_h)) {
|
||||
aqours_num = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#pragma once
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#undef MANUFACTURER
|
||||
#define MANUFACTURER Some Guy
|
||||
#define MANUFACTURER "Some Guy"
|
||||
|
||||
@@ -9,5 +9,5 @@
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x0A0C
|
||||
#define DEVICE_VER 0x0068
|
||||
#define MANUFACTURER 68Keys.io
|
||||
#define PRODUCT The 68Keys.io Keyboard
|
||||
#define MANUFACTURER "68Keys.io"
|
||||
#define PRODUCT "The 68Keys.io Keyboard"
|
||||
|
||||
@@ -21,10 +21,10 @@
|
||||
#pragma once
|
||||
|
||||
#undef MANUFACTURER
|
||||
#define MANUFACTURER Dan
|
||||
#define MANUFACTURER "Dan"
|
||||
|
||||
#undef PRODUCT
|
||||
#define PRODUCT Magicforce 68 QMK
|
||||
#define PRODUCT "Magicforce 68 QMK"
|
||||
|
||||
#undef BACKLIGHT_LEVELS
|
||||
#define BACKLIGHT_LEVELS 20
|
||||
|
||||
@@ -94,7 +94,7 @@ encoder_mode_t encoder_modes[] = {
|
||||
// Insert your custom encoder mode here
|
||||
};
|
||||
|
||||
#define NUM_ENCODER_MODES (sizeof(encoder_modes)/sizeof(encoder_modes[0]))
|
||||
#define NUM_ENCODER_MODES ARRAY_SIZE(encoder_modes)
|
||||
|
||||
// This counter is used to track what encoder mode is being used at a certain time
|
||||
int encoder_mode_count = 0;
|
||||
|
||||
@@ -94,8 +94,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#define OLED_ALL_BLOCKS_MASK (((((OLED_BLOCK_TYPE)1 << (OLED_BLOCK_COUNT - 1)) - 1) << 1) | 1)
|
||||
|
||||
#define ARRAY_SIZE(arr) sizeof(arr)/sizeof(arr[0])
|
||||
|
||||
// spi defines
|
||||
#define OLED_STATUS_SUCCESS SPI_STATUS_SUCCESS
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"keyboard_name": "shisaku",
|
||||
"manufacturer": "ADPenrose",
|
||||
"url": "https://github.com/ADPenrose/shisaku_keeb",
|
||||
"maintainer": "ADPenrose",
|
||||
"usb": {
|
||||
|
||||
@@ -31,4 +31,4 @@ 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 `RESET` if it is available
|
||||
- **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
|
||||
|
||||
@@ -24,4 +24,4 @@ Enter the bootloader in 3 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (top left key) 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 `RESET` if it is available
|
||||
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
|
||||
|
||||
@@ -24,15 +24,14 @@
|
||||
/* -------------------- Static Function Prototypes -------------------------- */
|
||||
static uint8_t ap2_ble_leds(void);
|
||||
static void ap2_ble_mouse(report_mouse_t *report);
|
||||
static void ap2_ble_system(uint16_t data);
|
||||
static void ap2_ble_consumer(uint16_t data);
|
||||
static void ap2_ble_extra(uint8_t report_id, uint16_t data);
|
||||
static void ap2_ble_keyboard(report_keyboard_t *report);
|
||||
|
||||
static void ap2_ble_swtich_ble_driver(void);
|
||||
|
||||
/* -------------------- Static Local Variables ------------------------------ */
|
||||
static host_driver_t ap2_ble_driver = {
|
||||
ap2_ble_leds, ap2_ble_keyboard, ap2_ble_mouse, ap2_ble_system, ap2_ble_consumer,
|
||||
ap2_ble_leds, ap2_ble_keyboard, ap2_ble_mouse, ap2_ble_extra
|
||||
};
|
||||
|
||||
static uint8_t ble_mcu_wakeup[11] = {0x7b, 0x12, 0x53, 0x00, 0x03, 0x00, 0x01, 0x7d, 0x02, 0x01, 0x02};
|
||||
@@ -131,8 +130,6 @@ static uint8_t ap2_ble_leds(void) {
|
||||
|
||||
static void ap2_ble_mouse(report_mouse_t *report) {}
|
||||
|
||||
static void ap2_ble_system(uint16_t data) {}
|
||||
|
||||
static inline uint16_t CONSUMER2AP2(uint16_t usage) {
|
||||
switch (usage) {
|
||||
case AUDIO_VOL_DOWN:
|
||||
@@ -152,12 +149,14 @@ static inline uint16_t CONSUMER2AP2(uint16_t usage) {
|
||||
}
|
||||
}
|
||||
|
||||
static void ap2_ble_consumer(uint16_t data) {
|
||||
sdPut(&SD1, 0x0);
|
||||
sdWrite(&SD1, ble_mcu_send_consumer_report, sizeof(ble_mcu_send_consumer_report));
|
||||
sdPut(&SD1, CONSUMER2AP2(data));
|
||||
static const uint8_t dummy[3] = {0};
|
||||
sdWrite(&SD1, dummy, sizeof(dummy));
|
||||
static void ap2_ble_extra(uint8_t report_id, uint16_t data) {
|
||||
if (report_id == REPORT_ID_CONSUMER) {
|
||||
sdPut(&SD1, 0x0);
|
||||
sdWrite(&SD1, ble_mcu_send_consumer_report, sizeof(ble_mcu_send_consumer_report));
|
||||
sdPut(&SD1, CONSUMER2AP2(data));
|
||||
static const uint8_t dummy[3] = {0};
|
||||
sdWrite(&SD1, dummy, sizeof(dummy));
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
|
||||
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
/* Ensure we jump to bootloader if the RESET keycode was pressed */
|
||||
/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
|
||||
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
|
||||
|
||||
/* LSE clock */
|
||||
|
||||
@@ -117,55 +117,3 @@ static enum { UNKNOWN, LEFT, RIGHT } hand_side = UNKNOWN;
|
||||
return (hand_side == LEFT);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ENCODER_ENABLE
|
||||
# ifdef ENCODERS
|
||||
static uint8_t encoder_state[ENCODERS] = {0};
|
||||
static keypos_t encoder_cw[ENCODERS] = ENCODERS_CW_KEY;
|
||||
static keypos_t encoder_ccw[ENCODERS] = ENCODERS_CCW_KEY;
|
||||
# endif
|
||||
|
||||
void encoder_action_unregister(void) {
|
||||
# ifdef ENCODERS
|
||||
for (int index = 0; index < ENCODERS; ++index) {
|
||||
if (encoder_state[index]) {
|
||||
keyevent_t encoder_event = (keyevent_t) {
|
||||
.key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index],
|
||||
.pressed = false,
|
||||
.time = (timer_read() | 1)
|
||||
};
|
||||
encoder_state[index] = 0;
|
||||
action_exec(encoder_event);
|
||||
}
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
void encoder_action_register(uint8_t index, bool clockwise) {
|
||||
# ifdef ENCODERS
|
||||
keyevent_t encoder_event = (keyevent_t) {
|
||||
.key = clockwise ? encoder_cw[index] : encoder_ccw[index],
|
||||
.pressed = true,
|
||||
.time = (timer_read() | 1)
|
||||
};
|
||||
encoder_state[index] = (clockwise ^ 1) | (clockwise << 1);
|
||||
# ifdef CONSOLE_ENABLE
|
||||
uprintf("encoder_action_register index = %u, clockwise = %u, row = %u, col = %u\n", index, clockwise, encoder_event.key.row, encoder_event.key.col);
|
||||
# endif
|
||||
action_exec(encoder_event);
|
||||
# endif
|
||||
}
|
||||
|
||||
void matrix_scan_kb(void) {
|
||||
encoder_action_unregister();
|
||||
matrix_scan_user();
|
||||
}
|
||||
|
||||
bool encoder_update_kb(uint8_t index, bool clockwise) {
|
||||
encoder_action_register(index, clockwise);
|
||||
// don't return user actions, because they are in the keymap
|
||||
// encoder_update_user(index, clockwise);
|
||||
return true;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
l40, l41, l42, l43, l44, l45, l46, l47, \
|
||||
\
|
||||
oc, r00, r01, r02, r03, fn, \
|
||||
r10, r11, r12, r13, r14, ccw, cw,\
|
||||
r10, r11, r12, r13, r14, \
|
||||
r20, r21, r22, r23, r24, r25, \
|
||||
r30, r31, r32, r33, r34, r35, r36, r37, \
|
||||
r40, r41, r42, r43, r44, r45, r46, r47, \
|
||||
@@ -49,7 +49,7 @@
|
||||
{ l20, l21, l22, l23, l24, l25, l26 }, \
|
||||
{ l30, l31, l32, l33, l34, l35, l36 }, \
|
||||
{ l41, l42, l43, l44, l45, l46, l47 }, \
|
||||
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, ccw, cw }, \
|
||||
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
|
||||
{ r50, r40, r31, r20, r10, r00, r30 }, \
|
||||
{ r51, r41, r32, r21, r11, r01, oc }, \
|
||||
{ r52, r42, r33, r22, r12, r02, fn }, \
|
||||
@@ -83,6 +83,3 @@
|
||||
// However, It enables to decide the handedness by the HW by adding one condition: "not to press any keys (especially r30) dusing startup."
|
||||
bool is_keyboard_left(void);
|
||||
|
||||
void encoder_action_unregister(void);
|
||||
|
||||
void encoder_action_register(uint8_t index, bool clockwise);
|
||||
|
||||
@@ -248,13 +248,11 @@
|
||||
* Encoder options
|
||||
*/
|
||||
#ifdef ENCODER_ENABLE
|
||||
# define ENCODERS_PAD_A { C7 } // dummy
|
||||
# define ENCODERS_PAD_B { B7 } // dummy
|
||||
# define ENCODERS_PAD_A { }
|
||||
# define ENCODERS_PAD_B { }
|
||||
# define ENCODER_RESOLUTIONS { }
|
||||
# define ENCODERS_PAD_A_RIGHT { F5 }
|
||||
# define ENCODERS_PAD_B_RIGHT { F4 }
|
||||
# define ENCODER_RESOLUTION 4
|
||||
# define ENCODER_RESOLUTIONS_RIGHT { 4 }
|
||||
# define TAP_CODE_DELAY 10
|
||||
# define ENCODERS 2
|
||||
# define ENCODERS_CW_KEY { {4, 5}, {6, 5} }
|
||||
# define ENCODERS_CCW_KEY { {3, 5}, {5, 5} }
|
||||
#endif // ENCODER_ENABLE
|
||||
|
||||
@@ -65,9 +65,6 @@
|
||||
{"label": "r13", "x": 14, "y": 1},
|
||||
{"label": "r14", "x": 15, "y": 1},
|
||||
|
||||
{"label": "ccw", "x": 16.5, "y": 1},
|
||||
{"label": "cw", "x": 17.5, "y": 1},
|
||||
|
||||
{"label": "r20", "x": 10.5, "y": 2},
|
||||
{"label": "r21", "x": 11.5, "y": 2},
|
||||
{"label": "r22", "x": 12.5, "y": 2},
|
||||
|
||||
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
MI_D_1, MI_B_1, MI_G_3, MI_A_3, MI_Ds_3, MI_Fs_2, MI_Ds_1, MI_C_1,
|
||||
|
||||
MO_SWAP, MI_B_5, MI_Gs_5, MI_G_5, MI_F_5, FN_MUTE,
|
||||
MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5, KC_VOLD, KC_VOLU,
|
||||
MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5,
|
||||
MI_C_3, MI_D_3, MI_G_3, MI_As_4, MI_C_5, MI_D_5,
|
||||
TG_SWAP, MI_B_2, MI_E_3, MI_Cs_4, MI_Fs_3, MI_A_3, MI_C_4, MI_E_4,
|
||||
MI_A_2, MI_F_3, MI_As_3, MI_Gs_3, MI_B_3, MI_D_4, MI_Gs_4, MI_B_4,
|
||||
@@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
MI_E_1, MI_E_2, MI_Fs_3, MI_Gs_3, MI_B_3, MI_F_2, MI_Cs_1, MI_F_1,
|
||||
|
||||
MO_SWAP, MI_A_5, MI_Gs_5, MI_Fs_5, MI_F_5, FN_MUTE,
|
||||
MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5, KC_VOLD, KC_VOLU,
|
||||
MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5,
|
||||
MI_D_3, MI_Cs_3, MI_Gs_3, MI_As_3, MI_C_4, MI_D_5,
|
||||
TG_SWAP, MI_B_2, MI_Fs_3, MI_Fs_4, MI_G_3, MI_B_3, MI_D_4, MI_G_4,
|
||||
MI_A_2, MI_F_3, MI_E_3, MI_A_3, MI_Cs_4, MI_E_4, MI_A_4, MI_Cs_5,
|
||||
@@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
_______, MI_OCTD, MI_OCTU, MI_VELD, MI_VELU, _______,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION,
|
||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
@@ -79,6 +79,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
)
|
||||
};
|
||||
|
||||
#if defined(ENCODER_MAP_ENABLE)
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
|
||||
[_OPEN] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
|
||||
[_CLOSE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
|
||||
[_FN] = { ENCODER_CCW_CW(_______, _______) },
|
||||
};
|
||||
#endif
|
||||
|
||||
void keyboard_post_init_user(void) {
|
||||
// Set octave to MI_OCT_0
|
||||
midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
|
||||
@@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
MI_D_1, MI_B_1, MI_G_3, MI_A_3, MI_Ds_3, MI_Fs_2, MI_Ds_1, MI_C_1,
|
||||
|
||||
MO_SWAP, MI_B_5, MI_Gs_5, MI_G_5, MI_F_5, FN_MUTE,
|
||||
MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5, KC_VOLD, KC_VOLU,
|
||||
MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5,
|
||||
MI_C_3, MI_D_3, MI_G_3, MI_As_4, MI_C_5, MI_D_5,
|
||||
TG_SWAP, MI_B_2, MI_E_3, MI_Cs_4, MI_Fs_3, MI_A_3, MI_C_4, MI_E_4,
|
||||
MI_A_2, MI_F_3, MI_As_3, MI_Gs_3, MI_B_3, MI_D_4, MI_Gs_4, MI_B_4,
|
||||
@@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
MI_E_1, MI_E_2, MI_Fs_3, MI_Gs_3, MI_B_3, MI_F_2, MI_Cs_1, MI_F_1,
|
||||
|
||||
MO_SWAP, MI_A_5, MI_Gs_5, MI_Fs_5, MI_F_5, FN_MUTE,
|
||||
MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5, KC_VOLD, KC_VOLU,
|
||||
MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5,
|
||||
MI_D_3, MI_Cs_3, MI_Gs_3, MI_As_3, MI_C_4, MI_D_5,
|
||||
TG_SWAP, MI_B_2, MI_Fs_3, MI_Fs_4, MI_G_3, MI_B_3, MI_D_4, MI_G_4,
|
||||
MI_A_2, MI_F_3, MI_E_3, MI_A_3, MI_Cs_4, MI_E_4, MI_A_4, MI_Cs_5,
|
||||
@@ -101,7 +101,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
|
||||
|
||||
MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
|
||||
KC_6, KC_7, KC_8, KC_9, KC_BSPC, _______, _______,
|
||||
KC_6, KC_7, KC_8, KC_9, KC_BSPC,
|
||||
_________________QWERTY_R1_________________, KC_DEL,
|
||||
KC_PGUP, KC_G, _________________QWERTY_R2_________________, KC_ENT,
|
||||
KC_PGDN, KC_B, _________________QWERTY_R3_________________, KC_RSFT,
|
||||
@@ -116,7 +116,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_CAPS, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
|
||||
|
||||
MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
|
||||
KC_6, KC_7, KC_8, KC_9, KC_BSPC, _______, _______,
|
||||
KC_6, KC_7, KC_8, KC_9, KC_BSPC,
|
||||
_________________COLEMAK_R1________________, KC_DEL,
|
||||
KC_PGUP, KC_D, _________________COLEMAK_R2________________, KC_ENT,
|
||||
KC_PGDN, KC_B, _________________COLEMAK_R3________________, KC_RSFT,
|
||||
@@ -131,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
|
||||
_______, _______, _______, _______, KC_F10, _______,
|
||||
KC_F6, KC_F7, KC_F8, KC_F9, _______, _______, _______,
|
||||
KC_F6, KC_F7, KC_F8, KC_F9, _______,
|
||||
_______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_QUOT, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
@@ -146,7 +146,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
XXXXXXX, XXXXXXX, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
_______, MI_OCTD, MI_OCTU, MI_VELD, MI_VELU, _______,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_MOD,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION,
|
||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, RGB_SPD, RGB_SPI, RGB_VAD, RGB_VAI,
|
||||
@@ -154,6 +154,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
)
|
||||
};
|
||||
|
||||
#if defined(ENCODER_MAP_ENABLE)
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
|
||||
[_OPEN] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
|
||||
[_CLOSE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
|
||||
[_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
|
||||
[_COLEMAK] = { ENCODER_CCW_CW(_______, _______) },
|
||||
[_MISC] = { ENCODER_CCW_CW(_______, _______) },
|
||||
[_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
|
||||
};
|
||||
#endif
|
||||
|
||||
void my_init(void){
|
||||
// Set octave to MI_OCT_0
|
||||
midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
RGB_MATRIX_ENABLE = yes # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
|
||||
RGB_MATRIX_CUSTOM_KB = yes #
|
||||
|
||||
ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
|
||||
|
||||
@@ -49,10 +49,10 @@ enum layer_names {
|
||||
#ifdef PEDAL_NORMALLY_CLOSED
|
||||
_OPEN,
|
||||
#endif
|
||||
_QWERTY,
|
||||
_COLEMAK,
|
||||
_MISC,
|
||||
_FN
|
||||
_QWERTY,
|
||||
_COLEMAK,
|
||||
_MISC,
|
||||
_FN
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
@@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
MI_D_1, MI_B_1, MI_G_3, MI_A_3, MI_Ds_3, MI_Fs_2, MI_Ds_1, MI_C_1,
|
||||
|
||||
MO_SWAP, MI_B_5, MI_Gs_5, MI_G_5, MI_F_5, FN_MUTE,
|
||||
MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5, KC_VOLD, KC_VOLU,
|
||||
MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5,
|
||||
MI_C_3, MI_D_3, MI_G_3, MI_As_4, MI_C_5, MI_D_5,
|
||||
MI_G_2, MI_B_2, MI_E_3, MI_Cs_4, MI_Fs_3, MI_A_3, MI_C_4, MI_E_4,
|
||||
MI_A_2, MI_F_3, MI_As_3, MI_Gs_3, MI_B_3, MI_D_4, MI_Gs_4, MI_B_4,
|
||||
@@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
MI_E_1, MI_E_2, MI_Fs_3, MI_Gs_3, MI_B_3, MI_F_2, MI_Cs_1, MI_F_1,
|
||||
|
||||
MO_SWAP, MI_A_5, MI_Gs_5, MI_Fs_5, MI_F_5, FN_MUTE,
|
||||
MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5, KC_VOLD, KC_VOLU,
|
||||
MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5,
|
||||
MI_D_3, MI_Cs_3, MI_Gs_3, MI_As_3, MI_C_4, MI_D_5,
|
||||
MI_G_2, MI_B_2, MI_Fs_3, MI_Fs_4, MI_G_3, MI_B_3, MI_D_4, MI_G_4,
|
||||
MI_A_2, MI_F_3, MI_E_3, MI_A_3, MI_Cs_4, MI_E_4, MI_A_4, MI_Cs_5,
|
||||
@@ -101,7 +101,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
|
||||
|
||||
MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
|
||||
KC_6, KC_7, KC_8, KC_9, KC_BSPC, _______, _______,
|
||||
KC_6, KC_7, KC_8, KC_9, KC_BSPC,
|
||||
_________________QWERTY_R1_________________, KC_DEL,
|
||||
KC_PGUP, KC_G, _________________QWERTY_R2_________________, KC_ENT,
|
||||
KC_PGDN, KC_B, _________________QWERTY_R3_________________, KC_RSFT,
|
||||
@@ -116,7 +116,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_CAPS, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
|
||||
|
||||
MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
|
||||
KC_6, KC_7, KC_8, KC_9, KC_BSPC, _______, _______,
|
||||
KC_6, KC_7, KC_8, KC_9, KC_BSPC,
|
||||
_________________COLEMAK_R1________________, KC_DEL,
|
||||
KC_PGUP, KC_D, _________________COLEMAK_R2________________, KC_ENT,
|
||||
KC_PGDN, KC_B, _________________COLEMAK_R3________________, KC_RSFT,
|
||||
@@ -131,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
|
||||
_______, _______, _______, _______, KC_F10, _______,
|
||||
KC_F6, KC_F7, KC_F8, KC_F9, _______, _______, _______,
|
||||
KC_F6, KC_F7, KC_F8, KC_F9, _______,
|
||||
_______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_QUOT, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
@@ -145,8 +145,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
_______, MI_OCTD, MI_OCTU, MI_VELD, MI_VELU, _______,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_MOD,
|
||||
_______, KC_VOLD, KC_VOLU, MI_VELD, MI_VELU, _______,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION,
|
||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, RGB_SPD, RGB_SPI, RGB_VAD, RGB_VAI,
|
||||
@@ -154,6 +154,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
)
|
||||
};
|
||||
|
||||
#if defined(ENCODER_MAP_ENABLE)
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
|
||||
[_OPEN] = { ENCODER_CCW_CW(MI_OCTD, MI_OCTU) },
|
||||
[_CLOSE] = { ENCODER_CCW_CW(MI_OCTD, MI_OCTU) },
|
||||
[_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
|
||||
[_COLEMAK] = { ENCODER_CCW_CW(_______, _______) },
|
||||
[_MISC] = { ENCODER_CCW_CW(_______, _______) },
|
||||
[_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
|
||||
};
|
||||
#endif
|
||||
|
||||
void my_init(void){
|
||||
// Set octave to MI_OCT_0
|
||||
midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
RGB_MATRIX_ENABLE = yes # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
|
||||
RGB_MATRIX_CUSTOM_KB = yes #
|
||||
|
||||
ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
|
||||
|
||||
@@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
MI_D_1, MI_B_1, MI_G_3, MI_A_3, MI_Ds_3, MI_Fs_2, MI_Ds_1, MI_C_1,
|
||||
|
||||
MO_SWAP, MI_B_5, MI_Gs_5, MI_G_5, MI_F_5, FN_MUTE,
|
||||
MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5, KC_VOLD, KC_VOLU,
|
||||
MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5,
|
||||
MI_C_3, MI_D_3, MI_G_3, MI_As_4, MI_C_5, MI_D_5,
|
||||
TG_SWAP, MI_B_2, MI_E_3, MI_Cs_4, MI_Fs_3, MI_A_3, MI_C_4, MI_E_4,
|
||||
MI_A_2, MI_F_3, MI_As_3, MI_Gs_3, MI_B_3, MI_D_4, MI_Gs_4, MI_B_4,
|
||||
@@ -57,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
MI_E_1, MI_E_2, MI_Fs_3, MI_Gs_3, MI_B_3, MI_F_2, MI_Cs_1, MI_F_1,
|
||||
|
||||
MO_SWAP, MI_A_5, MI_Gs_5, MI_Fs_5, MI_F_5, FN_MUTE,
|
||||
MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5, KC_VOLD, KC_VOLU,
|
||||
MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5,
|
||||
MI_D_3, MI_Cs_3, MI_Gs_3, MI_As_3, MI_C_4, MI_D_5,
|
||||
TG_SWAP, MI_B_2, MI_Fs_3, MI_Fs_4, MI_G_3, MI_B_3, MI_D_4, MI_G_4,
|
||||
MI_A_2, MI_F_3, MI_E_3, MI_A_3, MI_Cs_4, MI_E_4, MI_A_4, MI_Cs_5,
|
||||
@@ -72,7 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
|
||||
_______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
@@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
_______, MI_OCTD, MI_OCTU, MI_VELD, MI_VELU, _______,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_MOD,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION,
|
||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, RGB_SPD, RGB_SPI, RGB_VAD, RGB_VAI,
|
||||
@@ -95,6 +95,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
)
|
||||
};
|
||||
|
||||
#if defined(ENCODER_MAP_ENABLE)
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
|
||||
[_OPEN] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
|
||||
[_CLOSE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
|
||||
[_MISC] = { ENCODER_CCW_CW(_______, _______) },
|
||||
[_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
|
||||
};
|
||||
#endif
|
||||
|
||||
void my_init(void){
|
||||
// Set octave to MI_OCT_0
|
||||
midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
RGB_MATRIX_ENABLE = yes # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
|
||||
RGB_MATRIX_CUSTOM_KB = yes #
|
||||
VIA_ENABLE = yes
|
||||
|
||||
ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
|
||||
|
||||
@@ -19,7 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#pragma once
|
||||
|
||||
#undef PRODUCT
|
||||
#define PRODUCT Charybdis Nano (Blackpill)
|
||||
#define PRODUCT "Charybdis Nano (Blackpill)"
|
||||
|
||||
#undef MATRIX_ROW_PINS
|
||||
#define MATRIX_ROW_PINS \
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#undef PRODUCT
|
||||
#define PRODUCT "Charybdis (4x6) Blackpill"
|
||||
|
||||
#undef MATRIX_COL_PINS
|
||||
#define MATRIX_COL_PINS \
|
||||
{ B0, B1, B12, B3, B4, B5 }
|
||||
@@ -34,7 +37,7 @@
|
||||
#define DIODE_DIRECTION ROW2COL
|
||||
#define SPLIT_HAND_PIN A3
|
||||
#undef MASTER_RIGHT
|
||||
// #define USB_VBUS_PIN B10
|
||||
#define USB_VBUS_PIN B10
|
||||
|
||||
#undef RGB_DI_PIN
|
||||
#define RGB_DI_PIN A1
|
||||
@@ -55,6 +58,8 @@
|
||||
#define AUDIO_PWM_PAL_MODE 2
|
||||
#define AUDIO_STATE_TIMER GPTD3
|
||||
#define AUDIO_INIT_DELAY
|
||||
#define AUDIO_ENABLE_TONE_MULTIPLEXING
|
||||
#define AUDIO_TONE_MULTIPLEXING_RATE_DEFAULT 10
|
||||
|
||||
#undef SOFT_SERIAL_PIN
|
||||
// #define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode.
|
||||
@@ -64,12 +69,8 @@
|
||||
// #define SERIAL_USART_TX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
|
||||
// #define SERIAL_USART_RX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
|
||||
// #define SERIAL_USART_TIMEOUT 100 // USART driver timeout. default 100
|
||||
// // #define SERIAL_USART_PIN_SWAP // swap RX and TX pins on master
|
||||
// // To use the highest possible baudrate (3.75Mbit/s) uncomment the following
|
||||
// // line, this can result in dropped communications so lower the speed if there
|
||||
// // are many timeouts.
|
||||
// // #define SERIAL_USART_SPEED (STM32_PCLK2 >> 4)
|
||||
#define SERIAL_USART_SPEED 921600
|
||||
// #define SERIAL_USART_SPEED 921600
|
||||
#define SERIAL_USART_SPEED (1.5 * 1024 * 1024)
|
||||
|
||||
#define CRC8_USE_TABLE
|
||||
#define CRC8_OPTIMIZE_SPEED
|
||||
@@ -103,3 +104,12 @@
|
||||
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
|
||||
|
||||
#define CHARYBDIS_CONFIG_SYNC
|
||||
|
||||
#define BOOTMAGIC_LITE_ROW 0
|
||||
#define BOOTMAGIC_LITE_COLUMN 0
|
||||
#define BOOTMAGIC_LITE_ROW_RIGHT 5
|
||||
#define BOOTMAGIC_LITE_COLUMN_RIGHT 0
|
||||
#define BOOTMAGIC_LITE_EEPROM_ROW 1
|
||||
#define BOOTMAGIC_LITE_EEPROM_COLUMN 0
|
||||
#define BOOTMAGIC_LITE_EEPROM_ROW_RIGHT 1
|
||||
#define BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT 0
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, UC_CLUE, \
|
||||
SH_TT, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, SH_TT, \
|
||||
LALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(K1B), \
|
||||
OS_LSFT,CTL_T(K21),ALT_T(K22),GUI_T(K23),K24,K25, K26,K27,RGUI_T(K28),RALT_T(K29),RCTL_T(K2A), OS_RSFT, \
|
||||
SFT_T(KC_GRV), UC_IRNY, OS_LGUI, TT(_MOUSE), KC_ENT, \
|
||||
OS_LSFT,CTL_T(K21), K22, K23, K24, K25, K26,K27,RGUI_T(K28),RALT_T(K29),RCTL_T(K2A), OS_RSFT, \
|
||||
SFT_T(KC_GRV), OS_LALT, OS_LGUI, TT(_MOUSE), KC_ENT, \
|
||||
KC_SPC, BK_LWER, DL_RAIS \
|
||||
)
|
||||
|
||||
|
||||
@@ -31,3 +31,4 @@ TAP_DANCE_ENABLE = yes
|
||||
DEBOUNCE_TYPE = asym_eager_defer_pk
|
||||
WPM_ENABLE = yes
|
||||
LTO_ENABLE = no
|
||||
# OPT = 3
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#define CIRQUE_PINNACLE_TAP_ENABLE
|
||||
#define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE
|
||||
#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE
|
||||
@@ -0,0 +1,160 @@
|
||||
/**
|
||||
* Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
|
||||
*
|
||||
* 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 "drashna.h"
|
||||
|
||||
// clang-format off
|
||||
#define LAYOUT_split_3x5_2_wrapper(...) LAYOUT_split_3x5_2(__VA_ARGS__)
|
||||
#define LAYOUT_split_3x5_2_base( \
|
||||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
|
||||
K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
|
||||
) \
|
||||
LAYOUT_split_3x5_2 ( \
|
||||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
|
||||
ALT_T(K11), K12, K13, K14, GUI_T(K15), LGUI_T(K16), K17, K18, K19, LALT_T(K1A), \
|
||||
CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A), \
|
||||
KC_SPC, BK_LWER, DL_RAIS, RSFT_T(KC_ENT) \
|
||||
)
|
||||
|
||||
#define LAYOUT_split_3x5_2_base_wrapper(...) LAYOUT_split_3x5_2_base(__VA_ARGS__)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_DEFAULT_LAYER_1] = LAYOUT_split_3x5_2_base_wrapper(
|
||||
_________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
|
||||
_________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
|
||||
_________________QWERTY_L3_________________, _________________QWERTY_R3_________________
|
||||
),
|
||||
|
||||
[_DEFAULT_LAYER_2] = LAYOUT_split_3x5_2_base_wrapper(
|
||||
______________COLEMAK_MOD_DH_L1____________, ______________COLEMAK_MOD_DH_R1____________,
|
||||
______________COLEMAK_MOD_DH_L2____________, ______________COLEMAK_MOD_DH_R2____________,
|
||||
______________COLEMAK_MOD_DH_L3____________, ______________COLEMAK_MOD_DH_R3____________
|
||||
),
|
||||
[_DEFAULT_LAYER_3] = LAYOUT_split_3x5_2_base_wrapper(
|
||||
_________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
|
||||
_________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
|
||||
_________________COLEMAK_L3________________, _________________COLEMAK_R3________________
|
||||
),
|
||||
|
||||
[_DEFAULT_LAYER_4] = LAYOUT_split_3x5_2_base_wrapper(
|
||||
_________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
|
||||
_________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
|
||||
_________________DVORAK_L3_________________, _________________DVORAK_R3_________________
|
||||
),
|
||||
|
||||
[_MOUSE] = LAYOUT_split_3x5_2(
|
||||
_______, _______, _______, _______, _______, KC_WH_U, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD,
|
||||
_______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6,
|
||||
_______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______,
|
||||
SNIPING, _______, _______, _______
|
||||
),
|
||||
[_LOWER] = LAYOUT_split_3x5_2_wrapper(
|
||||
_________________LOWER_L1__________________, _________________LOWER_R1__________________,
|
||||
_________________LOWER_L2__________________, _________________LOWER_R2__________________,
|
||||
_________________LOWER_L3__________________, _________________LOWER_R3__________________,
|
||||
_______, _______, _______, AUTO_CTN
|
||||
),
|
||||
[_RAISE] = LAYOUT_split_3x5_2_wrapper(
|
||||
_________________RAISE_L1__________________, _________________RAISE_R1__________________,
|
||||
_________________RAISE_L2__________________, _________________RAISE_R2__________________,
|
||||
_________________RAISE_L3__________________, _________________RAISE_R3__________________,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
[_ADJUST] = LAYOUT_split_3x5_2_wrapper(
|
||||
_________________ADJUST_L1_________________, _________________ADJUST_R1_________________,
|
||||
_________________ADJUST_L2_________________, _________________ADJUST_R2_________________,
|
||||
_________________ADJUST_L3_________________, _________________ADJUST_R3_________________,
|
||||
KC_NUKE, _______, _______, QK_BOOT
|
||||
),
|
||||
};
|
||||
|
||||
|
||||
void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
|
||||
for (int32_t i = 0; i < 40; i++) {
|
||||
__asm__ volatile("nop" ::: "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if defined(OLED_ENABLE) && defined(OLED_DISPLAY_128X128)
|
||||
# ifdef UNICODE_COMMON_ENABLE
|
||||
# include "process_unicode_common.h"
|
||||
# include "keyrecords/unicode.h"
|
||||
# endif
|
||||
|
||||
extern const char PROGMEM display_border[3];
|
||||
|
||||
|
||||
extern uint32_t oled_timer;
|
||||
extern bool is_oled_enabled;
|
||||
|
||||
|
||||
bool oled_task_keymap(void) {
|
||||
static const char PROGMEM header_image[] = {
|
||||
0, 192, 32, 16, 8, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 7, 15, 31, 63, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 63, 31, 15, 7, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 192, 0,
|
||||
// 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 7, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0
|
||||
};
|
||||
oled_write_raw_P(header_image, sizeof(header_image));
|
||||
oled_set_cursor(7, 0);
|
||||
oled_write_P(PSTR("Rock On"), true);
|
||||
|
||||
render_default_layer_state(1, 1);
|
||||
render_layer_state(1, 2);
|
||||
render_kitty(0, 5);
|
||||
render_wpm(1, 7, 5);
|
||||
# if defined(POINTING_DEVICE_ENABLE)
|
||||
render_pointing_dpi_status(dilemma_get_pointer_sniping_enabled() ? dilemma_get_pointer_sniping_dpi() : dilemma_get_pointer_default_dpi(), 1, 7, 6);
|
||||
render_mouse_mode(17, 6);
|
||||
# elif defined(WPM_ENABLE) && defined(DEBUG_MATRIX_SCAN_RATE)
|
||||
render_matrix_scan_rate(1, 7, 6);
|
||||
# endif
|
||||
render_bootmagic_status(7, 7);
|
||||
render_user_status(1, 9);
|
||||
|
||||
render_mod_status(get_mods() | get_oneshot_mods(), 1, 10);
|
||||
render_keylock_status(host_keyboard_led_state(), 1, 11);
|
||||
render_unicode_mode(1, 12);
|
||||
|
||||
// render_rgb_hsv(1, 13);
|
||||
oled_set_cursor(1, 13);
|
||||
// oled_write_P(PSTR("Timer:"), false);
|
||||
// oled_write(get_u8_str((uint8_t)(timer_elapsed32(oled_timer) / 1000), ' '), false);
|
||||
oled_write_P(PSTR("Status: "), false);
|
||||
if (is_oled_enabled) {
|
||||
oled_write_P(PSTR("on "), false);
|
||||
} else {
|
||||
oled_write_P(PSTR("off"), false);
|
||||
}
|
||||
|
||||
render_keylogger_status(1, 14);
|
||||
|
||||
for (uint8_t i = 1; i < 15; i++) {
|
||||
oled_set_cursor(0, i);
|
||||
oled_write_raw_P(display_border, sizeof(display_border));
|
||||
oled_set_cursor(21, i);
|
||||
oled_write_raw_P(display_border, sizeof(display_border));
|
||||
}
|
||||
|
||||
static const char PROGMEM footer_image[] = {0, 3, 4, 8, 16, 32, 64, 128, 128, 128, 128, 128, 128, 128, 192, 224, 240, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 240, 224, 192, 128, 128, 128, 128, 128, 128, 128, 64, 32, 16, 8, 4, 3, 0};
|
||||
oled_set_cursor(0, 15);
|
||||
oled_write_raw_P(footer_image, sizeof(footer_image));
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,8 @@
|
||||
SWAP_HANDS_ENABLE = no
|
||||
AUTOCORRECTION_ENABLE = yes
|
||||
CAPS_WORD_ENABLE = yes
|
||||
CONSOLE_ENABLE = yes
|
||||
KEYLOGGER_ENABLE = no
|
||||
WPM_ENABLE = yes
|
||||
OLED_ENABLE = yes
|
||||
OLED_DRIVER = custom
|
||||
@@ -18,16 +18,12 @@
|
||||
|
||||
#ifdef ENCODER_ENABLE
|
||||
bool encoder_update_kb(uint8_t index, bool clockwise) {
|
||||
if (!encoder_update_user(index, clockwise)) {
|
||||
return false;
|
||||
if (!encoder_update_user(index, clockwise)) { return false; }
|
||||
if (clockwise) {
|
||||
tap_code(layer_state == 0 ? KC_WH_D : KC_VOLD);
|
||||
} else {
|
||||
tap_code(layer_state == 0 ? KC_WH_U : KC_VOLU);
|
||||
}
|
||||
if (index == 0) { /* First encoder */
|
||||
if (clockwise) {
|
||||
tap_code(KC_WH_D);
|
||||
} else {
|
||||
tap_code(KC_WH_U);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -17,62 +17,62 @@
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F1",
|
||||
"label": "1",
|
||||
"x": 1,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F2",
|
||||
"label": "2",
|
||||
"x": 2,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F3",
|
||||
"label": "3",
|
||||
"x": 3,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F4",
|
||||
"label": "4",
|
||||
"x": 4,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F5",
|
||||
"label": "5",
|
||||
"x": 5,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F6",
|
||||
"label": "6",
|
||||
"x": 6,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F7",
|
||||
"label": "7",
|
||||
"x": 7,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F8",
|
||||
"label": "8",
|
||||
"x": 8,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F9",
|
||||
"label": "9",
|
||||
"x": 9,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F10",
|
||||
"label": "0",
|
||||
"x": 10,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F11",
|
||||
"label": "-",
|
||||
"x": 11,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F12",
|
||||
"label": "=",
|
||||
"x": 12,
|
||||
"y": 0
|
||||
},
|
||||
@@ -292,7 +292,7 @@
|
||||
"w": 1.75
|
||||
},
|
||||
{
|
||||
"label": "Raise",
|
||||
"label": "Lower",
|
||||
"x": 14,
|
||||
"y": 3
|
||||
},
|
||||
@@ -308,13 +308,13 @@
|
||||
"w": 1.25
|
||||
},
|
||||
{
|
||||
"label": "Super",
|
||||
"label": "Alt",
|
||||
"x": 1.25,
|
||||
"y": 4,
|
||||
"w": 1.25
|
||||
},
|
||||
{
|
||||
"label": "Alt",
|
||||
"label": "Lower",
|
||||
"x": 2.5,
|
||||
"y": 4,
|
||||
"w": 1.25
|
||||
@@ -326,25 +326,25 @@
|
||||
"w": 2.25
|
||||
},
|
||||
{
|
||||
"label": "Lower",
|
||||
"label": "Space",
|
||||
"x": 6,
|
||||
"y": 4,
|
||||
"w": 1.25
|
||||
},
|
||||
{
|
||||
"label": "Raise",
|
||||
"label": "Enter",
|
||||
"x": 7.25,
|
||||
"y": 4,
|
||||
"w": 2.75
|
||||
},
|
||||
{
|
||||
"label": "Alt",
|
||||
"label": "Raise",
|
||||
"x": 10,
|
||||
"y": 4,
|
||||
"w": 1.25
|
||||
},
|
||||
{
|
||||
"label": "Super",
|
||||
"label": "Alt",
|
||||
"x": 11.25,
|
||||
"y": 4,
|
||||
"w": 1.25
|
||||
@@ -380,62 +380,62 @@
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F1",
|
||||
"label": "1",
|
||||
"x": 1,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F2",
|
||||
"label": "2",
|
||||
"x": 2,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F3",
|
||||
"label": "3",
|
||||
"x": 3,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F4",
|
||||
"label": "4",
|
||||
"x": 4,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F5",
|
||||
"label": "5",
|
||||
"x": 5,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F6",
|
||||
"label": "6",
|
||||
"x": 6,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F7",
|
||||
"label": "7",
|
||||
"x": 7,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F8",
|
||||
"label": "8",
|
||||
"x": 8,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F9",
|
||||
"label": "9",
|
||||
"x": 9,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F10",
|
||||
"label": "0",
|
||||
"x": 10,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F11",
|
||||
"label": "-",
|
||||
"x": 11,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "F12",
|
||||
"label": "=",
|
||||
"x": 12,
|
||||
"y": 0
|
||||
},
|
||||
@@ -655,7 +655,7 @@
|
||||
"w": 1.75
|
||||
},
|
||||
{
|
||||
"label": "Raise",
|
||||
"label": "Lower",
|
||||
"x": 14,
|
||||
"y": 3
|
||||
},
|
||||
@@ -671,13 +671,13 @@
|
||||
"w": 1.25
|
||||
},
|
||||
{
|
||||
"label": "Super",
|
||||
"label": "Alt",
|
||||
"x": 1.25,
|
||||
"y": 4,
|
||||
"w": 1.25
|
||||
},
|
||||
{
|
||||
"label": "Alt",
|
||||
"label": "Lower",
|
||||
"x": 2.5,
|
||||
"y": 4,
|
||||
"w": 1.25
|
||||
@@ -689,25 +689,25 @@
|
||||
"w": 2.25
|
||||
},
|
||||
{
|
||||
"label": "Lower",
|
||||
"label": "Space",
|
||||
"x": 6,
|
||||
"y": 4,
|
||||
"w": 1.25
|
||||
},
|
||||
{
|
||||
"label": "Raise",
|
||||
"label": "Enter",
|
||||
"x": 7.25,
|
||||
"y": 4,
|
||||
"w": 2.75
|
||||
},
|
||||
{
|
||||
"label": "Alt",
|
||||
"label": "Raise",
|
||||
"x": 10,
|
||||
"y": 4,
|
||||
"w": 1.25
|
||||
},
|
||||
{
|
||||
"label": "Super",
|
||||
"label": "Alt",
|
||||
"x": 11.25,
|
||||
"y": 4,
|
||||
"w": 1.25
|
||||
|
||||
@@ -20,40 +20,40 @@ enum layer_names {
|
||||
_QWERTY,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_SETTINGS
|
||||
_SETTINGS,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_QWERTY] = LAYOUT_ansi(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_DEL,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_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_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2), KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
KC_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
|
||||
KC_LCTL, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[_LOWER] = LAYOUT_ansi(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_PSCR, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_WH_D, KC_BTN1, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, MO(3), KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
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_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_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_LGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
|
||||
),
|
||||
|
||||
[_RAISE] = LAYOUT_ansi(
|
||||
KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, 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_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_QUOT, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_UNDS, KC_PLUS, KC_DQUO, KC_LCBR, KC_RCBR, KC_TRNS, MO(3), KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
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_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_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_LGUI, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
|
||||
),
|
||||
|
||||
[_SETTINGS] = LAYOUT_ansi(
|
||||
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
)
|
||||
QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, RGB_TOG, RGB_MOD, RGB_RMOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
|
||||
),
|
||||
};
|
||||
|
||||
@@ -20,40 +20,40 @@ enum layer_names {
|
||||
_QWERTY,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_SETTINGS
|
||||
_SETTINGS,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_QWERTY] = LAYOUT_iso(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_DEL,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_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_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2), KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
KC_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
|
||||
KC_LCTL, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[_LOWER] = LAYOUT_iso(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_TRNS,
|
||||
KC_PSCR, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_WH_D, KC_BTN1, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, MO(3), KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
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_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_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_LGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
|
||||
),
|
||||
|
||||
[_RAISE] = LAYOUT_iso(
|
||||
KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, 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_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_QUOT, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_UNDS, KC_PLUS, KC_DQUO, KC_LCBR, KC_RCBR, KC_TRNS, MO(3), KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
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_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_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_LGUI, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
|
||||
),
|
||||
|
||||
[_SETTINGS] = LAYOUT_iso(
|
||||
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
)
|
||||
QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, RGB_TOG, RGB_MOD, RGB_RMOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
|
||||
),
|
||||
};
|
||||
|
||||
@@ -20,40 +20,49 @@ enum layer_names {
|
||||
_QWERTY,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_SETTINGS
|
||||
_SETTINGS,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_QWERTY] = LAYOUT_ansi(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_DEL,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_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_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2), KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
KC_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
|
||||
KC_LCTL, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[_LOWER] = LAYOUT_ansi(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_PSCR, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_WH_D, KC_BTN1, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, MO(3), KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
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_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_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_LGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
|
||||
),
|
||||
|
||||
[_RAISE] = LAYOUT_ansi(
|
||||
KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, 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_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_QUOT, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_UNDS, KC_PLUS, KC_DQUO, KC_LCBR, KC_RCBR, KC_TRNS, MO(3), KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
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_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_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_LGUI, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
|
||||
),
|
||||
|
||||
[_SETTINGS] = LAYOUT_ansi(
|
||||
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
)
|
||||
QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, RGB_TOG, RGB_MOD, RGB_RMOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
|
||||
),
|
||||
};
|
||||
|
||||
#if defined(ENCODER_MAP_ENABLE)
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
|
||||
[_QWERTY] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), },
|
||||
[_LOWER] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
|
||||
[_RAISE] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD) },
|
||||
[_SETTINGS] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) },
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
VIA_ENABLE = yes
|
||||
ENCODER_MAP_ENABLE = yes
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# dynamis
|
||||
|
||||
## general information
|
||||

|
||||

|
||||
|
||||
Gasket mounted 65% row staggered keyboard integrated a trackball
|
||||
|
||||
* Keyboard Maintainer: [bbrfkr](https://github.com/bbrfkr/)
|
||||
* Hardware Supported: dynamis PCBs
|
||||
* Hardware Availability: http://github.com/bbrfkr/keyboards
|
||||
* Hardware Availability: https://github.com/bbrfkr/dynamis-keyboard
|
||||
|
||||
## bootloader
|
||||
|
||||
|
||||
+22
-25
@@ -96,15 +96,14 @@ static void bluefruit_serial_send(uint8_t data)
|
||||
static uint8_t keyboard_leds(void);
|
||||
static void send_keyboard(report_keyboard_t *report);
|
||||
static void send_mouse(report_mouse_t *report);
|
||||
static void send_system(uint16_t data);
|
||||
static void send_consumer(uint16_t data);
|
||||
static void send_extra(uint8_t report_id, uint16_t data);
|
||||
|
||||
host_driver_t bluefruit_driver = {
|
||||
keyboard_leds,
|
||||
send_keyboard,
|
||||
send_mouse,
|
||||
send_system,
|
||||
send_consumer};
|
||||
send_extra
|
||||
};
|
||||
|
||||
host_driver_t null_driver = {};
|
||||
|
||||
@@ -156,10 +155,6 @@ static void send_mouse(report_mouse_t *report)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void send_system(uint16_t data)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
+-----------------+-------------------+-------+
|
||||
| Consumer Key | Bit Map | Hex |
|
||||
@@ -182,30 +177,32 @@ static void send_system(uint16_t data)
|
||||
#define CONSUMER2BLUEFRUIT(usage) \
|
||||
(usage == AUDIO_MUTE ? 0x00e2 : (usage == AUDIO_VOL_UP ? 0x00e9 : (usage == AUDIO_VOL_DOWN ? 0x00ea : (usage == TRANSPORT_NEXT_TRACK ? 0x00b5 : (usage == TRANSPORT_PREV_TRACK ? 0x00b6 : (usage == TRANSPORT_STOP ? 0x00b7 : (usage == TRANSPORT_STOP_EJECT ? 0x00b8 : (usage == TRANSPORT_PLAY_PAUSE ? 0x00b1 : (usage == AL_CC_CONFIG ? 0x0183 : (usage == AL_EMAIL ? 0x018c : (usage == AL_CALCULATOR ? 0x0192 : (usage == AL_LOCAL_BROWSER ? 0x0196 : (usage == AC_SEARCH ? 0x021f : (usage == AC_HOME ? 0x0223 : (usage == AC_BACK ? 0x0224 : (usage == AC_FORWARD ? 0x0225 : (usage == AC_STOP ? 0x0226 : (usage == AC_REFRESH ? 0x0227 : (usage == AC_BOOKMARKS ? 0x022a : 0)))))))))))))))))))
|
||||
|
||||
static void send_consumer(uint16_t data)
|
||||
static void send_extra(uint8_t report_id, uint16_t data)
|
||||
{
|
||||
static uint16_t last_data = 0;
|
||||
if (data == last_data)
|
||||
return;
|
||||
last_data = data;
|
||||
if (report_id == REPORT_ID_CONSUMER) {
|
||||
static uint16_t last_data = 0;
|
||||
if (data == last_data)
|
||||
return;
|
||||
last_data = data;
|
||||
|
||||
uint16_t bitmap = CONSUMER2BLUEFRUIT(data);
|
||||
uint16_t bitmap = CONSUMER2BLUEFRUIT(data);
|
||||
|
||||
#ifdef BLUEFRUIT_TRACE_SERIAL
|
||||
dprintf("\nData: ");
|
||||
debug_hex16(data);
|
||||
dprintf("; bitmap: ");
|
||||
debug_hex16(bitmap);
|
||||
dprintf("\n");
|
||||
bluefruit_trace_header();
|
||||
dprintf("\nData: ");
|
||||
debug_hex16(data);
|
||||
dprintf("; bitmap: ");
|
||||
debug_hex16(bitmap);
|
||||
dprintf("\n");
|
||||
bluefruit_trace_header();
|
||||
#endif
|
||||
send_str(PSTR("AT+BLEHIDCONTROLKEY=0x"));
|
||||
send_bytes((bitmap >> 8) & 0xFF);
|
||||
send_bytes(bitmap & 0xFF);
|
||||
send_str(PSTR("\r\n"));
|
||||
send_str(PSTR("AT+BLEHIDCONTROLKEY=0x"));
|
||||
send_bytes((bitmap >> 8) & 0xFF);
|
||||
send_bytes(bitmap & 0xFF);
|
||||
send_str(PSTR("\r\n"));
|
||||
#ifdef BLUEFRUIT_TRACE_SERIAL
|
||||
bluefruit_trace_footer();
|
||||
bluefruit_trace_footer();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void usart_init(void)
|
||||
|
||||
@@ -18,6 +18,6 @@ Flashing example for this keyboard:
|
||||
|
||||
make boardrun/bizarre:default:flash
|
||||
|
||||
The board may be reset into bootloader mode via either the reset button (on the bottom of the PCB) or a configured RESET shortcut (which may vary depending on when the PCB was flashed).
|
||||
The board may be reset into bootloader mode via either the reset button (on the bottom of the PCB) or a configured `QK_BOOT` shortcut (which may vary depending on when the PCB was flashed).
|
||||
|
||||
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).
|
||||
|
||||
@@ -18,6 +18,6 @@ Flashing example for this keyboard:
|
||||
|
||||
make boardrun/classic:default:flash
|
||||
|
||||
The board may be reset into bootloader mode via either the reset button (on the bottom of the PCB) or a configured RESET shortcut (which may vary depending on when the PCB was flashed).
|
||||
The board may be reset into bootloader mode via either the reset button (on the bottom of the PCB) or a configured `QK_BOOT` shortcut (which may vary depending on when the PCB was flashed).
|
||||
|
||||
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).
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"build": {
|
||||
"lto": true
|
||||
},
|
||||
"development_board": "elite_c",
|
||||
"matrix_pins": {
|
||||
"cols": ["F6", "F7", "B1", "B3", "B2", "B6"],
|
||||
"rows": ["C6", "D7", "E6", "B4", "B5"]
|
||||
},
|
||||
"split": {
|
||||
"soft_serial_pin": "D2"
|
||||
},
|
||||
"rgblight": {
|
||||
"pin": "D3"
|
||||
},
|
||||
"encoder": {
|
||||
"rotary": [
|
||||
{ "pin_a": "F0", "pin_b": "F1" }
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
# This file intentionally left blank
|
||||
@@ -2,8 +2,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
#include "config_common.h"
|
||||
#define RGB_DI_PIN D3
|
||||
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
|
||||
#define DRIVER_LED_TOTAL 70
|
||||
#define RGB_MATRIX_SPLIT { 35, 35 }
|
||||
|
||||
@@ -2,11 +2,7 @@
|
||||
"manufacturer": "Boardsource",
|
||||
"keyboard_name": "lulu",
|
||||
"maintainer": "waffle87",
|
||||
"bootloader": "atmel-dfu",
|
||||
"diode_direction": "COL2ROW",
|
||||
"build": {
|
||||
"lto": true
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"extrakey": true,
|
||||
@@ -15,11 +11,6 @@
|
||||
"rgb_matrix": true,
|
||||
"oled": true
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["F6", "F7", "B1", "B3", "B2", "B6"],
|
||||
"rows": ["C6", "D7", "E6", "B4", "B5"]
|
||||
},
|
||||
"processor": "atmega32u4",
|
||||
"url": "https://boardsource.xyz/projects/60de24d6847112054777bbdd",
|
||||
"usb": {
|
||||
"device_version": "1.0.0",
|
||||
@@ -27,16 +18,17 @@
|
||||
"vid": "0x4273"
|
||||
},
|
||||
"split": {
|
||||
"enabled": true,
|
||||
"soft_serial_pin": "D2"
|
||||
"enabled": true
|
||||
},
|
||||
"encoder": {
|
||||
"enabled": true,
|
||||
"rotary": [
|
||||
{ "pin_a": "F0", "pin_b": "F1" }
|
||||
]
|
||||
"enabled": true
|
||||
},
|
||||
"matrix_size": {
|
||||
"cols": 6,
|
||||
"rows": 10
|
||||
},
|
||||
"rgb_matrix": {
|
||||
"driver": "WS2812",
|
||||
"layout": [
|
||||
{ "flags": 2, "x": 86, "y": 55 },
|
||||
{ "flags": 2, "x": 51, "y": 55 },
|
||||
|
||||
@@ -12,13 +12,20 @@ The lulu is what the ergo community has needed for a long time, a high-end aesth
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make boardsource/lulu:default
|
||||
make boardsource/lulu/rp2040:default
|
||||
make boardsource/lulu/avr:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make boardsource/lulu:default:flash
|
||||
make boardsource/lulu/rp2040:default:flash
|
||||
make boardsource/lulu/avr:default:flash
|
||||
|
||||
Reset keyboard by holding down top left key while you plug in the usb cable. Or by pushing the reset switch on the pcb.
|
||||
|
||||
Compile `rp2040` firmware if you purchased PCB in lulu group buy (integrated microcontroller).
|
||||
Compile `avr` firmware if your PCB uses a drop-in microcontroller like Pro Micro.
|
||||
|
||||
|
||||
Enter bootloader by holding down the upper outer key while you plug in the usb cable, or by pushing the reset switch on the pcb.
|
||||
|
||||
|
||||
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).
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
// Copyright 2022 jack (@waffle87)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#pragma once
|
||||
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
|
||||
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U
|
||||
#define SERIAL_USART_FULL_DUPLEX
|
||||
#define SERIAL_USART_TX_PIN GP0
|
||||
#define SERIAL_USART_RX_PIN GP1
|
||||
#define I2C_DRIVER I2CD2
|
||||
#define I2C1_SDA_PIN GP22
|
||||
#define I2C1_SCL_PIN GP23
|
||||
@@ -0,0 +1,5 @@
|
||||
// Copyright 2022 jack (@waffle87)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#pragma once
|
||||
#define HAL_USE_I2C TRUE
|
||||
#include_next <halconf.h>
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"bootloader": "rp2040",
|
||||
"matrix_pins": {
|
||||
"cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7"],
|
||||
"rows": ["GP14", "GP15", "GP16", "GP17", "GP18"]
|
||||
},
|
||||
"processor": "RP2040",
|
||||
"rgblight": {
|
||||
"pin": "GP29",
|
||||
"led_count": 70
|
||||
},
|
||||
"encoder": {
|
||||
"rotary": [
|
||||
{ "pin_a": "GP8", "pin_b": "GP9" }
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// Copyright 2022 jack (@waffle87)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#pragma once
|
||||
#include_next <mcuconf.h>
|
||||
#undef RP_I2C_USE_I2C1
|
||||
#define RP_I2C_USE_I2C1 TRUE
|
||||
@@ -0,0 +1,2 @@
|
||||
SERIAL_DRIVER = vendor
|
||||
WS2812_DRIVER = vendor
|
||||
@@ -1 +0,0 @@
|
||||
RGB_MATRIX_DRIVER = WS2812
|
||||
@@ -3,4 +3,4 @@
|
||||
/* overridden settings: */
|
||||
|
||||
#undef PRODUCT
|
||||
#define PRODUCT Pegasus Hoof Citadel
|
||||
#define PRODUCT "Pegasus Hoof Citadel"
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#define SPLIT_OLED_ENABLE
|
||||
#endif
|
||||
|
||||
#ifdef PS2_USE_INT
|
||||
#ifdef PS2_DRIVER_INTERRUPT
|
||||
#define PS2_CLOCK_PIN E6
|
||||
#define PS2_DATA_PIN D7
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
OLED_DRIVER = SSD1306
|
||||
|
||||
PS2_USE_INT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = interrupt
|
||||
|
||||
@@ -37,12 +37,12 @@
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
|
||||
k40, k41, k42, k43, k44, k46 , k48, k49, k4a, k4b \
|
||||
k40, k41, k42, k43, k45, k47, k48, k49, k4a, k4b \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
|
||||
{ k40, k41, k42, k43, k44, KC_NO, k46, KC_NO, k48, k49, k4a, k4b }, \
|
||||
{ k40, k41, k42, k43, KC_NO, k45, KC_NO, k47, k48, k49, k4a, k4b }, \
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2020 QMK
|
||||
/* Copyright 2022 Andrew Kannan
|
||||
*
|
||||
* 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
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/*
|
||||
* This file was auto-generated by:
|
||||
* `qmk chibios-confmigrate -i keyboards/xelus/kangaroo/chconf.h -r platforms/chibios/common/configs/chconf.h`
|
||||
* `qmk chibios-confmigrate -i keyboards/projectkb/alice/chconf.h -r platforms/chibios/common/configs/chconf.h`
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
@@ -0,0 +1,96 @@
|
||||
#pragma once
|
||||
|
||||
/*
|
||||
Copyright 2022 Andrew Kannan
|
||||
|
||||
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
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 17
|
||||
|
||||
#define MATRIX_COL_PINS { B1, B0, A7, A1, A5, A4, A3, A10, B9, B8, B7, B6, B5, B4, B3, A15, A14 }
|
||||
#define MATRIX_ROW_PINS { B2, B10, B11, A2, A0 }
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
#define BACKLIGHT_PIN A6
|
||||
#define BACKLIGHT_PWM_DRIVER PWMD3
|
||||
#define BACKLIGHT_PWM_CHANNEL 1
|
||||
#define BACKLIGHT_PAL_MODE 1
|
||||
#define BACKLIGHT_LEVELS 6
|
||||
#define BACKLIGHT_BREATHING
|
||||
#define BREATHING_PERIOD 6
|
||||
|
||||
/* define if matrix has ghost */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
#define RGBLIGHT_EFFECT_BREATHING
|
||||
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||
#define RGBLIGHT_EFFECT_SNAKE
|
||||
#define RGBLIGHT_EFFECT_KNIGHT
|
||||
#define RGBLIGHT_EFFECT_CHRISTMAS
|
||||
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||
#define RGBLIGHT_EFFECT_RGB_TEST
|
||||
#define RGBLIGHT_EFFECT_ALTERNATING
|
||||
#define RGBLIGHT_EFFECT_TWINKLE
|
||||
#define RGB_DI_PIN B15
|
||||
#define RGBLED_NUM 14
|
||||
#define WS2812_SPI SPID2
|
||||
#define WS2812_SPI_MOSI_PAL_MODE 0
|
||||
#define WS2812_SPI_SCK_PAL_MODE 0
|
||||
#define WS2812_SPI_SCK_PIN B13
|
||||
|
||||
// Indicator LEDs
|
||||
#define LED_CAPS_LOCK_PIN A8
|
||||
#define LED_NUM_LOCK_PIN A9
|
||||
#define LED_SCROLL_LOCK_PIN B12
|
||||
#define LED_PIN_ON_STATE 0
|
||||
|
||||
|
||||
|
||||
// 2 bits for 4 layout options
|
||||
#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2
|
||||
|
||||
#define SLEEP_LED_GPT_DRIVER GPTD1
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
/* Copyright 2022 Andrew Kannan
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was auto-generated by:
|
||||
* `qmk chibios-confmigrate -i keyboards/projectkb/alice/halconf.h -r platforms/chibios/common/configs/halconf.h`
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define HAL_USE_PWM TRUE
|
||||
|
||||
#define HAL_USE_SPI TRUE
|
||||
|
||||
#define HAL_USE_GPT TRUE
|
||||
|
||||
#include_next <halconf.h>
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"keyboard_name": "Malicious Ergo",
|
||||
"manufacturer": "CannonKeys",
|
||||
"url": "https://cannonkeys.com",
|
||||
"maintainer": "awkannan",
|
||||
"usb": {
|
||||
"vid": "0xCA04",
|
||||
"pid": "0x0009",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_default": {
|
||||
"layout": [{"x":0.5, "y":0}, {"x":1.75, "y":0}, {"x":2.75, "y":0}, {"x":3.75, "y":0}, {"x":4.75, "y":0}, {"x":5.75, "y":0}, {"x":6.75, "y":0}, {"x":7.75, "y":0}, {"x":9.75, "y":0}, {"x":10.75, "y":0}, {"x":11.75, "y":0}, {"x":12.75, "y":0}, {"x":13.75, "y":0}, {"x":14.75, "y":0}, {"x":15.75, "y":0}, {"x":16.75, "y":0}, {"x":18, "y":0}, {"x":0.25, "y":1}, {"x":1.5, "y":1, "w":1.5}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1}, {"x":14.5, "y":1}, {"x":15.5, "y":1}, {"x":16.5, "y":1, "w":1.5}, {"x":18.25, "y":1}, {"x":0, "y":2}, {"x":1.375, "y":2, "w":1.75}, {"x":3.125, "y":2}, {"x":4.13, "y":2}, {"x":5.13, "y":2}, {"x":6.13, "y":2}, {"x":7.13, "y":2}, {"x":9.88, "y":2}, {"x":10.88, "y":2}, {"x":11.88, "y":2}, {"x":12.88, "y":2}, {"x":13.88, "y":2}, {"x":14.88, "y":2}, {"x":15.88, "y":2, "w":2.25}, {"x":18.5, "y":2}, {"x":1.25, "y":3, "w":2.25}, {"x":3.5, "y":3}, {"x":4.5, "y":3}, {"x":5.5, "y":3}, {"x":6.5, "y":3}, {"x":7.5, "y":3}, {"x":9.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":15.5, "y":3, "w":1.75}, {"x":17.25, "y":3}, {"x":1.5, "y":4, "w":1.5}, {"x":4.25, "y":4, "w":1.5}, {"x":5.75, "y":4, "w":2}, {"x":7.75, "y":4, "w":1.25}, {"x":9.5, "y":4, "w":2.75}, {"x":12.25, "y":4, "w":1.5}, {"x":14.25, "y":4, "w":1.5}, {"x":16.25, "y":4}, {"x":17.25, "y":4}, {"x":18.25, "y":4}]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
|
||||
// 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 layer_names {
|
||||
_BASE,
|
||||
_FN1
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BASE] = LAYOUT_default(
|
||||
KC_ESC, 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_DEL, KC_BSPC, KC_DEL,
|
||||
KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
|
||||
KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_END,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||
KC_LCTL, KC_LALT, KC_SPC, MO(_FN1), KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
|
||||
[_FN1] = LAYOUT_default(
|
||||
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, _______, KC_DEL, _______,
|
||||
RGB_MOD, _______, _______, KC_UP, _______, _______, _______, RGB_SAI, RGB_HUI, RGB_VAI, _______, _______, _______, _______, _______, _______,
|
||||
RGB_RMOD, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, RGB_SAD, RGB_HUD, RGB_VAD, _______, _______, _______, _______, _______,
|
||||
_______, BL_INC, BL_DEC, BL_TOGG, BL_BRTG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
|
||||
)
|
||||
};
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
|
||||
// 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 layer_names {
|
||||
_BASE,
|
||||
_FN1,
|
||||
_FN2,
|
||||
_FN3
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BASE] = LAYOUT_default(
|
||||
KC_ESC, 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_DEL, KC_BSPC, KC_DEL,
|
||||
KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
|
||||
KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_END,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||
KC_LCTL, KC_LALT, KC_SPC, MO(_FN1), KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
|
||||
[_FN1] = LAYOUT_default(
|
||||
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, _______, KC_DEL, _______,
|
||||
RGB_MOD, _______, _______, KC_UP, _______, _______, _______, RGB_SAI, RGB_HUI, RGB_VAI, _______, _______, _______, _______, _______, _______,
|
||||
RGB_RMOD, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, RGB_SAD, RGB_HUD, RGB_VAD, _______, _______, _______, _______, _______,
|
||||
_______, BL_INC, BL_DEC, BL_TOGG, BL_BRTG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
|
||||
),
|
||||
|
||||
[_FN2] = LAYOUT_default(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_FN3] = LAYOUT_default(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
VIA_ENABLE = yes
|
||||
+15
-16
@@ -1,17 +1,16 @@
|
||||
/* Copyright 2022 Kyle McCreery
|
||||
*
|
||||
* 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/>.
|
||||
/* Copyright 2022 Andrew Kannan
|
||||
*
|
||||
* 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 "bde.h"
|
||||
#include "malicious_ergo.h"
|
||||
@@ -0,0 +1,34 @@
|
||||
/* Copyright 2022 Andrew Kannan
|
||||
*
|
||||
* 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"
|
||||
|
||||
#define ___ KC_NO
|
||||
|
||||
#define LAYOUT_default( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G,\
|
||||
K10, K11, K12, K13, K14, K15, K16, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G,\
|
||||
K20, K21, K22, K23, K24, K25, K26, K28, K29, K2A, K2B, K2C, K2D, K2F, K2G,\
|
||||
K31, K32, K33, K34, K35, K36, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, \
|
||||
K41, K43, K44, K46, K49, K4B, K4D, K4E, K4F, K3G \
|
||||
) { \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, ___, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, ___, K28, K29, K2A, K2B, K2C, K2D, ___, K2F, K2G }, \
|
||||
{ ___, K31, K32, K33, K34, K35, K36, ___, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, ___ }, \
|
||||
{ ___, K41, ___, K43, K44, ___, K46, ___, ___, K49, ___, K4B, ___, K4D, K4E, K4F, K3G } \
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
/* Copyright 2022 Andrew Kannan
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was auto-generated by:
|
||||
* `qmk chibios-confmigrate -i keyboards/projectkb/alice/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h`
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include_next <mcuconf.h>
|
||||
|
||||
#undef STM32_PWM_USE_TIM3
|
||||
#define STM32_PWM_USE_TIM3 TRUE
|
||||
|
||||
#undef STM32_SPI_USE_SPI2
|
||||
#define STM32_SPI_USE_SPI2 TRUE
|
||||
|
||||
#undef STM32_GPT_USE_TIM1
|
||||
#define STM32_GPT_USE_TIM1 TRUE
|
||||
@@ -0,0 +1,18 @@
|
||||
# CannonKeys Malicious Ergo
|
||||
|
||||
* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
|
||||
* Hardware Supported: STM32F072CBT6
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make cannonkeys/malicious_ergo:default
|
||||
|
||||
## 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**: Toggle the switch on the back of the pcb to "0" and briefly press the button on the back of the PCB
|
||||
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
|
||||
|
||||
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).
|
||||
@@ -0,0 +1,25 @@
|
||||
# MCU name
|
||||
MCU = STM32F072
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = stm32-dfu
|
||||
|
||||
# Wildcard to allow APM32 MCU
|
||||
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Enable N-Key Rollover
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
WS2812_DRIVER = spi
|
||||
|
||||
# Enter lower-power sleep mode when on the ChibiOS idle thread
|
||||
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
|
||||
Executable
+35
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
Copyright 2021 Dr.Doof
|
||||
|
||||
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 "config_common.h"
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 16
|
||||
|
||||
/* key matrix pins */
|
||||
#define MATRIX_ROW_PINS { B4, D2, D4, D6, D7 }
|
||||
#define MATRIX_COL_PINS { D3, D5, C6, C7, B6, B5, B7, F0, F1, F4, F5, F6, F7, B3, B2, D1 }
|
||||
#define UNUSED_PINS { E2, E6, D0, B1, B0 }
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCE 0
|
||||
@@ -0,0 +1,376 @@
|
||||
{
|
||||
"keyboard_name":"Nearfield",
|
||||
"manufacturer":"JLC",
|
||||
"url":"",
|
||||
"maintainer":"tominabox1",
|
||||
"usb":{
|
||||
"vid":"0x0004",
|
||||
"pid":"0x0002",
|
||||
"device_version":"0.0.1"
|
||||
},
|
||||
"layouts":{
|
||||
"LAYOUT_all":{
|
||||
"layout":[
|
||||
{
|
||||
"label":"~",
|
||||
"x":0,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"!",
|
||||
"x":1,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"@",
|
||||
"x":2,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"#",
|
||||
"x":3,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"$",
|
||||
"x":4,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"%",
|
||||
"x":5,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"^",
|
||||
"x":7.5,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"&",
|
||||
"x":8.5,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"*",
|
||||
"x":9.5,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"(",
|
||||
"x":10.5,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":")",
|
||||
"x":11.5,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"_",
|
||||
"x":12.5,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"+",
|
||||
"x":13.5,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"Insert",
|
||||
"x":15.5,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"Home",
|
||||
"x":16.5,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"PgUp",
|
||||
"x":17.5,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"label":"Tab",
|
||||
"x":0,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"Q",
|
||||
"x":1,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"W",
|
||||
"x":2,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"E",
|
||||
"x":3,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"R",
|
||||
"x":4,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"T",
|
||||
"x":5,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"Y",
|
||||
"x":7.5,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"U",
|
||||
"x":8.5,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"I",
|
||||
"x":9.5,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"O",
|
||||
"x":10.5,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"P",
|
||||
"x":11.5,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"{",
|
||||
"x":12.5,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"}",
|
||||
"x":13.5,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"Insert",
|
||||
"x":15.5,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"Home",
|
||||
"x":16.5,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"PgUp",
|
||||
"x":17.5,
|
||||
"y":1.5
|
||||
},
|
||||
{
|
||||
"label":"Caps Lock",
|
||||
"x":0,
|
||||
"y":2.5,
|
||||
"w":1.25
|
||||
},
|
||||
{
|
||||
"label":"A",
|
||||
"x":1.25,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"S",
|
||||
"x":2.25,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"D",
|
||||
"x":3.25,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"F",
|
||||
"x":4.25,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"G",
|
||||
"x":5.25,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"H",
|
||||
"x":7.75,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"J",
|
||||
"x":8.75,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"K",
|
||||
"x":9.75,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"L",
|
||||
"x":10.75,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"\"",
|
||||
"x":11.75,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"Enter",
|
||||
"x":12.75,
|
||||
"y":2.5,
|
||||
"w":1.75
|
||||
},
|
||||
{
|
||||
"label":"Delete",
|
||||
"x":15.5,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"End",
|
||||
"x":16.5,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"PgDn",
|
||||
"x":17.5,
|
||||
"y":2.5
|
||||
},
|
||||
{
|
||||
"label":"Shift",
|
||||
"x":0,
|
||||
"y":3.5,
|
||||
"w":1.75
|
||||
},
|
||||
{
|
||||
"label":"Z",
|
||||
"x":1.75,
|
||||
"y":3.5
|
||||
},
|
||||
{
|
||||
"label":"X",
|
||||
"x":2.75,
|
||||
"y":3.5
|
||||
},
|
||||
{
|
||||
"label":"C",
|
||||
"x":3.75,
|
||||
"y":3.5
|
||||
},
|
||||
{
|
||||
"label":"V",
|
||||
"x":4.75,
|
||||
"y":3.5
|
||||
},
|
||||
{
|
||||
"label":"B",
|
||||
"x":5.75,
|
||||
"y":3.5
|
||||
},
|
||||
{
|
||||
"label":"N",
|
||||
"x":8.25,
|
||||
"y":3.5
|
||||
},
|
||||
{
|
||||
"label":"M",
|
||||
"x":9.25,
|
||||
"y":3.5
|
||||
},
|
||||
{
|
||||
"label":"<",
|
||||
"x":10.25,
|
||||
"y":3.5
|
||||
},
|
||||
{
|
||||
"label":">",
|
||||
"x":11.25,
|
||||
"y":3.5
|
||||
},
|
||||
{
|
||||
"label":"?",
|
||||
"x":12.25,
|
||||
"y":3.5
|
||||
},
|
||||
{
|
||||
"label":"r4 dogshift",
|
||||
"x":13.25,
|
||||
"y":3.5,
|
||||
"w":1.25
|
||||
},
|
||||
{
|
||||
"label":"Ctrl",
|
||||
"x":0,
|
||||
"y":4.5,
|
||||
"w":1.25
|
||||
},
|
||||
{
|
||||
"label":"Alt",
|
||||
"x":2.5,
|
||||
"y":4.5,
|
||||
"w":1.25
|
||||
},
|
||||
{
|
||||
"x":3.75,
|
||||
"y":4.5
|
||||
},
|
||||
{
|
||||
"label":"",
|
||||
"x":4.75,
|
||||
"y":4.5,
|
||||
"w":2
|
||||
},
|
||||
{
|
||||
"label":"",
|
||||
"x":8.25,
|
||||
"y":4.5,
|
||||
"w":2.25
|
||||
},
|
||||
{
|
||||
"label":"Alt",
|
||||
"x":10.5,
|
||||
"y":4.5,
|
||||
"w":1.25
|
||||
},
|
||||
{
|
||||
"label":"Ctrl",
|
||||
"x":13,
|
||||
"y":4.5,
|
||||
"w":1.5
|
||||
},
|
||||
{
|
||||
"label":"\u2191",
|
||||
"x":16.5,
|
||||
"y":4.5
|
||||
},
|
||||
{
|
||||
"label":"\u2190",
|
||||
"x":15.5,
|
||||
"y":5.5
|
||||
},
|
||||
{
|
||||
"label":"\u2193",
|
||||
"x":16.5,
|
||||
"y":5.5
|
||||
},
|
||||
{
|
||||
"label":"\u2192",
|
||||
"x":17.5,
|
||||
"y":5.5
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
Copyright 2021 Dr.Doof
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[0] = LAYOUT_all(
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INS, KC_HOME, KC_PGUP,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_INS, KC_HOME, KC_PGUP,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, KC_DEL, KC_END, KC_PGDN,
|
||||
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_LCTL, KC_LALT, KC_SPC, KC_NO, KC_SPC, KC_LALT, KC_LCTL, KC_UP, KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
|
||||
)
|
||||
};
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
Copyright 2021 Dr.Doof
|
||||
|
||||
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 "nearfield.h"
|
||||
Executable
+35
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
Copyright 2021 Dr.Doof
|
||||
|
||||
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"
|
||||
|
||||
#define XXX KC_NO
|
||||
|
||||
#define LAYOUT_all( \
|
||||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
|
||||
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \
|
||||
K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K2G, \
|
||||
K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
|
||||
K41, K42, K44, K45, K47, K49, K4B, K4D, K4E, K4F, K4G \
|
||||
) { \
|
||||
{ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \
|
||||
{ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \
|
||||
{ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, XXX, K2E, K2F, K2G }, \
|
||||
{ K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX, XXX, XXX, XXX }, \
|
||||
{ K41, K42, XXX, K44, K45, XXX, K47, XXX, K49, XXX, K4B, XXX, K4D, K4E, K4F, K4G } \
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
# Nearfield
|
||||
|
||||

|
||||
|
||||
The LZ ErGO is a classic ergonomic design, predating the alice layout, and drawing inspiration from the "Microsoft natural ergonomic" series.
|
||||
Nearfield expands on this by increasing the rotation of the two halves of the alpha cluster, each half is rotated 15 degrees towards the center of the board.
|
||||
This increased angle forces the user to widen their elbow stance, and align their hands straighter with their forearms while typing.
|
||||
|
||||
Aesthetic design: Aside from the obvious layout homage to the ergo, retaining the nav cluster,
|
||||
the case design draws inspiration from the M0110 keyboard series from Apple.
|
||||
|
||||
bog standard mx and alps support pcb, uses unified c3 daughterboard. 100mm JST cable recommended.
|
||||
|
||||
|
||||
* Keyboard Maintainer: [TJ Campie](https://github.com/tominabox1)
|
||||
* Hardware Supported: Nearfield
|
||||
* Hardware Availability: [Cannonkeys](https://cannonkeys.com/collections/nearfield/products/nearfield-extra-pcb-and-daughterboard)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make nearfield:default
|
||||
|
||||
## Bootloader
|
||||
|
||||
Enter the bootloader in 3 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the top left key and plug in the keyboard
|
||||
* **Physical reset button**: Briefly press the button on the back of the PCB
|
||||
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
|
||||
|
||||
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).
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = no # Console for debug
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Enable N-Key Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
/* Ensure we jump to bootloader if the RESET keycode was pressed */
|
||||
/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
|
||||
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
|
||||
|
||||
/* LSE clock */
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
// Copyright 2022 Diego Palacios (@diepala)
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
#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│
|
||||
* ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
* │ESC│ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │
|
||||
* ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
* │Sft│ Z │ X │ C │ V │ B │ │ N │ M │ , │ . │ / │Sft│
|
||||
* └───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┘
|
||||
* ┌────┐ ┌───┐
|
||||
* │LCTL├───────┐ ┌─────┤Alt│
|
||||
* └────┤GUI/Bsp├───────┐ ┌───┤TO(1)├───┘
|
||||
* └───────┤ALT/ENT│ │SPC├─────┘
|
||||
* └───────┘ └───┘
|
||||
*/
|
||||
[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_ESCAPE, 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_LCTL, MT(MOD_LGUI, KC_BSPC), MT(MOD_LALT, KC_ENT), KC_SPC, TO(1), KC_RALT
|
||||
//-------------------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
),
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
|
||||
* │`~ │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │Bsp│
|
||||
* ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
* │ │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ ( │ ) │ | │
|
||||
* ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
* │Sft│ += │ -_│ + │ { │ } │ │ [ │ ] │ ; │ : │ \ │ │
|
||||
* └───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┘
|
||||
* ┌────────┐ ┌─────┐
|
||||
* │ MLCKSCN ├─────┐ ┌────┤TO(3)│
|
||||
* └────────┤TO(0)├───┐ ┌───┤TO(2)├─────┘
|
||||
* └─────┤ < │ │ > ├────┘
|
||||
* └───┘ └───┘
|
||||
*/
|
||||
[1] = LAYOUT_split_3x6_3(
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
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_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
KC_LSFT, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, KC_RSFT,
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
KC_TRNS, TO(0), KC_LT, KC_GT, TO(2), TO(3)
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
),
|
||||
/*
|
||||
* ┌────┬──────┬──────┬──────┬──────────┬──────┐ ┌──────┬──────┬──────┬───────┬──────┬───┐
|
||||
* │MSTP│ Play │ PRVS │ Next │ │ CAPS │ │ PgDn │ PgUp │ INS │ Print │ │Bsp│
|
||||
* ├────┼──────┼──────┼───────┼─────────┼──────┤ ├──────┼──────┼──────┼───────┼──────┼───┤
|
||||
* │ │ HOME │ END │ LCTRL+C │ LCTRL+V │ │ │ Left │ Down │ Up │ Right │ Del │ │
|
||||
* ├────┼──────┼──────┼───────┼────────┼──────┤ ├──────┼──────┼──────┼───────┼──────┼───┤
|
||||
* │Sft │ UNDO │ CUT │ COPY │ PASTE │ RApp │ │ Vol- │ Vol+ │ Mute │ │ RGui │ │
|
||||
* └────┴──────┴──────┴──────┴───────┴──────┘ └──────┴──────┴──────┴───────┴──────┴───┘
|
||||
* ┌─────┐ ┌─────┐
|
||||
* │LCTRL├─────┐ ┌─────┤TO(3)│
|
||||
* └─────┤TO(0)├───┐ ┌───┤TO(0)├─────┘
|
||||
* └─────┤ALT│ │SPC├─────┘
|
||||
* └───┘ └───┘
|
||||
*/
|
||||
[2] = LAYOUT_split_3x6_3(
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_CAPS, KC_PGDOWN, KC_PGUP, KC_INS, KC_PSCR, KC_NO, KC_BSPC,
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
KC_NO, KC_HOME, KC_END, C(KC_C), C(KC_V), KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, KC_NO,
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
KC_TAB, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, KC_RSFT,
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
KC_LCTL, TO(0), KC_LALT, KC_TRNS, KC_TRNS, TO(3)
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
),
|
||||
/*
|
||||
* ┌──┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬─────┬─────┐
|
||||
* │ │ F1 │ F2 │ F3 │ F4 │ F5 │ │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │
|
||||
* ├──┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼─────┼─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ F12 │
|
||||
* ├──┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼─────┼─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* └──┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴─────┴─────┘
|
||||
* ┌───┐ ┌───┐
|
||||
* │ ├─────┐ ┌─────┤ │
|
||||
* └───┤TO(0)├───┐ ┌───┤ ├───┘
|
||||
* └─────┤ENT│ │ ├─────┘
|
||||
* └───┘ └───┘
|
||||
*/
|
||||
[3] = LAYOUT_split_3x6_3(
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
KC_NO, TO(0), KC_NO, KC_NO, KC_NO, KC_NO
|
||||
//-------------------------------------------------------------- ---------------------------------------------------------------------------------
|
||||
)
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user