Merge branch 'master' of github.com:qmk/qmk_firmware

This commit is contained in:
Thomas Haukland
2022-05-07 23:06:36 +02:00
490 changed files with 21083 additions and 1631 deletions
+6
View File
@@ -97,12 +97,18 @@ ifeq ($(strip $(BOOTLOADER)), halfkay)
OPT_DEFS += -DBOOTLOADER_HALFKAY
BOOTLOADER_TYPE = halfkay
# Teensy 2.0
ifeq ($(strip $(MCU)), atmega32u4)
BOOTLOADER_SIZE = 512
endif
# Teensy 2.0++
ifeq ($(strip $(MCU)), at90usb1286)
BOOTLOADER_SIZE = 1024
endif
# Teensy LC, 3.x
ifneq (,$(filter $(MCU_ORIG), MKL26Z64 MK20DX128 MK20DX256 MK66FX1M0))
FIRMWARE_FORMAT = hex
endif
endif
ifeq ($(strip $(BOOTLOADER)), caterina)
OPT_DEFS += -DBOOTLOADER_CATERINA
+1 -1
View File
@@ -166,7 +166,7 @@ Send multiple bytes to the selected I2C device.
### `i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)`
Receive multiple bytes from the selected SPI device.
Receive multiple bytes from the selected I2C device.
#### Arguments
+1
View File
@@ -74,6 +74,7 @@ These headers are located in [`quantum/keymap_extras/`](https://github.com/qmk/q
|Swedish Pro (macOS, ISO) |`keymap_swedish_pro_osx_iso.h` | |
|Turkish (F) |`keymap_turkish_f.h` |`sendstring_turkish_f.h` |
|Turkish (Q) |`keymap_turkish_q.h` |`sendstring_turkish_q.h` |
|Ukrainian |`keymap_ukrainian.h` | |
There are also a few which are not quite language-specific, but useful if you are not using a QWERTY layout:
+23
View File
@@ -0,0 +1,23 @@
# QMK所采用的Git最佳实践
<!---
original document: 0.15.17:docs/newbs_git_best_practices.md
git diff 0.15.17 HEAD -- docs/newbs_git_best_practices.md | cat
-->
*译者注:对于git相关的部分,除广为接受的名词外,会尽量保留git命令及各种术语的英文版本,部分名词及关键部分会附带中文翻译*
## 或者讲,"怎么才能不害怕并喜欢上Git"
本节旨在以最佳方式指导新手在为QMK做贡献时获得流畅的体验。我们将进行一次完整的QMK贡献操作流程,并在部分环节中详细讲述几种便捷的方法,之后我们会故意搞砸一些东西,并教导你如何回到正轨。
该章节做了如下假设:
1. 你已有Github账号且已[fork了qmk_firmware仓库](zh-cn/getting_started_github.md)到你的账号下。
2. 已完成了[构建环境](zh-cn/newbs_getting_started.md#set-up-your-environment)及[QMK](zh-cn/newbs_getting_started.md#set-up-qmk)配置。
---
- 第一节:[在你Fork的主干上:频繁更新,不要提交](zh-cn/newbs_git_using_your_master_branch.md)
- 第二节:[解决合并冲突](zh-cn/newbs_git_resolving_merge_conflicts.md)
- 第三节:[重新同步一个脱离同步状态的Git分支](zh-cn/newbs_git_resynchronize_a_branch.md)
@@ -0,0 +1,86 @@
# 解决合并冲突
<!---
original document: 0.15.17:docs/newbs_git_resolving_merge_conflicts.md
git diff 0.15.17 HEAD -- docs/newbs_git_resolving_merge_conflicts.md | cat
-->
有时在你致力于一个较长周期才能完成的分支时,其它人提交的变更会与你提交的pull request中的变更发生冲突。我们将这种多个人编辑同一个模块同一个文件时产生的场景叫做 *合并冲突*
?> 本文中的场景基于[在你Fork的主干上:频繁更新,不要提交](zh-cn/newbs_git_using_your_master_branch.md)一文。如果你对那篇文章不熟悉,请先阅读它,再回来继续。
## 变基/衍合(rebase
Git的*变基*操作会将提交历史中的提交节点摘除并回滚,然后统一提交到一个新节点上。在解决合并冲突时,可以通过对当前分支进行变基,来获取从分支拉取到当前时刻的所有变更。
从执行如下命令开始:
```
git fetch upstream
git rev-list --left-right --count HEAD...upstram/master
```
此处输入的 `git rev-list` 命令可以得到当前分支与QMK主干分支间的提交数量差。而先执行 `git fetch` 是为了确保我们有上游仓库(upstream repo)的最新状态。`git rev-list` 命令会返回两个数字:
```
$ git rev-list --left-right --count HEAD...upstream/master
7 35
```
第一个数字为当前分支自创建后新增的提交数量。第二个数字为当前分支创建后在 `upstream/master` 上的提交数量,而这部分就是我们当前分支上缺失的提交记录。
在我们了解了当前分支以及上游仓库的状态后,可以发起变基操作了:
```
git rebase upstream/master
```
这样可以让Git回滚该分支的提交,然后基于QMK的主干版本重新应用这些提交。
*译注:以下内容在中文Git下大同小异,且仅作为示例,不进行翻译*
```
$ git rebase upstream/master
First, rewinding head to replay your work on top of it...
Applying: Commit #1
Using index info to reconstruct a base tree...
M conflicting_file_1.txt
Falling back to patching base and 3-way merge...
Auto-merging conflicting_file_1.txt
CONFLICT (content): Merge conflict in conflicting_file_1.txt
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch' to see the failed patch
Patch failed at 0001 Commit #1
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
```
以上内容是在告诉我们有合并冲突存在,并给出了冲突所在的文件名。在编辑器中打开该文件,可以在某处发现类似如下形式的内容:
```
<<<<<<< HEAD
<p>For help with any issues, email us at support@webhost.us.</p>
=======
<p>Need help? Email support@webhost.us.</p>
>>>>>>> Commit #1
```
`<<<<<<< HEAD` 标记了合并冲突的起始行,直至 `>>>>>>> Commit #1` 标记的结束行,中间通过 `=======` 分隔开冲突双方。其中 `HEAD` 部分为QMK主干上的版本,标记了提交日志的部分为当前分支的本地提交。
由于Git存储的是*文件差异部分*而非整个文件,所以当Git无法在文件中找到一个变更发生前的内容时,就无法知道如何去进行文件变更,重新编辑一下可以解决问题。在更改完成后,保存文件。
```
<p>Need help? Email support@webhost.us.</p>
```
之后,执行:
```
git add conflicting_file_1.txt
git rebase --continue
```
Git即会记录对文件冲突做出的变更,并继续处理剩余的提交,直至全部完成。
@@ -0,0 +1,76 @@
# 重新同步已失去同步状态的Git分支
<!---
original document: 0.15.17:docs/newbs_git_resynchronize_a_branch.md
git diff 0.15.17 HEAD -- docs/newbs_git_resynchronize_a_branch.md | cat
-->
假设你在自己的 `master` 分支之上有提交,并且想和QMK仓库进行同步,可以通过 `git pull` 拉取QMK的 `master` 分支到你的库,但同时Github也会提醒你当前分支相比 `qmk:master` 有几个领先的提交,会在你向QMK发起pr时造成麻烦。
?> 本文中的场景基于[在你Fork的主干上:频繁更新,不要提交](zh-cn/newbs_git_using_your_master_branch.md)一文。如果你对那篇文章不熟悉,请先阅读它,再回来继续。
## 备份你在自己的主干分支上的所有变更(可选)
不会有人想把有用的成果弄丢的。如果你想将你的 `master` 分支上的变更另存一份,简便的方法是直接创建一个当前“脏” `master` 分支的副本:
```
git branch old_master master
```
现在 `master` 分支拥有了一个副本分支 `old_master`
## 重新同步分支
现在可以重新同步 `master` 分支了,这里,我们将QMK仓库设置为Git的远程仓库。通过执行 `git remote -v` 可以确认远程仓库配置,输出信息应类似于:
```
QMKuser ~/qmk_firmware (master)
$ git remote -v
origin https://github.com/<your_username>/qmk_firmware.git (fetch)
origin https://github.com/<your_username>/qmk_firmware.git (push)
upstream https://github.com/qmk/qmk_firmware.git (fetch)
upstream https://github.com/qmk/qmk_firmware.git (push)
```
如果你只能看到一个仓库:
```
QMKuser ~/qmk_firmware (master)
$ git remote -v
origin https://github.com/qmk/qmk_firmware.git (fetch)
origin https://github.com/qmk/qmk_firmware.git (push)
```
通过如下命令添加新的远程仓库:
```
git remote add upstream https://github.com/qmk/qmk_firmware.git
```
然后,重新将 `origin` 远程仓库设置为自己的fork
```
git remote set-url origin https://github.com/<your_username>/qmk_firmware.git
```
在两个远程仓库配置完毕后,需要从QMK的 upstream 仓库中获取到更新,执行:
```
git fetch upstream
```
此时,重新同步你的分支到QMK的版本:
```
git reset --hard upstream/master
```
以上操作会更新你的本地仓库,而你的Github远程仓库仍然处于未同步状态,通过推送,可以让其进入已同步状态。可以通过如下命令来指引Git强行覆盖掉那些仅在你远程仓库中存在的提交:
```
git push --force-with-lease
```
!> **不要**在其它使用者也会提交的分支上执行 `git push --force-with-lease`,否则会覆盖掉他人的提交。
此时你的Github fork,本地文件副本,以及QMK仓库就是一致的了。之后再进行变更([在分支上!](zh-cn/newbs_git_using_your_master_branch.md#making-changes))和提交。
@@ -0,0 +1,79 @@
# 在你Fork的主干上:频繁更新,不要提交
<!---
original document: 0.15.17:docs/newbs_git_using_your_master_branch.md
git diff 0.15.17 HEAD -- docs/newbs_git_using_your_master_branch.md | cat
-->
我们强烈推荐所有QMK开发者,无论在哪里做什么改动,频繁更新你的 `master` 分支,但***不要***在其上提交。相对地,将你所有的改动提交到开发分支上并提交一个pull request。
为了减少冲突 &mdash; 多人同时编辑同一个文件 &mdash; 保持你的 `master` 分支更新到最新,并在新创建的分支上进行开发。
## 更新master分支
为了保持 `master` 更新到最新,推荐将QMK固件仓库("repo")设置为git远程仓库。打开Git命令行界面并键入:
```
git remote add upstream https://github.com/qmk/qmk_firmware.git
```
?> 名称 `upstream` 部分可以任意,这里给的是常用的;你可以将QMK远程仓库名称改成你想要的。Git的 `remote` 命令语法为 `git remote add <name> <url>`, `<name>` 是远程仓库的简写名称,这个名称可以在很多Git命令中使用,包括但不限于 `fetch``pull``push`,以指定目标远程仓库。
要验证是否添加成功,可以执行 `git remote -v`,输出应该类似于:
```
$ git remote -v
origin https://github.com/<your_username>/qmk_firmware.git (fetch)
origin https://github.com/<your_username>/qmk_firmware.git (push)
upstream https://github.com/qmk/qmk_firmware.git (fetch)
upstream https://github.com/qmk/qmk_firmware.git (push)
```
在以上操作完成后,可以通过执行 `git fetch upstream` 来检查仓库是否有更新。该命令从QMK仓库拉取的分支(branches)及标签(tags &mdash; 统称为“refs(引用)” &mdash;现在也被称作 `upstream`(上游)。此时我们可以比对自己fork版本的 `origin` 与QMK维护的分支的差异了。
要更新你的fork的master分支,执行以下指令,每一行结束都需要按回车:
```
git checkout master
git fetch upstream
git pull upstream master
git push origin master
```
以上操作会切换到 `master` 分支,从QMK仓库拉取refs,下载QMK `master` 分支的当前版本,并上传至你的fork中。
## 进行编辑 :id=making-changes
要进行编辑,通过如下命令创建一个新分支:
```
git checkout -b dev_branch
git push --set-upstream origin dev_branch
```
以上操作会创建 `dev_branch` 新分支,检出(check out)并保存到你的fork中。`--set-upstream` 参数用于告知git使用你的fork仓库来处理 `dev_branch` 分支下的 `git push``git pull` 命令,且仅需要在第一次执行push命令时指定,之后再次执行 `git push` 或是 `git pull` 都无需加入该参数了。
?> 在 `git push` 时,可以使用 `-u` 替代 `--set-upstram` &mdash; `-u``--set-upsream` 参数的别名。
你可以任意命名该分支,但仍建议对分支起一个可以描述将在该分支下要做的工作的名称。
默认情况下 `git checkout -b` 会基于你当前检出的分支作为新分支的基准。可以在后面追加已存在但未检出的分支名来指定新分支的基准:
```
git checkout -b dev_branch master
```
此时你便有了一个开发用分支,可以打开编辑器并进行你期望的变更了。通常推荐提交大量的小规模提交(commit),这样在需要时会更容易地定位并回滚造成问题的提交。若要提交更改,编辑并保存要更新的文件,并将其添加到*暂存区(staged area)*,然后提交到分支中:
```
git add path/to/updated_file
git commit -m "My commit message."
```
`git add` 会将更改后的文件放到Git的*暂存区*,也称作Git的“装载区”。这里留存着即将通过 `git commit` 所提交并保存到仓库中的变更。请使用确切的描述来填写提交日志,以便于快速了解改动内容。
?> 如果更改了多个文件,可以通过 `git add -- path/to/file1 path/to/file2 ...` 来添加所有项目。
## 发布变更
最后一步为上传你的变更到你的fork中。通过执行 `git push`Git将发布 `dev_branch` 分支的所有变更至你的fork中。
+16
View File
@@ -0,0 +1,16 @@
/* Copyright 2020 zvecr<git@zvecr.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "1k.h"
+33
View File
@@ -0,0 +1,33 @@
/* Copyright 2020 zvecr<git@zvecr.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
/* This 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_ortho_1x1( \
K01 \
) \
{ \
{ K01 }, \
}
+60
View File
@@ -0,0 +1,60 @@
/* Copyright 2020 zvecr<git@zvecr.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x0009
#define PRODUCT_ID 0x0001
#define DEVICE_VER 0x0001
#define MANUFACTURER MakotoKurauchi
#define PRODUCT 1K
/* matrix size */
#define MATRIX_ROWS 1
#define MATRIX_COLS 1
/*
* Keyboard Matrix Assignments
*
* On this board we have direct connection: no diodes.
*/
#define DIRECT_PINS {{ B0 }}
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
#define RGBLED_NUM 1
#define RGB_DI_PIN B2
// Save as much space as we can...
#define LAYER_STATE_8BIT
#define NO_ACTION_LAYER
#define NO_ACTION_TAPPING
#define NO_ACTION_ONESHOT
#define NO_RESET
// usbconfig.h overrides
#define USB_CFG_IOPORTNAME B
#define USB_CFG_DMINUS_BIT 3
#define USB_CFG_DPLUS_BIT 4
#define USB_COUNT_SOF 0
#define USB_INTR_CFG PCMSK
#define USB_INTR_CFG_SET (1<<USB_CFG_DPLUS_BIT)
#define USB_INTR_ENABLE_BIT PCIE
#define USB_INTR_PENDING_BIT PCIF
#define USB_INTR_VECTOR SIG_PIN_CHANGE
+12
View File
@@ -0,0 +1,12 @@
{
"keyboard_name": "1k",
"url": "",
"maintainer": "MakotoKurauchi",
"layouts": {
"LAYOUT_ortho_1x1": {
"layout": [
{"x":0, "y":0}
]
}
}
}
+25
View File
@@ -0,0 +1,25 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "rgblite.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_1x1(
RGB_HUI
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
switch (keycode) {
case RGB_HUI:
rgblite_increase_hue();
break;
}
}
return true;
}
void keyboard_post_init_user(void) {
rgblite_increase_hue();
}
+23
View File
@@ -0,0 +1,23 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "ws2812.h"
#include "color.h"
static inline void rgblite_setrgb(RGB rgb) {
LED_TYPE leds[RGBLED_NUM] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}};
ws2812_setleds(leds, RGBLED_NUM);
}
static void rgblite_increase_hue(void) {
static uint8_t state = 0;
HSV hsv = { 255, 255, 255 };
hsv.h = state;
state = (state + 8) % 256;
rgblite_setrgb(hsv_to_rgb(hsv));
}
+2
View File
@@ -0,0 +1,2 @@
SRC += ws2812.c
SRC += color.c
+22
View File
@@ -0,0 +1,22 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "rgblite.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_1x1(
KC_MUTE
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
rgblite_increase_hue();
}
return true;
}
void keyboard_post_init_user(void) {
rgblite_increase_hue();
}
+23
View File
@@ -0,0 +1,23 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "ws2812.h"
#include "color.h"
static inline void rgblite_setrgb(RGB rgb) {
LED_TYPE leds[RGBLED_NUM] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}};
ws2812_setleds(leds, RGBLED_NUM);
}
static void rgblite_increase_hue(void) {
static uint8_t state = 0;
HSV hsv = { 255, 255, 255 };
hsv.h = state;
state = (state + 8) % 256;
rgblite_setrgb(hsv_to_rgb(hsv));
}
+3
View File
@@ -0,0 +1,3 @@
SRC += ws2812.c
SRC += color.c
EXTRAKEY_ENABLE = yes
+6
View File
@@ -0,0 +1,6 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define TAPPING_TERM 500
+22
View File
@@ -0,0 +1,22 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layers {
_BASE = 0,
};
enum {
TD_AB = 0
};
qk_tap_dance_action_t tap_dance_actions[] = {
[TD_AB] = ACTION_TAP_DANCE_DOUBLE(KC_A, KC_B)
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_ortho_1x1(
TD(TD_AB)
)
};
+1
View File
@@ -0,0 +1 @@
TAP_DANCE_ENABLE = yes
+47
View File
@@ -0,0 +1,47 @@
# 1k
![1k](https://booth.pximg.net/aaeb2dda-e169-44c0-ba5a-5b42cc5c2627/i/3504781/c1708a8a-061b-4a6c-907d-72d0eab47d4a.png)
1% Custom mechanical keyboard. ATtiny85 powered, with 1*WS2812 LED, and the micronucleus bootloader.
**Note**: Due to limited firmware space, a _**lot**_ of features have to be disabled to get a functioning QMK based keyboard.
* Keyboard Maintainer: [MakotoKurauchi](https://github.com/MakotoKurauchi)
* Hardware Supported: 1k
* Hardware Availability: [booth](https://ninep.booth.pm/items/3504781)
Make example for this keyboard (after setting up your build environment):
make 1k: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).
## Flashing
### Prerequisites
```bash
git clone https://github.com/micronucleus/micronucleus.git
cd micronucleus/commandline/
sudo make install
```
On Linux, youll need proper privileges to access the MCU. You can either use sudo when flashing firmware, or place [these files](https://github.com/micronucleus/micronucleus/blob/master/commandline/49-micronucleus.rules) in /etc/udev/rules.d/. Once added run the following:
```bash
sudo udevadm control --reload-rules
sudo udevadm trigger
```
### Instructions
```bash
make 1k:default:flash
# or directly with...
micronucleus --run <firmware.hex>
```
### Recovery
* [Original Firmware](https://github.com/xiudi/Attiny85_vusb_pad_test)
* [Bootloader Repair](https://digistump.com/wiki/digispark/tutorials/proisp)
+26
View File
@@ -0,0 +1,26 @@
# MCU name
MCU = attiny85
# Bootloader selection
BOOTLOADER = custom
BOOTLOADER_SIZE = 1862
PROGRAM_CMD = micronucleus --run $(BUILD_DIR)/$(TARGET).hex
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = no # 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
# Save as much space as we can...
LTO_ENABLE = yes
GRAVE_ESC_ENABLE = no
MAGIC_ENABLE = no
SPACE_CADET_ENABLE = no
+1 -1
View File
@@ -9,7 +9,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
LT(3,KC_TAB), KC_LSFT, KC_SPC, LT(1,KC_ENT)
),
+16
View File
@@ -0,0 +1,16 @@
/* Copyright 2019 Álvaro "Gondolindrim" Volpato
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "alpha.h"
+39
View File
@@ -0,0 +1,39 @@
/* Copyright 2019 Álvaro "Gondolindrim" Volpato
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
/* This 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_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, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B } \
}
+32
View File
@@ -0,0 +1,32 @@
/* Copyright 2020 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 <http://www.gnu.org/licenses/>.
*/
#include "beta.h"
void board_init(void) {
setPinInput(B6);
setPinInput(B7);
}
#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
+31
View File
@@ -0,0 +1,31 @@
/* Copyright 2020 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 <http://www.gnu.org/licenses/>.
*/
#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, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B \
)\
{\
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B } \
}
+25
View File
@@ -0,0 +1,25 @@
/* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#define CH_CFG_ST_FREQUENCY 10000
#define CH_CFG_OPTIMIZE_SPEED FALSE
#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
#include_next <chconf.h>
+66
View File
@@ -0,0 +1,66 @@
/*
Copyright 2020 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xAC11
#define PRODUCT_ID 0x5369 // For Shark+1
#define DEVICE_VER 0x0002
#define MANUFACTURER AcheronProject
#define PRODUCT SharkPCB rev. Beta
#define MATRIX_ROWS 4
#define MATRIX_COLS 12
#define MATRIX_COL_PINS { A5 , A10, C13, B9 , B8 , B5 , B4 , B3 , A15, A0 , A1 , A2 }
#define MATRIX_ROW_PINS { A8 , B14, A4 , A3 }
#define DIODE_DIRECTION COL2ROW
#define DEBOUNCE 5
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
#define BACKLIGHT_PIN A6
#define BACKLIGHT_PWM_DRIVER PWMD3
#define BACKLIGHT_PWM_CHANNEL 1
#define BACKLIGHT_PAL_MODE 2
#define BACKLIGHT_LEVELS 20
#define BACKLIGHT_BREATHING
#define BREATHING_PERIOD 5
#define BACKLIGHT_ON_STATE 1
#define STM32_HSECLK 8000000
#define RGB_DI_PIN B15
#define RGBLED_NUM 24
#define RGBLIGHT_ANIMATIONS
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define ENCODERS_PAD_A { C15 }
#define ENCODERS_PAD_B { C14 }
#define EEPROM_I2C_24LC256
+24
View File
@@ -0,0 +1,24 @@
/* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#define HAL_USE_PWM TRUE
#define HAL_USE_PAL TRUE
#define HAL_USE_I2C TRUE
#include_next <halconf.h>
@@ -0,0 +1,43 @@
/* Copyright 2019
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_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 ,
KC_LCTL , KC_LALT , KC_LGUI , KC_NO , MO(1) , KC_SPC , KC_SPC , MO(2) , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT
),
[1] = 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
),
[2] = 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
),
[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
)
};
+265
View File
@@ -0,0 +1,265 @@
/*
Copyright 2020 Álvaro "Gondolindrim" Volpato <alvaro.volpato@usp.br>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#include "config_common.h"
#define MEDIA_KEY_DELAY 10
#define ALT_TAB_DELAY 1000
// Persistent encoder modes: the current encoder mode is written into EEPROM memory, and retrieved at the keyboard initialization. This means the current encoder mode is persistent even if the keyboard is reset or turned off
#define PERSISTENT_ENCODER_MODES
#define ENCODER_MODE_CHANGE_DELAY 500
// Defining special keycodes
enum keyboard_keycodes {
ECLICK = SAFE_RANGE, // Encoder click
ALTTABF , // ALT-TAB forward
ALTTABB , // ALT-TAB backwards
ALTTABC , // For alt-tab-click
ENCMUP , // Encoder mode up
ENCMDN , // Encoder mode down
NEW_SAFE_RANGE
};
// Creates sample keyevents and keyrecords to be used in the processing of the custom keycodes. Their time should be resampled everytime they are used; their cols and rows are set to be "impossible", that is, outside the normal key matrix bounds.
const keyevent_t sample_pressed_keyevent = {
.key = (keypos_t){.row = 5, .col = 13},
.pressed = true,
.time = 0
};
keyrecord_t sample_pressed_keyrecord = {
.event = sample_pressed_keyevent
};
const keyevent_t sample_released_keyevent = {
.key = (keypos_t){.row = 5, .col = 13},
.pressed = false,
.time = 0
};
keyrecord_t sample_released_keyrecord = {
.event = sample_released_keyevent
};
// tap_process_record_user calls process_record_user with the pressed and released sample keyrecords with a delay of MEDIA_KEY_DELAY. The idea is to allow custom keycodes a simulation of a key press and release, allowing them to be treated in process_record_user. This, in turn, allows the custom keycodes to be used both in the encoder callback and the keyboard keymap.
uint16_t temp_timer = 0;
void tap_process_record_user(uint16_t keycode)
{
temp_timer = timer_read();
sample_pressed_keyrecord.event.time = timer_read();
process_record_user( keycode, &sample_pressed_keyrecord );
while (timer_elapsed(temp_timer) < MEDIA_KEY_DELAY);
sample_released_keyrecord.event.time = timer_read();
process_record_user( keycode, &sample_released_keyrecord );
}
// process_special_keycode is a function that distinguishes between the native keycodes and the ones custom-defined here. Normal keycodes are tapped, while keycodes in the SAFE_RANGE - NEW_SAFE_RANGE interval are treated with tap_process_record_user.
void process_special_keycode(uint16_t keycode) {
if (SAFE_RANGE <= keycode && keycode < NEW_SAFE_RANGE) tap_process_record_user(keycode);
else tap_code(keycode);
}
uint16_t encoder_click_delay = ENCODER_MODE_CHANGE_DELAY;
uint8_t startup_color[3] = {0xFF,0xFF,0xFF};
typedef struct _encoder_mode_t {
uint8_t indicator_color[3];
uint16_t clockwise_key[4];
uint16_t counterclockwise_key[4];
uint16_t clicked_key[4] ;
uint16_t hold_key;
} encoder_mode_t;
encoder_mode_t encoder_modes[] = {
{ .indicator_color = {0x22,0x00,0xFF} , .clockwise_key = {KC_VOLU, KC_VOLU, ENCMUP, KC_VOLU}, .counterclockwise_key = {KC_VOLD, KC_VOLD, ENCMDN, KC_VOLD}, .clicked_key = {KC_MUTE, KC_MPLY, KC_MUTE, KC_MUTE}, .hold_key = ENCMUP },
{ .indicator_color = {0x00,0x33,0xFF} , .clockwise_key = {KC_WH_D, KC_WH_D, ENCMUP, KC_WH_D}, .counterclockwise_key = {KC_WH_U, KC_WH_U, ENCMDN, KC_WH_U}, .clicked_key = {KC_BTN1, KC_BTN1, KC_BTN1, KC_BTN1}, .hold_key = ENCMUP },
{ .indicator_color = {0xFF,0x88,0x00} , .clockwise_key = {ALTTABF, ALTTABF, ENCMUP, ALTTABF}, .counterclockwise_key = {ALTTABB, ALTTABB, ENCMDN, ALTTABB}, .clicked_key = {ALTTABC, ALTTABC, ALTTABC, ALTTABC}, .hold_key = ENCMUP }
// Insert your custom encoder mode here
};
#define NUM_ENCODER_MODES (sizeof(encoder_modes)/sizeof(encoder_modes[0]))
// This counter is used to track what encoder mode is being used at a certain time
int encoder_mode_count = 0;
#ifdef PERSISTENT_ENCODER_MODES
typedef union {
uint32_t raw;
struct {
int user_encoder_mode_count;
};
} user_config_t;
user_config_t user_config;
#endif
void set_indicator_colors(uint8_t color[3]){
rgblight_setrgb(color[0], color[1], color[2]);
}
// Board init: RGB indicator is set to startup_color
void keyboard_pre_init_user(void){
set_indicator_colors(startup_color);
};
void keyboard_post_init_user(void){
#ifdef PERSISTENT_ENCODER_MODES
user_config.raw = eeconfig_read_user();
encoder_mode_count = user_config.user_encoder_mode_count ;
#else
encoder_mode_count = 0;
#endif
set_indicator_colors(encoder_modes[ encoder_mode_count ].indicator_color);
};
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, ECLICK ,
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, _______, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
[1] = 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
),
[2] = 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
),
[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
)
};
// ------------------------------------------------------------------------------------------------
bool is_alt_tab_active = false; // Flag to check if alt tab is active
uint32_t alt_tab_timer = 0; // Time trigger for alt tab
uint16_t mapped_code = 0;
uint32_t held_keycode_timer = 0;
int current_layer = 0 ; // Updated in layer_state_set_user each time a layer change is made
void cycle_encoder_mode(bool forward){
if (forward) encoder_mode_count++ ; // Shifts encoder mode forward
else encoder_mode_count-- ;
if (encoder_mode_count == -1) encoder_mode_count = NUM_ENCODER_MODES - 1;
// Shifts encoder mode backward
encoder_mode_count = encoder_mode_count % NUM_ENCODER_MODES ; // This makes sure encoder_mode_count keeps cycling between 0,1,...,NUM_ENCODER_MODES and doesnt eventually overflow
#ifdef PERSISTENT_ENCODER_MODES
user_config.user_encoder_mode_count = encoder_mode_count ;
eeconfig_update_user(user_config.raw);
#endif
set_indicator_colors( encoder_modes[ encoder_mode_count ].indicator_color ); // Set indicator color to the corresponding defined color
}
bool encoder_update_user(uint8_t index, bool clockwise) {
process_special_keycode(clockwise ? encoder_modes[ encoder_mode_count ].clockwise_key[ current_layer ] : encoder_modes[ encoder_mode_count ].counterclockwise_key[ current_layer ]);
return false;
}
uint32_t held_click_timer = 0;
bool is_click_held = false;
bool is_shift_held = false;
bool automatic_hold_cycle = false; // This flag registers if the encoder hold was automatically cycled
// This bool records if LALT is pressed or not. Due to the automatic disabling of the ALT-TAB of the ALTTABS custom keystroke, the automatic disabling can un-register KC_LALT even when the LALT key is phisically pressed. Hence there needs to be two bools: one that keebs track of the ALT-TAB activity and one that keeps track of LALT so that the automatic disabling will not disable LALT if it is phisically pressed.
bool is_lalt_pressed = false;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_LSFT:
case KC_RSFT:
if (record->event.pressed) is_shift_held = true;
else is_shift_held = false;
return true;
case ECLICK:
// Checks if the encoder has been pressed; if so, sets the corresponding flag and starts the corresponding timer
if (record->event.pressed) {
is_click_held = true;
held_click_timer = timer_read32();
// Checks if the encoder has been released: samples the duration of the encoder push; if this time was less than the encoder_click_delay, processes the clicked key. If it was bigger, processes the hold key. This behavior is adjusted using the ENCODER_MODE_CHANGE_DELAY macro. There is an exception made when automatic_hold_cycle is true; this means that the encoder push has been pressed enough to trigger a hold cycle. This case is taken care of in the housekeeping routine, where the held key is triggered and the timer reset. Hence the automatic_hold_cycle needs to be checked because without this check the function will trigger the clicked key after the hold cycle has been cycled more than once.
} else {
is_click_held = false;
if (timer_elapsed32(held_click_timer) < encoder_click_delay && !automatic_hold_cycle ) process_special_keycode( encoder_modes[ encoder_mode_count ].clicked_key[ current_layer ] ) ;
automatic_hold_cycle = false;
}
return true; // Skip all further processing of this key
case KC_LALT: // If this is not defined, if the encoder is activated in the alt-tab mode while the LALT key is pressed, the menu goes away.
if (record->event.pressed) is_lalt_pressed = true;
else is_lalt_pressed = false;
return true;
case ENCMUP:
case ENCMDN:
if (record->event.pressed) cycle_encoder_mode(keycode == ENCMUP); // If keycode == ENCMUP the expression returns true and the cycle function cycles the modes forward. If not, then cycles backwards.
return false;
case ALTTABF:
case ALTTABB:
if (record->event.pressed) {
if (!is_alt_tab_active) {
is_alt_tab_active = true;
register_code(KC_LALT);
}
tap_code16(keycode == ALTTABF ? KC_TAB : S(KC_TAB)); // Due to S(KC_TAB), the 16-bit tap_code16 is needed.
alt_tab_timer = timer_read32();
}
return true;
case ALTTABC:
if (record->event.pressed) {
if (is_alt_tab_active) {
if (!is_lalt_pressed) unregister_code(KC_LALT);
is_alt_tab_active = false;
}
}
return false;
default:
return true; // Process all other keycodes normally
}
}
void housekeeping_task_user(void) {
if (is_alt_tab_active) {
if (is_lalt_pressed) alt_tab_timer = timer_read32();
else if (timer_elapsed32(alt_tab_timer) > ALT_TAB_DELAY) {
unregister_code(KC_LALT);
is_alt_tab_active = false;
}
}
/* This piece of the code checks for the encoder push timer. If the encoder push interval was less than encoder_click_delay then it is automatically processed by process_record_user by triggering the current mode's click key. However, if the encoder push is held for more time than the defined delay, then the encoder hold "cycles", that is, gets activated and the timer needs to be reset. This does three things:
- (1) Sets the automatic_hold_cycle flag which prevents process_record_user from triggering the click key when the push is released
- (2) Processes the current mode's hold key in process_record_user
- (3) Resets the click timer
*/
if (is_click_held && timer_elapsed32(held_click_timer) > encoder_click_delay ){
automatic_hold_cycle = true;
process_special_keycode( encoder_modes[ encoder_mode_count ].hold_key );
held_click_timer = timer_read32();
}
}
@@ -0,0 +1 @@
VIA_ENABLE = yes
@@ -0,0 +1,43 @@
/* Copyright 2019
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_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 ,
KC_LCTL , KC_LALT , KC_LGUI , KC_NO , MO(1) , KC_SPC , KC_SPC , MO(2) , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT
),
[1] = 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
),
[2] = 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
),
[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
)
};
@@ -0,0 +1 @@
VIA_ENABLE = yes
+44
View File
@@ -0,0 +1,44 @@
/* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef STM32_PLLM_VALUE
#undef STM32_PLLN_VALUE
#undef STM32_PLLP_VALUE
#undef STM32_PLLQ_VALUE
#undef STM32_PPRE1
#undef STM32_PPRE2
#define STM32_PLLM_VALUE 4
#define STM32_PLLN_VALUE 96
#define STM32_PLLP_VALUE 2
#define STM32_PLLQ_VALUE 4
#define STM32_PPRE1 STM32_PPRE1_DIV2
#define STM32_PPRE2 STM32_PPRE2_DIV1
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE
#undef STM32_PWM_USE_ADVANCED
#define STM32_PWM_USE_ADVANCED TRUE
#undef STM32_PWM_USE_TIM3
#define STM32_PWM_USE_TIM3 TRUE
#undef STM32_PWM_USE_TIM1
#define STM32_PWM_USE_TIM1 TRUE
+26
View File
@@ -0,0 +1,26 @@
MCU = STM32F411
# Bootloader selection
BOOTLOADER = stm32-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
BACKLIGHT_DRIVER = pwm
LTO_ENABLE = no
ENCODER_ENABLE = yes
LAYOUTS = ortho_4x12
EEPROM_DRIVER = i2c
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+38 -9
View File
@@ -1,17 +1,46 @@
# Acheron Aχξρων 40-SM-O-MX-TH-WI (Codename "SharkPCB") QMK firmware
# SharkPCB QMK firmware
<p align="center">
<img align="middle" src="https://raw.githubusercontent.com/Gondolindrim/acheronLibrary/master/graphics/acheronLong.png" width="400">
</p>
![sharkpcb](https://acheronproject.com/images/shark/shark_beta_pic3_small.jpg)
This is the QMK firmware repository for the Shark, updated until [revision Alpha](https://github.com/Gondolindrim/SharkPCB/releases/tag/Alpha).
The SharkPCB is an open-source ortholinear 40% layout designed by Gondolindrim for the AcheronProject.
The SharkPCB is an Open-Hardware guidelines compliant PCB which files can be found at [this link](https://github.com/Gondolindrim/SharkPCB). Its designer and maintainer is [Gondolindrim](https://github.com/Gondolindrim).
* Keyboard Maintainer: [Gondolindrim](https://github.com/gondolindrim)
* Hardware Availability: you can get release Beta SharkPCBs using the JLCPCB manufacturer using the files at [its documentation](http:/acheronproject.com/pcbs/shark/shark/)
See the [AcheronDocs](https://gondolindrim.github.io/AcheronDocs/shark/intro.html) page for the SharkPCB full documentation.
## How to flash
Make example for this keyboard (after setting up your build environment):
### Enter bootloader
make acheron/shark:default
### Release Alpha:
The DFU state in the bootloader can be accessed in 2 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**: press the button on the back of the PCB
* **Keycode in layout**: press the key mapped to `RESET` if it is available (ESC key at layer 1 in the default layout)
### Release Beta:
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 or Escape) and plug in the keyboard
* **Physical reset button**: press the button on the back of the PCB, for at least five seconds
* **Keycode in layout**: press the key mapped to `RESET` if it is available (ESC key at layer 1 in the default layout)
## Compile firmware
### Release Alpha
After accessing the DFU state in your PCB, build the default layout using:
make acheron/shark/alpha:default
### Release Beta
After accessing the DFU state in your PCB, build the default layout using:
make acheron/shark/beta:default
Then download the resulting binary `*bin` file using `dfu-util` or QMK Toolbox.
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).
+13 -15
View File
@@ -1,16 +1,14 @@
/* Copyright 2019 Álvaro "Gondolindrim" Volpato
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* Copyright 2022 Álvaro "Gondolindrim" Volpato <gondolindrim@acheronproject.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.
*/
#include "shark.h"
+5 -35
View File
@@ -1,39 +1,9 @@
/* Copyright 2019 Álvaro "Gondolindrim" Volpato
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
/* This 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_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, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B } \
}
#if defined(KEYBOARD_acheron_shark_alpha)
#include "alpha.h"
#elif defined(KEYBOARD_acheron_shark_beta)
#include "beta.h"
#endif
@@ -0,0 +1,19 @@
/* Copyright 2021 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#define LAYER_STATE_8BIT
@@ -0,0 +1,227 @@
/* Copyright 2022 Efthimis Iosifidis <iosifidise@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layers {
_BASIC,
_BRACKETS,
_SELECTORS,
_FN,
};
#define KC_X0 LT(_FN, KC_ESC)
static char current_alpha_oled [12] = "None";
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* _BASIC Layer
* ,-------------------------------------.
* | Toggle | Toggle | | |
* | Block | Line | Undo | Search |
* | Comment | Comment | | |
* |---------+---------+--------+---------+
* | | | | TO |
* | Cut | Copy | Paste | _BASIC |
* | | | | |
* `-------------------------------------'
*/
[_BASIC] = LAYOUT_ortho_2x4(
RCS(KC_A), LCTL(KC_SLASH), LCTL(KC_Z), LCTL(KC_F),
LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), TO(_BRACKETS)
),
/* _BRACKETS Layer
* ,-----------------------------------------.
* | | | | |
* | ( | [ | { | Bksp |
* | | | | |
* |---------+---------+--------+------------+
* | | | | TO |
* | Del | Copy | Paste | _SELECTORS |
* | | | | |
* `----------------------------------------'
*/
[_BRACKETS] = LAYOUT_ortho_2x4(
S(KC_9), KC_LBRC, S(KC_LBRC), KC_BACKSPACE,
KC_DEL, C(KC_C), C(KC_V), TO(_SELECTORS)
),
/* _SELECTORS Layer
* ,-------------------------------------.
* | | | | |
* | Select | Save | Undo | Bksp |
* | All | | | |
* |---------+---------+--------+---------+
* | | | | TO |
* | Cut | Copy | Paste | _FN |
* | | | | |
* `-------------------------------------'
*/
[_SELECTORS] = LAYOUT_ortho_2x4(
C(KC_A), C(KC_S), C(KC_Z), KC_BACKSPACE,
C(KC_X), C(KC_C), C(KC_V), TO(_FN)
),
/* _FN Layer
* ,--------------------------------------------.
* | RGB | RGB | RGB | RGB |
* | Toggle | Mode | Mode | Snake |
* | | Forward | Reverse | Mode |
* |-----------+-----------+-----------+---------+
* | | Cycle | Toggle | TO |
* | BackLight | BackLight | BackLight | _BASIC |
* | Toggle | Levels | Breathing | |
* `--------------------------------------------'
*/
[_FN] = LAYOUT_ortho_2x4(
RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
BL_TOGG, BL_STEP, BL_BRTG, TO(_BASIC)
)
};
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
char string [33];
switch(keycode)
{
//First Layer with Basic Keys
case LCTL(KC_X):
strncpy(current_alpha_oled, "Cut", sizeof(current_alpha_oled));
break;
case LCTL(KC_F):
strncpy(current_alpha_oled, "Search", sizeof(current_alpha_oled));
break;
case LCTL(KC_Z):
strncpy(current_alpha_oled, "Undo", sizeof(current_alpha_oled));
break;
case LCTL(KC_C):
strncpy(current_alpha_oled, "Copy", sizeof(current_alpha_oled));
break;
case LCTL(KC_V):
strncpy(current_alpha_oled, "Paste", sizeof(current_alpha_oled));
break;
case RCS(KC_A):
strncpy(current_alpha_oled, "Block cmt.", sizeof(current_alpha_oled));
break;
case LCTL(KC_SLASH):
strncpy(current_alpha_oled, "Line cmt.", sizeof(current_alpha_oled));
break;
//Second Layer with Brackets
case S(KC_9):
strncpy(current_alpha_oled, "()", sizeof(current_alpha_oled));
break;
case KC_LBRC:
strncpy(current_alpha_oled, "[]", sizeof(current_alpha_oled));
break;
case S(KC_LBRC):
strncpy(current_alpha_oled, "{}", sizeof(current_alpha_oled));
break;
case KC_BACKSPACE:
strncpy(current_alpha_oled, "Backspace", sizeof(current_alpha_oled));
break;
case KC_DEL:
strncpy(current_alpha_oled, "Del", sizeof(current_alpha_oled));
break;
// Selector Layer keys
case C(KC_A):
strncpy(current_alpha_oled, "Select All", sizeof(current_alpha_oled));
break;
case C(KC_S):
strncpy(current_alpha_oled, "Save", sizeof(current_alpha_oled));
break;
// FN Layer keys
case RGB_TOG:
strncpy(current_alpha_oled, "RGB Toggle", sizeof(current_alpha_oled));
break;
case RGB_MOD:
strncpy(current_alpha_oled, "RGB Fwd", sizeof(current_alpha_oled));
break;
case RGB_M_R:
strncpy(current_alpha_oled, "RGB Rev", sizeof(current_alpha_oled));
break;
case RGB_MODE_SNAKE:
strncpy(current_alpha_oled, "RGB Snk", sizeof(current_alpha_oled));
break;
case BL_TOGG:
strncpy(current_alpha_oled, "BkLgt Tog", sizeof(current_alpha_oled));
break;
case BL_STEP:
strncpy(current_alpha_oled, "BkLgt Lvl", sizeof(current_alpha_oled));
break;
case BL_BRTG:
strncpy(current_alpha_oled, "BkLgt Brth", sizeof(current_alpha_oled));
break;
//FN Key keycodes
case TO(_BASIC) ... TO(_FN):
strncpy(current_alpha_oled, "Switcher", sizeof(current_alpha_oled));
break;
default:
strncpy(current_alpha_oled, itoa(keycode, string, 10), sizeof(current_alpha_oled));
break;
}
}
return true;
}
bool oled_task_user(void) {
// Host Keyboard Layer Status
oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
oled_write_P(PSTR("Active layer: "), false);
switch (get_highest_layer(layer_state)) {
case _BASIC:
oled_write_ln_P(PSTR("Basic"), false);
break;
case _BRACKETS:
oled_write_ln_P(PSTR("Brkts"), false);
break;
case _SELECTORS:
oled_write_ln_P(PSTR("Selct"), false);
break;
case _FN:
oled_write_ln_P(PSTR("FN"), false);
break;
default:
// Or use the write_ln shortcut over adding '\n' to the end of your string
oled_write_ln_P(PSTR("N/A"), false);
}
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_P(PSTR("Num Lock: "), false);
oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Caps Lock: "), false);
oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Backlit: "), false);
oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Last Key: "), false);
oled_write_ln(current_alpha_oled, false);
#ifdef RGBLIGHT_ENABLE
static char rgbStatusLine1[26] = {0};
snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
oled_write_ln(rgbStatusLine1, false);
static char rgbStatusLine2[26] = {0};
snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
oled_write_ln(rgbStatusLine2, false);
#endif
return false;
}
#endif
+56 -57
View File
@@ -42,11 +42,10 @@ static const SerialConfig ble_uart_config = {
static uint8_t led_mcu_wakeup[11] = {0x7b, 0x10, 0x43, 0x10, 0x03, 0x00, 0x00, 0x7d, 0x02, 0x01, 0x02};
static uint8_t led_enabled = 1;
ble_capslock_t ble_capslock = {._dummy = {0}, .caps_lock = false};
#ifdef RGB_MATRIX_ENABLE
static uint8_t led_enabled = 1;
static uint8_t current_rgb_row = 0;
#endif
@@ -227,69 +226,69 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if(rgb_matrix_is_enabled()) ap2_led_disable();
else ap2_led_enable();
return true;
#endif
case KC_AP_RGB_VAI:
if (record->event.pressed) {
if (get_mods() & MOD_MASK_SHIFT) {
rgb_matrix_increase_hue();
return false;
} else if (get_mods() & MOD_MASK_CTRL) {
rgb_matrix_decrease_hue();
return false;
} else {
rgb_matrix_increase_val();
}
}
if (record->event.pressed) {
if (get_mods() & MOD_MASK_SHIFT) {
rgb_matrix_increase_hue();
return false;
} else if (get_mods() & MOD_MASK_CTRL) {
rgb_matrix_decrease_hue();
return false;
} else {
rgb_matrix_increase_val();
}
}
return true;
case KC_AP_RGB_VAD:
if (record->event.pressed) {
if (get_mods() & MOD_MASK_SHIFT) {
rgb_matrix_increase_sat();
return false;
} else if (get_mods() & MOD_MASK_CTRL) {
rgb_matrix_decrease_sat();
return false;
} else {
rgb_matrix_decrease_val();
}
}
if (record->event.pressed) {
if (get_mods() & MOD_MASK_SHIFT) {
rgb_matrix_increase_sat();
return false;
} else if (get_mods() & MOD_MASK_CTRL) {
rgb_matrix_decrease_sat();
return false;
} else {
rgb_matrix_decrease_val();
}
}
return true;
case KC_AP_RGB_TOG:
if (record->event.pressed) {
if (get_mods() & MOD_MASK_SHIFT) {
rgb_matrix_increase_speed();
return false;
} else if (get_mods() & MOD_MASK_CTRL) {
rgb_matrix_decrease_speed();
return false;
} else {
if (led_enabled) {
ap2_led_disable();
rgb_matrix_disable();
led_enabled = 0;
} else {
ap2_led_enable();
rgb_matrix_enable();
led_enabled = 1;
}
return true;
}
}
if (record->event.pressed) {
if (get_mods() & MOD_MASK_SHIFT) {
rgb_matrix_increase_speed();
return false;
} else if (get_mods() & MOD_MASK_CTRL) {
rgb_matrix_decrease_speed();
return false;
} else {
if (led_enabled) {
ap2_led_disable();
rgb_matrix_disable();
led_enabled = 0;
} else {
ap2_led_enable();
rgb_matrix_enable();
led_enabled = 1;
}
return true;
}
}
return true;
case KC_AP_RGB_MOD:
if (record->event.pressed) {
if (get_mods() & MOD_MASK_CTRL) {
rgb_matrix_step_reverse();
return false;
} else {
rgb_matrix_step();
}
}
if (record->event.pressed) {
if (get_mods() & MOD_MASK_CTRL) {
rgb_matrix_step_reverse();
return false;
} else {
rgb_matrix_step();
}
}
return true;
#endif
default:
break;
+3
View File
@@ -46,3 +46,6 @@
#define MATRIX_COL_PINS \
{ C4, C5, B10, B11, C0, A15, A8, A10, A11, A12, A13, A14, B2, B3 }
// Obins stock firmware has something similar to this already enabled, but disabled by default in QMK
#define PERMISSIVE_HOLD
-1
View File
@@ -1 +0,0 @@
AnnePro2, ANSI C15 version.
+32 -20
View File
@@ -1,12 +1,3 @@
# Anne Pro 2
SRC = \
matrix.c \
annepro2_ble.c \
ap2_led.c \
protocol.c \
rgb_driver.c \
config_led.c
# MCU
MCU = cortex-m0plus
ARMV = 6
@@ -18,23 +9,44 @@ MCU_STARTUP = ht32f523xx
BOARD = ANNEPRO2_C15
# Options
# Bootloader selection
BOOTLOADER = custom
PROGRAM_CMD = annepro2_tools --boot $(BUILD_DIR)/$(TARGET).bin
# 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
# Custom RGB matrix handling
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = custom
# Keys
CUSTOM_MATRIX = lite
NKRO_ENABLE = no
MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes
KEY_LOCK_ENABLE = no
LAYOUTS = 60_ansi
# Other featues
BOOTMAGIC_ENABLE = no
CONSOLE_ENABLE = no
COMMAND_ENABLE = no
# Other features
RAW_ENABLE = no
MIDI_ENABLE = no
VIRTSER_ENABLE = no
COMBO_ENABLE = no
BOOTLOADER = custom
PROGRAM_CMD = annepro2_tools --boot $(BUILD_DIR)/$(TARGET).bin
LAYOUTS = 60_ansi
# Anne Pro 2
SRC = \
matrix.c \
annepro2_ble.c \
ap2_led.c \
protocol.c \
rgb_driver.c \
config_led.c
+3
View File
@@ -44,3 +44,6 @@
// inputs (columns are sampled)
#define MATRIX_COL_PINS \
{ C4, C5, D0, B15, C11, A15, C12, C13, A8, A10, A11, A14, D2, D3 }
// Obins stock firmware has something similar to this already enabled, but disabled by default in QMK
#define PERMISSIVE_HOLD
-1
View File
@@ -1 +0,0 @@
AnnePro2, ANSI C18 version.
+32 -20
View File
@@ -1,12 +1,3 @@
# Anne Pro 2
SRC = \
matrix.c \
annepro2_ble.c \
ap2_led.c \
protocol.c \
rgb_driver.c \
config_led.c
# MCU
MCU = cortex-m0plus
ARMV = 6
@@ -18,23 +9,44 @@ MCU_STARTUP = ht32f523xx
BOARD = ANNEPRO2_C18
# Options
# Bootloader selection
BOOTLOADER = custom
PROGRAM_CMD = annepro2_tools --boot $(BUILD_DIR)/$(TARGET).bin
# 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
# Custom RGB matrix handling
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = custom
# Keys
CUSTOM_MATRIX = lite
NKRO_ENABLE = no
MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes
KEY_LOCK_ENABLE = no
LAYOUTS = 60_ansi
# Other featues
BOOTMAGIC_ENABLE = yes
CONSOLE_ENABLE = no
COMMAND_ENABLE = no
# Other features
RAW_ENABLE = no
MIDI_ENABLE = no
VIRTSER_ENABLE = no
COMBO_ENABLE = no
BOOTLOADER = custom
PROGRAM_CMD = annepro2_tools --boot $(BUILD_DIR)/$(TARGET).bin
LAYOUTS = 60_ansi
# Anne Pro 2
SRC = \
matrix.c \
annepro2_ble.c \
ap2_led.c \
protocol.c \
rgb_driver.c \
config_led.c
+66 -320
View File
@@ -1,329 +1,75 @@
{
"keyboard_name": "Anne Pro 2",
"url": "https://openannepro.github.io/",
"maintainer": "community",
"maintainer": "bwisn",
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
{
"label": "~",
"x": 0,
"y": 0
},
{
"label": "!",
"x": 1,
"y": 0
},
{
"label": "@",
"x": 2,
"y": 0
},
{
"label": "#",
"x": 3,
"y": 0
},
{
"label": "$",
"x": 4,
"y": 0
},
{
"label": "%",
"x": 5,
"y": 0
},
{
"label": "^",
"x": 6,
"y": 0
},
{
"label": "&",
"x": 7,
"y": 0
},
{
"label": "*",
"x": 8,
"y": 0
},
{
"label": "(",
"x": 9,
"y": 0
},
{
"label": ")",
"x": 10,
"y": 0
},
{
"label": "_",
"x": 11,
"y": 0
},
{
"label": "+",
"x": 12,
"y": 0
},
{
"label": "Backspace",
"x": 13,
"y": 0,
"w": 2
},
{
"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": 6.5,
"y": 1
},
{
"label": "U",
"x": 7.5,
"y": 1
},
{
"label": "I",
"x": 8.5,
"y": 1
},
{
"label": "O",
"x": 9.5,
"y": 1
},
{
"label": "P",
"x": 10.5,
"y": 1
},
{
"label": "{",
"x": 11.5,
"y": 1
},
{
"label": "}",
"x": 12.5,
"y": 1
},
{
"label": "|",
"x": 13.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": 6.75,
"y": 2
},
{
"label": "J",
"x": 7.75,
"y": 2
},
{
"label": "K",
"x": 8.75,
"y": 2
},
{
"label": "L",
"x": 9.75,
"y": 2
},
{
"label": ":",
"x": 10.75,
"y": 2
},
{
"label": "\"",
"x": 11.75,
"y": 2
},
{
"label": "Enter",
"x": 12.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": 7.25,
"y": 3
},
{
"label": "M",
"x": 8.25,
"y": 3
},
{
"label": "<",
"x": 9.25,
"y": 3
},
{
"label": ">",
"x": 10.25,
"y": 3
},
{
"label": "?",
"x": 11.25,
"y": 3
},
{
"label": "Shift",
"x": 12.25,
"y": 3,
"w": 2.75
},
{
"label": "Ctrl",
"x": 0,
"y": 4,
"w": 1.25
},
{
"label": "Win",
"x": 1.25,
"y": 4,
"w": 1.25
},
{
"label": "Alt",
"x": 2.5,
"y": 4,
"w": 1.25
},
{
"x": 3.75,
"y": 4,
"w": 6.25
},
{
"label": "Alt",
"x": 10,
"y": 4,
"w": 1.25
},
{
"label": "Win",
"x": 11.25,
"y": 4,
"w": 1.25
},
{
"label": "Menu",
"x": 12.5,
"y": 4,
"w": 1.25
},
{
"label": "Ctrl",
"x": 13.75,
"y": 4,
"w": 1.25
}
{"label":"~", "x":0, "y":0},
{"label":"!", "x":1, "y":0},
{"label":"@", "x":2, "y":0},
{"label":"#", "x":3, "y":0},
{"label":"$", "x":4, "y":0},
{"label":"%", "x":5, "y":0},
{"label":"^", "x":6, "y":0},
{"label":"&", "x":7, "y":0},
{"label":"*", "x":8, "y":0},
{"label":"(", "x":9, "y":0},
{"label":")", "x":10, "y":0},
{"label":"_", "x":11, "y":0},
{"label":"+", "x":12, "y":0},
{"label":"Backspace", "x":13, "y":0, "w":2},
{"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":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"{", "x":11.5, "y":1},
{"label":"}", "x":12.5, "y":1},
{"label":"|", "x":13.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":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":":", "x":10.75, "y":2},
{"label":"\"", "x":11.75, "y":2},
{"label":"Enter", "x":12.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":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":"<", "x":9.25, "y":3},
{"label":">", "x":10.25, "y":3},
{"label":"?", "x":11.25, "y":3},
{"label":"Shift", "x":12.25, "y":3, "w":2.75},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"Win", "x":1.25, "y":4, "w":1.25},
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
{"x":3.75, "y":4, "w":6.25},
{"label":"Alt", "x":10, "y":4, "w":1.25},
{"label":"Win", "x":11.25, "y":4, "w":1.25},
{"label":"Menu", "x":12.5, "y":4, "w":1.25},
{"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
]
}
}
@@ -1,20 +0,0 @@
/* Copyright 2021 OpenAnnePro community
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// Obins stock firmware has something similar to this already enabled, but disabled by default in QMK
#define PERMISSIVE_HOLD
@@ -1,20 +0,0 @@
/* Copyright 2021 OpenAnnePro community
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// Obins stock firmware has something similar to this already enabled, but disabled by default in QMK
#define PERMISSIVE_HOLD
@@ -1,20 +0,0 @@
/* Copyright 2021 OpenAnnePro community
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// Obins stock firmware has something similar to this already enabled, but disabled by default in QMK
#define PERMISSIVE_HOLD
@@ -1,3 +0,0 @@
# Custom RGB matrix handling
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = custom
+19 -21
View File
@@ -1,12 +1,10 @@
# Anne Pro 2 rev. C15 and C18 QMK firmware
## Introduction
An ANSI-layout 60% keyboard featuring Bluetooth support and per-key RGB lighting.
This is the QMK firmware repository for the Anne Pro 2 rev. C15 and C18 keyboard.
## Layouts
Keyboard has 60% ANSI standard layout.
* Keyboard Maintainer: [bwisn](https://github.com/bwisn)
* Hardware Supported: Anne Pro 2, [C15](c15/) and [C18](c18/) versions
* Hardware Availability: [annepro.net](https://www.annepro.net/), [Hexcore](https://www.hexcore.xyz/annepro2)
## How to compile
@@ -25,26 +23,26 @@ If you want to compile the Anne Pro 2 C15 default keymap use:
If you want the executable instead of compiling it yourself, [download it here](https://ci.codetector.org/job/OpenAnnePro/job/AnnePro2-Tools/job/master/).
Windows and Linux versions are available. Otherwise, follow the steps below:
0. Install the latest stable `rust` toolchain using [rustup](https://rustup.rs/)
0. Also install [Visual Studio Community edition](https://visualstudio.microsoft.com/downloads/)
1. Install the latest stable `rust` toolchain using [rustup](https://rustup.rs/)
1. Also install [Visual Studio Community edition](https://visualstudio.microsoft.com/downloads/)
including the C/C++ module to prevent errors while compiling
0. Download or Clone the [AnnePro2-Tools](https://github.com/OpenAnnePro/AnnePro2-Tools) project.
0. Compile the tool using
```bash
cargo build --release
```
0. The compiled tool should be in `./target/release/annepro2_tools` (In later I will refer to this as `annepro2_tools`)
1. Download or Clone the [AnnePro2-Tools](https://github.com/OpenAnnePro/AnnePro2-Tools) project.
1. Compile the tool using
```bash
cargo build --release
```
The compiled tool should be in `./target/release/annepro2_tools` (In later I will refer to this as `annepro2_tools`)
### Flashing the firmware
0. Put the keyboard into DFU/IAP mode by unplugging the keyboard, then holding ESC while plugging it back in.
0. Run annepro2_tools with the firmware you just built.
**Please substitute with the correct paths and correct bin file if you chose another keymap profile**
```bash
annepro2_tools annepro2_c15_default.bin
```
1. Put the keyboard into DFU/IAP mode by unplugging the keyboard, then holding ESC while plugging it back in.
1. Run annepro2_tools with the firmware you just built.
**Please substitute with the correct paths and correct bin file if you chose another keymap profile.**
```bash
annepro2_tools annepro2_c15_default.bin
```
If the tool can't find the keyboard please double check you have the keyboard in IAP 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).
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).
+16 -11
View File
@@ -19,20 +19,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
#define VENDOR_ID 0xF7E0
#define PRODUCT_ID 0x0412
#define DEVICE_VER 0x0000
#define MANUFACTURER Boardsource
#define PRODUCT microdox
#define VENDOR_ID 0xF7E0
#define PRODUCT_ID 0x0412
#define DEVICE_VER 0x0000
#define MANUFACTURER Boardsource
#define PRODUCT microdox
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 8
#define MATRIX_COLS 5
#define MATRIX_ROW_PINS { B2, B6, B4, B5 }
#define MATRIX_ROW_PINS \
{ B2, B6, B4, B5 }
// wiring of each half
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1 }
#define MATRIX_COL_PINS \
{ F4, F5, F6, F7, B1 }
#define USE_SERIAL
#define SOFT_SERIAL_PIN D2
/* define if matrix has ghost */
@@ -53,12 +55,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define LOCKING_RESYNC_ENABLE
/* ws2812 RGB LED */
#define RGBLIGHT_ANIMATIONS
#define RGB_DI_PIN D3
#define RGBLED_SPLIT { 6, 6 }
#define EE_HANDS
#ifdef RGBLIGHT_ENABLE
#define RGBLED_NUM 12 // Number of LEDs
# define RGBLED_NUM 12 // Number of LEDs
# define RGBLED_SPLIT \
{ 6, 6 }
# define RGBLIGHT_EFFECT_BREATHING
# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
# define RGBLIGHT_EFFECT_STATIC_GRADIENT
#endif
/*
@@ -16,13 +16,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#include "split_util.h"
enum layers {
_QWERTY,
_RAISE,
_LOWER,
_ADJUST
_LOWER
};
#define KC_CTSC RCTL_T(KC_SCLN)
@@ -35,83 +33,23 @@ enum layers {
#define PREVWINDOW MT(MOD_LCTL, KC_LEFT)
#define NEXTWINDOW MT(MOD_LCTL, KC_RGHT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_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,
CTRL_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_CTSC,
SHFT_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SHIFT_SLASH,
MO(_LOWER),KC_LGUI, RASE_ENT, RASE_BACK, LOWER_SPC, KC_TAB
),
),
[_RAISE] = 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_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_QUOT,
KC_LSFT, KC_GRV, PREVWINDOW, NEXTWINDOW, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
_______, KC_LGUI, KC_ENT, KC_BSPC, KC_SPC, _______
),
),
[_LOWER] = LAYOUT_split_3x5_3(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DQT,
KC_ESC, KC_TILD, PREVWINDOW, NEXTWINDOW, RGB_MODE_FORWARD, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, KC_LGUI, KC_ENT, KC_BSPC, KC_SPC, _______
)
)
};
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (is_keyboard_master())
return OLED_ROTATION_180;
return rotation;
}
static void render_logo(void) {
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
};
oled_write_P(qmk_logo, false);
}
static void render_status(void) {
switch (get_highest_layer(layer_state)) {
case _QWERTY:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR("^\n"), false);
oled_write_P(PSTR("Layer: Base\n"), false);
break;
case _RAISE:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Raise\n"), false);
break;
case _LOWER:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Lower\n"), false);
break;
case _ADJUST:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Adjust\n"), false);
break;
default:
oled_write_P(PSTR("B R L A O"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Other\n"), false);
}
}
bool oled_task_user(void) {
if (is_keyboard_master()) {
render_status();
} else {
render_logo();
oled_scroll_left();
}
return false;
}
#endif
@@ -1,2 +1 @@
OLED_ENABLE = yes
OLED_DRIVER = SSD1306
@@ -27,24 +27,24 @@ enum layers {
#define LOWER MO(_LOWER)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_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_SCLN,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LCTL, LOWER, KC_SPC, KC_BSPC, RAISE, KC_ENT
),
[_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_SCLN,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LCTL, LOWER, KC_SPC, KC_BSPC, RAISE, KC_ENT
),
[_RAISE] = 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_TAB, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC,
KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSLS, KC_QUOT,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
[_RAISE] = 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_TAB, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC,
KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSLS, KC_QUOT,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
[_LOWER] = LAYOUT_split_3x5_3(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR,
KC_CAPS, KC_TILD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PIPE, KC_DQT,
XXXXXXX, XXXXXXX, XXXXXXX, KC_ENT, XXXXXXX, KC_DEL
)
[_LOWER] = LAYOUT_split_3x5_3(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR,
KC_CAPS, KC_TILD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PIPE, KC_DQT,
XXXXXXX, XXXXXXX, XXXXXXX, KC_ENT, XXXXXXX, KC_DEL
)
};
@@ -1,105 +1,32 @@
/*
Copyright 2020 Jack Sangdahl <@toastedmangoes>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Copyright 2022 jack (@waffle87)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
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,
SFT_T(KC_A), KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SFT_T(KC_SCLN),
CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH),
LT(3, KC_LGUI), MO(1), KC_SPC, KC_BSPC, MO(2), KC_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,
SFT_T(KC_A), KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SFT_T(KC_SCLN),
CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH),
LT(3, KC_LGUI), MO(1), KC_SPC, KC_BSPC, MO(2), KC_ENT
),
[1] = 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_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
KC_ESC, KC_TAB, KC_CAPS, KC_TILD, KC_GRV, KC_QUOT, KC_DQUO, KC_MPRV, KC_MPLY, KC_MNXT,
KC_LGUI, KC_TRNS, KC_SPC, KC_ENT, KC_TRNS, KC_RALT
),
[1] = 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_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
KC_ESC, KC_TAB, KC_CAPS, KC_TILD, KC_GRV, KC_QUOT, KC_DQUO, KC_MPRV, KC_MPLY, KC_MNXT,
KC_LGUI, KC_TRNS, KC_SPC, KC_ENT, KC_TRNS, KC_RALT
),
[2] = LAYOUT_split_3x5_3(
KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_PSCR, KC_DEL, KC_INS, KC_HOME, KC_END,
KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_LEFT, KC_DOWN, KC_RIGHT, KC_UP, KC_VOLU,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_VOLD,
KC_PGDN, KC_TRNS, KC_SPC, KC_ENT, KC_TRNS, KC_PGUP
),
[3] = LAYOUT_split_3x5_3(
RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUD, RGB_HUI, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_SAD, RGB_SAI, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_VAD, RGB_VAI, XXXXXXX, XXXXXXX,
KC_TRNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
)
[2] = LAYOUT_split_3x5_3(
KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_PSCR, KC_DEL, KC_INS, KC_HOME, KC_END,
KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_LEFT, KC_DOWN, KC_RIGHT, KC_UP, KC_VOLU,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_VOLD,
KC_PGDN, KC_TRNS, KC_SPC, KC_ENT, KC_TRNS, KC_PGUP
),
[3] = LAYOUT_split_3x5_3(
RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUD, RGB_HUI, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_SAD, RGB_SAI, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_VAD, RGB_VAI, XXXXXXX, XXXXXXX,
KC_TRNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
)
};
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (is_keyboard_master())
return OLED_ROTATION_180;
return rotation;
}
static void render_logo(void) {
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
};
oled_write_P(qmk_logo, false);
}
static void render_status(void) {
switch (get_highest_layer(layer_state)) {
case 0:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR("^\n"), false);
oled_write_P(PSTR("Layer: Base\n"), false);
break;
case 1:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Raise\n"), false);
break;
case 2:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Lower\n"), false);
break;
case 3:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Adjust\n"), false);
break;
default:
oled_write_P(PSTR("B R L A O"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Other\n"), false);
}
}
bool oled_task_user(void) {
if (is_keyboard_master()) {
render_status();
} else {
render_logo();
oled_scroll_left();
}
return false;
}
#endif
@@ -1,6 +1,3 @@
OLED_ENABLE = yes
OLED_DRIVER = SSD1306
VIA_ENABLE = yes
EXTRAKEY_ENABLE = yes
RGBLIGHT_ENABLE = yes
LTO_ENABLE = yes
+57
View File
@@ -17,3 +17,60 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "microdox.h"
#ifdef OLED_ENABLE
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
if (is_keyboard_master())
return OLED_ROTATION_180;
return rotation;
}
static void render_logo(void) {
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
};
oled_write_P(qmk_logo, false);
}
static void render_status(void) {
switch (get_highest_layer(layer_state)) {
case 0:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR("^\n"), false);
oled_write_P(PSTR("Layer: Base\n"), false);
break;
case 1:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Raise\n"), false);
break;
case 2:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Lower\n"), false);
break;
case 3:
oled_write_P(PSTR("B R L A O\n"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Adjust\n"), false);
break;
default:
oled_write_P(PSTR("B R L A O"), false);
oled_write_P(PSTR(" ^\n"), false);
oled_write_P(PSTR("Layer: Other\n"), false);
}
}
bool oled_task_kb(void) {
if (!oled_task_user()) { return false; }
if (is_keyboard_master()) {
render_status();
} else {
render_logo();
oled_scroll_left();
}
return false;
}
#endif
+13 -12
View File
@@ -18,20 +18,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
#include "quantum.h"
#define xxx KC_NO
#define LAYOUT_split_3x5_3(\
k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, \
k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, \
k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, \
k33, k34, k35, k75, k74, k73 \
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, k34, k74, k73, k72 \
) \
{ \
{ k01, k02, k03, k04, k05 }, \
{ k11, k12, k13, k14, k15 }, \
{ k21, k22, k23, k24, k25 }, \
{ KC_NO,KC_NO, k33, k34, k35 }, \
{ k41, k42, k43, k44, k45 }, \
{ k51, k52, k53, k54, k55 }, \
{ k61, k62, k63, k64, k65 }, \
{ KC_NO, KC_NO, k73, k74, k75 } \
{ k00, k01, k02, k03, k04 }, \
{ k10, k11, k12, k13, k14 }, \
{ k20, k21, k22, k23, k24 }, \
{ xxx, xxx, k32, k33, k34 }, \
{ k40, k41, k42, k43, k44 }, \
{ k50, k51, k52, k53, k54 }, \
{ k60, k61, k62, k63, k64 }, \
{ xxx, xxx, k72, k73, k74 } \
}
+4 -2
View File
@@ -3,11 +3,13 @@
![boardsource Microdox](https://i.imgur.com/AliShkvl.jpg)
* Keyboard Maintainer: [Boardsource](https://github.com/daysgobye)
* Hardware Supported: microdox v1
* Hardware Supported: Pro Micro and compatible alternatives
* Hardware Availability: this keyboard is available from the [Boardsource store](https://boardsource.xyz/store/5f2e7e4a2902de7151494f92)
Make example for this keyboard (after setting up your build environment):
make boardsource/microdox:default
make boardsource/microdox/v2:default
Remove `v2` from above command if you purchased your PCBs prior to April 2022
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).
+3 -3
View File
@@ -7,12 +7,12 @@ BOOTLOADER = caterina
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = no # Audio control and System control
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
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
@@ -0,0 +1,45 @@
// Copyright 2022 jack (@waffle87)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#undef MATRIX_ROW_PINS
#undef MATRIX_COL_PINS
#define MATRIX_ROW_PINS \
{ F4, D2, C6, B1 }
#define MATRIX_COL_PINS \
{ D4, D7, B3, F7, F6 }
#define MATRIX_ROW_PINS_RIGHT \
{ F5, F7, F6, E6 }
#define MATRIX_COL_PINS_RIGHT \
{ F4, B1, D7, C6, B3 }
#undef SOFT_SERIAL_PIN
#define SOFT_SERIAL_PIN D3
#undef RGB_DI_PIN
#define RGB_DI_PIN B5
#ifdef RGBLIGHT_ENABLE
# undef RGBLED_NUM
# undef RGBLED_SPLIT
# define RGBLED_NUM 8
# define RGBLED_SPLIT { 4, 4 } // underglow only
# define RGBLIGHT_SLEEP
# define RGBLIGHT_EFFECT_BREATHING
# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
# define RGBLIGHT_EFFECT_STATIC_GRADIENT
#endif
#ifdef RGB_MATRIX_ENABLE
# define DRIVER_LED_TOTAL 44
# define RGB_MATRIX_SPLIT { 22, 22 }
# define RGB_DISABLE_WHEN_USB_SUSPENDED
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
# define ENABLE_RGB_MATRIX_ALPHAS_MODS
# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
# define ENABLE_RGB_MATRIX_BREATHING
# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
#endif
#ifdef ENCODER_ENABLE
# define ENCODERS_PAD_A { E6 }
# define ENCODERS_PAD_B { B2 }
# define ENCODERS_PAD_A_RIGHT { B6 }
# define ENCODERS_PAD_B_RIGHT { B2 }
#endif
@@ -0,0 +1,8 @@
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
RGB_MATRIX_SUPPORTED = yes
RGBLIGHT_ENABLE = no
OLED_ENABLE = yes
OLED_DRIVER = SSD1306
ENCODER_ENABLE = yes
LTO_ENABLE = yes
+62
View File
@@ -0,0 +1,62 @@
// Copyright 2022 jack (@waffle87)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "v2.h"
#ifdef RGB_MATRIX_ENABLE
led_config_t g_led_config = {
{
{ 13, 14, 15, 16, 17 },
{ 12, 11, 10, 9, 8 },
{ 3, 4, 5, 6, 7 },
{ NO_LED, NO_LED, 2, 1, 0 },
//18-21 left underglow
{ 35, 36, 37, 38, 39 },
{ 34, 33, 32, 31, 30 },
{ 25, 26, 27, 28, 29 },
{ NO_LED, NO_LED, 24, 23, 22 }
//40-44 right underglow
}, {
{99,64}, {74,64}, {49,64}, //0-2
{0,42}, {24,42}, {49,42}, {74,42}, {99,42}, //3-7
{99,21}, {74,21}, {49,21}, {24,21}, {0,21}, //8-12
{0,0}, {24,0}, {49,0}, {74,0}, {99,0}, //13-17
{12,11}, {86,11}, {86,53}, {0,64}, //18-21
{124,64}, {149,64}, {174,64}, //22-24
{224,42}, {199,42}, {174,42}, {149,42}, {124,42}, //25-29
{124,21}, {149,21}, {174,21}, {199,21}, {224,21}, //30-34
{224,0}, {199,0}, {174,0}, {149,0}, {124,0}, //35-39
{211,11}, {136,11}, {136,53}, {224,64} //40-44
}, {
1, 1, 1,
4, 4, 4, 4, 4,
4, 4, 4, 4, 4,
4, 4, 4, 4, 4,
2, 2, 2, 2,
1, 1, 1,
4, 4, 4, 4, 4,
4, 4, 4, 4, 4,
4, 4, 4, 4, 4,
2, 2, 2, 2
}
};
#endif
#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);
}
} else {
if (clockwise) {
tap_code(KC_MNXT);
} else {
tap_code(KC_MPRV);
}
}
return false;
}
#endif
+22
View File
@@ -0,0 +1,22 @@
// Copyright 2022 jack (@waffle87)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "quantum.h"
#define xxx KC_NO
#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, k34, k74, k73, k72 \
) \
{ \
{ k00, k01, k02, k03, k04 }, \
{ k10, k11, k12, k13, k14 }, \
{ k20, k21, k22, k23, k24 }, \
{ xxx, xxx, k32, k33, k34 }, \
{ k40, k41, k42, k43, k44 }, \
{ k50, k51, k52, k53, k54 }, \
{ k60, k61, k62, k63, k64 }, \
{ xxx, xxx, k72, k73, k74 } \
}
+33 -34
View File
@@ -21,21 +21,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "quantum.h"
#define LAYOUT( \
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
/* 0 */ { KC_NO , KC_NO , KC0 , KC_NO , KC_NO , KF0 , KC_NO , KC_NO , KC_NO , KJ0 , KK0 , KC_NO , KM0 , KN0 , KO0 , KC_NO , KQ0 , KR0 }, \
/* 1 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , KC_NO , KO1 , KP1 , KC_NO , KC_NO }, \
/* 2 */ { KC_NO , KB2 , KC_NO , KD2 , KC_NO , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , KC_NO , KO2 , KC_NO , KC_NO , KC_NO }, \
/* 3 */ { KA3 , KB3 , KC_NO , KC_NO , KC_NO , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , KC_NO , KO3 , KC_NO , KC_NO , KC_NO }, \
/* 4 */ { KC_NO , KC_NO , KC4 , KC_NO , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , KC_NO , KO4 , KP4 , KQ4 , KR4 }, \
/* 5 */ { KC_NO , KC_NO , KC5 , KC_NO , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , KC_NO , KC_NO }, \
/* 6 */ { KC_NO , KC_NO , KC6 , KC_NO , KC_NO , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , KC_NO , KN6 , KO6 , KC_NO , KQ6 , KC_NO }, \
/* 7 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , KC_NO , KP7 , KC_NO , KC_NO } \
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, \
KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, \
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
/* 0 */ { KC_NO, KB0, KC0, KD0, KC_NO, KF0, KG0, KC_NO, KC_NO, KC_NO, KK0, KL0, KC_NO, KC_NO, KO0, KC_NO, KC_NO, KR0 }, \
/* 1 */ { KA1, KB1, KC_NO, KD1, KE1, KF1, KG1, KH1, KI1, KJ1, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
/* 2 */ { KC_NO, KB2, KC_NO, KD2, KE2, KF2, KG2, KH2, KI2, KJ2, KC_NO, KC_NO, KC_NO, KN2, KC_NO, KP2, KC_NO, KR2 }, \
/* 3 */ { KC_NO, KB3, KC_NO, KD3, KE3, KF3, KG3, KH3, KI3, KJ3, KC_NO, KC_NO, KM3, KN3, KC_NO, KC_NO, KC_NO, KR3 }, \
/* 4 */ { KA4, KB4, KC_NO, KD4, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, KC_NO, KC_NO, KO4, KC_NO, KQ4, KR4 }, \
/* 5 */ { KA5, KC_NO, KC5, KD5, KE5, KF5, KG5, KH5, KI5, KJ5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KR5 }, \
/* 6 */ { KC_NO, KB6, KC6, KC_NO, KE6, KF6, KG6, KH6, KI6, KJ6, KK6, KC_NO, KC_NO, KC_NO, KO6, KC_NO, KC_NO, KR6 }, \
/* 7 */ { KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7, KC_NO, KC_NO, KC_NO, KC_NO, KO7, KC_NO, KQ7, KR7 } \
}
#define LAYOUT_tkl_ansi( \
@@ -45,15 +45,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
/* 0 */ { KC_NO , KC_NO , KC0 , KC_NO , KC_NO , KF0 , KC_NO , KC_NO , KC_NO , KJ0 , KK0 , KC_NO , KM0 , KN0 , KO0 , KC_NO , KQ0 , KR0 }, \
/* 1 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , KC_NO , KO1 , KP1 , KC_NO , KC_NO }, \
/* 2 */ { KC_NO , KB2 , KC_NO , KD2 , KC_NO , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , KC_NO , KO2 , KC_NO , KC_NO , KC_NO }, \
/* 3 */ { KA3 , KB3 , KC_NO , KC_NO , KC_NO , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , KC_NO , KO3 , KC_NO , KC_NO , KC_NO }, \
/* 4 */ { KC_NO , KC_NO , KC4 , KC_NO , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , KC_NO , KO4 , KP4 , KQ4 , KR4 }, \
/* 5 */ { KC_NO , KC_NO , KC5 , KC_NO , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , KC_NO , KC_NO }, \
/* 6 */ { KC_NO , KC_NO , KC6 , KC_NO , KC_NO , KF6 , KG6 , KC_NO , KI6 , KJ6 , KK6 , KL6 , KC_NO , KN6 , KO6 , KC_NO , KQ6 , KC_NO }, \
/* 7 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , KC_NO , KP7 , KC_NO , KC_NO } \
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
/* 0 */ { KC_NO, KC_NO, KC0, KC_NO, KC_NO, KF0, KC_NO, KC_NO, KC_NO, KJ0, KK0, KC_NO, KM0, KN0, KO0, KC_NO, KQ0, KR0 }, \
/* 1 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KG1, KH1, KI1, KJ1, KK1, KL1, KM1, KC_NO, KO1, KP1, KC_NO, KC_NO }, \
/* 2 */ { KC_NO, KB2, KC_NO, KD2, KC_NO, KF2, KG2, KH2, KI2, KJ2, KK2, KL2, KM2, KC_NO, KO2, KC_NO, KC_NO, KC_NO }, \
/* 3 */ { KA3, KB3, KC_NO, KC_NO, KC_NO, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KC_NO, KO3, KC_NO, KC_NO, KC_NO }, \
/* 4 */ { KC_NO, KC_NO, KC4, KC_NO, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, KM4, KC_NO, KO4, KP4, KQ4, KR4 }, \
/* 5 */ { KC_NO, KC_NO, KC5, KC_NO, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5, KM5, KN5, KO5, KP5, KC_NO, KC_NO }, \
/* 6 */ { KC_NO, KC_NO, KC6, KC_NO, KC_NO, KF6, KG6, KC_NO, KI6, KJ6, KK6, KL6, KC_NO, KN6, KO6, KC_NO, KQ6, KC_NO }, \
/* 7 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KF7, KG7, KH7, KI7, KJ7, KK7, KL7, KM7, KN7, KC_NO, KP7, KC_NO, KC_NO } \
}
#define LAYOUT_tkl_jis( \
@@ -63,15 +63,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO3, KO1, \
KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KL0, KB3, KC6, \
KP4, KD2, KN6, KG0, KQ6, KH0, KI0, KN0, KM0, KP1, KC0, KQ0, KR0 \
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
/* 0 */ { KC_NO, KC_NO, KC0, KC_NO, KC_NO, KF0, KG0, KH0, KI0, KJ0, KK0, KL0, KM0, KN0, KO0, KC_NO, KQ0, KR0 }, \
/* 1 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KG1, KH1, KI1, KJ1, KK1, KL1, KM1, KC_NO, KO1, KP1, KC_NO, KC_NO }, \
/* 2 */ { KC_NO, KB2, KC_NO, KD2, KC_NO, KF2, KG2, KH2, KI2, KJ2, KK2, KL2, KM2, KC_NO, KO2, KC_NO, KC_NO, KC_NO }, \
/* 3 */ { KC_NO, KB3, KC_NO, KC_NO, KC_NO, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KC_NO, KO3, KC_NO, KC_NO, KC_NO }, \
/* 4 */ { KC_NO, KC_NO, KC4, KC_NO, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, KM4, KC_NO, KO4, KP4, KQ4, KR4 }, \
/* 5 */ { KC_NO, KC_NO, KC5, KC_NO, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5, KM5, KN5, KO5, KP5, KC_NO, KC_NO }, \
/* 6 */ { KC_NO, KC_NO, KC6, KC_NO, KC_NO, KF6, KG6, KC_NO, KI6, KJ6, KK6, KL6, KC_NO, KN6, KO6, KC_NO, KQ6, KC_NO }, \
/* 7 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KF7, KG7, KH7, KI7, KJ7, KK7, KL7, KK7, KL7, KO7, KP7, KC_NO, KC_NO } \
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
/* 0 */ { KC_NO, KC_NO, KC0, KC_NO, KC_NO, KF0, KG0, KH0, KI0, KJ0, KK0, KL0, KM0, KN0, KO0, KC_NO, KQ0, KR0 },\
/* 1 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KG1, KH1, KI1, KJ1, KK1, KL1, KM1, KC_NO, KO1, KP1, KC_NO, KC_NO },\
/* 2 */ { KC_NO, KB2, KC_NO, KD2, KC_NO, KF2, KG2, KH2, KI2, KJ2, KK2, KL2, KM2, KC_NO, KO2, KC_NO, KC_NO, KC_NO },\
/* 3 */ { KC_NO, KB3, KC_NO, KC_NO, KC_NO, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KC_NO, KO3, KC_NO, KC_NO, KC_NO },\
/* 4 */ { KC_NO, KC_NO, KC4, KC_NO, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, KM4, KC_NO, KO4, KP4, KQ4, KR4 },\
/* 5 */ { KC_NO, KC_NO, KC5, KC_NO, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5, KM5, KN5, KO5, KP5, KC_NO, KC_NO },\
/* 6 */ { KC_NO, KC_NO, KC6, KC_NO, KC_NO, KF6, KG6, KC_NO, KI6, KJ6, KK6, KL6, KC_NO, KN6, KO6, KC_NO, KQ6, KC_NO },\
/* 7 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KF7, KG7, KH7, KI7, KJ7, KK7, KL7, KK7, KL7, KO7, KP7, KC_NO, KC_NO } \
}
inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); }
@@ -79,4 +79,3 @@ inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
inline void ph_sclk_led_on(void) { DDRC |= (1<<5); PORTC &= ~(1<<5); }
inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
+57 -57
View File
@@ -35,12 +35,12 @@ static void select_row(uint8_t col);
__attribute__ ((weak))
void matrix_init_kb(void) {
matrix_init_user();
matrix_init_user();
}
__attribute__ ((weak))
void matrix_scan_kb(void) {
matrix_scan_user();
matrix_scan_user();
}
__attribute__ ((weak))
@@ -66,10 +66,10 @@ void matrix_init(void)
/* Column output pins */
DDRD |= 0b01111011;
/* Row input pins */
DDRC &= ~0b10000000;
DDRB &= ~0b01111111;
PORTC |= 0b10000000;
PORTB |= 0b01111111;
DDRC &= (unsigned char) ~0b00000000;
DDRB &= (unsigned char) ~0b11111111;
PORTC |= 0b00000000;
PORTB |= 0b11111111;
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
@@ -135,72 +135,72 @@ void matrix_print(void)
static matrix_row_t read_cols(void)
{
return
(PINB & (1 << 5) ? 0 : 1 << 0) |
(PINC & (1 << 7) ? 0 : 1 << 1) |
(PINB & (1 << 4) ? 0 : 1 << 2) |
(PINB & (1 << 6) ? 0 : 1 << 3) |
(PINB & (1 << 1) ? 0 : 1 << 4) |
(PINB & (1 << 0) ? 0 : 1 << 5) |
(PINB & (1 << 3) ? 0 : 1 << 6) |
(PINB & (1 << 2) ? 0 : 1 << 7);
(PINB & (1 << 5) ? 0 : (matrix_row_t) 1 << 0) |
(PINB & (1 << 7) ? 0 : (matrix_row_t) 1 << 1) |
(PINB & (1 << 4) ? 0 : (matrix_row_t) 1 << 2) |
(PINB & (1 << 6) ? 0 : (matrix_row_t) 1 << 3) |
(PINB & (1 << 1) ? 0 : (matrix_row_t) 1 << 4) |
(PINB & (1 << 2) ? 0 : (matrix_row_t) 1 << 5) |
(PINB & (1 << 3) ? 0 : (matrix_row_t) 1 << 6) |
(PINB & (1 << 0) ? 0 : (matrix_row_t) 1 << 7);
}
static void select_row(uint8_t col)
{
switch (col) {
case 0:
PORTD = (PORTD & ~0b01111011) | 0b00110011;
break;
case 1:
PORTD = (PORTD & ~0b01111011) | 0b01110000;
break;
case 2:
PORTD = (PORTD & ~0b01111011) | 0b00010011;
break;
case 3:
PORTD = (PORTD & ~0b01111011) | 0b01101000;
break;
case 4:
PORTD = (PORTD & ~0b01111011) | 0b00001011;
break;
case 5:
PORTD = (PORTD & ~0b01111011) | 0b00111011;
break;
case 6:
PORTD = (PORTD & ~0b01111011) | 0b01111000;
break;
case 7:
PORTD = (PORTD & ~0b01111011) | 0b01100001;
break;
case 8:
PORTD = (PORTD & ~0b01111011) | 0b01101001;
break;
case 9:
PORTD = (PORTD & ~0b01111011) | 0b01110001;
break;
case 10:
PORTD = (PORTD & ~0b01111011) | 0b01101010;
break;
case 11:
PORTD = (PORTD & ~0b01111011) | 0b01100010;
break;
case 12:
PORTD = (PORTD & ~0b01111011) | 0b01111001;
break;
case 13:
PORTD = (PORTD & ~0b01111011) | 0b01100000;
break;
case 14:
case 1:
PORTD = (PORTD & ~0b01111011) | 0b01000011;
break;
case 15:
case 2:
PORTD = (PORTD & ~0b01111011) | 0b01100000;
break;
case 3:
PORTD = (PORTD & ~0b01111011) | 0b01111001;
break;
case 4:
PORTD = (PORTD & ~0b01111011) | 0b01100010;
break;
case 5:
PORTD = (PORTD & ~0b01111011) | 0b01101010;
break;
case 6:
PORTD = (PORTD & ~0b01111011) | 0b01110001;
break;
case 7:
PORTD = (PORTD & ~0b01111011) | 0b01101001;
break;
case 8:
PORTD = (PORTD & ~0b01111011) | 0b01100001;
break;
case 9:
PORTD = (PORTD & ~0b01111011) | 0b01111000;
break;
case 10:
PORTD = (PORTD & ~0b01111011) | 0b00011011;
break;
case 16:
case 11:
PORTD = (PORTD & ~0b01111011) | 0b00100011;
break;
case 17:
case 12:
PORTD = (PORTD & ~0b01111011) | 0b00101011;
break;
case 13:
PORTD = (PORTD & ~0b01111011) | 0b01110000;
break;
case 14:
PORTD = (PORTD & ~0b01111011) | 0b00001011;
break;
case 15:
PORTD = (PORTD & ~0b01111011) | 0b01101000;
break;
case 16:
PORTD = (PORTD & ~0b01111011) | 0b00000011;
break;
case 17:
PORTD = (PORTD & ~0b01111011) | 0b00111011;
break;
}
}
+63 -6
View File
@@ -46,8 +46,7 @@
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
// ws2812 options
#define RGB_DI_PIN C2 // pin the DI on the ws2812 is hooked-up to
// RGB Matrix
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
@@ -58,7 +57,65 @@
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
#define RGBLED_NUM 14 // number of LEDs
#define RGBLIGHT_HUE_STEP 12 // units to step when in/decreasing hue
#define RGBLIGHT_SAT_STEP 12 // units to step when in/decresing saturation
#define RGBLIGHT_VAL_STEP 12 // units to step when in/decreasing value (brightness)
#define RGB_DI_PIN C2 // pin the DI on the ws2812 is hooked-up to
#define RGBLED_NUM 51 // number of LEDs
#ifdef RGB_MATRIX_ENABLE
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 125 // limits maximum brightness of LEDs to 125 out of 255. Higher may cause the controller to crash.
#define RGB_MATRIX_HUE_STEP 8
#define RGB_MATRIX_SAT_STEP 8
#define RGB_MATRIX_VAL_STEP 8
#define RGB_MATRIX_SPD_STEP 10
// 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
#endif
@@ -15,3 +15,25 @@
*/
#include "quark_lp.h"
#ifdef RGB_MATRIX_ENABLE
led_config_t g_led_config = { {
// Key Matrix to LED Index
{ 11, 10, 9, 8, 7, NO_LED, 6, NO_LED, 5, NO_LED, 4, 3, 2, 1, 0 },
{ 12, 13, 14, 15, 16, NO_LED, 17, NO_LED, 18, NO_LED, 19, 20, 21, 22, 23 },
{ 35, 34, 33, 32, 31, NO_LED, 30, NO_LED, 29, NO_LED, 28, 27, 26, 25, 24 },
{ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 }
}, {
// LED Index to Physical Position
{ 244, 0 }, { 224, 0 }, { 203, 0 }, { 183, 0 }, { 163, 0 }, { 143, 0 }, { 122, 0 }, { 102, 0 }, { 81, 0 }, { 61, 0 }, { 41, 0 }, { 20, 0 },
{ 20, 21 }, { 41, 21 }, { 61, 21 }, { 81, 21 }, { 102, 21 }, { 122, 21 }, { 143, 21 }, { 163, 21 }, { 183, 21 }, { 203, 21 }, { 224, 21 }, { 244, 21 },
{ 244, 43 }, { 224, 43 }, { 203, 43 }, { 183, 43 }, { 163, 43 }, { 143, 43 }, { 122, 43 }, { 102, 43 }, { 81, 43 }, { 61, 43 }, { 41, 43 }, { 20, 43 },
{ 20, 64 }, { 41, 64 }, { 61, 64 }, { 81, 64 }, { 102, 64 }, { 112, 64 }, { 122, 64 }, { 132, 64 }, { 143, 64 }, { 153, 64 }, { 163, 64 }, { 183, 64 }, { 203, 64 }, { 224, 64 }, { 244, 64 }
}, {
// LED Index to Flag
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
} };
#endif
+2 -1
View File
@@ -14,5 +14,6 @@ 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
@@ -1,4 +1,4 @@
/* Copyright 2021 Tybera
/* Copyright 2020 Koichi Katano
*
* This 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 <http://www.gnu.org/licenses/>.
*/
#include "default_rgb.h"
#include "ciel.h"
+61
View File
@@ -0,0 +1,61 @@
/* Copyright 2020 Koichi Katano
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
#define LAYOUT_60_ansi_split_bs_rshift( \
k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, \
k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k114, \
k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k213, \
k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k313, k314, \
k400, k401, k402, k407, k410, k411, k413, k414 \
) { \
{ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014 }, \
{ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, KC_NO, k114 }, \
{ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, KC_NO, k213, KC_NO}, \
{ k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, KC_NO, k313, k314 }, \
{ k400, k401, k402, KC_NO, KC_NO, KC_NO, KC_NO, k407, KC_NO, KC_NO, k410, k411, KC_NO, k413, k414 } \
}
#define LAYOUT_60_ansi( \
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, k114, \
k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k213, \
k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k313, \
k400, k401, k402, k407, k410, k411, k413, k414 \
) { \
{ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, KC_NO}, \
{ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, KC_NO, k114 }, \
{ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, KC_NO, k213, KC_NO}, \
{ k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, KC_NO, k313, KC_NO}, \
{ k400, k401, k402, KC_NO, KC_NO, KC_NO, KC_NO, k407, KC_NO, KC_NO, k410, k411, KC_NO, k413, k414 } \
}
#define LAYOUT_60_tsangan_hhkb( \
k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, \
k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k114, \
k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k213, \
k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k313, k314, \
k400, k401, k402, k407, k411, k413, k414 \
) { \
{ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014 }, \
{ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, KC_NO, k114 }, \
{ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, KC_NO, k213, KC_NO}, \
{ k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, KC_NO, k313, k314 }, \
{ k400, k401, k402, KC_NO, KC_NO, KC_NO, KC_NO, k407, KC_NO, KC_NO, KC_NO, k411, KC_NO, k413, k414 } \
}
+106
View File
@@ -0,0 +1,106 @@
/*
Copyright 2020 Koichi Katano, 2022 Ramon Imbao
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC41C
#define PRODUCT_ID 0x0001
#define DEVICE_VER 0x0001
#define MANUFACTURER ChickenMan
#define PRODUCT Ciel
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 15
/*
* 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 { C5, C4, B0, C7, B7 }
#define MATRIX_COL_PINS { C6, B6, B5, B4, B3, B2, B1, D6, D5, D4, D3, D2, D1, D0, C2 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* 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
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
* This is useful for the Windows task manager shortcut (ctrl+shift+esc).
*/
//#define GRAVE_ESC_CTRL_OVERRIDE
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* 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
/* Bootmagic Lite key configuration */
//#define BOOTMAGIC_LITE_ROW 0
//#define BOOTMAGIC_LITE_COLUMN 0
+217
View File
@@ -0,0 +1,217 @@
{
"keyboard_name": "Ciel",
"url": "",
"maintainer": "ramonimbao",
"layouts": {
"LAYOUT_60_ansi_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 },
{ "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.25 },
{ "x":1.25, "y":4, "w":1.25 },
{ "x":2.5, "y":4, "w":1.25 },
{ "x":3.75, "y":4, "w":6.25 },
{ "x":10, "y":4, "w":1.25 },
{ "x":11.25, "y":4, "w":1.25 },
{ "x":12.5, "y":4, "w":1.25 },
{ "x":13.75, "y":4, "w":1.25 }
]
},
"LAYOUT_60_ansi": {
"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":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":2.75 },
{ "x":0, "y":4, "w":1.25 },
{ "x":1.25, "y":4, "w":1.25 },
{ "x":2.5, "y":4, "w":1.25 },
{ "x":3.75, "y":4, "w":6.25 },
{ "x":10, "y":4, "w":1.25 },
{ "x":11.25, "y":4, "w":1.25 },
{ "x":12.5, "y":4, "w":1.25 },
{ "x":13.75, "y":4, "w":1.25 }
]
},
"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 }
]
}
}
}
@@ -0,0 +1,38 @@
/* Copyright 2020 Koichi Katano
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layer_names {
_BASE,
_FN
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_60_ansi_split_bs_rshift(
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_GRV, 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(_FN),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
),
[_FN] = LAYOUT_60_ansi_split_bs_rshift(
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
)
};
@@ -0,0 +1 @@
# The default keymap for Bakeneko 60
@@ -0,0 +1,54 @@
/* Copyright 2020 Koichi Katano
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layer_names {
_L0,
_L1,
_L2,
_L3
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_L0] = LAYOUT_60_ansi_split_bs_rshift(
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_GRV, 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(_L1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
),
[_L1] = LAYOUT_60_ansi_split_bs_rshift(
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
[_L2] = LAYOUT_60_ansi_split_bs_rshift(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
[_L3] = LAYOUT_60_ansi_split_bs_rshift(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
)
};
@@ -0,0 +1 @@
VIA_ENABLE = yes
+23
View File
@@ -0,0 +1,23 @@
# Ciel
![img](https://i.imgur.com/8JlLbefl.png)
The Ciel is a CNC'ed 60% Bakeneko with a brass internal weight.
Group Buy ran October 7th to October 31st in 2021. Fulfilled early March.
* Keyboard Maintainer: [Ramon Imbao](https://github.com/ramonimbao)
* Hardware Supported: ATmega32u2
* Hardware Availability: [GB page](https://geekhack.org/index.php?topic=114845.0), [ChickenMan's Discord](https://discord.gg/6MeZAxp2RP)
Make example for this keyboard (after setting up your build environment):
make chickenman/ciel:default
To get to the bootloader, simply press the reset button located at the back of the PCB. You can then flash new firmware onto it.
Flashing example for this keyboard:
make chickenman/ciel: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).
+20
View File
@@ -0,0 +1,20 @@
# MCU name
MCU = atmega32u2
# Bootloader selection
BOOTLOADER = atmel-dfu
# 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 = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
LAYOUTS = 60_ansi_split_bs_rshift 60_ansi 60_tsangan_hhkb
@@ -21,8 +21,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_DEL, MO(1), KC_LPRN, KC_RPRN, KC_PSLS, KC_PAST,
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_P7, KC_P8, KC_P9, KC_PMNS,
KC_LCTL, 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_NO, KC_ENT, KC_UP, KC_P4, KC_P5, KC_P6, KC_PPLS,
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_RSFT, KC_LEFT, KC_DOWN, KC_RGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, 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_UP, KC_P4, KC_P5, KC_P6, KC_PPLS,
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_LEFT, KC_DOWN, KC_RGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_P0, KC_PDOT
),
@@ -0,0 +1,61 @@
/*
Copyright 2021 8bits4ever
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFFFF
#define PRODUCT_ID 0x0000
#define DEVICE_VER 0x0001
#define MANUFACTURER 8bits4ever
#define PRODUCT MiSTress1200
/* key matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 16
/*
* 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 { F7, F6, F5, F4, F1, F0, B1, B3 }
#define MATRIX_COL_PINS { D0, D1, C7, D6, B7, B6, B5, B4, E6, D7, C6, D4, B2, D5, D3, D2 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION ROW2COL
#define LED_CAPS_LOCK_PIN B0
#define LED_PIN_ON_STATE 0
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
@@ -0,0 +1,19 @@
# MCU name
MCU = atmega16u4
# Bootloader selection
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = no # 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
LTO_ENABLE = yes
+8 -3
View File
@@ -3,12 +3,12 @@
Modification of the Model-M 101 membrane adapter (converter/modelm101) to work with Amiga 1200 keyboard (and possibly Amiga 500/600 too).
The adapter allows using the original Amiga keyboard as a USB input device, either with a desktop PC or a R-Pi/FPGA board hosted inside the Amiga case.
Available for two micros: AT90USB1286 (Teensy 2++ board), and ATmega32u4 (MiSS-1200 FPGA board).
Available for three micros: AT90USB1286 (Teensy 2++ board), Atmega32u4 (MiSS-1200 FPGA board), and Atmega16u4 (MiSTress-1200 conversion kit).
A small PCB adapter is needed for connecting the keyboard membrane to the Teensy 2.0++ board. A very simple example of such a board is available here:
https://github.com/8bits4ever/A1200-Keyboard-Adapter
The MiSS-1200 FPGA board features a dedicated connector for the Amiga 1200 membrane keyboard.
The MiSS-1200 FPGA board and MiSTress-1200 conversion kit both feature a dedicated connector for the Amiga 1200 membrane keyboard.
Files have been modified in accordance to the Amiga keyboard layout and features. A second layer has been implemented (momentary toggle "Help" key) to access unexistent keys (like F11 and F12). This is a work in progress.
@@ -25,7 +25,7 @@ Status LEDs: CapsLock +5V
Pins: B6 5V
```
Pins assignment MiSS-1200 board (ATmega32u4):
Pins assignment MiSS-1200 board (ATmega32u4) and MiSTress-1200 (Atmega16u4):
```
Columns: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Pins: D0 D1 C7 D6 B7 B6 B5 B4 E6 D7 C6 D4 B2 D5 D3 D2
@@ -51,5 +51,10 @@ Or:
make converter/a1200/miss1200:default
Or:
make converter/a1200/mistress1200: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).
@@ -0,0 +1,110 @@
/* Copyright 2022 CrimsonKeyboards
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0xC18B
#define DEVICE_VER 0x0001
#define MANUFACTURER CrimsonKeyboards
#define PRODUCT Resume1800
/* key matrix size */
#define MATRIX_ROWS 6
#define MATRIX_COLS 20
/*
* 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 { A5, A0, A1, B1, B2, B0 }
#define MATRIX_COL_PINS { A2, B3, A3, B4, A4, D1, D5, D6, A6, A7, C7, C6, C5, C4, D7, C3, C2, C1, C0, D0 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
#define USB_MAX_POWER_CONSUMPTION 100
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* Set LED indicator pins */
#define LED_NUM_LOCK_PIN B5
#define LED_CAPS_LOCK_PIN B6
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* 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
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
*/
// #define GRAVE_ESC_CTRL_OVERRIDE
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* 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
/* Bootmagic Lite key configuration */
//#define BOOTMAGIC_LITE_ROW 0
//#define BOOTMAGIC_LITE_COLUMN 0
@@ -0,0 +1,27 @@
{
"keyboard_name": "Resume1800",
"url": "",
"maintainer": "CrimsonKeyboards",
"layouts": {
"LAYOUT_resume1800_ansi_all": {
"layout": [
{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0},{"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"F13", "x":13, "y":0}, {"label":"F14", "x":14, "y":0}, {"label":"PrtSc", "x":15, "y":0}, {"label":"Scroll Lock", "x":16, "y":0}, {"label":"Pause", "x":17, "y":0}, {"label":"Insert", "x":18, "y":0}, {"label":"End", "x":19, "y":0},
{"label":"~", "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":"Backspace", "x":13, "y":1, "w":2}, {"label":"Delete", "x":15, "y":1}, {"label":"Num Lock", "x":16, "y":1}, {"label":"/", "x":17, "y":1}, {"label":"*", "x":18, "y":1}, {"label":"-", "x":19, "y":1},
{"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"Home", "x":15, "y":2}, {"label":"7", "x":16, "y":2}, {"label":"8", "x":17, "y":2}, {"label":"9", "x":18, "y":2}, {"label":"+", "x":19, "y":2},
{"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"label":"Enter", "x":12.75, "y":3, "w":2.25}, {"label":"PgUp", "x":15, "y":3}, {"label":"4", "x":16, "y":3}, {"label":"5", "x":17, "y":3}, {"label":"6", "x":18, "y":3}, {"label":"=", "x":19, "y":3},
{"label":"Shift", "x":0, "y":4, "w":2.25}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"PgDn", "x":15, "y":4}, {"label":"1", "x":16, "y":4}, {"label":"2", "x":17, "y":4}, {"label":"3", "x":18, "y":4}, {"label":"Enter", "x":19, "y":4},
{"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"label":"Space", "x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5}, {"label":"Fn", "x":11, "y":5}, {"label":"Ctrl", "x":12, "y":5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}, {"label":"00", "x":16, "y":5}, {"label":"0", "x":17, "y":5}, {"label":".", "x":18, "y":5}, {"label":"Bksp", "x":19, "y":5}
]
}
"LAYOUT_resume1800_iso_all": {
"layout": [
{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"F13", "x":13, "y":0}, {"label":"F14", "x":14, "y":0}, {"label":"PrtSc", "x":15, "y":0}, {"label":"Scroll Lock", "x":16, "y":0}, {"label":"Pause", "x":17, "y":0}, {"label":"Insert", "x":18, "y":0}, {"label":"End", "x":19, "y":0},
{"label":"~", "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":"Backspace", "x":13, "y":1, "w":2}, {"label":"Delete", "x":15, "y":1}, {"label":"Num Lock", "x":16, "y":1}, {"label":"/", "x":17, "y":1}, {"label":"*", "x":18, "y":1}, {"label":"-", "x":19, "y":1},
{"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2}, {"label":"Home", "x":15, "y":2}, {"label":"7", "x":16, "y":2}, {"label":"8", "x":17, "y":2}, {"label":"9", "x":18, "y":2}, {"label":"+", "x":19, "y":2},
{"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"label":"|", "x":12.75, "y":3}, {"label":"PgUp", "x":15, "y":3}, {"label":"4", "x":16, "y":3}, {"label":"5", "x":17, "y":3}, {"label":"6", "x":18, "y":3}, {"label":"=", "x":19, "y":3},
{"label":"Shift", "x":0, "y":4, "w":1.25}, {"label":"~", "x":1.25, "y":4}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"PgDn", "x":15, "y":4}, {"label":"1", "x":16, "y":4}, {"label":"2", "x":17, "y":4}, {"label":"3", "x":18, "y":4}, {"label":"Enter", "x":19, "y":4},
{"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5}, {"label":"Fn", "x":11, "y":5}, {"label":"Ctrl", "x":12, "y":5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}, {"label":"00", "x":16, "y":5}, {"label":"0", "x":17, "y":5}, {"label":".", "x":18, "y":5}, {"label":"Bksp", "x":19, "y":5}
]
}
}
}
@@ -0,0 +1,50 @@
/* Copyright 2022 CrimsonKeyboards
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum custom_keycodes {
KC_00 = SAFE_RANGE, //Double Zero
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_00:
if (record->event.pressed) {
// when keycode KC_00 is pressed
SEND_STRING("00");
} else {
// when keycode KC_00 is released
}
break;
}
return true;
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_resume1800_iso_all(
/* Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 Print Scroll Lock Pause Insert End */
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_F14, KC_PRINT_SCREEN, KC_SCRL, KC_PAUS, KC_INS, KC_END,
/* ~ 1 2 3 4 5 6 7 8 9 0 - = Backspace Delete Num Lock Num / Num * Num - */
KC_GRAVE, 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_DELETE, KC_NUM_LOCK, KC_PSLS, KC_PAST, KC_PMNS,
/* Tab Q W E R T Y U I O P [ ] ISO Enter Home Num 7 Num 8 Num 9 N/A */
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_HOME, KC_P7, KC_P8, KC_P9, KC_TRNS,
/* Caps A S D F G H J K L ; ' ISO \ Page Up Num 4 Num 5 Num 6 Num + */
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_P4, KC_P5, KC_P6, KC_PPLS,
/* Left Shift N/A Z X C V B N M , . / R Shift Up Page Down Num 1 Num 2 Num 3 N/A */
KC_LSFT, KC_TRNS, 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_P1, KC_P2, KC_P3, KC_TRNS,
/* L Control Windows L Alt Space R Alt Fn R Control Left Down Right Num 00 Num 0 Num . Num Enter */
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_ALGR, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_00, KC_P0, KC_PDOT, KC_PENT)
};
@@ -0,0 +1,50 @@
/* Copyright 2022 CrimsonKeyboards
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum custom_keycodes {
KC_00 = SAFE_RANGE, //Double Zero
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_00:
if (record->event.pressed) {
// when keycode KC_00 is pressed
SEND_STRING("00");
} else {
// when keycode KC_00 is released
}
break;
}
return true;
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_resume1800_ansi_all(
/* Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 Print Scroll Lock Pause Insert End */
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_F14, KC_PSCR, KC_SCRL, KC_PAUS, KC_INS, KC_END,
/* ~ 1 2 3 4 5 6 7 8 9 0 - = Backspace Delete Num Lock Num / Num * Num - */
KC_GRAVE, 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_DELETE, KC_NUM_LOCK, KC_PSLS, KC_PAST, KC_PMNS,
/* Tab Q W E R T Y U I O P [ ] \ Home Num 7 Num 8 Num 9 N/A */
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_P7, KC_P8, KC_P9, KC_TRNS,
/* Caps A S D F G H J K L ; ' Enter Page Up Num 4 Num 5 Num 6 Num + */
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_P4, KC_P5, KC_P6, KC_PPLS,
/* Left Shift Z X C V B N M , . / R Shift Up Page Down Num 1 Num 2 Num 3 N/A */
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_P1, KC_P2, KC_P3, KC_TRNS,
/* L Control Windows L Alt Space R Alt Fn R Control Left Down Right Num 00 Num 0 Num . Num Enter */
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_00, KC_P0, KC_PDOT, KC_PENT)
};
@@ -0,0 +1,50 @@
/* Copyright 2022 CrimsonKeyboards
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum custom_keycodes {
KC_00 = SAFE_RANGE, //Double Zero
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_00:
if (record->event.pressed) {
// when keycode KC_00 is pressed
SEND_STRING("00");
} else {
// when keycode KC_00 is released
}
break;
}
return true;
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_resume1800_iso_all(
/* Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 Print Scroll Lock Pause Insert End */
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_F14, KC_PSCR, KC_SCRL, KC_PAUS, KC_INS, KC_END,
/* ~ 1 2 3 4 5 6 7 8 9 0 - = Backspace Delete Num Lock Num / Num * Num - */
KC_GRAVE, 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_DELETE, KC_NUM_LOCK, KC_PSLS, KC_PAST, KC_PMNS,
/* Tab Q W E R T Y U I O P [ ] Home Num 7 Num 8 Num 9 N/A */
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_P7, KC_P8, KC_P9, KC_TRNS,
/* Caps A S D F G H J K L ; ' ISO # ISO Enter Page Up Num 4 Num 5 Num 6 Num + */
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_P4, KC_P5, KC_P6, KC_PPLS,
/* Left Shift ISO \ Z X C V B N M , . / R Shift Up Page Down Num 1 Num 2 Num 3 N/A */
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_P1, KC_P2, KC_P3, KC_TRNS,
/* L Control Windows L Alt Space R Alt Fn R Control Left Down Right Num 00 Num 0 Num . Num Enter */
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_ALGR, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_00, KC_P0, KC_PDOT, KC_PENT)
};

Some files were not shown because too many files have changed in this diff Show More