forked from mirror/qmk_firmware
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -198,15 +198,17 @@ From here, you should have a working keyboard once you program a firmware. Befor
|
||||
|
||||
To start out, download [the firmware](https://github.com/qmk/qmk_firmware/) - we'll be using my (Jack's) fork of TMK called QMK/Quantum. We'll be doing a lot from the Terminal/command prompt, so get that open, along with a decent text editor like [Sublime Text](http://www.sublimetext.com/) (paid) or [Visual Studio Code](https://code.visualstudio.com) (free).
|
||||
|
||||
The first thing we're going to do is create a new project using the script in the root directory of the firmware. In your terminal, run this command with `<project_name>` replaced by the name of your project - it'll need to be different from any other project in the `keyboards/` folder:
|
||||
The first thing we're going to do is create a new keyboard. In your terminal, run this command, which will ask you some questions and generate a basic keyboard project:
|
||||
|
||||
```
|
||||
util/new_project.sh <project_name>
|
||||
./util/new_keyboard.sh
|
||||
```
|
||||
|
||||
You'll want to navigate to the `keyboards/<project_name>/` folder by typing, like the print-out from the script specifies:
|
||||
|
||||
cd keyboards/<project_name>
|
||||
```
|
||||
cd keyboards/<project_name>
|
||||
```
|
||||
|
||||
### `config.h`
|
||||
|
||||
@@ -326,7 +328,7 @@ Carefully flip your keyboard over, open up a new text document, and try typing -
|
||||
2. Check the solder joints on the diode - if the diode is loose, part of your row may register, while the other may not.
|
||||
3. Check the solder joints on the columns - if your column wiring is loose, part or all of the column may not work.
|
||||
4. Check the solder joints on both sides of the wires going to/from the Teensy - the wires need to be fully soldered and connect to both sides.
|
||||
5. Check the <project_name>.h file for errors and incorrectly placed `KC_NO`s - if you're unsure where they should be, instead duplicate a k*xy* variable.
|
||||
5. Check the `<project_name>.h` file for errors and incorrectly placed `KC_NO`s - if you're unsure where they should be, instead duplicate a k*xy* variable.
|
||||
6. Check to make sure you actually compiled the firmware and flashed the Teensy correctly. Unless you got error messages in the terminal, or a pop-up during flashing, you probably did everything correctly.
|
||||
|
||||
If you've done all of these things, keep in mind that sometimes you might have had multiple things affecting the keyswitch, so it doesn't hurt to test the keyswitch by shorting it out at the end.
|
||||
@@ -335,4 +337,4 @@ If you've done all of these things, keep in mind that sometimes you might have h
|
||||
|
||||
Now that you have a working board, it's time to get things in their permanent positions. I've often used liberal amounts of hot glue to secure and insulate things, so if that's your style, start spreading that stuff like butter. Otherwise, double-sided tape is always an elegant solution, and electrical tape is a distant second. Due to the nature of these builds, a lot of this part is up to you and how you planned (or didn't plan) things out.
|
||||
|
||||
There are a lot of possibilities inside the firmware - explore [docs.qmk.fm](http://docs.qmk.fm) for a full feature list, and dive into the different project (Planck, Clueboard, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)
|
||||
There are a lot of possibilities inside the firmware - explore [docs.qmk.fm](http://docs.qmk.fm) for a full feature list, and dive into the different keyboards (Planck, Clueboard, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)
|
||||
|
||||
@@ -6,14 +6,26 @@ If you have not yet you should read the [Keyboard Guidelines](hardware_keyboard_
|
||||
|
||||
## Adding Your AVR Keyboard to QMK
|
||||
|
||||
QMK has a number of features to simplify working with AVR keyboards. For most keyboards you don't have to write a single line of code. To get started run the `util/new_project.sh` script:
|
||||
QMK has a number of features to simplify working with AVR keyboards. For most keyboards you don't have to write a single line of code. To get started, run the `util/new_keyboard.sh` script:
|
||||
|
||||
```bash
|
||||
$ util/new_project.sh my_awesome_keyboard
|
||||
######################################################
|
||||
# /keyboards/my_awesome_keyboard project created. To start
|
||||
# working on things, cd into keyboards/my_awesome_keyboard
|
||||
######################################################
|
||||
```
|
||||
$ ./util/new_keyboard.sh
|
||||
Generating a new QMK keyboard directory
|
||||
|
||||
Keyboard Name: mycoolkb
|
||||
Keyboard Type [avr]:
|
||||
Your Name [John Smith]:
|
||||
|
||||
Copying base template files... done
|
||||
Copying avr template files... done
|
||||
Renaming keyboard files... done
|
||||
Replacing %KEYBOARD% with mycoolkb... done
|
||||
Replacing %YOUR_NAME% with John Smith... done
|
||||
|
||||
Created a new keyboard called mycoolkb.
|
||||
|
||||
To start working on things, cd into keyboards/mycoolkb,
|
||||
or open the directory in your favourite text editor.
|
||||
```
|
||||
|
||||
This will create all the files needed to support your new keyboard, and populate the settings with default values. Now you just need to customize it for your keyboard.
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
Setting up your ARM based PCB is a little more involved than an Atmel MCU, but is easy enough. Start by using `util/new_project.sh <keyboard>` to create a new project:
|
||||
Setting up your ARM based PCB is a little more involved than an Atmel MCU, but is easy enough. Start by running `util/new_keyboard.sh`:
|
||||
|
||||
```
|
||||
$ util/new_project.sh simontester
|
||||
######################################################
|
||||
# /keyboards/simontester project created. To start
|
||||
# working on things, cd into keyboards/simontester
|
||||
######################################################
|
||||
$ ./util/new_keyboard.sh
|
||||
Generating a new QMK keyboard directory
|
||||
|
||||
Keyboard Name: mycoolkb
|
||||
Keyboard Type [avr]:
|
||||
Your Name [John Smith]:
|
||||
|
||||
Copying base template files... done
|
||||
Copying avr template files... done
|
||||
Renaming keyboard files... done
|
||||
Replacing %KEYBOARD% with mycoolkb... done
|
||||
Replacing %YOUR_NAME% with John Smith... done
|
||||
|
||||
Created a new keyboard called mycoolkb.
|
||||
|
||||
To start working on things, cd into keyboards/mycoolkb,
|
||||
or open the directory in your favourite text editor.
|
||||
```
|
||||
|
||||
|
||||
|
||||
# END OF NEW ARM DOC, OLD ATMEL DOC FOLLOWS
|
||||
|
||||
## `/keyboards/<keyboard>/config.h`
|
||||
|
||||
32
docs/zh-cn/README.md
Normal file
32
docs/zh-cn/README.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# QMK机械键盘固件
|
||||
|
||||
[](https://github.com/qmk/qmk_firmware/tags)
|
||||
[](https://travis-ci.org/qmk/qmk_firmware)
|
||||
[](https://discord.gg/Uq7gcHh)
|
||||
[](https://docs.qmk.fm)
|
||||
[](https://github.com/qmk/qmk_firmware/pulse/monthly)
|
||||
[](https://github.com/qmk/qmk_firmware/)
|
||||
|
||||
## 什么是 QMK 固件?
|
||||
|
||||
QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开源软件,包括 QMK 固件, QMK 工具箱, qmk.fm网站, 和这些文档。QMK 固件是一个基于[tmk\_keyboard](http://github.com/tmk/tmk_keyboard)的键盘固件,它在爱特梅尔AVR微控制器实现一些有用的功能,确切地说, 是在 [OLKB product line](http://olkb.com), 在 [ErgoDox EZ](http://www.ergodox-ez.com) 键盘, 和 [Clueboard product line](http://clueboard.co/). 上。它被移植到使用ChibiOS的ARM芯片上. 它可以在飞线键盘或定制PCB键盘中发挥功能.
|
||||
|
||||
## 如何得到它
|
||||
|
||||
如果你打算贡献布局, 键盘, 或者其他QMK特性, 一下是最简单的方法:[从Github获得repo分支](https://github.com/qmk/qmk_firmware#fork-destination-box), 并克隆你的repo到本地进行编辑,推送,然后从你的分支打开 [Pull Request](https://github.com/qmk/qmk_firmware/pulls).
|
||||
|
||||
此外, 你也可以直接下载 ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), 或者从git克隆 (`git@github.com:qmk/qmk_firmware.git`), 或 https (`https://github.com/qmk/qmk_firmware.git`).
|
||||
|
||||
## 如何编译
|
||||
|
||||
在你能编译之前, 你需要[部署环境](getting_started_build_tools.md) 用于 AVR or/and ARM 开发。完成后, 你可以使用 `make` 命令来编译一个键盘和布局使用以下命令:
|
||||
|
||||
make planck/rev4:default
|
||||
|
||||
这将建立 `planck`的`rev4` 修订版本并使用 `default`布局。并非所有键盘都有修订版本 (也叫做子项目或文件夹),在此情况下,修订版本可以省略,如下:
|
||||
|
||||
make preonic:default
|
||||
|
||||
## 如何定制
|
||||
|
||||
QMK 有许多 [特性](features.md)来探索,也有很多 [参考文档](http://docs.qmk.fm) 供您发掘。你可以通过修改 [布局](keymap.md)和[键码](keycodes.md)来利用许多特性。
|
||||
106
docs/zh-cn/_summary.md
Normal file
106
docs/zh-cn/_summary.md
Normal file
@@ -0,0 +1,106 @@
|
||||
* [完全菜鸟指南](newbs.md)
|
||||
* [入门](newbs_getting_started.md)
|
||||
* [构建你的第一个固件](newbs_building_firmware.md)
|
||||
* [刷新固件](newbs_flashing.md)
|
||||
* [测试和调试](newbs_testing_debugging.md)
|
||||
* [Git最佳实践](newbs_best_practices.md)
|
||||
* [学习资源](newbs_learn_more_resources.md)
|
||||
|
||||
* [QMK基础](README.md)
|
||||
* [QMK 简介](getting_started_introduction.md)
|
||||
* [贡献 QMK](contributing.md)
|
||||
* [如何使用Github](getting_started_github.md)
|
||||
* [获得帮助](getting_started_getting_help.md)
|
||||
|
||||
* [问题解答](faq.md)
|
||||
* [一般问题](faq_general.md)
|
||||
* [构建/编译QMK](faq_build.md)
|
||||
* [调试/故障排除 QMK](faq_debug.md)
|
||||
* [键盘布局](faq_keymap.md)
|
||||
|
||||
* 详细指南
|
||||
* [安装构建工具](getting_started_build_tools.md)
|
||||
* [流浪者指南](getting_started_vagrant.md)
|
||||
* [构建/编译指令](getting_started_make_guide.md)
|
||||
* [刷新固件](flashing.md)
|
||||
* [定制功能](custom_quantum_functions.md)
|
||||
* [布局概述](keymap.md)
|
||||
|
||||
* [硬件](hardware.md)
|
||||
* [AVR 处理器](hardware_avr.md)
|
||||
* [驱动](hardware_drivers.md)
|
||||
|
||||
* 参考
|
||||
* [键盘指南](hardware_keyboard_guidelines.md)
|
||||
* [配置选项](config_options.md)
|
||||
* [键码](keycodes.md)
|
||||
* [记录最佳实践](documentation_best_practices.md)
|
||||
* [文档指南](documentation_templates.md)
|
||||
* [词汇表](reference_glossary.md)
|
||||
* [单元测试](unit_testing.md)
|
||||
* [有用的功能](ref_functions.md)
|
||||
* [配置器支持](reference_configurator_support.md)
|
||||
* [info.json 格式](reference_info_json.md)
|
||||
|
||||
* [特性](features.md)
|
||||
* [基本键码](keycodes_basic.md)
|
||||
* [US ANSI 控制键](keycodes_us_ansi_shifted.md)
|
||||
* [量子键码](quantum_keycodes.md)
|
||||
* [高级键码](feature_advanced_keycodes.md)
|
||||
* [音频](feature_audio.md)
|
||||
* [自动控制](feature_auto_shift.md)
|
||||
* [背光](feature_backlight.md)
|
||||
* [蓝牙](feature_bluetooth.md)
|
||||
* [Bootmagic](feature_bootmagic.md)
|
||||
* [组合](feature_combo)
|
||||
* [命令](feature_command.md)
|
||||
* [动态宏指令](feature_dynamic_macros.md)
|
||||
* [编码器](feature_encoders.md)
|
||||
* [Grave Escape](feature_grave_esc.md)
|
||||
* [键锁](feature_key_lock.md)
|
||||
* [层](feature_layouts.md)
|
||||
* [引导键](feature_leader_key.md)
|
||||
* [LED 阵列](feature_led_matrix.md)
|
||||
* [宏指令](feature_macros.md)
|
||||
* [鼠标键](feature_mouse_keys.md)
|
||||
* [一键功能](feature_advanced_keycodes.md#one-shot-keys)
|
||||
* [指针设备](feature_pointing_device.md)
|
||||
* [PS/2 鼠标](feature_ps2_mouse.md)
|
||||
* [RGB 光](feature_rgblight.md)
|
||||
* [RGB 矩阵](feature_rgb_matrix.md)
|
||||
* [空格候补换挡](feature_space_cadet_shift.md)
|
||||
* [空格候补换挡回车](feature_space_cadet_shift_enter.md)
|
||||
* [速录机](feature_stenography.md)
|
||||
* [换手](feature_swap_hands.md)
|
||||
* [踢踏舞](feature_tap_dance.md)
|
||||
* [终端](feature_terminal.md)
|
||||
* [热敏打印机](feature_thermal_printer.md)
|
||||
* [Unicode](feature_unicode.md)
|
||||
* [用户空间](feature_userspace.md)
|
||||
* [速度键](feature_velocikey.md)
|
||||
|
||||
* 针对制造者和定制者
|
||||
* [飞线指南](hand_wire.md)
|
||||
* [ISP 刷新指南](isp_flashing_guide.md)
|
||||
* [ARM 调试指南](arm_debugging.md)
|
||||
* [I2C 驱动](i2c_driver.md)
|
||||
* [GPIO 控制器](internals_gpio_control.md)
|
||||
* [Proton C 转换](proton_c_conversion.md)
|
||||
|
||||
* 深入了解
|
||||
* [键盘如何工作](how_keyboards_work.md)
|
||||
* [理解 QMK](understanding_qmk.md)
|
||||
|
||||
* 其他话题
|
||||
* [使用Eclipse开发QMK](other_eclipse.md)
|
||||
* [使用VSCode开发QMK](other_vscode.md)
|
||||
* [支持](support.md)
|
||||
|
||||
* QMK 内构 (正在编写)
|
||||
* [定义](internals_defines.md)
|
||||
* [输入回调寄存器](internals_input_callback_reg.md)
|
||||
* [Midi 设备](internals_midi_device.md)
|
||||
* [Midi 设备设置过程](internals_midi_device_setup_process.md)
|
||||
* [Midi 工具库](internals_midi_util.md)
|
||||
* [发送函数](internals_send_functions.md)
|
||||
* [Sysex 工具](internals_sysex_tools.md)
|
||||
19
keyboards/adkb96/adkb96.c
Normal file
19
keyboards/adkb96/adkb96.c
Normal file
@@ -0,0 +1,19 @@
|
||||
#include "adkb96.h"
|
||||
|
||||
#ifdef SWAP_HANDS_ENABLE
|
||||
__attribute__ ((weak))
|
||||
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
|
||||
{{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}, {7, 6}},
|
||||
{{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {6, 7}, {7, 7}},
|
||||
{{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}, {6, 8}, {7, 8}},
|
||||
{{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}, {6, 9}, {7, 9}},
|
||||
{{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}, {6,10}, {7,10}},
|
||||
{{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}, {6,11}, {7,11}},
|
||||
{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}, {7, 0}},
|
||||
{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1}, {7, 1}},
|
||||
{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {6, 2}, {7, 2}},
|
||||
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}, {7, 3}},
|
||||
{{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}, {7, 4}},
|
||||
{{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {6, 5}, {7, 5}}
|
||||
};
|
||||
#endif
|
||||
28
keyboards/adkb96/adkb96.h
Normal file
28
keyboards/adkb96/adkb96.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef KEYBOARD_adkb96_rev1
|
||||
#include "rev1.h"
|
||||
#endif
|
||||
|
||||
|
||||
// Used to create a keymap using only KC_ prefixed keys
|
||||
#define LAYOUT_kc_ortho_6x16( \
|
||||
L00, L01, L02, L03, L04, L05, L06, L07, R00, R01, R02, R03, R04, R05, R06, R07, \
|
||||
L10, L11, L12, L13, L14, L15, L16, L17, R10, R11, R12, R13, R14, R15, R16, R17, \
|
||||
L20, L21, L22, L23, L24, L25, L26, L27, R20, R21, R22, R23, R24, R25, R26, R27, \
|
||||
L30, L31, L32, L33, L34, L35, L36, L37, R30, R31, R32, R33, R34, R35, R36, R37, \
|
||||
L40, L41, L42, L43, L44, L45, L46, L47, R40, R41, R42, R43, R44, R45, R46, R47, \
|
||||
L50, L51, L52, L53, L54, L55, L56, L57, R50, R51, R52, R53, R54, R55, R56, R57 \
|
||||
) \
|
||||
LAYOUT( \
|
||||
KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##L06, KC_##L07, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, KC_##R06, KC_##R07, \
|
||||
KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##L16, KC_##L17, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, KC_##R16, KC_##R17, \
|
||||
KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##L26, KC_##L27, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, KC_##R26, KC_##R27, \
|
||||
KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L36, KC_##L37, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, KC_##R36, KC_##R37, \
|
||||
KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##L45, KC_##L46, KC_##L47, KC_##R40, KC_##R41, KC_##R42, KC_##R43, KC_##R44, KC_##R45, KC_##R46, KC_##R47, \
|
||||
KC_##L50, KC_##L51, KC_##L52, KC_##L53, KC_##L54, KC_##L55, KC_##L56, KC_##L57, KC_##R50, KC_##R51, KC_##R52, KC_##R53, KC_##R54, KC_##R55, KC_##R56 ,KC_##R57 \
|
||||
)
|
||||
|
||||
#define LAYOUT_kc LAYOUT_kc_ortho_6x16
|
||||
22
keyboards/adkb96/config.h
Normal file
22
keyboards/adkb96/config.h
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
Copyright 2015 Jack Humbert
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
494
keyboards/adkb96/info.json
Normal file
494
keyboards/adkb96/info.json
Normal file
@@ -0,0 +1,494 @@
|
||||
{
|
||||
"keyboard_name": "adkb96",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 16,
|
||||
"height": 6,
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_6x16": {
|
||||
"key_count": 96,
|
||||
"layout": [
|
||||
{
|
||||
"label": "L00",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "L01",
|
||||
"x": 1,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "L02",
|
||||
"x": 2,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "L03",
|
||||
"x": 3,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "L04",
|
||||
"x": 4,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "L05",
|
||||
"x": 5,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "L06",
|
||||
"x": 6,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "L07",
|
||||
"x": 7,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "R00",
|
||||
"x": 8,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "R01",
|
||||
"x": 9,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "R02",
|
||||
"x": 10,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "R03",
|
||||
"x": 11,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "R04",
|
||||
"x": 12,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "R05",
|
||||
"x": 13,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "R06",
|
||||
"x": 14,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "R07",
|
||||
"x": 15,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "L10",
|
||||
"x": 0,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "L11",
|
||||
"x": 1,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "L12",
|
||||
"x": 2,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "L13",
|
||||
"x": 3,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "L14",
|
||||
"x": 4,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "L15",
|
||||
"x": 5,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "L16",
|
||||
"x": 6,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "L17",
|
||||
"x": 7,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "R10",
|
||||
"x": 8,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "R11",
|
||||
"x": 9,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "R12",
|
||||
"x": 10,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "R13",
|
||||
"x": 11,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "R14",
|
||||
"x": 12,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "R15",
|
||||
"x": 13,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "R16",
|
||||
"x": 14,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "R17",
|
||||
"x": 15,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "L20",
|
||||
"x": 0,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "L21",
|
||||
"x": 1,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "L22",
|
||||
"x": 2,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "L23",
|
||||
"x": 3,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "L24",
|
||||
"x": 4,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "L25",
|
||||
"x": 5,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "L26",
|
||||
"x": 6,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "L27",
|
||||
"x": 7,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "R20",
|
||||
"x": 8,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "R21",
|
||||
"x": 9,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "R22",
|
||||
"x": 10,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "R23",
|
||||
"x": 11,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "R24",
|
||||
"x": 12,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "R25",
|
||||
"x": 13,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "R26",
|
||||
"x": 14,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "R27",
|
||||
"x": 15,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "L30",
|
||||
"x": 0,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "L31",
|
||||
"x": 1,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "L32",
|
||||
"x": 2,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "L33",
|
||||
"x": 3,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "L34",
|
||||
"x": 4,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "L35",
|
||||
"x": 5,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "L36",
|
||||
"x": 6,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "L37",
|
||||
"x": 7,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "R30",
|
||||
"x": 8,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "R31",
|
||||
"x": 9,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "R32",
|
||||
"x": 10,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "R33",
|
||||
"x": 11,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "R34",
|
||||
"x": 12,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "R35",
|
||||
"x": 13,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "R36",
|
||||
"x": 14,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "R37",
|
||||
"x": 15,
|
||||
"y": 3
|
||||
},
|
||||
{
|
||||
"label": "L40",
|
||||
"x": 0,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "L41",
|
||||
"x": 1,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "L42",
|
||||
"x": 2,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "L43",
|
||||
"x": 3,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "L44",
|
||||
"x": 4,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "L45",
|
||||
"x": 5,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "L46",
|
||||
"x": 6,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "L47",
|
||||
"x": 7,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "R40",
|
||||
"x": 8,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "R41",
|
||||
"x": 9,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "R42",
|
||||
"x": 10,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "R43",
|
||||
"x": 11,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "R44",
|
||||
"x": 12,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "R45",
|
||||
"x": 13,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "R46",
|
||||
"x": 14,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "R47",
|
||||
"x": 15,
|
||||
"y": 4
|
||||
},
|
||||
{
|
||||
"label": "L50",
|
||||
"x": 0,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "L51",
|
||||
"x": 1,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "L52",
|
||||
"x": 2,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "L53",
|
||||
"x": 3,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "L54",
|
||||
"x": 4,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "L55",
|
||||
"x": 5,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "L56",
|
||||
"x": 6,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "L57",
|
||||
"x": 7,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "R50",
|
||||
"x": 8,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "R51",
|
||||
"x": 9,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "R52",
|
||||
"x": 10,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "R53",
|
||||
"x": 11,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "R54",
|
||||
"x": 12,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "R55",
|
||||
"x": 13,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "R56",
|
||||
"x": 14,
|
||||
"y": 5
|
||||
},
|
||||
{
|
||||
"label": "R57",
|
||||
"x": 15,
|
||||
"y": 5
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
34
keyboards/adkb96/keymaps/default/config.h
Normal file
34
keyboards/adkb96/keymaps/default/config.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
This is the c configuration file for the keymap
|
||||
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
Copyright 2015 Jack Humbert
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/* Use I2C or Serial, not both */
|
||||
|
||||
#define USE_SERIAL
|
||||
//#define USE_I2C
|
||||
|
||||
/* Select hand configuration */
|
||||
|
||||
#define MASTER_LEFT
|
||||
// #define MASTER_RIGHT
|
||||
// #define EE_HANDS
|
||||
|
||||
#define FORCE_NKRO
|
||||
15
keyboards/adkb96/keymaps/default/keymap.c
Normal file
15
keyboards/adkb96/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,15 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
extern keymap_config_t keymap_config;
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[0] = LAYOUT(
|
||||
KC_ESC, XXXXXXX,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DELT,
|
||||
KC_ZKHK,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_JYEN,KC_BSPC,KC_BSPC,
|
||||
KC_TAB, 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_ENT,
|
||||
KC_CAPS,KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_BSLS,KC_ENT, KC_ENT,
|
||||
KC_LSFT,KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RO, KC_UP, KC_RSFT,KC_RSFT,
|
||||
KC_LCTL,KC_LALT,KC_LGUI,KC_MHEN,KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_HENK,KC_KANA,KC_RALT,KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT,XXXXXXX
|
||||
)
|
||||
};
|
||||
17
keyboards/adkb96/readme.md
Normal file
17
keyboards/adkb96/readme.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# ADKB96
|
||||
|
||||

|
||||
|
||||
A 16x6 ortholinear keyboard kit made and sold by Bit Trade One Ltd. [More info on Web](http://bit-trade-one.co.jp/selfmadekb/adkb96/)
|
||||
|
||||
Keyboard Maintainer: [Bit Trade One Ltd.](http://bit-trade-one.co.jp/)
|
||||
Hardware Supported: ADKB96 PCB, Pro Micro
|
||||
Hardware Availability: [PCB & case Data](https://github.com/bit-trade-one/ADKB96-hardware), [BTOS Shop](http://btoshop.jp/2019/04/11/4562469772424/)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
```sh
|
||||
make adkb96/rev1: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).
|
||||
78
keyboards/adkb96/rev1/config.h
Normal file
78
keyboards/adkb96/rev1/config.h
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
Copyright 2015 Jack Humbert
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x00a5
|
||||
#define PRODUCT_ID 0xad96
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Bit Trade One
|
||||
#define PRODUCT ADKB96
|
||||
#define DESCRIPTION
|
||||
|
||||
/* key matrix size */
|
||||
// Rows are doubled-up
|
||||
#define MATRIX_ROWS 12
|
||||
#define MATRIX_COLS 8
|
||||
|
||||
// wiring of each half
|
||||
#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4, B5 }
|
||||
#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, F5, F4 }
|
||||
|
||||
#define SOFT_SERIAL_PIN D0
|
||||
|
||||
/* define tapping term */
|
||||
#define TAPPING_TERM 100
|
||||
|
||||
/* define if matrix has ghost */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* number of backlight levels */
|
||||
// #define BACKLIGHT_LEVELS 3
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* ws2812 RGB LED */
|
||||
/*
|
||||
#define RGB_DI_PIN D3
|
||||
|
||||
#define RGBLED_NUM 12 // Number of LEDs
|
||||
*/
|
||||
/*
|
||||
* 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
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
15
keyboards/adkb96/rev1/rev1.c
Normal file
15
keyboards/adkb96/rev1/rev1.c
Normal file
@@ -0,0 +1,15 @@
|
||||
#include "adkb96.h"
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
|
||||
// // green led on
|
||||
// DDRD |= (1<<5);
|
||||
// PORTD &= ~(1<<5);
|
||||
|
||||
// // orange led on
|
||||
// DDRB |= (1<<0);
|
||||
// PORTB &= ~(1<<0);
|
||||
|
||||
matrix_init_user();
|
||||
};
|
||||
|
||||
44
keyboards/adkb96/rev1/rev1.h
Normal file
44
keyboards/adkb96/rev1/rev1.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#pragma once
|
||||
|
||||
#include "adkb96.h"
|
||||
|
||||
//void promicro_bootloader_jmp(bool program);
|
||||
|
||||
#ifdef USE_I2C
|
||||
#include <stddef.h>
|
||||
#ifdef __AVR__
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//void promicro_bootloader_jmp(bool program);
|
||||
|
||||
|
||||
// Keymap with right side flipped
|
||||
// (TRRS jack on both halves are to the right)
|
||||
#define LAYOUT_ortho_6x16( \
|
||||
L00, L01, L02, L03, L04, L05, L06, L07, R00, R01, R02, R03, R04, R05, R06, R07, \
|
||||
L10, L11, L12, L13, L14, L15, L16, L17, R10, R11, R12, R13, R14, R15, R16, R17, \
|
||||
L20, L21, L22, L23, L24, L25, L26, L27, R20, R21, R22, R23, R24, R25, R26, R27, \
|
||||
L30, L31, L32, L33, L34, L35, L36, L37, R30, R31, R32, R33, R34, R35, R36, R37, \
|
||||
L40, L41, L42, L43, L44, L45, L46, L47, R40, R41, R42, R43, R44, R45, R46, R47, \
|
||||
L50, L51, L52, L53, L54, L55, L56, L57, R50, R51, R52, R53, R54, R55, R56, R57 \
|
||||
) \
|
||||
{ \
|
||||
{ L00, L01, L02, L03, L04, L05, L06, L07 }, \
|
||||
{ L10, L11, L12, L13, L14, L15, L16, L17 }, \
|
||||
{ L20, L21, L22, L23, L24, L25, L26, L27 }, \
|
||||
{ L30, L31, L32, L33, L34, L35, L36, L37 }, \
|
||||
{ L40, L41, L42, L43, L44, L45, L46, L47 }, \
|
||||
{ L50, L51, L52, L53, L54, L55, L56, L57 }, \
|
||||
{ R00, R01, R02, R03, R04, R05, R06, R07 }, \
|
||||
{ R10, R11, R12, R13, R14, R15, R16, R17 }, \
|
||||
{ R20, R21, R22, R23, R24, R25, R26, R27 }, \
|
||||
{ R30, R31, R32, R33, R34, R35, R36, R37 }, \
|
||||
{ R40, R41, R42, R43, R44, R45, R46, R47 }, \
|
||||
{ R50, R51, R52, R53, R54, R55, R56, R57 } \
|
||||
}
|
||||
|
||||
#define LAYOUT LAYOUT_ortho_6x16
|
||||
|
||||
78
keyboards/adkb96/rules.mk
Normal file
78
keyboards/adkb96/rules.mk
Normal file
@@ -0,0 +1,78 @@
|
||||
# MCU name
|
||||
#MCU = at90usb1287
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# atmega32a bootloadHID
|
||||
BOOTLOADER = caterina
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
SPLIT_KEYBOARD = yes
|
||||
|
||||
DEFAULT_FOLDER = adkb96/rev1
|
||||
217
keyboards/boston_meetup/2019/2019.c
Normal file
217
keyboards/boston_meetup/2019/2019.c
Normal file
@@ -0,0 +1,217 @@
|
||||
/* Copyright 2019 ishtob
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General 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 "2019.h"
|
||||
#include "qwiic.h"
|
||||
#include "action_layer.h"
|
||||
#include "haptic.h"
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
#include "rgblight.h"
|
||||
|
||||
const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
|
||||
/*{row | col << 4}
|
||||
| {x=0..224, y=0..64}
|
||||
| | modifier
|
||||
| | | */
|
||||
{{1|(3<<4)}, {188, 16}, 0},
|
||||
{{3|(3<<4)}, {187, 48}, 0},
|
||||
{{4|(2<<4)}, {149, 64}, 0},
|
||||
{{4|(1<<4)}, {112, 64}, 0},
|
||||
{{3|(0<<4)}, {37, 48}, 0},
|
||||
{{1|(0<<4)}, {38, 16}, 0}
|
||||
};
|
||||
#endif
|
||||
|
||||
uint8_t *o_fb;
|
||||
|
||||
uint16_t counterst = 0;
|
||||
|
||||
|
||||
|
||||
#ifdef QWIIC_MICRO_OLED_ENABLE
|
||||
|
||||
/* screen off after this many milliseconds */
|
||||
#include "timer.h"
|
||||
#define ScreenOffInterval 60000 /* milliseconds */
|
||||
static uint16_t last_flush;
|
||||
|
||||
volatile uint8_t led_numlock = false;
|
||||
volatile uint8_t led_capslock = false;
|
||||
volatile uint8_t led_scrolllock = false;
|
||||
|
||||
static uint8_t layer;
|
||||
static bool queue_for_send = false;
|
||||
static uint8_t encoder_value = 32;
|
||||
|
||||
__attribute__ ((weak))
|
||||
void draw_ui(void) {
|
||||
clear_buffer();
|
||||
last_flush = timer_read();
|
||||
send_command(DISPLAYON);
|
||||
|
||||
/* Boston MK title is 55 x 10 pixels */
|
||||
#define NAME_X 0
|
||||
#define NAME_Y 0
|
||||
|
||||
draw_string(NAME_X + 1, NAME_Y + 2, "BOSTON MK", PIXEL_ON, NORM, 0);
|
||||
|
||||
/* Layer indicator is 41 x 10 pixels */
|
||||
#define LAYER_INDICATOR_X 60
|
||||
#define LAYER_INDICATOR_Y 0
|
||||
|
||||
draw_string(LAYER_INDICATOR_X + 1, LAYER_INDICATOR_Y + 2, "LAYER", PIXEL_ON, NORM, 0);
|
||||
draw_rect_filled_soft(LAYER_INDICATOR_X + 32, LAYER_INDICATOR_Y + 1, 9, 9, PIXEL_ON, NORM);
|
||||
draw_char(LAYER_INDICATOR_X + 34, LAYER_INDICATOR_Y + 2, layer + 0x30, PIXEL_ON, XOR, 0);
|
||||
|
||||
/* Matrix display is 12 x 12 pixels */
|
||||
#define MATRIX_DISPLAY_X 8
|
||||
#define MATRIX_DISPLAY_Y 16
|
||||
|
||||
for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
|
||||
for (uint8_t y = 0; y < MATRIX_COLS; y++) {
|
||||
draw_pixel(MATRIX_DISPLAY_X + y + y + 2, MATRIX_DISPLAY_Y + x + x + 2,(matrix_get_row(x) & (1 << y)) > 0, NORM);
|
||||
draw_pixel(MATRIX_DISPLAY_X + y + y + 3, MATRIX_DISPLAY_Y + x + x + 2,(matrix_get_row(x) & (1 << y)) > 0, NORM);
|
||||
draw_pixel(MATRIX_DISPLAY_X + y + y + 2, MATRIX_DISPLAY_Y + x + x + 3,(matrix_get_row(x) & (1 << y)) > 0, NORM);
|
||||
draw_pixel(MATRIX_DISPLAY_X + y + y + 3, MATRIX_DISPLAY_Y + x + x + 3,(matrix_get_row(x) & (1 << y)) > 0, NORM);
|
||||
|
||||
}
|
||||
}
|
||||
draw_rect_soft(MATRIX_DISPLAY_X, MATRIX_DISPLAY_Y, 12, 12, PIXEL_ON, NORM);
|
||||
/* hadron oled location on thumbnail */
|
||||
draw_rect_filled_soft(MATRIX_DISPLAY_X + 5, MATRIX_DISPLAY_Y + 2, 6, 2, PIXEL_ON, NORM);
|
||||
/*
|
||||
draw_rect_soft(0, 13, 64, 6, PIXEL_ON, NORM);
|
||||
draw_line_vert(encoder_value, 13, 6, PIXEL_ON, NORM);
|
||||
|
||||
*/
|
||||
|
||||
/* Mod display is 41 x 16 pixels */
|
||||
#define MOD_DISPLAY_X 60
|
||||
#define MOD_DISPLAY_Y 20
|
||||
|
||||
uint8_t mods = get_mods();
|
||||
if (mods & MOD_LSFT) {
|
||||
draw_rect_filled_soft(MOD_DISPLAY_X + 0, MOD_DISPLAY_Y, 5 + (1 * 6), 11, PIXEL_ON, NORM);
|
||||
draw_string(MOD_DISPLAY_X + 3, MOD_DISPLAY_Y + 2, "S", PIXEL_OFF, NORM, 0);
|
||||
} else {
|
||||
draw_string(MOD_DISPLAY_X + 3, MOD_DISPLAY_Y + 2, "S", PIXEL_ON, NORM, 0);
|
||||
}
|
||||
if (mods & MOD_LCTL) {
|
||||
draw_rect_filled_soft(MOD_DISPLAY_X + 10, MOD_DISPLAY_Y, 5 + (1 * 6), 11, PIXEL_ON, NORM);
|
||||
draw_string(MOD_DISPLAY_X + 13, MOD_DISPLAY_Y + 2, "C", PIXEL_OFF, NORM, 0);
|
||||
} else {
|
||||
draw_string(MOD_DISPLAY_X + 13, MOD_DISPLAY_Y + 2, "C", PIXEL_ON, NORM, 0);
|
||||
}
|
||||
if (mods & MOD_LALT) {
|
||||
draw_rect_filled_soft(MOD_DISPLAY_X + 20, MOD_DISPLAY_Y, 5 + (1 * 6), 11, PIXEL_ON, NORM);
|
||||
draw_string(MOD_DISPLAY_X + 23, MOD_DISPLAY_Y + 2, "A", PIXEL_OFF, NORM, 0);
|
||||
} else {
|
||||
draw_string(MOD_DISPLAY_X + 23, MOD_DISPLAY_Y + 2, "A", PIXEL_ON, NORM, 0);
|
||||
}
|
||||
if (mods & MOD_LGUI) {
|
||||
draw_rect_filled_soft(MOD_DISPLAY_X + 30, MOD_DISPLAY_Y, 5 + (1 * 6), 11, PIXEL_ON, NORM);
|
||||
draw_string(MOD_DISPLAY_X + 33, MOD_DISPLAY_Y + 2, "G", PIXEL_OFF, NORM, 0);
|
||||
} else {
|
||||
draw_string(MOD_DISPLAY_X + 33, MOD_DISPLAY_Y + 2, "G", PIXEL_ON, NORM, 0);
|
||||
}
|
||||
|
||||
/* Lock display is 23 x 32 */
|
||||
#define LOCK_DISPLAY_X 104
|
||||
#define LOCK_DISPLAY_Y 0
|
||||
|
||||
if (led_numlock == true) {
|
||||
draw_rect_filled_soft(LOCK_DISPLAY_X, LOCK_DISPLAY_Y, 5 + (3 * 6), 9, PIXEL_ON, NORM);
|
||||
draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 1, "NUM", PIXEL_OFF, NORM, 0);
|
||||
} else if (led_numlock == false) {
|
||||
draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 1, "NUM", PIXEL_ON, NORM, 0);
|
||||
}
|
||||
if (led_capslock == true) {
|
||||
draw_rect_filled_soft(LOCK_DISPLAY_X + 0, LOCK_DISPLAY_Y + 11, 5 + (3 * 6), 9, PIXEL_ON, NORM);
|
||||
draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 11 +1, "CAP", PIXEL_OFF, NORM, 0);
|
||||
} else if (led_capslock == false) {
|
||||
draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 11 +1, "CAP", PIXEL_ON, NORM, 0);
|
||||
}
|
||||
|
||||
if (led_scrolllock == true) {
|
||||
draw_rect_filled_soft(LOCK_DISPLAY_X + 0, LOCK_DISPLAY_Y + 22, 5 + (3 * 6), 9, PIXEL_ON, NORM);
|
||||
draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 22 +1, "SCR", PIXEL_OFF, NORM, 0);
|
||||
} else if (led_scrolllock == false) {
|
||||
draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 22 +1, "SCR", PIXEL_ON, NORM, 0);
|
||||
}
|
||||
send_buffer();
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
|
||||
if (led_numlock == false){led_numlock = true;}
|
||||
} else {
|
||||
if (led_numlock == true){led_numlock = false;}
|
||||
}
|
||||
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
|
||||
if (led_capslock == false){led_capslock = true;}
|
||||
} else {
|
||||
if (led_capslock == true){led_capslock = false;}
|
||||
}
|
||||
if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
|
||||
if (led_scrolllock == false){led_scrolllock = true;}
|
||||
} else {
|
||||
if (led_scrolllock == true){led_scrolllock = false;}
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t layer_state_set_kb(uint32_t state) {
|
||||
state = layer_state_set_user(state);
|
||||
layer = biton32(state);
|
||||
queue_for_send = true;
|
||||
return state;
|
||||
}
|
||||
|
||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||
queue_for_send = true;
|
||||
return process_record_user(keycode, record);
|
||||
}
|
||||
|
||||
void encoder_update_kb(uint8_t index, bool clockwise) {
|
||||
encoder_value = (encoder_value + (clockwise ? 1 : -1)) % 64;
|
||||
queue_for_send = true;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
queue_for_send = true;
|
||||
matrix_init_user();
|
||||
}
|
||||
|
||||
void matrix_scan_kb(void) {
|
||||
if (queue_for_send) {
|
||||
#ifdef QWIIC_MICRO_OLED_ENABLE
|
||||
draw_ui();
|
||||
#endif
|
||||
queue_for_send = false;
|
||||
}
|
||||
#ifdef QWIIC_MICRO_OLED_ENABLE
|
||||
if (timer_elapsed(last_flush) > ScreenOffInterval) {
|
||||
send_command(DISPLAYOFF); /* 0xAE */
|
||||
}
|
||||
#endif
|
||||
if (counterst == 0) {
|
||||
//testPatternFB(o_fb);
|
||||
}
|
||||
counterst = (counterst + 1) % 1024;
|
||||
//rgblight_task();
|
||||
matrix_scan_user();
|
||||
}
|
||||
19
keyboards/boston_meetup/2019/2019.h
Normal file
19
keyboards/boston_meetup/2019/2019.h
Normal file
@@ -0,0 +1,19 @@
|
||||
/* Copyright 2019 ishtob
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General 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 "boston_meetup.h"
|
||||
|
||||
196
keyboards/boston_meetup/2019/config.h
Normal file
196
keyboards/boston_meetup/2019/config.h
Normal file
@@ -0,0 +1,196 @@
|
||||
#pragma once
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define DEVICE_VER 0x07E3
|
||||
|
||||
#undef MATRIX_ROWS
|
||||
#undef MATRIX_COLS
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 4
|
||||
|
||||
/*
|
||||
* 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)
|
||||
*
|
||||
*/
|
||||
|
||||
#undef MATRIX_ROW_PINS
|
||||
#undef MATRIX_COL_PINS
|
||||
|
||||
#define MATRIX_ROW_PINS { A3, B8, B9, B1 }
|
||||
#define MATRIX_COL_PINS { A7, A8, B2, B10 }
|
||||
|
||||
#define NUMBER_OF_ENCODERS 1
|
||||
#define ENCODERS_PAD_A { B13 }
|
||||
#define ENCODERS_PAD_B { B14 }
|
||||
|
||||
//Audio
|
||||
#undef AUDIO_VOICES
|
||||
#undef C6_AUDIO
|
||||
|
||||
#ifdef AUDIO_ENABLE
|
||||
#define STARTUP_SONG SONG(ONE_UP_SOUND)
|
||||
// #define STARTUP_SONG SONG(NO_SOUND)
|
||||
|
||||
#define AUDIO_CLICKY
|
||||
/* to enable clicky on startup */
|
||||
//#define AUDIO_CLICKY_ON
|
||||
#define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f
|
||||
#endif
|
||||
|
||||
//configure qwiic micro_oled driver for the 128x32 oled
|
||||
#ifdef QWIIC_MICRO_OLED_ENABLE
|
||||
|
||||
#undef I2C_ADDRESS_SA0_1
|
||||
#define I2C_ADDRESS_SA0_1 0b0111100
|
||||
#define LCDWIDTH 128
|
||||
#define LCDHEIGHT 32
|
||||
#define micro_oled_rotate_180
|
||||
|
||||
#endif
|
||||
/*
|
||||
* 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)
|
||||
*
|
||||
*/
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 6
|
||||
|
||||
/* 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
|
||||
|
||||
/*
|
||||
* 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
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
/*
|
||||
* MIDI options
|
||||
*/
|
||||
|
||||
/* Prevent use of disabled MIDI features in the keymap */
|
||||
//#define MIDI_ENABLE_STRICT 1
|
||||
|
||||
/* enable basic MIDI features:
|
||||
- MIDI notes can be sent when in Music mode is on
|
||||
*/
|
||||
|
||||
#define MIDI_BASIC
|
||||
|
||||
/* enable advanced MIDI features:
|
||||
- MIDI notes can be added to the keymap
|
||||
- Octave shift and transpose
|
||||
- Virtual sustain, portamento, and modulation wheel
|
||||
- etc.
|
||||
*/
|
||||
//#define MIDI_ADVANCED
|
||||
|
||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||
//#define MIDI_TONE_KEYCODE_OCTAVES 2
|
||||
|
||||
/* Haptic Driver initialization settings
|
||||
* Feedback Control Settings */
|
||||
#define FB_ERM_LRA 1 /* For ERM:0 or LRA:1*/
|
||||
#define FB_BRAKEFACTOR 6 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */
|
||||
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
|
||||
|
||||
/* default 3V ERM vibration motor voltage and library*/
|
||||
#if FB_ERM_LRA == 0
|
||||
#define RATED_VOLTAGE 3
|
||||
#define V_RMS 2.3
|
||||
#define V_PEAK 3.30
|
||||
/* Library Selection */
|
||||
#define LIB_SELECTION 4 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
|
||||
|
||||
/* default 2V LRA voltage and library */
|
||||
#elif FB_ERM_LRA == 1
|
||||
#define RATED_VOLTAGE 2
|
||||
#define V_RMS 2.0
|
||||
#define V_PEAK 2.85
|
||||
#define F_LRA 200
|
||||
/* Library Selection */
|
||||
#define LIB_SELECTION 6 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
|
||||
|
||||
#endif
|
||||
|
||||
/* Control 1 register settings */
|
||||
#define DRIVE_TIME 25
|
||||
#define AC_COUPLE 0
|
||||
#define STARTUP_BOOST 1
|
||||
|
||||
/* Control 2 Settings */
|
||||
#define BIDIR_INPUT 1
|
||||
#define BRAKE_STAB 1 /* Loopgain is reduced when braking is almost complete to improve stability */
|
||||
#define SAMPLE_TIME 3
|
||||
#define BLANKING_TIME 1
|
||||
#define IDISS_TIME 1
|
||||
|
||||
/* Control 3 settings */
|
||||
#define NG_THRESH 2
|
||||
#define ERM_OPEN_LOOP 1
|
||||
#define SUPPLY_COMP_DIS 0
|
||||
#define DATA_FORMAT_RTO 0
|
||||
#define LRA_DRIVE_MODE 0
|
||||
#define N_PWM_ANALOG 0
|
||||
#define LRA_OPEN_LOOP 0
|
||||
/* Control 4 settings */
|
||||
#define ZC_DET_TIME 0
|
||||
#define AUTO_CAL_TIME 3
|
||||
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
|
||||
#define RGBLED_NUM 10
|
||||
#define RGB_DI_PIN B5
|
||||
#define DRIVER_LED_TOTAL RGBLED_NUM
|
||||
|
||||
#define RGB_MATRIX_KEYPRESSES
|
||||
|
||||
#define SOLENOID_PIN A14
|
||||
|
||||
12
keyboards/boston_meetup/2019/info.json
Normal file
12
keyboards/boston_meetup/2019/info.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"keyboard_name": "Boston Meetup 2019",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 4,
|
||||
"height": 4,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"key_count": 13,
|
||||
"layout": [{"label":"K00", "x":0, "y":0}, {"label":"K10", "x":0, "y":1}, {"label":"K11", "x":1, "y":1}, {"label":"K12", "x":2, "y":1}, {"label":"K13", "x":3, "y":1}, {"label":"K20", "x":0, "y":2}, {"label":"K21", "x":1, "y":2}, {"label":"K22", "x":2, "y":2}, {"label":"K23", "x":3, "y":2}, {"label":"K30", "x":0, "y":3}, {"label":"K31", "x":1, "y":3}, {"label":"K32", "x":2, "y":3}, {"label":"K33", "x":3, "y":3}] }
|
||||
}
|
||||
}
|
||||
166
keyboards/boston_meetup/2019/keymaps/default/keymap.c
Normal file
166
keyboards/boston_meetup/2019/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,166 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
|
||||
enum custom_layers {
|
||||
_BASE,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_ADJUST
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
BASE = SAFE_RANGE,
|
||||
LOWER,
|
||||
RAISE,
|
||||
KC_DEMOMACRO
|
||||
};
|
||||
|
||||
// Custom macros
|
||||
#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
|
||||
#define CTL_TTAB CTL_T(KC_TAB) // Tap for Esc, hold for Ctrl
|
||||
#define CTL_ENT CTL_T(KC_ENT) // Tap for Enter, hold for Ctrl
|
||||
#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
|
||||
// Requires KC_TRNS/_______ for the trigger key in the destination layer
|
||||
#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor
|
||||
#define LT_RAI(kc) LT(_RAISE, kc) // L-ayer T-ap to Raise
|
||||
#define DEMOMACRO KC_DEMOMACRO // Sample for macros
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Base
|
||||
* ,------.
|
||||
* | Esc |
|
||||
* |------+------+-------------.
|
||||
* | : | 7 | 8 | 9 |
|
||||
* |------+------+------+------|
|
||||
* | RAISE| 4 | 5 | 6 |
|
||||
* |------+------+------+------|
|
||||
* | LOWER| 1 | 2 | 3 |
|
||||
* `---------------------------'
|
||||
*/
|
||||
[_BASE] = LAYOUT(
|
||||
KC_ESC,
|
||||
KC_COLN, KC_P7, KC_P8, KC_P9,
|
||||
RAISE, KC_P4, KC_P5, KC_P6,
|
||||
LOWER, KC_P1, KC_P2, KC_P3
|
||||
),
|
||||
|
||||
/* Lower
|
||||
* ,------.
|
||||
* | Nmlk |
|
||||
* |------+------+-------------.
|
||||
* | : | / | * | - |
|
||||
* |------+------+------+------|
|
||||
* | | | = | + |
|
||||
* |------+------+------+------|
|
||||
* | | 0 | . | ENT |
|
||||
* `---------------------------'
|
||||
*/
|
||||
[_LOWER] = LAYOUT(
|
||||
KC_NLCK,
|
||||
KC_COLN, KC_PSLS, KC_PAST, KC_PMNS,
|
||||
_______, XXXXXXX, KC_EQL, KC_PPLS,
|
||||
_______, KC_P0, KC_PDOT, KC_PENT
|
||||
),
|
||||
|
||||
/* Raise
|
||||
* ,------.
|
||||
* | Esc |
|
||||
* |------+------+-------------.
|
||||
* |RGB TG|RGB M+|RGB M-| |
|
||||
* |------+------+------+------|
|
||||
* | |RGB H+|RGB S+|RGB V+|
|
||||
* |------+------+------+------|
|
||||
* | ` |RGB H-|RGB S-|RGB V-|
|
||||
* `---------------------------'
|
||||
*/
|
||||
[_RAISE] = LAYOUT(
|
||||
KC_NLCK,
|
||||
RGB_TOG, RGB_MOD, RGB_RMOD, XXXXXXX,
|
||||
_______, RGB_HUI, RGB_SAI, RGB_VAI,
|
||||
_______, RGB_HUD, RGB_SAD, RGB_VAD
|
||||
|
||||
),
|
||||
|
||||
/* Adjust
|
||||
* ,------.
|
||||
* | DFU |
|
||||
* |------+------+-------------.
|
||||
* |HPT TG|HPT FB|HPT RS| BKSP |
|
||||
* |------+------+------+------|
|
||||
* | |HPT M+| | |
|
||||
* |------+------+------+------|
|
||||
* | |HPT M-|Clk TG| Del |
|
||||
* `---------------------------'
|
||||
*/
|
||||
[_ADJUST] = LAYOUT(
|
||||
RESET,
|
||||
HPT_TOG, HPT_FBK, HPT_RST, KC_BSPC,
|
||||
_______, HPT_MODI, XXXXXXX, XXXXXXX,
|
||||
_______, HPT_MODD, CK_TOGG, KC_DEL
|
||||
),
|
||||
|
||||
|
||||
};
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
|
||||
}
|
||||
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case KC_DEMOMACRO:
|
||||
if (record->event.pressed) {
|
||||
// when keycode KC_DEMOMACRO is pressed
|
||||
SEND_STRING("QMK is the best thing ever!");
|
||||
} else {
|
||||
// when keycode KC_DEMOMACRO is released
|
||||
}
|
||||
break;
|
||||
case LOWER:
|
||||
if (record->event.pressed) {
|
||||
//not sure how to have keyboard check mode and set it to a variable, so my work around
|
||||
//uses another variable that would be set to true after the first time a reactive key is pressed.
|
||||
layer_on(_LOWER);
|
||||
} else {
|
||||
layer_off(_LOWER);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case RAISE:
|
||||
if (record->event.pressed) {
|
||||
//not sure how to have keyboard check mode and set it to a variable, so my work around
|
||||
//uses another variable that would be set to true after the first time a reactive key is pressed.
|
||||
layer_on(_RAISE);
|
||||
} else {
|
||||
layer_off(_RAISE);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool music_mask_user(uint16_t keycode) {
|
||||
switch (keycode) {
|
||||
case RAISE:
|
||||
case LOWER:
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
}
|
||||
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
}
|
||||
|
||||
51
keyboards/boston_meetup/2019/keymaps/default/readme.md
Normal file
51
keyboards/boston_meetup/2019/keymaps/default/readme.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# The Default Boston Meetup 2019 board Layout
|
||||
|
||||
Keymap:
|
||||
```
|
||||
Base
|
||||
,------.
|
||||
| Esc |
|
||||
|------+------+-------------.
|
||||
| : | 7 | 8 | 9 |
|
||||
|------+------+------+------|
|
||||
| RAISE| 4 | 5 | 6 |
|
||||
|------+------+------+------|
|
||||
| LOWER| 1 | 2 | 3 |
|
||||
`---------------------------'
|
||||
|
||||
Lower
|
||||
,------.
|
||||
| Nmlk |
|
||||
|------+------+-------------.
|
||||
| : | / | * | - |
|
||||
|------+------+------+------|
|
||||
| | | = | + |
|
||||
|------+------+------+------|
|
||||
| | 0 | . | ENT |
|
||||
`---------------------------'
|
||||
|
||||
Raise
|
||||
,------.
|
||||
| Esc |
|
||||
|------+------+-------------.
|
||||
|RGB TG|RGB M+|RGB M-| |
|
||||
|------+------+------+------|
|
||||
| |RGB H+|RGB S+|RGB V+|
|
||||
|------+------+------+------|
|
||||
| |RGB H-|RGB S-|RGB V-|
|
||||
`---------------------------'
|
||||
|
||||
Adjust:
|
||||
,------.
|
||||
| DFU |
|
||||
|------+------+-------------.
|
||||
|HPT TG|HPT FB|HPT RS| BKSP |
|
||||
|------+------+------+------|
|
||||
| |HPT M+| | |
|
||||
|------+------+------+------|
|
||||
| |HPT M-|Clk TG| Del |
|
||||
`---------------------------'
|
||||
|
||||
```
|
||||
|
||||
RGB still work in progress
|
||||
22
keyboards/boston_meetup/2019/keymaps/readme.md
Normal file
22
keyboards/boston_meetup/2019/keymaps/readme.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# How to add your own keymap
|
||||
|
||||
Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`:
|
||||
|
||||
_[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author]
|
||||
|
||||
\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements
|
||||
|
||||
and contain the following files:
|
||||
|
||||
* `keymap.c`
|
||||
* `readme.md` *recommended*
|
||||
* `config.h` *optional*, found automatically when compiling
|
||||
* `Makefile` *optional*, found automatically when compling
|
||||
|
||||
When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format:
|
||||
|
||||
* **folder_name** description
|
||||
|
||||
# List of 2019 keymaps
|
||||
|
||||
* **default** default 2019 macropad layout
|
||||
13
keyboards/boston_meetup/2019/readme.md
Normal file
13
keyboards/boston_meetup/2019/readme.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Boston Meetup 2019 Macropad
|
||||
|
||||

|
||||
|
||||
Limited-run board designed for Boston MK community meetup 2019.
|
||||
|
||||
Keyboard Maintainer: [ishtob](https://github.com/ishtob), [QMK](https://github.com/qmk)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make boston_meetup/2019: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).
|
||||
24
keyboards/boston_meetup/2019/rules.mk
Normal file
24
keyboards/boston_meetup/2019/rules.mk
Normal file
@@ -0,0 +1,24 @@
|
||||
# project specific files
|
||||
|
||||
# Cortex version
|
||||
MCU = STM32F303
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BACKLIGHT_ENABLE = no
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
|
||||
## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
|
||||
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
|
||||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
CUSTOM_MATRIX = no # Custom matrix file
|
||||
AUDIO_ENABLE = yes
|
||||
RGBLIGHT_ENABLE = no
|
||||
RGB_MATRIX_ENABLE = no #WS2812
|
||||
HAPTIC_ENABLE += DRV2605L
|
||||
QWIIC_ENABLE += MICRO_OLED
|
||||
# SERIAL_LINK_ENABLE = yes
|
||||
2
keyboards/boston_meetup/boston_meetup.c
Normal file
2
keyboards/boston_meetup/boston_meetup.c
Normal file
@@ -0,0 +1,2 @@
|
||||
#include "boston_meetup.h"
|
||||
|
||||
19
keyboards/boston_meetup/boston_meetup.h
Normal file
19
keyboards/boston_meetup/boston_meetup.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef KEYBOARD_boston_meetup_2019
|
||||
#include "2019.h"
|
||||
#define LAYOUT( \
|
||||
K00, \
|
||||
K10, K11, K12, K13, \
|
||||
K20, K21, K22, K23, \
|
||||
K30, K31, K32, K33 \
|
||||
) \
|
||||
{ \
|
||||
{ K00, KC_NO, KC_NO, KC_NO }, \
|
||||
{ K10, K11, K12, K13 }, \
|
||||
{ K20, K21, K22, K23 }, \
|
||||
{ K30, K31, K32, K33 } \
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "quantum.h"
|
||||
60
keyboards/boston_meetup/config.h
Normal file
60
keyboards/boston_meetup/config.h
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFB30
|
||||
#define PRODUCT_ID 0x26BE
|
||||
#define MANUFACTURER ishtob
|
||||
#define PRODUCT Boston Meetup Board
|
||||
#define DESCRIPTION A limited-run community meetup board
|
||||
|
||||
//#define AUDIO_VOICES
|
||||
|
||||
//#define BACKLIGHT_PIN B7
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* define if matrix has ghost */
|
||||
//#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
|
||||
|
||||
/*
|
||||
* 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
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
14
keyboards/boston_meetup/readme.md
Normal file
14
keyboards/boston_meetup/readme.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# Boston Meetup Macropads
|
||||
|
||||

|
||||
|
||||
Limited-run boards designed for Boston MK community meetups.
|
||||
|
||||
Keyboard Maintainer: [ishtob](https://github.com/ishtob), [QMK](https://github.com/qmk)
|
||||
Hardware Supported: Boston Meetup PCB 2018, 2019
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make boston_meetup/YYYY: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).
|
||||
2
keyboards/boston_meetup/rules.mk
Normal file
2
keyboards/boston_meetup/rules.mk
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
DEFAULT_FOLDER = boston_meetup/2019
|
||||
@@ -76,7 +76,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
// Bump this every time we change what we store
|
||||
// This will automatically reset the EEPROM with defaults
|
||||
// and avoid loading invalid data from the EEPROM
|
||||
#define EEPROM_VERSION 0x0F
|
||||
#define EEPROM_VERSION 0x01
|
||||
#define EEPROM_VERSION_ADDR 34
|
||||
|
||||
// Dynamic keymap starts after EEPROM version
|
||||
|
||||
@@ -42,8 +42,8 @@ static const I2CConfig i2cconfig = {
|
||||
0
|
||||
};
|
||||
|
||||
static i2c_status_t chibios_to_qmk(const msg_t* status) {
|
||||
switch (*status) {
|
||||
static i2c_status_t chibios_to_qmk(const msg_t status) {
|
||||
switch (status) {
|
||||
case I2C_NO_ERROR:
|
||||
return I2C_STATUS_SUCCESS;
|
||||
case I2C_TIMEOUT:
|
||||
@@ -83,7 +83,7 @@ i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length,
|
||||
i2cAcquireBus(&I2C_DRIVER);
|
||||
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), data, length, 0, 0, MS2ST(timeout));
|
||||
i2cReleaseBus(&I2C_DRIVER);
|
||||
return chibios_to_qmk(&status);
|
||||
return chibios_to_qmk(status);
|
||||
}
|
||||
|
||||
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)
|
||||
@@ -91,7 +91,7 @@ i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16
|
||||
i2c_address = address;
|
||||
i2cStart(&I2C_DRIVER, &i2cconfig);
|
||||
msg_t status = i2cMasterReceiveTimeout(&I2C_DRIVER, (i2c_address >> 1), data, length, MS2ST(timeout));
|
||||
return chibios_to_qmk(&status);
|
||||
return chibios_to_qmk(status);
|
||||
}
|
||||
|
||||
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout)
|
||||
@@ -107,7 +107,7 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data,
|
||||
complete_packet[0] = regaddr;
|
||||
|
||||
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), complete_packet, length + 1, 0, 0, MS2ST(timeout));
|
||||
return chibios_to_qmk(&status);
|
||||
return chibios_to_qmk(status);
|
||||
}
|
||||
|
||||
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
|
||||
@@ -115,7 +115,7 @@ i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint1
|
||||
i2c_address = devaddr;
|
||||
i2cStart(&I2C_DRIVER, &i2cconfig);
|
||||
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), regaddr, 1, data, length, MS2ST(timeout));
|
||||
return chibios_to_qmk(&status);
|
||||
return chibios_to_qmk(status);
|
||||
}
|
||||
|
||||
void i2c_stop(void)
|
||||
|
||||
37
keyboards/cannonkeys/satisfaction75/keymaps/jae/keymap.c
Normal file
37
keyboards/cannonkeys/satisfaction75/keymaps/jae/keymap.c
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT_all(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, ENC_PRESS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER, KC_PGDN,
|
||||
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[1] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, OLED_TOGG,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CLOCK_SET,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
@@ -17,25 +17,27 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
|
||||
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT_default(
|
||||
[0] = LAYOUT_all(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, ENC_PRESS,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, ENC_PRESS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, KC_PGUP,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER, KC_PGUP,
|
||||
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[1] = LAYOUT_default(
|
||||
[1] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, OLED_TOGG,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, OLED_TOGG,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CLOCK_SET,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
//user initialization
|
||||
}
|
||||
|
||||
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
@@ -32,42 +31,43 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define MATRIX_ROWS 6
|
||||
#define MATRIX_COLS 4
|
||||
|
||||
// ROWS: Top to bottom, COLS: Left to right
|
||||
|
||||
/*
|
||||
* 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 { D0, D1, D2, D3, D4, D5 }
|
||||
#define MATRIX_COL_PINS { F0, F1, E6, C7 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
#define BACKLIGHT_PIN F7
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* define if matrix has ghost */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
/* Backlight configuration */
|
||||
#define BACKLIGHT_PIN F7
|
||||
#define BACKLIGHT_LEVELS 1
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
/* Underlight configuration */
|
||||
#define RGB_DI_PIN F6
|
||||
#define RGBLED_NUM 4
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCING_DELAY 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
|
||||
|
||||
/* Backlight configuration
|
||||
*/
|
||||
#define BACKLIGHT_LEVELS 4
|
||||
|
||||
/* Underlight configuration
|
||||
*/
|
||||
|
||||
#define RGB_DI_PIN F6
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 4 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
#define RGBLIGHT_VAL_STEP 17
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
@@ -86,4 +86,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
#endif
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||
|
||||
@@ -1,37 +1,33 @@
|
||||
|
||||
/* 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 "cospad.h"
|
||||
#include "led.h"
|
||||
|
||||
extern inline void cospad_bl_led_on(void);
|
||||
extern inline void cospad_bl_led_off(void);
|
||||
extern inline void cospad_bl_led_togg(void);
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
matrix_init_user();
|
||||
led_init_ports();
|
||||
};
|
||||
|
||||
void matrix_scan_kb(void) {
|
||||
// put your looping keyboard code here
|
||||
// runs every cycle (a lot)
|
||||
matrix_scan_user();
|
||||
};
|
||||
|
||||
void led_init_ports(void) {
|
||||
// * Set our LED pins as output
|
||||
DDRB |= (1<<2);
|
||||
DDRF |= (1<<7);
|
||||
// * Setting BL LEDs to init as off
|
||||
PORTF |= (1<<7);
|
||||
void backlight_init_ports(void) {
|
||||
setPinOutput(F7);
|
||||
}
|
||||
|
||||
void led_set_kb(uint8_t usb_led) {
|
||||
if (usb_led & (1<<USB_LED_NUM_LOCK)) {
|
||||
// Turn numlock on
|
||||
PORTB &= ~(1<<2);
|
||||
} else {
|
||||
// Turn numlock off
|
||||
PORTB |= (1<<2);
|
||||
}
|
||||
void backlight_set(uint8_t level) {
|
||||
writePin(F7, !!level);
|
||||
}
|
||||
|
||||
void backlight_task(void) {
|
||||
// do nothing - as default implementation of software PWM does not work
|
||||
}
|
||||
|
||||
#endif //BACKLIGHT_ENABLE
|
||||
|
||||
@@ -1,10 +1,32 @@
|
||||
#ifndef COSPAD_H
|
||||
#define COSPAD_H
|
||||
|
||||
/* 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/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
#define ___ KC_NO
|
||||
|
||||
// readability
|
||||
#define XXX KC_NO
|
||||
/* 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.
|
||||
*/
|
||||
|
||||
/* COSPAD ortho matrix layout
|
||||
* ,-------------------.
|
||||
@@ -21,40 +43,6 @@
|
||||
* | 50 | 51 | 52 | 53 |
|
||||
* `-------------------'
|
||||
*/
|
||||
|
||||
/* COSPAD gamepad matrix layout
|
||||
* ,-------------------.
|
||||
* | 00 | 01 | 02 | 03 |
|
||||
* |----|----|----|----|
|
||||
* | 10 | 11 | 12 | 13 |
|
||||
* |----|----|----|----|
|
||||
* | 20 | 21 | 22 | |
|
||||
* |----|----|----| 23 |
|
||||
* | 30 | 31 | 32 | |
|
||||
* |----|----|----|----|
|
||||
* | 40 | 41 | 42 | 43 |
|
||||
* |----|----|----|----|
|
||||
* | 50 | 51 | 52 | 53 |
|
||||
* `-------------------'
|
||||
*/
|
||||
|
||||
/* COSPAD numpad matrix layout
|
||||
* ,-------------------.
|
||||
* | 00 | 01 | 02 | 03 |
|
||||
* |----|----|----|----|
|
||||
* | 10 | 11 | 12 | 13 |
|
||||
* |----|----|----|----|
|
||||
* | 20 | 21 | 22 | |
|
||||
* |----|----|----| 23 |
|
||||
* | 30 | 31 | 32 | |
|
||||
* |----|----|----|----|
|
||||
* | 40 | 41 | 42 | |
|
||||
* |----|----|----| 43 |
|
||||
* | 50 | 52 | |
|
||||
* `-------------------'
|
||||
*/
|
||||
// The first section contains all of the arguments
|
||||
// The second converts the arguments into a two-dimensional array
|
||||
#define LAYOUT_ortho_6x4( \
|
||||
k00, k01, k02, k03, \
|
||||
k10, k11, k12, k13, \
|
||||
@@ -72,6 +60,21 @@
|
||||
{k50, k51, k52, k53} \
|
||||
}
|
||||
|
||||
/* COSPAD gamepad matrix layout
|
||||
* ,-------------------.
|
||||
* | 00 | 01 | 02 | 03 |
|
||||
* |----|----|----|----|
|
||||
* | 10 | 11 | 12 | 13 |
|
||||
* |----|----|----|----|
|
||||
* | 20 | 21 | 22 | |
|
||||
* |----|----|----| 23 |
|
||||
* | 30 | 31 | 32 | |
|
||||
* |----|----|----|----|
|
||||
* | 40 | 41 | 42 | 43 |
|
||||
* |----|----|----|----|
|
||||
* | 50 | 51 | 52 | 53 |
|
||||
* `-------------------'
|
||||
*/
|
||||
#define LAYOUT_gamepad_6x4( \
|
||||
k00, k01, k02, k03, \
|
||||
k10, k11, k12, k13, \
|
||||
@@ -84,11 +87,26 @@
|
||||
{k00, k01, k02, k03}, \
|
||||
{k10, k11, k12, k13}, \
|
||||
{k20, k21, k22, k23}, \
|
||||
{k30, k31, k32, KC_NO}, \
|
||||
{k30, k31, k32, ___}, \
|
||||
{k40, k41, k42, k43}, \
|
||||
{k50, k51, k52, k53} \
|
||||
}
|
||||
|
||||
/* COSPAD numpad matrix layout
|
||||
* ,-------------------.
|
||||
* | 00 | 01 | 02 | 03 |
|
||||
* |----|----|----|----|
|
||||
* | 10 | 11 | 12 | 13 |
|
||||
* |----|----|----|----|
|
||||
* | 20 | 21 | 22 | |
|
||||
* |----|----|----| 23 |
|
||||
* | 30 | 31 | 32 | |
|
||||
* |----|----|----|----|
|
||||
* | 40 | 41 | 42 | |
|
||||
* |----|----|----| 43 |
|
||||
* | 50 | 52 | |
|
||||
* `-------------------'
|
||||
*/
|
||||
#define LAYOUT_numpad_6x4( \
|
||||
k00, k01, k02, k03, \
|
||||
k10, k11, k12, k13, \
|
||||
@@ -98,25 +116,15 @@
|
||||
k50, k52, k43 \
|
||||
) \
|
||||
{ \
|
||||
{k00, k01, k02, k03}, \
|
||||
{k10, k11, k12, k13}, \
|
||||
{k20, k21, k22, k23}, \
|
||||
{k30, k31, k32, KC_NO}, \
|
||||
{k40, k41, k42, k43}, \
|
||||
{k50, KC_NO, k52, KC_NO} \
|
||||
{k00, k01, k02, k03}, \
|
||||
{k10, k11, k12, k13}, \
|
||||
{k20, k21, k22, k23}, \
|
||||
{k30, k31, k32, ___}, \
|
||||
{k40, k41, k42, k43}, \
|
||||
{k50, ___, k52, ___} \
|
||||
}
|
||||
void matrix_init_user(void);
|
||||
void matrix_scan_user(void);
|
||||
|
||||
inline void cospad_bl_led_on(void) { PORTF &= ~(1<<7); }
|
||||
inline void cospad_bl_led_off(void) { PORTF |= (1<<7); }
|
||||
|
||||
inline void cospad_bl_led_togg(void) {
|
||||
uint8_t bl_mask = PORTF&(1<<7);
|
||||
if (bl_mask) {
|
||||
PORTF &= ~(1<<7);
|
||||
} else {
|
||||
PORTF |= (1<<7);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// Add backwards compatibility for existing keymaps
|
||||
#define cospad_bl_led_on backlight_enable
|
||||
#define cospad_bl_led_off backlight_disable
|
||||
#define cospad_bl_led_togg backlight_toggle
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
"height": 6,
|
||||
"layouts": {
|
||||
"LAYOUT_numpad_6x4": {
|
||||
"key_count": 21,
|
||||
"layout": [
|
||||
{"label":"Esc", "x":0, "y":0},
|
||||
{"label":"Tab", "x":1, "y":0},
|
||||
@@ -33,35 +34,62 @@
|
||||
},
|
||||
|
||||
"LAYOUT_gamepad_6x4": {
|
||||
"key_count": 23,
|
||||
"layout": [
|
||||
{"label":"k00", "x":5, "y":0},
|
||||
{"label":"k01", "x":5, "y":1},
|
||||
{"label":"k02", "x":5, "y":2},
|
||||
{"label":"k03", "x":5, "y":3},
|
||||
{"label":"k10", "x":4, "y":0},
|
||||
{"label":"k11", "x":4, "y":1},
|
||||
{"label":"k12", "x":4, "y":2},
|
||||
{"label":"k13", "x":4, "y":3},
|
||||
{"label":"k20", "x":3, "y":0},
|
||||
{"label":"k21", "x":3, "y":1},
|
||||
{"label":"k22", "x":3, "y":2},
|
||||
{"label":"k30", "x":2, "y":0},
|
||||
{"label":"k31", "x":2, "y":1},
|
||||
{"label":"k32", "x":2, "y":2},
|
||||
{"label":"k23", "x":2, "y":3, "w":2},
|
||||
{"label":"k40", "x":1, "y":0},
|
||||
{"label":"k41", "x":1, "y":1},
|
||||
{"label":"k42", "x":1, "y":2},
|
||||
{"label":"k43", "x":1, "y":3},
|
||||
{"label":"k50", "x":0, "y":0},
|
||||
{"label":"k51", "x":0, "y":1},
|
||||
{"label":"k52", "x":0, "y":2},
|
||||
{"label":"k53", "x":0, "y":3}
|
||||
{"label":"k00", "x":0, "y":0},
|
||||
{"label":"k01", "x":1, "y":0},
|
||||
{"label":"k02", "x":2, "y":0},
|
||||
{"label":"k03", "x":3, "y":0},
|
||||
{"label":"k10", "x":0, "y":1},
|
||||
{"label":"k11", "x":1, "y":1},
|
||||
{"label":"k12", "x":2, "y":1},
|
||||
{"label":"k13", "x":3, "y":1},
|
||||
{"label":"k20", "x":0, "y":2},
|
||||
{"label":"k21", "x":1, "y":2},
|
||||
{"label":"k22", "x":2, "y":2},
|
||||
{"label":"k30", "x":0, "y":3},
|
||||
{"label":"k31", "x":1, "y":3},
|
||||
{"label":"k32", "x":2, "y":3},
|
||||
{"label":"k23", "x":3, "y":2, "h":2},
|
||||
{"label":"k40", "x":0, "y":4},
|
||||
{"label":"k41", "x":1, "y":4},
|
||||
{"label":"k42", "x":2, "y":4},
|
||||
{"label":"k43", "x":3, "y":4},
|
||||
{"label":"k50", "x":0, "y":5},
|
||||
{"label":"k51", "x":1, "y":5},
|
||||
{"label":"k52", "x":2, "y":5},
|
||||
{"label":"k53", "x":3, "y":5}
|
||||
]
|
||||
},
|
||||
|
||||
"LAYOUT_ortho_6x4": {
|
||||
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Tab", "x":1, "y":0}, {"label":"Fn", "x":2, "y":0}, {"label":"Back", "x":3, "y":0}, {"label":"Num Lock", "x":0, "y":1}, {"label":"/", "x":1, "y":1}, {"label":"*", "x":2, "y":1}, {"label":"-", "x":3, "y":1}, {"label":"7", "x":0, "y":2}, {"label":"8", "x":1, "y":2}, {"label":"9", "x":2, "y":2}, {"label":"+", "x":3, "y":2}, {"label":"4", "x":0, "y":3}, {"label":"5", "x":1, "y":3}, {"label":"6", "x":2, "y":3}, {"x":3, "y":3}, {"label":"1", "x":0, "y":4}, {"label":"2", "x":1, "y":4}, {"label":"3", "x":2, "y":4}, {"label":"Enter", "x":3, "y":4}, {"label":"0", "x":0, "y":5}, {"x":1, "y":5}, {"label":".", "x":2, "y":5}, {"x":3, "y":5}]
|
||||
"key_count": 24,
|
||||
"layout": [
|
||||
{"label":"k00", "x":0, "y":0},
|
||||
{"label":"k01", "x":1, "y":0},
|
||||
{"label":"k02", "x":2, "y":0},
|
||||
{"label":"k03", "x":3, "y":0},
|
||||
{"label":"k10", "x":0, "y":1},
|
||||
{"label":"k11", "x":1, "y":1},
|
||||
{"label":"k12", "x":2, "y":1},
|
||||
{"label":"k13", "x":3, "y":1},
|
||||
{"label":"k20", "x":0, "y":2},
|
||||
{"label":"k21", "x":1, "y":2},
|
||||
{"label":"k22", "x":2, "y":2},
|
||||
{"label":"k23", "x":3, "y":2},
|
||||
{"label":"k30", "x":0, "y":3},
|
||||
{"label":"k31", "x":1, "y":3},
|
||||
{"label":"k32", "x":2, "y":3},
|
||||
{"label":"k33", "x":3, "y":3},
|
||||
{"label":"k40", "x":0, "y":4},
|
||||
{"label":"k41", "x":1, "y":4},
|
||||
{"label":"k42", "x":2, "y":4},
|
||||
{"label":"k43", "x":3, "y":4},
|
||||
{"label":"k50", "x":0, "y":5},
|
||||
{"label":"k51", "x":1, "y":5},
|
||||
{"label":"k52", "x":2, "y":5},
|
||||
{"label":"k53", "x":3, "y":5}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,80 +1,60 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "led.h"
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
#define _BL 0
|
||||
#define _FL 1
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap _BL: (Base Layer) Default Layer
|
||||
* ,-------------------.
|
||||
* |Esc |TAB | FN | BS |
|
||||
* |----|----|----|----|
|
||||
* | NL | / | * | - |
|
||||
* |----|----|----|----|
|
||||
* | 7 | 8 | 9 | |
|
||||
* |----|----|----| + |
|
||||
* | 4 | 5 | 6 | |
|
||||
* |----|----|----|----|
|
||||
* | 1 | 2 | 3 | |
|
||||
* |----|----|----| En |
|
||||
* | 0 | . | |
|
||||
* `-------------------'
|
||||
*/
|
||||
|
||||
[_BL] = LAYOUT_numpad_6x4(
|
||||
KC_ESC, KC_TAB, MO(_FL), KC_BSPC, \
|
||||
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||
KC_P7, KC_P8, KC_P9, \
|
||||
KC_P4, KC_P5, KC_P6, KC_PPLS, \
|
||||
KC_P1, KC_P2, KC_P3, \
|
||||
KC_P0, KC_PDOT, KC_PENT),
|
||||
|
||||
/* Keymap _FL: Function Layer
|
||||
* ,-------------------.
|
||||
* |RGBT|TAB | FN | BS |
|
||||
* |----|----|----|----|
|
||||
* |RGBM|RGBP|BTOG| - |
|
||||
* |----|----|----|----|
|
||||
* |HUD |HUI |BON | |
|
||||
* |----|----|----| + |
|
||||
* |SAD |SAI |BOFF| |
|
||||
* |----|----|----|----|
|
||||
* |VAD |VAS | 3 | |
|
||||
* |----|----|----| En |
|
||||
* | 0 |RST | |
|
||||
* `-------------------'
|
||||
*/
|
||||
[_FL] = LAYOUT_numpad_6x4(
|
||||
RGB_TOG, KC_TAB, KC_TRNS, KC_BSPC, \
|
||||
RGB_MOD, RGB_M_P, BL_TOGG, KC_PMNS, \
|
||||
RGB_HUD, RGB_HUI, BL_ON, \
|
||||
RGB_SAD, RGB_SAI, BL_OFF, KC_PPLS, \
|
||||
RGB_VAD, RGB_VAI, KC_P3, \
|
||||
KC_P0, RESET, KC_PENT),
|
||||
enum layers {
|
||||
_BL = 0,
|
||||
_FL
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case BL_TOGG:
|
||||
if (record->event.pressed) {
|
||||
cospad_bl_led_togg();
|
||||
}
|
||||
return false;
|
||||
case BL_ON:
|
||||
if (record->event.pressed) {
|
||||
cospad_bl_led_on();
|
||||
}
|
||||
return false;
|
||||
case BL_OFF:
|
||||
if(record->event.pressed) {
|
||||
cospad_bl_led_off();
|
||||
}
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap _BL: (Base Layer) Default Layer
|
||||
* ,-------------------.
|
||||
* |Esc |TAB | FN | BS |
|
||||
* |----|----|----|----|
|
||||
* | NL | / | * | - |
|
||||
* |----|----|----|----|
|
||||
* | 7 | 8 | 9 | |
|
||||
* |----|----|----| + |
|
||||
* | 4 | 5 | 6 | |
|
||||
* |----|----|----|----|
|
||||
* | 1 | 2 | 3 | |
|
||||
* |----|----|----| En |
|
||||
* | 0 | . | |
|
||||
* `-------------------'
|
||||
*/
|
||||
[_BL] = LAYOUT_numpad_6x4(
|
||||
KC_ESC, KC_TAB, MO(_FL), KC_BSPC, \
|
||||
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||
KC_P7, KC_P8, KC_P9, \
|
||||
KC_P4, KC_P5, KC_P6, KC_PPLS, \
|
||||
KC_P1, KC_P2, KC_P3, \
|
||||
KC_P0, KC_PDOT, KC_PENT
|
||||
),
|
||||
|
||||
/* Keymap _FL: Function Layer
|
||||
* ,-------------------.
|
||||
* |RGBT| | | |
|
||||
* |----|----|----|----|
|
||||
* |RGBM|RGBP|BTOG| |
|
||||
* |----|----|----|----|
|
||||
* |HUD |HUI |BON | |
|
||||
* |----|----|----| |
|
||||
* |SAD |SAI |BOFF| |
|
||||
* |----|----|----|----|
|
||||
* |VAD |VAS |BSTP| |
|
||||
* |----|----|----| |
|
||||
* | |RST | |
|
||||
* `-------------------'
|
||||
*/
|
||||
[_FL] = LAYOUT_numpad_6x4(
|
||||
RGB_TOG, _______, _______, _______, \
|
||||
RGB_MOD, RGB_M_P, BL_TOGG, _______, \
|
||||
RGB_HUD, RGB_HUI, BL_ON, \
|
||||
RGB_SAD, RGB_SAI, BL_OFF, _______, \
|
||||
RGB_VAD, RGB_VAI, BL_STEP, \
|
||||
_______, RESET, _______
|
||||
),
|
||||
};
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
|
||||
# MCU name
|
||||
#MCU = at90usb1287
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
@@ -40,27 +39,43 @@ F_USB = $(F_CPU)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# atmega32a bootloadHID
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870)
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150)
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
BACKLIGHT_CUSTOM_DRIVER = yes
|
||||
RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870)
|
||||
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
|
||||
|
||||
|
||||
LAYOUTS = numpad_6x4 ortho_6x4
|
||||
|
||||
@@ -2,10 +2,6 @@
|
||||
|
||||
Non official firmware for custom Korean keyboard with 60% key layout made by Duck.
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
|
||||
|
||||
Newest version is the [Eagle/Viper V2](http://duck0113.tistory.com/127)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make duck/eagle_viper/v2: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).
|
||||
|
||||
@@ -123,31 +123,27 @@ void matrix_print(void) {
|
||||
}
|
||||
}
|
||||
|
||||
/* Row pin configuration
|
||||
* row: 0 1 2 3 4 5
|
||||
* pin: PB7 PD0 PD1 PD2 PD3 PD5
|
||||
/* Row pin configuration - diode connected
|
||||
* row: 0 1 2 3 4
|
||||
* pin: PD0 PD1 PD2 PD3 PD5
|
||||
*
|
||||
* Esc uses its own pin PE2
|
||||
* Caps Lock uses its own pin PE2 on the column pin, row pin is grounded
|
||||
*/
|
||||
static void init_rows(void) {
|
||||
DDRD &= ~0b00101111;
|
||||
PORTD &= ~0b00101111;
|
||||
|
||||
DDRB &= ~0b10000000;
|
||||
PORTB &= ~0b10000000;
|
||||
|
||||
DDRE &= ~0b00000100;
|
||||
PORTE |= 0b00000100;
|
||||
}
|
||||
|
||||
static uint8_t read_rows(uint8_t col) {
|
||||
|
||||
return (PIND&(1<<0) ? (1<<0) : 0) |
|
||||
return (PIND&(1<<0) ? (1<<0) : 0) |
|
||||
(PIND&(1<<1) ? (1<<1) : 0) |
|
||||
(PIND&(1<<2) ? (1<<2) : 0) |
|
||||
(PIND&(1<<3) ? (1<<3) : 0) |
|
||||
(PIND&(1<<5) ? (1<<4) : 0) |
|
||||
(PINB&(1<<7) ? (1<<5) : 0) |
|
||||
(col==0 ? ((PINE&(1<<2) ? 0 : (1<<2))) : 0);
|
||||
|
||||
}
|
||||
@@ -158,24 +154,31 @@ uint8_t read_fwkey(void)
|
||||
}
|
||||
|
||||
/* Columns 0 - 15
|
||||
*
|
||||
* atmega32u4 decoder pin
|
||||
* PC6 U1 E3
|
||||
* PB6 U2 E3
|
||||
* PF0 U1, U2 A0
|
||||
* PF1 U1, U2 A1
|
||||
* PC7 U1, U2 A2
|
||||
*
|
||||
* These columns uses two 74HC237D 3 to 8 bit demultiplexers.
|
||||
* col / pin: PC6 PB6 PF0 PF1 PC7
|
||||
* 0: 1 0 0 0 0
|
||||
* 1: 1 0 1 0 0
|
||||
* 2: 1 0 0 1 0
|
||||
* 3: 1 0 1 1 0
|
||||
* 4: 1 0 0 0 1
|
||||
* 5: 1 0 1 0 1
|
||||
* 6: 1 0 0 1 1
|
||||
* 7: 1 0 1 1 1
|
||||
* 8: 0 1 0 0 0
|
||||
* 9: 0 1 1 0 0
|
||||
* 10: 0 1 0 1 0
|
||||
* 11: 0 1 1 1 0
|
||||
* 12: 0 1 0 0 1
|
||||
* 13: 0 1 1 0 1
|
||||
* 14: 0 1 0 1 1
|
||||
* 15: 0 1 1 1 1
|
||||
* col / pin: PC6 PB6 PF0 PF1 PC7 Decoder Pin
|
||||
* 0: 1 0 0 0 0 U1 Y0
|
||||
* 1: 1 0 1 0 0 U1 Y1
|
||||
* 2: 1 0 0 1 0 U1 Y2
|
||||
* 3: 1 0 1 1 0 U1 Y3
|
||||
* 4: 1 0 0 0 1 U1 Y4
|
||||
* 5: 1 0 1 0 1 U1 Y5
|
||||
* 6: 1 0 0 1 1 U1 Y6
|
||||
* 7: 1 0 1 1 1 U1 Y7
|
||||
* 8: 0 1 0 0 0 U2 Y0
|
||||
* 9: 0 1 1 0 0 U2 Y1
|
||||
* 10: 0 1 0 1 0 U2 Y2
|
||||
* 11: 0 1 1 1 0 U2 Y3
|
||||
* 12: 0 1 0 0 1 U2 Y4
|
||||
* 13: 0 1 1 0 1 U2 Y5
|
||||
* 14: 0 1 0 1 1 U2 Y6
|
||||
*
|
||||
*/
|
||||
static void unselect_cols(void) {
|
||||
@@ -251,10 +254,5 @@ static void select_col(uint8_t col) {
|
||||
PORTF |= 0b00000010;
|
||||
PORTC |= 0b10000000;
|
||||
break;
|
||||
case 15:
|
||||
PORTB |= 0b01000000;
|
||||
PORTF |= 0b00000011;
|
||||
PORTC |= 0b10000000;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
**Reset Key:** To put the Eagle/Viper V2 into reset, hold caps lock key (`K2A`) while plugging in.
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
|
||||
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).
|
||||
|
||||
## Hardware Notes
|
||||
|
||||
|
||||
@@ -33,17 +33,10 @@ USE_FPU = yes
|
||||
# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
|
||||
OPT_DEFS =
|
||||
|
||||
# Do not put the microcontroller into power saving mode
|
||||
# when we get USB suspend event. We want it to keep updating
|
||||
# backlight effects.
|
||||
OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
|
||||
|
||||
# Options to pass to dfu-util when flashing
|
||||
DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
|
||||
BACKLIGHT_ENABLE = no
|
||||
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
|
||||
50
keyboards/emptystring/NQG/info.json
Normal file
50
keyboards/emptystring/NQG/info.json
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"keyboard_name": "NQG (Not Quite Gherkin)",
|
||||
"url": "",
|
||||
"maintainer": "culturalsnow",
|
||||
"width": 11,
|
||||
"height": 4,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label":"Q", "x":1, "y":0},
|
||||
{"label":"W", "x":2, "y":0},
|
||||
{"label":"E", "x":3, "y":0},
|
||||
{"label":"R", "x":4, "y":0},
|
||||
{"label":"T", "x":5, "y":0},
|
||||
{"label":"Y", "x":6, "y":0},
|
||||
{"label":"U", "x":7, "y":0},
|
||||
{"label":"I", "x":8, "y":0},
|
||||
{"label":"O", "x":9, "y":0},
|
||||
{"label":"P", "x":10, "y":0},
|
||||
{"label":"A", "x":1, "y":1},
|
||||
{"label":"S", "x":2, "y":1},
|
||||
{"label":"D", "x":3, "y":1},
|
||||
{"label":"F", "x":4, "y":1},
|
||||
{"label":"G", "x":5, "y":1},
|
||||
{"label":"H", "x":6, "y":1},
|
||||
{"label":"J", "x":7, "y":1},
|
||||
{"label":"K", "x":8, "y":1},
|
||||
{"label":"L", "x":9, "y":1},
|
||||
{"label":"; '", "x":10, "y":1},
|
||||
{"label":"Z", "x":1, "y":2},
|
||||
{"label":"X", "x":2, "y":2},
|
||||
{"label":"C", "x":3, "y":2},
|
||||
{"label":"V", "x":4, "y":2},
|
||||
{"label":"B", "x":5, "y":2},
|
||||
{"label":"N", "x":6, "y":2},
|
||||
{"label":"M", "x":7, "y":2},
|
||||
{"label":",", "x":8, "y":2},
|
||||
{"label":".", "x":9, "y":2},
|
||||
{"label":"/ Enter", "x":10, "y":2},
|
||||
{"label":"Shift / Tab", "x":0, "y":2},
|
||||
{"label":"LT(_LOWER, KC_ESC)", "x":3, "y":3},
|
||||
{"label":"Ctrl / Backspace", "x":4, "y":3},
|
||||
{"label":"Ctrl / Backspace", "x":5, "y":3},
|
||||
{"label":"Space", "x":6, "y":3},
|
||||
{"label":"Space", "x":7, "y":3},
|
||||
{"label":"MO(_RAISE)", "x":8, "y":3}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
NQG (Not Quite Gherkin) is a 30% ortholinear keyboard with a macro key and dedicated row for thumb keys, made by emptystring studio.
|
||||
|
||||
Keyboard Maintainer: [Culturalsnow](http://github.com/culturalsnow)
|
||||
Keyboard Maintainer: [Culturalsnow](http://github.com/culturalsnow)
|
||||
Hardware Supported: NQG PCB, Pro Micro
|
||||
Hardware Availability: Kits are available from [SA_EndlessGame](http://twitter.com/SA_EndlessGame)
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
k01, k02, k75, k08, k09 \
|
||||
) \
|
||||
{ \
|
||||
{ KC_NO, k01, k02, KC_NO, KC_NO, k05, KC_NO, KC_NO, k08, k09, KC_NO }, \
|
||||
{ KC_NO, k01, k02, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, k08, k09, KC_NO }, \
|
||||
{ k10, k11, k12, k13, k14, k15, KC_NO, KC_NO, k18, k19, KC_NO }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, KC_NO, k28, k29, KC_NO }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, KC_NO }, \
|
||||
|
||||
@@ -43,20 +43,20 @@ uint8_t init_mcp23018(void) {
|
||||
// - unused : input : 1
|
||||
// - input : input : 1
|
||||
// - driving : output : 0
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(IODIRA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b10000000, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(IODIRA, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b10000000, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b11111111, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
i2c_stop();
|
||||
|
||||
// set pull-up
|
||||
// - unused : on : 1
|
||||
// - input : on : 1
|
||||
// - driving : off : 0
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(GPPUA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b10000000, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(GPPUA, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b10000000, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b11111111, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
|
||||
out:
|
||||
i2c_stop();
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
#pragma once
|
||||
#include <util/delay.h>
|
||||
|
||||
#include "quantum.h"
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "quantum.h"
|
||||
#include "i2c_master.h"
|
||||
#include "matrix.h"
|
||||
#include <util/delay.h>
|
||||
|
||||
|
||||
extern i2c_status_t mcp23018_status;
|
||||
#define ERGODOX_EZ_I2C_TIMEOUT 1000
|
||||
#define I2C_TIMEOUT 1000
|
||||
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
|
||||
#define CPU_16MHz 0x00
|
||||
|
||||
@@ -26,18 +26,14 @@ extern i2c_status_t mcp23018_status;
|
||||
#define OLATA 0x14 // output latch register
|
||||
#define OLATB 0x15
|
||||
|
||||
void init_ergodox(void);
|
||||
uint8_t init_mcp23018(void);
|
||||
|
||||
/* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */
|
||||
#define LAYOUT_GERGO( \
|
||||
#define LAYOUT_gergo( \
|
||||
L00,L01,L02,L03,L04,L05, R00,R01,R02,R03,R04,R05, \
|
||||
L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \
|
||||
L20,L21,L22,L23,L24,L25,L26, R20,R21,R22,R23,R24,R25,R26, \
|
||||
L31,L32, R33,R34, \
|
||||
L30, R30, \
|
||||
L33,L34, R31,R32) \
|
||||
\
|
||||
L20,L21,L22,L23,L24,L25,L26,L30, R30,R20,R21,R22,R23,R24,R25,R26, \
|
||||
L31,L32,L33,L34, R31,R32,R33,R34) \
|
||||
/* matrix positions */ \
|
||||
{ \
|
||||
{ KC_NO, L16, L26, L30}, \
|
||||
|
||||
@@ -1,178 +0,0 @@
|
||||
#ifndef _I2CMASTER_H
|
||||
#define _I2CMASTER_H 1
|
||||
/*************************************************************************
|
||||
* Title: C include file for the I2C master interface
|
||||
* (i2cmaster.S or twimaster.c)
|
||||
* Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
|
||||
* File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $
|
||||
* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
|
||||
* Target: any AVR device
|
||||
* Usage: see Doxygen manual
|
||||
**************************************************************************/
|
||||
|
||||
#ifdef DOXYGEN
|
||||
/**
|
||||
@defgroup pfleury_ic2master I2C Master library
|
||||
@code #include <i2cmaster.h> @endcode
|
||||
|
||||
@brief I2C (TWI) Master Software Library
|
||||
|
||||
Basic routines for communicating with I2C slave devices. This single master
|
||||
implementation is limited to one bus master on the I2C bus.
|
||||
|
||||
This I2c library is implemented as a compact assembler software implementation of the I2C protocol
|
||||
which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c).
|
||||
Since the API for these two implementations is exactly the same, an application can be linked either against the
|
||||
software I2C implementation or the hardware I2C implementation.
|
||||
|
||||
Use 4.7k pull-up resistor on the SDA and SCL pin.
|
||||
|
||||
Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module
|
||||
i2cmaster.S to your target when using the software I2C implementation !
|
||||
|
||||
Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion.
|
||||
|
||||
@note
|
||||
The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted
|
||||
to GNU assembler and AVR-GCC C call interface.
|
||||
Replaced the incorrect quarter period delays found in AVR300 with
|
||||
half period delays.
|
||||
|
||||
@author Peter Fleury pfleury@gmx.ch http://jump.to/fleury
|
||||
|
||||
@par API Usage Example
|
||||
The following code shows typical usage of this library, see example test_i2cmaster.c
|
||||
|
||||
@code
|
||||
|
||||
#include <i2cmaster.h>
|
||||
|
||||
|
||||
#define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet
|
||||
|
||||
int main(void)
|
||||
{
|
||||
unsigned char ret;
|
||||
|
||||
i2c_init(); // initialize I2C library
|
||||
|
||||
// write 0x75 to EEPROM address 5 (Byte Write)
|
||||
i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode
|
||||
i2c_write(0x05); // write address = 5
|
||||
i2c_write(0x75); // write value 0x75 to EEPROM
|
||||
i2c_stop(); // set stop conditon = release bus
|
||||
|
||||
|
||||
// read previously written value back from EEPROM address 5
|
||||
i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode
|
||||
|
||||
i2c_write(0x05); // write address = 5
|
||||
i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode
|
||||
|
||||
ret = i2c_readNak(); // read one byte from EEPROM
|
||||
i2c_stop();
|
||||
|
||||
for(;;);
|
||||
}
|
||||
@endcode
|
||||
|
||||
*/
|
||||
#endif /* DOXYGEN */
|
||||
|
||||
/**@{*/
|
||||
|
||||
#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304
|
||||
#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !"
|
||||
#endif
|
||||
|
||||
#include <avr/io.h>
|
||||
|
||||
/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
|
||||
#define I2C_READ 1
|
||||
|
||||
/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
|
||||
#define I2C_WRITE 0
|
||||
|
||||
|
||||
/**
|
||||
@brief initialize the I2C master interace. Need to be called only once
|
||||
@param void
|
||||
@return none
|
||||
*/
|
||||
void i2c_init(void);
|
||||
|
||||
|
||||
/**
|
||||
@brief Terminates the data transfer and releases the I2C bus
|
||||
@param void
|
||||
@return none
|
||||
*/
|
||||
void i2c_stop(void);
|
||||
|
||||
|
||||
/**
|
||||
@brief Issues a start condition and sends address and transfer direction
|
||||
|
||||
@param addr address and transfer direction of I2C device
|
||||
@retval 0 device accessible
|
||||
@retval 1 failed to access device
|
||||
*/
|
||||
unsigned char i2c_start(unsigned char addr);
|
||||
|
||||
|
||||
/**
|
||||
@brief Issues a repeated start condition and sends address and transfer direction
|
||||
|
||||
@param addr address and transfer direction of I2C device
|
||||
@retval 0 device accessible
|
||||
@retval 1 failed to access device
|
||||
*/
|
||||
unsigned char i2c_rep_start(unsigned char addr);
|
||||
|
||||
|
||||
/**
|
||||
@brief Issues a start condition and sends address and transfer direction
|
||||
|
||||
If device is busy, use ack polling to wait until device ready
|
||||
@param addr address and transfer direction of I2C device
|
||||
@return none
|
||||
*/
|
||||
void i2c_start_wait(unsigned char addr);
|
||||
|
||||
|
||||
/**
|
||||
@brief Send one byte to I2C device
|
||||
@param data byte to be transfered
|
||||
@retval 0 write successful
|
||||
@retval 1 write failed
|
||||
*/
|
||||
unsigned char i2c_write(unsigned char data);
|
||||
|
||||
|
||||
/**
|
||||
@brief read one byte from the I2C device, request more data from device
|
||||
@return byte read from I2C device
|
||||
*/
|
||||
unsigned char i2c_readAck(void);
|
||||
|
||||
/**
|
||||
@brief read one byte from the I2C device, read is followed by a stop condition
|
||||
@return byte read from I2C device
|
||||
*/
|
||||
unsigned char i2c_readNak(void);
|
||||
|
||||
/**
|
||||
@brief read one byte from the I2C device
|
||||
|
||||
Implemented as a macro, which calls either i2c_readAck or i2c_readNak
|
||||
|
||||
@param ack 1 send ack, request more data from device<br>
|
||||
0 send nak, read is followed by a stop condition
|
||||
@return byte read from I2C device
|
||||
*/
|
||||
unsigned char i2c_read(unsigned char ack);
|
||||
#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
|
||||
|
||||
|
||||
/**@}*/
|
||||
#endif
|
||||
@@ -5,7 +5,7 @@
|
||||
"keyboard_name": "Gergo",
|
||||
"url": "http://gboards.ca",
|
||||
"layouts": {
|
||||
"LAYOUT_GERGO": {
|
||||
"LAYOUT_gergo": {
|
||||
"layout": [
|
||||
{
|
||||
"label": "L00",
|
||||
@@ -180,6 +180,16 @@
|
||||
"x": 6.5,
|
||||
"y": 1.75
|
||||
},
|
||||
{
|
||||
"label": "L30",
|
||||
"x": 8.25,
|
||||
"y": 2.75
|
||||
},
|
||||
{
|
||||
"label": "R30",
|
||||
"x": 10.25,
|
||||
"y": 2.75
|
||||
},
|
||||
{
|
||||
"h": 1.5,
|
||||
"label": "R20",
|
||||
@@ -227,26 +237,6 @@
|
||||
"x": 6,
|
||||
"y": 3.63
|
||||
},
|
||||
{
|
||||
"label": "R33",
|
||||
"x": 12.5,
|
||||
"y": 3.63
|
||||
},
|
||||
{
|
||||
"label": "R34",
|
||||
"x": 13.75,
|
||||
"y": 3.25
|
||||
},
|
||||
{
|
||||
"label": "L30",
|
||||
"x": 8.25,
|
||||
"y": 2.75
|
||||
},
|
||||
{
|
||||
"label": "R30",
|
||||
"x": 10.25,
|
||||
"y": 2.75
|
||||
},
|
||||
{
|
||||
"h": 2,
|
||||
"label": "L33",
|
||||
@@ -270,6 +260,16 @@
|
||||
"label": "R32",
|
||||
"x": 11.25,
|
||||
"y": 3.75
|
||||
},
|
||||
{
|
||||
"label": "R33",
|
||||
"x": 12.5,
|
||||
"y": 3.63
|
||||
},
|
||||
{
|
||||
"label": "R34",
|
||||
"x": 13.75,
|
||||
"y": 3.25
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
3
keyboards/gergo/keymaps/default/config.h
Normal file
3
keyboards/gergo/keymaps/default/config.h
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Good on you for modifying your layout! if you don't have
|
||||
/* Good on you for modifying your layout! if you don't have
|
||||
* time to read the QMK docs, a list of keycodes can be found at
|
||||
*
|
||||
* https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
#define BASE 0 // default layer
|
||||
#define SYMB 1 // symbols
|
||||
#define NUMB 2 // numbers/motion
|
||||
@@ -41,15 +40,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | | | |
|
||||
* `--------------' `--------------'
|
||||
*/
|
||||
[BASE] = LAYOUT_GERGO(
|
||||
LT(NUMB, KC_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PIPE,
|
||||
MT(MOD_LCTL, KC_BSPC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_BTN2, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BTN1, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
|
||||
|
||||
MT(MOD_LGUI, KC_DEL), MT(MOD_LALT, KC_ENT), KC_TAB, KC_BSPC,
|
||||
|
||||
KC_BTN3, KC_PGDN,
|
||||
LT(SYMB, KC_SPC), LT(NUMB, KC_ESC), LT(SYMB, KC_ENT), LT(NUMB, KC_SPC)),
|
||||
[BASE] = LAYOUT_gergo(
|
||||
LT(NUMB, KC_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PIPE,
|
||||
MT(MOD_LCTL, KC_BSPC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_BTN2, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BTN1, KC_BTN3, KC_PGDN, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
|
||||
MT(MOD_LGUI, KC_DEL), MT(MOD_LALT, KC_ENT), LT(SYMB, KC_SPC), LT(NUMB, KC_ESC), LT(SYMB, KC_ENT), LT(NUMB, KC_SPC), KC_TAB, KC_BSPC
|
||||
),
|
||||
/* Keymap 1: Symbols layer
|
||||
*
|
||||
* ,-------------------------------------------. ,-------------------------------------------.
|
||||
@@ -70,14 +66,12 @@ KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BTN1, KC_BSP
|
||||
* | | | | | |
|
||||
* `--------------' `--------------'
|
||||
*/
|
||||
[SYMB] = LAYOUT_GERGO(
|
||||
KC_TRNS, KC_EXLM, KC_AT, KC_LCBR,KC_RCBR, KC_PIPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS,
|
||||
KC_TRNS, KC_HASH, KC_DLR, KC_LPRN,KC_RPRN, KC_GRV, KC_TRNS, KC_TRNS, KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_PERC, KC_QUOT,
|
||||
KC_TRNS, KC_PERC, KC_CIRC,KC_LBRC,KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
|
||||
|
||||
KC_TRNS, KC_TRNS, KC_PGUP, KC_DEL,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_SCLN, KC_EQL, KC_EQL, KC_SCLN),
|
||||
[SYMB] = LAYOUT_gergo(
|
||||
KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS,
|
||||
KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_TRNS, KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_PERC, KC_QUOT,
|
||||
KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
|
||||
KC_TRNS, KC_TRNS, KC_SCLN, KC_EQL, KC_EQL, KC_SCLN, KC_PGUP, KC_DEL
|
||||
),
|
||||
/* Keymap 2: Pad/Function layer
|
||||
*
|
||||
* ,-------------------------------------------. ,-------------------------------------------.
|
||||
@@ -98,17 +92,15 @@ KC_TRNS, KC_PERC, KC_CIRC,KC_LBRC,KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_
|
||||
* | | | | | |
|
||||
* `--------------' `--------------'
|
||||
*/
|
||||
[NUMB] = LAYOUT_GERGO(
|
||||
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
|
||||
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLD, KC_VOLU,
|
||||
KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_MPLY, KC_MNXT,
|
||||
|
||||
KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
|
||||
[NUMB] = LAYOUT_gergo(
|
||||
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
|
||||
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLD, KC_VOLU,
|
||||
KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_MPLY, KC_MNXT,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
};
|
||||
|
||||
/* Keymap template
|
||||
/* Keymap template
|
||||
*
|
||||
* ,-------------------------------------------. ,-------------------------------------------.
|
||||
* | | | | | | | | | | | | | |
|
||||
@@ -127,25 +119,10 @@ KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, K
|
||||
* | | | | | |
|
||||
* | | | | | |
|
||||
* `--------------' `--------------'
|
||||
[SYMB] = LAYOUT_GERGO(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
[SYMB] = LAYOUT_gergo(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
)
|
||||
*/
|
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) {
|
||||
|
||||
};
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
//uint8_t layer = biton32(layer_state);
|
||||
biton32(layer_state);
|
||||
};
|
||||
|
||||
|
||||
|
||||
119
keyboards/gergo/keymaps/drashna/keymap.c
Normal file
119
keyboards/gergo/keymaps/drashna/keymap.c
Normal file
@@ -0,0 +1,119 @@
|
||||
/* Good on you for modifying your layout! if you don't have
|
||||
* time to read the QMK docs, a list of keycodes can be found at
|
||||
*
|
||||
* https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md
|
||||
*
|
||||
* There's also a template for adding new layers at the bottom of this file!
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "drashna.h"
|
||||
|
||||
// Blank template at the bottom
|
||||
|
||||
enum customKeycodes {
|
||||
URL = 1
|
||||
};
|
||||
|
||||
#define LAYOUT_gergo_wrapper(...) LAYOUT_gergo(__VA_ARGS__)
|
||||
#define LAYOUT_gergo_base( \
|
||||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
|
||||
) \
|
||||
LAYOUT_gergo_wrapper( \
|
||||
KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_PIPE, \
|
||||
KC_TAB, ALT_T(K11), K12, K13, K14, K15, _______, _______, K16, K17, K18, K19, K1A, RGUI_T(KC_QUOT), \
|
||||
OS_LSFT, CTL_T(K21), K22, K23, K24, K25, _______, _______, _______, _______, K26, K27, K28, K29, CTL_T(K2A), OS_RSFT, \
|
||||
_______, _______, KC_SPC, LT(_LOWER, KC_BSPC), LT(_RAISE, KC_DEL), KC_ENT, _______, _______ \
|
||||
)
|
||||
|
||||
#define LAYOUT_gergo_base_wrapper(...) LAYOUT_gergo_base(__VA_ARGS__)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_QWERTY] = LAYOUT_gergo_base_wrapper(
|
||||
_________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
|
||||
_________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
|
||||
_________________QWERTY_L3_________________, _________________QWERTY_R3_________________
|
||||
),
|
||||
[_COLEMAK] = LAYOUT_gergo_base_wrapper(
|
||||
_________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
|
||||
_________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
|
||||
_________________COLEMAK_L3________________, _________________COLEMAK_R3________________
|
||||
),
|
||||
|
||||
[_DVORAK] = LAYOUT_gergo_base_wrapper(
|
||||
_________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
|
||||
_________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
|
||||
_________________DVORAK_L3_________________, _________________DVORAK_R3_________________
|
||||
),
|
||||
|
||||
[_WORKMAN] = LAYOUT_gergo_base_wrapper(
|
||||
_________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
|
||||
_________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
|
||||
_________________WORKMAN_L3________________, _________________WORKMAN_R3________________
|
||||
),
|
||||
|
||||
[_NORMAN] = LAYOUT_gergo_base_wrapper(
|
||||
_________________NORMAN_L1_________________, _________________NORMAN_L1_________________,
|
||||
_________________NORMAN_L2_________________, _________________NORMAN_R2_________________,
|
||||
_________________NORMAN_L3_________________, _________________NORMAN_R3_________________
|
||||
),
|
||||
|
||||
[_MALTRON] = LAYOUT_gergo_base_wrapper(
|
||||
_________________MALTRON_L1________________, _________________MALTRON_R1________________,
|
||||
_________________MALTRON_L2________________, _________________MALTRON_R2________________,
|
||||
_________________MALTRON_L3________________, _________________MALTRON_R3________________
|
||||
),
|
||||
|
||||
[_EUCALYN] = LAYOUT_gergo_base_wrapper(
|
||||
_________________EUCALYN_L1________________, _________________EUCALYN_R1________________,
|
||||
_________________EUCALYN_L2________________, _________________EUCALYN_R2________________,
|
||||
_________________EUCALYN_L3________________, _________________EUCALYN_R3________________
|
||||
),
|
||||
|
||||
[_CARPLAX] = LAYOUT_gergo_base_wrapper(
|
||||
_____________CARPLAX_QFMLWY_L1_____________, _____________CARPLAX_QFMLWY_R1_____________,
|
||||
_____________CARPLAX_QFMLWY_L2_____________, _____________CARPLAX_QFMLWY_R2_____________,
|
||||
_____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
|
||||
),
|
||||
|
||||
[_MODS] = LAYOUT_gergo_wrapper(
|
||||
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
|
||||
_______, ___________________BLANK___________________, _______, _______, ___________________BLANK___________________, _______,
|
||||
KC_LSFT, ___________________BLANK___________________, _______, _______, _______, _______, ___________________BLANK___________________, KC_RSFT,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
[_LOWER] = LAYOUT_gergo_wrapper(
|
||||
KC_F12, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_F11,
|
||||
_______, _________________LOWER_L2__________________, _______, _______, _________________LOWER_R2__________________, KC_PIPE,
|
||||
_______, _________________LOWER_L3__________________, _______, _______, _______, _______, _________________LOWER_R3__________________, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_RAISE] = LAYOUT_gergo_wrapper(
|
||||
_______, _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
|
||||
_______, _________________RAISE_L2__________________, _______, _______, _________________RAISE_R2__________________, KC_BSLS,
|
||||
_______, _________________RAISE_L3__________________, _______, _______, _______, _______, _________________RAISE_R3__________________, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_ADJUST] = LAYOUT_gergo_wrapper(
|
||||
KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RESET,
|
||||
VRSN, _________________ADJUST_L2_________________, _______, KC_NUKE, _________________ADJUST_R2_________________, EEP_RST,
|
||||
_______, _________________ADJUST_L3_________________, _______, _______, _______, _______, _________________ADJUST_R3_________________, TG_MODS,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
};
|
||||
|
||||
/* Keymap template
|
||||
|
||||
[SYMB] = LAYOUT_gergo_wrapper(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
*/
|
||||
0
keyboards/gergo/keymaps/drashna/rules.mk
Normal file
0
keyboards/gergo/keymaps/drashna/rules.mk
Normal file
3
keyboards/gergo/keymaps/germ/config.h
Normal file
3
keyboards/gergo/keymaps/germ/config.h
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Good on you for modifying your layout! if you don't have
|
||||
/* Good on you for modifying your layout! if you don't have
|
||||
* time to read the QMK docs, a list of keycodes can be found at
|
||||
*
|
||||
* https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
#define BASE 0 // default layer
|
||||
#define SYMB 1 // symbols
|
||||
#define NUMB 2 // numbers/motion
|
||||
@@ -41,15 +40,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | | | |
|
||||
* `--------------' `--------------'
|
||||
*/
|
||||
[BASE] = LAYOUT_GERGO(
|
||||
LT(NUMB, KC_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PIPE,
|
||||
MT(MOD_LCTL, KC_BSPC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_BTN2, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BTN1, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
|
||||
|
||||
MT(MOD_LGUI, KC_DEL), MT(MOD_LALT, KC_ENT), KC_TAB, KC_BSPC,
|
||||
|
||||
KC_BTN3, KC_PGDN,
|
||||
LT(SYMB, KC_SPC), LT(NUMB, KC_ESC), LT(SYMB, KC_ENT), LT(NUMB, KC_SPC)),
|
||||
[BASE] = LAYOUT_gergo(
|
||||
LT(NUMB, KC_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PIPE,
|
||||
MT(MOD_LCTL, KC_BSPC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_BTN2, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BTN1, KC_BTN3, KC_PGDN, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
|
||||
MT(MOD_LGUI, KC_DEL), MT(MOD_LALT, KC_ENT), LT(SYMB, KC_SPC), LT(NUMB, KC_ESC), LT(SYMB, KC_ENT), LT(NUMB, KC_SPC), KC_TAB, KC_BSPC
|
||||
),
|
||||
/* Keymap 1: Symbols layer
|
||||
*
|
||||
* ,-------------------------------------------. ,-------------------------------------------.
|
||||
@@ -70,14 +66,12 @@ KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BTN1, KC_BSP
|
||||
* | | | | | |
|
||||
* `--------------' `--------------'
|
||||
*/
|
||||
[SYMB] = LAYOUT_GERGO(
|
||||
KC_TRNS, KC_EXLM, KC_AT, KC_LCBR,KC_RCBR, KC_PIPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS,
|
||||
KC_TRNS, KC_HASH, KC_DLR, KC_LPRN,KC_RPRN, KC_GRV, KC_TRNS, KC_TRNS, KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_PERC, KC_QUOT,
|
||||
KC_TRNS, KC_PERC, KC_CIRC,KC_LBRC,KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
|
||||
|
||||
KC_TRNS, KC_TRNS, KC_PGUP, KC_DEL,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_SCLN, KC_EQL, KC_EQL, KC_SCLN),
|
||||
[SYMB] = LAYOUT_gergo(
|
||||
KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS,
|
||||
KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_TRNS, KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_PERC, KC_QUOT,
|
||||
KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
|
||||
KC_TRNS, KC_TRNS, KC_SCLN, KC_EQL, KC_EQL, KC_SCLN, KC_PGUP, KC_DEL
|
||||
),
|
||||
/* Keymap 2: Pad/Function layer
|
||||
*
|
||||
* ,-------------------------------------------. ,-------------------------------------------.
|
||||
@@ -98,17 +92,15 @@ KC_TRNS, KC_PERC, KC_CIRC,KC_LBRC,KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_
|
||||
* | | | | | |
|
||||
* `--------------' `--------------'
|
||||
*/
|
||||
[NUMB] = LAYOUT_GERGO(
|
||||
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
|
||||
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLD, KC_VOLU,
|
||||
KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_MPLY, KC_MNXT,
|
||||
|
||||
KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
|
||||
[NUMB] = LAYOUT_gergo(
|
||||
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
|
||||
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLD, KC_VOLU,
|
||||
KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_MPLY, KC_MNXT,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
};
|
||||
|
||||
/* Keymap template
|
||||
/* Keymap template
|
||||
*
|
||||
* ,-------------------------------------------. ,-------------------------------------------.
|
||||
* | | | | | | | | | | | | | |
|
||||
@@ -127,25 +119,10 @@ KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, K
|
||||
* | | | | | |
|
||||
* | | | | | |
|
||||
* `--------------' `--------------'
|
||||
[SYMB] = LAYOUT_GERGO(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
[SYMB] = LAYOUT_gergo(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
)
|
||||
*/
|
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) {
|
||||
|
||||
};
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
//uint8_t layer = biton32(layer_state);
|
||||
biton32(layer_state);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -29,10 +29,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "util.h"
|
||||
#include "debounce.h"
|
||||
#include "pointing_device.h"
|
||||
#include QMK_KEYBOARD_H
|
||||
#ifdef DEBUG_MATRIX_SCAN_RATE
|
||||
#include "timer.h"
|
||||
# include "timer.h"
|
||||
#endif
|
||||
|
||||
#ifdef BALLER
|
||||
@@ -117,12 +118,11 @@ static matrix_row_t raw_matrix[MATRIX_ROWS];
|
||||
// Debouncing: store for each key the number of scans until it's eligible to
|
||||
// change. When scanning the matrix, ignore any changes in keys that have
|
||||
// already changed in the last DEBOUNCE scans.
|
||||
static uint8_t debounce_matrix[MATRIX_ROWS * MATRIX_COLS];
|
||||
|
||||
static matrix_row_t read_cols(uint8_t row);
|
||||
static void init_cols(void);
|
||||
static void unselect_rows(void);
|
||||
static void select_row(uint8_t row);
|
||||
static void init_cols(void);
|
||||
static void unselect_rows(void);
|
||||
static void select_row(uint8_t row);
|
||||
static void enableInterrupts(void);
|
||||
|
||||
static uint8_t mcp23018_reset_loop;
|
||||
@@ -134,11 +134,9 @@ uint32_t matrix_scan_count;
|
||||
#endif
|
||||
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_user(void) {}
|
||||
__attribute__ ((weak)) void matrix_init_user(void) {}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_scan_user(void) {}
|
||||
__attribute__ ((weak)) void matrix_scan_user(void) {}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_kb(void) {
|
||||
@@ -150,39 +148,28 @@ void matrix_scan_kb(void) {
|
||||
matrix_scan_user();
|
||||
}
|
||||
|
||||
inline
|
||||
uint8_t matrix_rows(void)
|
||||
{
|
||||
return MATRIX_ROWS;
|
||||
}
|
||||
inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
|
||||
|
||||
inline
|
||||
uint8_t matrix_cols(void)
|
||||
{
|
||||
return MATRIX_COLS;
|
||||
}
|
||||
inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
|
||||
|
||||
|
||||
void matrix_init(void)
|
||||
{
|
||||
void matrix_init(void) {
|
||||
// initialize row and col
|
||||
mcp23018_status = init_mcp23018();
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
matrix[i] = 0;
|
||||
raw_matrix[i] = 0;
|
||||
for (uint8_t j=0; j < MATRIX_COLS; ++j) {
|
||||
debounce_matrix[i * MATRIX_COLS + j] = 0;
|
||||
}
|
||||
}
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
matrix[i] = 0;
|
||||
raw_matrix[i] = 0;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_MATRIX_SCAN_RATE
|
||||
matrix_timer = timer_read32();
|
||||
matrix_timer = timer_read32();
|
||||
matrix_scan_count = 0;
|
||||
#endif
|
||||
debounce_init(MATRIX_ROWS);
|
||||
matrix_init_quantum();
|
||||
}
|
||||
|
||||
@@ -198,130 +185,120 @@ void matrix_power_up(void) {
|
||||
}
|
||||
|
||||
#ifdef DEBUG_MATRIX_SCAN_RATE
|
||||
matrix_timer = timer_read32();
|
||||
matrix_timer = timer_read32();
|
||||
matrix_scan_count = 0;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
// Returns a matrix_row_t whose bits are set if the corresponding key should be
|
||||
// eligible to change in this scan.
|
||||
matrix_row_t debounce_mask(matrix_row_t rawcols, uint8_t row) {
|
||||
matrix_row_t result = 0;
|
||||
matrix_row_t change = rawcols ^ raw_matrix[row];
|
||||
raw_matrix[row] = rawcols;
|
||||
for (uint8_t i = 0; i < MATRIX_COLS; ++i) {
|
||||
if (debounce_matrix[row * MATRIX_COLS + i]) {
|
||||
--debounce_matrix[row * MATRIX_COLS + i];
|
||||
} else {
|
||||
result |= (1 << i);
|
||||
}
|
||||
if (change & (1 << i)) {
|
||||
debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE;
|
||||
}
|
||||
// Reads and stores a row, returning
|
||||
// whether a change occurred.
|
||||
static inline bool store_raw_matrix_row(uint8_t index) {
|
||||
matrix_row_t temp = read_cols(index);
|
||||
if (raw_matrix[index] != temp) {
|
||||
raw_matrix[index] = temp;
|
||||
return true;
|
||||
}
|
||||
return result;
|
||||
return false;
|
||||
}
|
||||
|
||||
matrix_row_t debounce_read_cols(uint8_t row) {
|
||||
// Read the row without debouncing filtering and store it for later usage.
|
||||
matrix_row_t cols = read_cols(row);
|
||||
// Get the Debounce mask.
|
||||
matrix_row_t mask = debounce_mask(cols, row);
|
||||
// debounce the row and return the result.
|
||||
return (cols & mask) | (matrix[row] & ~mask);;
|
||||
}
|
||||
|
||||
uint8_t matrix_scan(void)
|
||||
{
|
||||
// TODO: Find what is trashing interrupts
|
||||
enableInterrupts();
|
||||
|
||||
// First we handle the mouse inputs
|
||||
#ifdef BALLER
|
||||
uint8_t pBtn = PINE & TRKBTN;
|
||||
uint8_t matrix_scan(void) {
|
||||
// TODO: Find what is trashing interrupts
|
||||
enableInterrupts();
|
||||
|
||||
#ifdef DEBUG_BALLER
|
||||
// Compare to previous, mod report
|
||||
if (tbUpCnt + tbDnCnt + tbLtCnt + tbRtCnt != 0)
|
||||
xprintf("U: %d D: %d L: %d R: %d B: %d\n", tbUpCnt, tbDnCnt, tbLtCnt, tbRtCnt, (trkBtnState >> 6));
|
||||
#endif
|
||||
// First we handle the mouse inputs
|
||||
#ifdef BALLER
|
||||
uint8_t pBtn = PINE & TRKBTN;
|
||||
|
||||
// Modify the report
|
||||
report_mouse_t pRprt = pointing_device_get_report();
|
||||
#ifdef DEBUG_BALLER
|
||||
// Compare to previous, mod report
|
||||
if (tbUpCnt + tbDnCnt + tbLtCnt + tbRtCnt != 0)
|
||||
xprintf("U: %d D: %d L: %d R: %d B: %d\n", tbUpCnt, tbDnCnt, tbLtCnt, tbRtCnt, (trkBtnState >> 6));
|
||||
#endif
|
||||
|
||||
// Scroll by default, move on layer
|
||||
if (layer_state == 0) {
|
||||
// Modify the report
|
||||
report_mouse_t pRprt = pointing_device_get_report();
|
||||
|
||||
// Scroll by default, move on layer
|
||||
if (layer_state == 0) {
|
||||
pRprt.h += tbLtCnt * SCROLLSTEP; tbLtCnt = 0;
|
||||
pRprt.h -= tbRtCnt * SCROLLSTEP; tbRtCnt = 0;
|
||||
pRprt.v -= tbUpCnt * SCROLLSTEP; tbUpCnt = 0;
|
||||
pRprt.v += tbDnCnt * SCROLLSTEP; tbDnCnt = 0;
|
||||
} else {
|
||||
} else {
|
||||
pRprt.x -= tbLtCnt * TRKSTEP * (layer_state - 1); tbLtCnt = 0;
|
||||
pRprt.x += tbRtCnt * TRKSTEP * (layer_state - 1); tbRtCnt = 0;
|
||||
pRprt.y -= tbUpCnt * TRKSTEP * (layer_state - 1); tbUpCnt = 0;
|
||||
pRprt.y += tbDnCnt * TRKSTEP * (layer_state - 1); tbDnCnt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG_BALLER
|
||||
if (pRprt.x != 0 || pRprt.y != 0)
|
||||
xprintf("X: %d Y: %d\n", pRprt.x, pRprt.y);
|
||||
#endif
|
||||
#ifdef DEBUG_BALLER
|
||||
if (pRprt.x != 0 || pRprt.y != 0)
|
||||
xprintf("X: %d Y: %d\n", pRprt.x, pRprt.y);
|
||||
#endif
|
||||
|
||||
if ((pBtn != trkBtnState) && ((pBtn >> 6) == 0)) pRprt.buttons |= MOUSE_BTN1;
|
||||
if ((pBtn != trkBtnState) && ((pBtn >> 6) == 1)) pRprt.buttons &= ~MOUSE_BTN1;
|
||||
if ((pBtn != trkBtnState) && ((pBtn >> 6) == 0)) pRprt.buttons |= MOUSE_BTN1;
|
||||
if ((pBtn != trkBtnState) && ((pBtn >> 6) == 1)) pRprt.buttons &= ~MOUSE_BTN1;
|
||||
|
||||
// Save state, push update
|
||||
if (pRprt.x != 0 || pRprt.y != 0 || pRprt.h != 0 || pRprt.v != 0 || (trkBtnState != pBtn))
|
||||
pointing_device_set_report(pRprt);
|
||||
// Save state, push update
|
||||
if (pRprt.x != 0 || pRprt.y != 0 || pRprt.h != 0 || pRprt.v != 0 || (trkBtnState != pBtn))
|
||||
pointing_device_set_report(pRprt);
|
||||
|
||||
trkBtnState = pBtn;
|
||||
#endif
|
||||
trkBtnState = pBtn;
|
||||
#endif
|
||||
|
||||
// Then the keyboard
|
||||
if (mcp23018_status) { // if there was an error
|
||||
if (++mcp23018_reset_loop == 0) {
|
||||
// if (++mcp23018_reset_loop >= 1300) {
|
||||
// since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
|
||||
// this will be approx bit more frequent than once per second
|
||||
print("trying to reset mcp23018\n");
|
||||
mcp23018_status = init_mcp23018();
|
||||
if (mcp23018_status) {
|
||||
print("left side not responding\n");
|
||||
} else {
|
||||
print("left side attached\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
// Then the keyboard
|
||||
if (mcp23018_status) { // if there was an error
|
||||
if (++mcp23018_reset_loop == 0) {
|
||||
// if (++mcp23018_reset_loop >= 1300) {
|
||||
// since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
|
||||
// this will be approx bit more frequent than once per second
|
||||
print("trying to reset mcp23018\n");
|
||||
mcp23018_status = init_mcp23018();
|
||||
if (mcp23018_status) {
|
||||
print("left side not responding\n");
|
||||
} else {
|
||||
print("left side attached\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG_MATRIX_SCAN_RATE
|
||||
matrix_scan_count++;
|
||||
|
||||
uint32_t timer_now = timer_read32();
|
||||
if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) {
|
||||
if (TIMER_DIFF_32(timer_now, matrix_timer) > 1000) {
|
||||
print("matrix scan frequency: ");
|
||||
pdec(matrix_scan_count);
|
||||
print("\n");
|
||||
|
||||
matrix_timer = timer_now;
|
||||
matrix_timer = timer_now;
|
||||
matrix_scan_count = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool changed = false;
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
|
||||
select_row(i);
|
||||
// and select on left hand
|
||||
select_row(i + MATRIX_ROWS_PER_SIDE);
|
||||
// select rows from left and right hands
|
||||
uint8_t left_index = i;
|
||||
uint8_t right_index = i + MATRIX_ROWS_PER_SIDE;
|
||||
select_row(left_index);
|
||||
select_row(right_index);
|
||||
|
||||
// we don't need a 30us delay anymore, because selecting a
|
||||
// left-hand row requires more than 30us for i2c.
|
||||
|
||||
// grab cols from left hand
|
||||
matrix[i] = debounce_read_cols(i);
|
||||
// grab cols from right hand
|
||||
matrix[i + MATRIX_ROWS_PER_SIDE] = debounce_read_cols(i + MATRIX_ROWS_PER_SIDE);
|
||||
changed |= store_raw_matrix_row(left_index);
|
||||
changed |= store_raw_matrix_row(right_index);
|
||||
|
||||
unselect_rows();
|
||||
}
|
||||
|
||||
debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
|
||||
matrix_scan_quantum();
|
||||
|
||||
enableInterrupts();
|
||||
|
||||
#ifdef DEBUG_MATRIX
|
||||
@@ -338,20 +315,11 @@ bool matrix_is_modified(void) // deprecated and evidently not called.
|
||||
return true;
|
||||
}
|
||||
|
||||
inline
|
||||
bool matrix_is_on(uint8_t row, uint8_t col)
|
||||
{
|
||||
return (matrix[row] & ((matrix_row_t)1<<col));
|
||||
}
|
||||
inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); }
|
||||
|
||||
inline
|
||||
matrix_row_t matrix_get_row(uint8_t row)
|
||||
{
|
||||
return matrix[row];
|
||||
}
|
||||
inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; }
|
||||
|
||||
void matrix_print(void)
|
||||
{
|
||||
void matrix_print(void) {
|
||||
print("\nr/c 0123456789ABCDEF\n");
|
||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||
phex(row); print(": ");
|
||||
@@ -360,8 +328,7 @@ void matrix_print(void)
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t matrix_key_count(void)
|
||||
{
|
||||
uint8_t matrix_key_count(void) {
|
||||
uint8_t count = 0;
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
count += bitpop16(matrix[i]);
|
||||
@@ -370,8 +337,7 @@ uint8_t matrix_key_count(void)
|
||||
}
|
||||
|
||||
// Remember this means ROWS
|
||||
static void init_cols(void)
|
||||
{
|
||||
static void init_cols(void) {
|
||||
// init on mcp23018
|
||||
// not needed, already done as part of init_mcp23018()
|
||||
|
||||
@@ -380,17 +346,16 @@ static void init_cols(void)
|
||||
PORTF |= FMASK;
|
||||
}
|
||||
|
||||
static matrix_row_t read_cols(uint8_t row)
|
||||
{
|
||||
static matrix_row_t read_cols(uint8_t row) {
|
||||
if (row < 7) {
|
||||
if (mcp23018_status) { // if there was an error
|
||||
return 0;
|
||||
} else {
|
||||
uint8_t data = 0;
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(GPIOB, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_start(I2C_ADDR_READ, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_read_nack(ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status < 0) goto out;
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(GPIOB, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_start(I2C_ADDR_READ, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_read_nack(I2C_TIMEOUT); if (mcp23018_status < 0) goto out;
|
||||
data = ~((uint8_t)mcp23018_status);
|
||||
mcp23018_status = I2C_STATUS_SUCCESS;
|
||||
out:
|
||||
@@ -440,9 +405,9 @@ static void select_row(uint8_t row)
|
||||
// select on mcp23018
|
||||
if (mcp23018_status) { // do nothing on error
|
||||
} else { // set active row low : 0 // set other rows hi-Z : 1
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(GPIOA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0xFF & ~(1<<row), ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(GPIOA, I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0xFF & ~(1<<row), I2C_TIMEOUT); if (mcp23018_status) goto out;
|
||||
out:
|
||||
i2c_stop();
|
||||
}
|
||||
|
||||
@@ -18,3 +18,5 @@ POINTING_DEVICE_ENABLE = yes
|
||||
EXTRAKEY_ENABLE = yes
|
||||
CONSOLE_ENABLE = yes
|
||||
COMMAND_ENABLE = yes
|
||||
|
||||
DEBOUNCE_TYPE = eager_pr
|
||||
|
||||
29
keyboards/kbdfans/kbd67/hotswap/keymaps/bcat/keymap.c
Normal file
29
keyboards/kbdfans/kbd67/hotswap/keymaps/bcat/keymap.c
Normal file
@@ -0,0 +1,29 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layer {
|
||||
LAYER_DEFAULT,
|
||||
LAYER_FUNCTION,
|
||||
};
|
||||
|
||||
/* Switch to function layer when held. */
|
||||
#define LY_FUNC MO(LAYER_FUNCTION)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Default layer: http://www.keyboard-layout-editor.com/#/gists/dd675b40cc4df2c7bb78847ac29f5988 */
|
||||
[LAYER_DEFAULT] = LAYOUT(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_HOME, \
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP, \
|
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, LY_FUNC, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
),
|
||||
|
||||
/* Function layer: http://www.keyboard-layout-editor.com/#/gists/f29128427f674c43777f045e363d1b44 */
|
||||
[LAYER_FUNCTION] = LAYOUT(
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, \
|
||||
_______, KC_MPLY, KC_VOLU, KC_MSTP, _______, _______, EEP_RST, _______, _______, KC_INS, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, _______, \
|
||||
KC_CAPS, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, KC_APP, _______, _______, _______, _______ \
|
||||
),
|
||||
};
|
||||
13
keyboards/kbdfans/kbd67/hotswap/keymaps/bcat/readme.md
Normal file
13
keyboards/kbdfans/kbd67/hotswap/keymaps/bcat/readme.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# bcat's Quefrency 65% layout
|
||||
|
||||
This is pretty much a stock 65% split keyboard layout, with an HHKB-style
|
||||
(split) backspace and media keys in the function layer centered around the WASD
|
||||
cluster.
|
||||
|
||||
## Default layer
|
||||
|
||||

|
||||
|
||||
## Function layer
|
||||
|
||||

|
||||
24
keyboards/keebio/quefrency/keymaps/bcat/config.h
Normal file
24
keyboards/keebio/quefrency/keymaps/bcat/config.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
/* Use I2C rather than serial communicaiton to reduce latency. */
|
||||
#define USE_I2C
|
||||
|
||||
/* Turn off RGB lighting when the host goes to sleep. */
|
||||
#define RGBLIGHT_SLEEP
|
||||
|
||||
/* Use an extra LED on the right side since it's wider on the 65% PCB. */
|
||||
#undef RGBLED_NUM
|
||||
#define RGBLED_NUM 17
|
||||
|
||||
/* Set up RGB lighting so it works with either side as master. */
|
||||
#define RGBLED_SPLIT { 8, 9 }
|
||||
|
||||
/* Make mouse operation smoother. */
|
||||
#define MOUSEKEY_DELAY 0
|
||||
#define MOUSEKEY_INTERVAL 16
|
||||
|
||||
/* Lower mouse speed to adjust for reduced MOUSEKEY_INTERVAL. */
|
||||
#define MOUSEKEY_MAX_SPEED 7
|
||||
#define MOUSEKEY_TIME_TO_MAX 150
|
||||
#define MOUSEKEY_WHEEL_MAX_SPEED 4
|
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 150
|
||||
42
keyboards/keebio/quefrency/keymaps/bcat/keymap.c
Normal file
42
keyboards/keebio/quefrency/keymaps/bcat/keymap.c
Normal file
@@ -0,0 +1,42 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layer {
|
||||
LAYER_DEFAULT,
|
||||
LAYER_FUNCTION,
|
||||
LAYER_MOUSE,
|
||||
};
|
||||
|
||||
/* Switch to function layer when held. */
|
||||
#define LY_FUNC MO(LAYER_FUNCTION)
|
||||
|
||||
/* Switch to mouse layer when held; send menu key when tapped. */
|
||||
#define LY_MOUSE LT(LAYER_MOUSE, KC_APP)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Default layer: http://www.keyboard-layout-editor.com/#/gists/60a262432bb340b37d364a4424f3037b */
|
||||
[LAYER_DEFAULT] = LAYOUT_65(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_HOME, \
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP, \
|
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, LY_FUNC, KC_SPC, KC_SPC, XXXXXXX, KC_RALT, LY_FUNC, LY_MOUSE, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
),
|
||||
|
||||
/* Function layer: http://www.keyboard-layout-editor.com/#/gists/59636898946da51f91fb290f8e078b4d */
|
||||
[LAYER_FUNCTION] = LAYOUT_65(
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_HUI, \
|
||||
_______, KC_MPLY, KC_VOLU, KC_MSTP, _______, _______, EEP_RST, _______, _______, KC_INS, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, RGB_SAI, \
|
||||
KC_CAPS, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SAD, \
|
||||
_______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, RGB_HUD, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD \
|
||||
),
|
||||
|
||||
/* Mouse layer: http://www.keyboard-layout-editor.com/#/gists/05b9fbe8a34f65ed85ded659b3941152 */
|
||||
[LAYER_MOUSE] = LAYOUT_65(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN3, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_U, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_D, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN3, KC_BTN1, KC_MS_U, KC_BTN2, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R \
|
||||
),
|
||||
};
|
||||
17
keyboards/keebio/quefrency/keymaps/bcat/readme.md
Normal file
17
keyboards/keebio/quefrency/keymaps/bcat/readme.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# bcat's Quefrency 65% layout
|
||||
|
||||
This is pretty much a stock 65% split keyboard layout, with an HHKB-style
|
||||
(split) backspace, media keys in the function layer centered around the WASD
|
||||
cluster, and mouse keys on their own layer centered around the arrow cluster.
|
||||
|
||||
## Default layer
|
||||
|
||||

|
||||
|
||||
## Function layer
|
||||
|
||||

|
||||
|
||||
## Mouse layer
|
||||
|
||||

|
||||
1
keyboards/keebio/quefrency/keymaps/bcat/rules.mk
Normal file
1
keyboards/keebio/quefrency/keymaps/bcat/rules.mk
Normal file
@@ -0,0 +1 @@
|
||||
MOUSEKEY_ENABLE = yes
|
||||
@@ -22,60 +22,60 @@ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
|
||||
* | | G location
|
||||
* | | | B location
|
||||
* | | | | */
|
||||
{0, A_12, B_12, C_12},
|
||||
{0, A_11, B_11, C_11},
|
||||
{0, A_10, B_10, C_10},
|
||||
{0, A_9, B_9, C_9},
|
||||
{0, A_8, B_8, C_8},
|
||||
{0, A_7, B_7, C_7},
|
||||
{0, B_12, A_12, C_12},
|
||||
{0, B_11, A_11, C_11},
|
||||
{0, B_10, A_10, C_10},
|
||||
{0, B_9, A_9, C_9},
|
||||
{0, B_8, A_8, C_8},
|
||||
{0, B_7, A_7, C_7},
|
||||
|
||||
{0, G_12, H_12, I_12},
|
||||
{0, G_11, H_11, I_11},
|
||||
{0, G_10, H_10, I_10},
|
||||
{0, G_9, H_9, I_9},
|
||||
{0, G_8, H_8, I_8},
|
||||
{0, G_7, H_7, I_7},
|
||||
{0, H_12, G_12, I_12},
|
||||
{0, H_11, G_11, I_11},
|
||||
{0, H_10, G_10, I_10},
|
||||
{0, H_9, G_9, I_9},
|
||||
{0, H_8, G_8, I_8},
|
||||
{0, H_7, G_7, I_7},
|
||||
|
||||
{0, A_6, B_6, C_6},
|
||||
{0, A_5, B_5, C_5},
|
||||
{0, A_4, B_4, C_4},
|
||||
{0, A_3, B_3, C_3},
|
||||
{0, A_2, B_2, C_2},
|
||||
{0, A_1, B_1, C_1},
|
||||
{0, B_6, A_6, C_6},
|
||||
{0, B_5, A_5, C_5},
|
||||
{0, B_4, A_4, C_4},
|
||||
{0, B_3, A_3, C_3},
|
||||
{0, B_2, A_2, C_2},
|
||||
{0, B_1, A_1, C_1},
|
||||
|
||||
{0, G_6, H_6, I_6},
|
||||
{0, G_5, H_5, I_5},
|
||||
{0, G_4, H_4, I_4},
|
||||
{0, G_3, H_3, I_3},
|
||||
{0, G_2, H_2, I_2},
|
||||
{0, G_1, H_1, I_1},
|
||||
{0, H_6, G_6, I_6},
|
||||
{0, H_5, G_5, I_5},
|
||||
{0, H_4, G_4, I_4},
|
||||
{0, H_3, G_3, I_3},
|
||||
{0, H_2, G_2, I_2},
|
||||
{0, H_1, G_1, I_1},
|
||||
|
||||
{0, D_12, E_12, F_12},
|
||||
{0, D_11, E_11, F_11},
|
||||
{0, D_10, E_10, F_10},
|
||||
{0, D_9, E_9, F_9},
|
||||
{0, D_8, E_8, F_8},
|
||||
{0, D_7, E_7, F_7},
|
||||
{0, E_12, D_12, F_12},
|
||||
{0, E_11, D_11, F_11},
|
||||
{0, E_10, D_10, F_10},
|
||||
{0, E_9, D_9, F_9},
|
||||
{0, E_8, D_8, F_8},
|
||||
{0, E_7, D_7, F_7},
|
||||
|
||||
{0, J_12, K_12, L_12},
|
||||
{0, J_11, K_11, L_11},
|
||||
{0, J_10, K_10, L_10},
|
||||
{0, J_9, K_9, L_9},
|
||||
{0, J_8, K_8, L_8},
|
||||
{0, J_7, K_7, L_7},
|
||||
{0, K_12, J_12, L_12},
|
||||
{0, K_11, J_11, L_11},
|
||||
{0, K_10, J_10, L_10},
|
||||
{0, K_9, J_9, L_9},
|
||||
{0, K_8, J_8, L_8},
|
||||
{0, K_7, J_7, L_7},
|
||||
|
||||
{0, D_6, E_6, F_6},
|
||||
{0, D_5, E_5, F_5},
|
||||
{0, D_4, E_4, F_4},
|
||||
{0, D_3, E_3, F_3},
|
||||
{0, D_2, E_2, F_2},
|
||||
{0, D_1, E_1, F_1},
|
||||
{0, E_6, D_6, F_6},
|
||||
{0, E_5, D_5, F_5},
|
||||
{0, E_4, D_4, F_4},
|
||||
{0, E_3, D_3, F_3},
|
||||
{0, E_2, D_2, F_2},
|
||||
{0, E_1, D_1, F_1},
|
||||
|
||||
{0, J_6, K_6, L_6},
|
||||
{0, J_5, K_5, L_5},
|
||||
{0, J_4, K_4, L_4},
|
||||
{0, J_3, K_3, L_3},
|
||||
{0, J_2, K_2, L_2},
|
||||
{0, K_6, J_6, L_6},
|
||||
{0, K_5, J_5, L_5},
|
||||
{0, K_4, J_4, L_4},
|
||||
{0, K_3, J_3, L_3},
|
||||
{0, K_2, J_2, L_2},
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#define MOUSEKEY_DELAY 0
|
||||
#define MOUSEKEY_INTERVAL 16
|
||||
#define MOUSEKEY_MAX_SPEED 10
|
||||
#define MOUSEKEY_TIME_TO_MAX 60
|
||||
#define MOUSEKEY_MAX_SPEED 20
|
||||
#define MOUSEKEY_TIME_TO_MAX 100
|
||||
#define MOUSEKEY_WHEEL_DELAY 0
|
||||
#define MOUSEKEY_WHEEL_MAX_SPEED 8
|
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 60
|
||||
#define MOUSEKEY_WHEEL_MAX_SPEED 1
|
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
|
||||
#include "planck.h"
|
||||
#include "action_layer.h"
|
||||
|
||||
@@ -38,28 +37,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
|
||||
* `-----------------------------------------------------------------------'
|
||||
*/
|
||||
[_COLEMAK] = {
|
||||
{
|
||||
KC_TAB, KC_Q, KC_W, KC_F,
|
||||
KC_P, KC_G, KC_J, KC_L,
|
||||
KC_U, KC_Y, KC_SCLN, KC_MINS
|
||||
},
|
||||
{
|
||||
KC_BSPC, KC_A, KC_R, KC_S,
|
||||
KC_T, KC_D, KC_H, KC_N,
|
||||
KC_E, KC_I, KC_O, KC_QUOT
|
||||
},
|
||||
{
|
||||
KC_LSFT, KC_Z, KC_X, KC_C,
|
||||
KC_V, KC_B, KC_K, KC_M,
|
||||
KC_COMM, KC_DOT, KC_SLSH, KC_RSFT
|
||||
},
|
||||
{
|
||||
FUNC, KC_LCTL, KC_LALT, KC_LGUI,
|
||||
SYMB, KC_ENT, KC_SPC, MOVE,
|
||||
KC_RGUI, KC_RALT, KC_RCTL, FUNC
|
||||
}
|
||||
},
|
||||
[_COLEMAK] = LAYOUT_planck_grid(
|
||||
KC_TAB, KC_Q, KC_W, KC_F,
|
||||
KC_P, KC_G, KC_J, KC_L,
|
||||
KC_U, KC_Y, KC_SCLN, KC_MINS,
|
||||
|
||||
KC_BSPC, KC_A, KC_R, KC_S,
|
||||
KC_T, KC_D, KC_H, KC_N,
|
||||
KC_E, KC_I, KC_O, KC_QUOT,
|
||||
|
||||
KC_LSFT, KC_Z, KC_X, KC_C,
|
||||
KC_V, KC_B, KC_K, KC_M,
|
||||
KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
|
||||
FUNC, KC_LCTL, KC_LALT, KC_LGUI,
|
||||
SYMB, KC_ENT, KC_SPC, MOVE,
|
||||
KC_RGUI, KC_RALT, KC_RCTL, FUNC
|
||||
),
|
||||
|
||||
/* QWERTY
|
||||
* ,-----------------------------------------------------------------------.
|
||||
@@ -72,96 +66,81 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
|
||||
* `-----------------------------------------------------------------------'
|
||||
*/
|
||||
[_QWERTY] = {
|
||||
{
|
||||
KC_TAB, KC_Q, KC_W, KC_E,
|
||||
KC_R, KC_T, KC_Y, KC_U,
|
||||
KC_I, KC_O, KC_P, KC_MINS
|
||||
},
|
||||
{
|
||||
KC_BSPC, KC_A, KC_S, KC_D,
|
||||
KC_F, KC_G, KC_H, KC_J,
|
||||
KC_K, KC_L, KC_SCLN, KC_QUOT
|
||||
},
|
||||
{
|
||||
KC_LSFT, KC_Z, KC_X, KC_C,
|
||||
KC_V, KC_B, KC_N, KC_M,
|
||||
KC_COMM, KC_DOT, KC_SLSH, KC_RSFT
|
||||
},
|
||||
{
|
||||
FUNC, KC_LCTL, KC_LALT, KC_LGUI,
|
||||
SYMB, KC_ENT, KC_SPC, MOVE,
|
||||
KC_RGUI, KC_RALT, KC_RCTL, FUNC
|
||||
}
|
||||
},
|
||||
[_QWERTY] = LAYOUT_planck_grid(
|
||||
KC_TAB, KC_Q, KC_W, KC_E,
|
||||
KC_R, KC_T, KC_Y, KC_U,
|
||||
KC_I, KC_O, KC_P, KC_MINS,
|
||||
|
||||
KC_BSPC, KC_A, KC_S, KC_D,
|
||||
KC_F, KC_G, KC_H, KC_J,
|
||||
KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
|
||||
KC_LSFT, KC_Z, KC_X, KC_C,
|
||||
KC_V, KC_B, KC_N, KC_M,
|
||||
KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
|
||||
FUNC, KC_LCTL, KC_LALT, KC_LGUI,
|
||||
SYMB, KC_ENT, KC_SPC, MOVE,
|
||||
KC_RGUI, KC_RALT, KC_RCTL, FUNC
|
||||
),
|
||||
|
||||
/* SYMB
|
||||
* ,-----------------------------------------------------------------------.
|
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
|
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |ndash|
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
|
||||
* | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ |
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* | | ~ | ` | + | = | | | \ | [ | ] | { | } | |
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* | | | | | | | |Mouse| | | | |
|
||||
* | | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------'
|
||||
*/
|
||||
[_SYMB] = {
|
||||
{
|
||||
KC_ESC, KC_1, KC_2, KC_3,
|
||||
KC_4, KC_5, KC_6, KC_7,
|
||||
KC_8, KC_9, KC_0, _______
|
||||
},
|
||||
{
|
||||
KC_DEL, KC_EXLM, KC_AT, KC_HASH,
|
||||
KC_DLR, KC_PERC, KC_CIRC, KC_AMPR,
|
||||
KC_ASTR, KC_LPRN, KC_RPRN, _______
|
||||
},
|
||||
{
|
||||
_______, KC_TILD, KC_GRV, KC_PLUS,
|
||||
KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC,
|
||||
KC_RBRC, KC_LCBR, KC_RCBR, _______
|
||||
},
|
||||
{
|
||||
_______, _______, _______, _______,
|
||||
_______, _______, _______, MOUSE,
|
||||
_______, _______, _______, _______
|
||||
}
|
||||
},
|
||||
[_SYMB] = LAYOUT_planck_grid(
|
||||
KC_ESC, KC_1, KC_2, KC_3,
|
||||
KC_4, KC_5, KC_6, KC_7,
|
||||
KC_8, KC_9, KC_0, A(KC_MINS),
|
||||
|
||||
KC_DEL, KC_EXLM, KC_AT, KC_HASH,
|
||||
KC_DLR, KC_PERC, KC_CIRC, KC_AMPR,
|
||||
KC_ASTR, KC_LPRN, KC_RPRN, A(KC_3),
|
||||
|
||||
_______, KC_TILD, KC_GRV, KC_PLUS,
|
||||
KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC,
|
||||
KC_RBRC, KC_LCBR, KC_RCBR, _______,
|
||||
|
||||
_______, _______, _______, _______,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* MOVE
|
||||
* ,-----------------------------------------------------------------------.
|
||||
* | | | | | | |CtrUp|Home | Up | End |Caps | Esc |
|
||||
* | | | | | | |CtrUp|Home | Up | End |Caps |Mouse|
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* | | | | | | |SpaL |Left |Down |Right|SpaR | Del |
|
||||
* | | | | | | |CtrL |Left |Down |Right|CtrR | |
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* | | | | | | |CtrDn|PgDn |PgUp |TabL |TabR | |
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* | | | | |Mouse| | | | | | | |
|
||||
* | | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------'
|
||||
*/
|
||||
[_MOVE] = {
|
||||
{
|
||||
AC(KC_A), AC(KC_B), AC(KC_C), AC(KC_D),
|
||||
AC(KC_E), AC(KC_F), C(KC_UP), KC_HOME,
|
||||
KC_UP, KC_END, KC_CAPS, KC_ESC
|
||||
},
|
||||
{
|
||||
AC(KC_G), AC(KC_H), AC(KC_I), AC(KC_J),
|
||||
AC(KC_K), AC(KC_L), C(KC_LEFT), KC_LEFT,
|
||||
KC_DOWN, KC_RGHT, C(KC_RIGHT), KC_DEL
|
||||
},
|
||||
{
|
||||
_______, AC(KC_M), AC(KC_N), AC(KC_O),
|
||||
AC(KC_P), AC(KC_Q), C(KC_DOWN), KC_PGDN,
|
||||
KC_PGUP, SC(KC_TAB), C(KC_TAB), _______
|
||||
},
|
||||
{
|
||||
_______, _______, _______, _______,
|
||||
MOUSE, _______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
}
|
||||
},
|
||||
[_MOVE] = LAYOUT_planck_grid(
|
||||
AC(KC_A), AC(KC_B), AC(KC_C), AC(KC_D),
|
||||
AC(KC_E), AC(KC_F), C(KC_UP), KC_HOME,
|
||||
KC_UP, KC_END, KC_CAPS, MOUSE,
|
||||
|
||||
AC(KC_G), AC(KC_H), AC(KC_I), AC(KC_J),
|
||||
AC(KC_K), AC(KC_L), C(KC_LEFT), KC_LEFT,
|
||||
KC_DOWN, KC_RGHT, C(KC_RIGHT), XXXXXXX,
|
||||
|
||||
_______, AC(KC_M), AC(KC_N), AC(KC_O),
|
||||
AC(KC_P), AC(KC_Q), C(KC_DOWN), KC_PGDN,
|
||||
KC_PGUP, SC(KC_TAB), C(KC_TAB), _______,
|
||||
|
||||
_______, _______, _______, _______,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* FUNC
|
||||
* ,-----------------------------------------------------------------------.
|
||||
@@ -169,67 +148,57 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* |Power| F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 |VolDn|
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* | | |Home |TabL |TabR |End | | | |Clmak|Qwrty| |
|
||||
* | | | | | | | | | |Clmak|Qwrty| |
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* | | | | |Prev |Mute |Play |Next | | | | |
|
||||
* `-----------------------------------------------------------------------'
|
||||
*/
|
||||
[_FUNC] = {
|
||||
{
|
||||
RESET, KC_F1, KC_F2, KC_F3,
|
||||
KC_F4, KC_F5, KC_F6, KC_F7,
|
||||
KC_F8, KC_F9, KC_F10, KC_VOLU
|
||||
},
|
||||
{
|
||||
KC_POWER, KC_F11, KC_F12, KC_F13,
|
||||
KC_F14, KC_F15, KC_F16, KC_F17,
|
||||
KC_F18, KC_F19, KC_F20, KC_VOLD
|
||||
},
|
||||
{
|
||||
_______, XXXXXXX, KC_HOME, SC(KC_TAB),
|
||||
C(KC_TAB), KC_END, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, COLEMAK, QWERTY, _______
|
||||
},
|
||||
{
|
||||
_______, _______, _______, _______,
|
||||
KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT,
|
||||
_______, _______, _______, _______
|
||||
}
|
||||
},
|
||||
[_FUNC] = LAYOUT_planck_grid(
|
||||
RESET, KC_F1, KC_F2, KC_F3,
|
||||
KC_F4, KC_F5, KC_F6, KC_F7,
|
||||
KC_F8, KC_F9, KC_F10, KC_VOLU,
|
||||
|
||||
KC_POWER, KC_F11, KC_F12, KC_F13,
|
||||
KC_F14, KC_F15, KC_F16, KC_F17,
|
||||
KC_F18, KC_F19, KC_F20, KC_VOLD,
|
||||
|
||||
_______, XXXXXXX, KC_HOME, SC(KC_TAB),
|
||||
C(KC_TAB), KC_END, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, COLEMAK, QWERTY, _______,
|
||||
|
||||
_______, _______, _______, _______,
|
||||
KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* MOUSE
|
||||
* ,-----------------------------------------------------------------------.
|
||||
* | | | | | | | | ScL |Up | ScR | | |
|
||||
* | | |CtrL |CtrU |CtrR | B5 |CtrU | ScL |Up | ScR | | |
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* | | B4 | B3 | B2 | B1 | | |Left |Down |Right| | |
|
||||
* | | | Ac0 | Ac1 | Ac2 | B4 |CtrL |Left |Down |Right|CtrR | |
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* | | | Ac0 | Ac1 | Ac2 | | | ScD | ScU | | | |
|
||||
* | | | |Home | End | B3 |CtrD | ScD | ScU |TabL |TabR | |
|
||||
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
* | | | | | | | | | | | | |
|
||||
* | | | | | | B2 | B1 | | | | | |
|
||||
* `-----------------------------------------------------------------------'
|
||||
*/
|
||||
[_MOUSE] = {
|
||||
{
|
||||
_______, _______, C(KC_LEFT), C(KC_UP),
|
||||
C(KC_RIGHT), _______, _______, KC_WH_L,
|
||||
KC_MS_U, KC_WH_R, _______, _______
|
||||
},
|
||||
{
|
||||
_______, KC_BTN4, KC_BTN3, KC_BTN2,
|
||||
KC_BTN1, _______, _______, KC_MS_L,
|
||||
KC_MS_D, KC_MS_R, _______, _______
|
||||
},
|
||||
{
|
||||
_______, _______, KC_ACL0, KC_ACL1,
|
||||
KC_ACL2, _______, _______, KC_WH_D,
|
||||
KC_WH_U, _______, _______, _______
|
||||
},
|
||||
{
|
||||
_______, _______, _______, _______,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
}
|
||||
}
|
||||
[_MOUSE] = LAYOUT_planck_grid(
|
||||
_______, XXXXXXX, C(KC_LEFT), C(KC_UP),
|
||||
C(KC_RIGHT), KC_BTN5, C(KC_UP), KC_WH_R,
|
||||
KC_MS_U, KC_WH_L, XXXXXXX, XXXXXXX,
|
||||
|
||||
_______, XXXXXXX, KC_ACL0, KC_ACL1,
|
||||
KC_ACL2, KC_BTN4, C(KC_LEFT), KC_MS_L,
|
||||
KC_MS_D, KC_MS_R, C(KC_RIGHT), XXXXXXX,
|
||||
|
||||
_______, XXXXXXX, XXXXXXX, KC_HOME,
|
||||
KC_END, KC_BTN3, C(KC_DOWN), KC_WH_U,
|
||||
KC_WH_D, SC(KC_TAB), C(KC_TAB), _______,
|
||||
|
||||
_______, _______, _______, _______,
|
||||
_______, KC_BTN2, KC_BTN1, _______,
|
||||
_______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
#ifdef AUDIO_ENABLE
|
||||
@@ -267,6 +236,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
case SYMB:
|
||||
if (record->event.pressed) {
|
||||
layer_off(_MOUSE);
|
||||
layer_on(_SYMB);
|
||||
} else {
|
||||
layer_off(_SYMB);
|
||||
@@ -274,6 +244,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
case MOVE:
|
||||
if (record->event.pressed) {
|
||||
layer_off(_MOUSE);
|
||||
layer_on(_MOVE);
|
||||
} else {
|
||||
layer_off(_MOVE);
|
||||
@@ -281,6 +252,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
case FUNC:
|
||||
if (record->event.pressed) {
|
||||
layer_off(_MOUSE);
|
||||
layer_on(_FUNC);
|
||||
} else {
|
||||
layer_off(_FUNC);
|
||||
@@ -289,8 +261,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
case MOUSE:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_MOUSE);
|
||||
} else {
|
||||
layer_off(_MOUSE);
|
||||
}
|
||||
return false;
|
||||
|
||||
|
||||
@@ -17,4 +17,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
|
||||
@@ -707,7 +707,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* -------------------------------------------------
|
||||
*/
|
||||
LAYOUT_ortho_4x12(
|
||||
KC_ESC, KC_ESC, LCTL(KC_W), LCTL(KC_T), CTL_T(KC_PGDN), CTL_T(KC_PGDN), KC_PGDN, KC_HOME, KC_UP, KC_INS, SFT_T(KC_INS), KC_ESC,
|
||||
KC_ESC, KC_ESC, LCTL(KC_W), LCTL(KC_T), CTL_T(KC_PGDN), CTL_T(KC_PGDN), KC_PGDN, KC_HOME, KC_UP, KC_INS, LSFT(KC_INS), KC_ESC,
|
||||
KC_TRNS, KC_CAPS, LGUI_T(KC_LEFT), LGUI_T(KC_TAB), LGUI_T(KC_RIGHT), LGUI_T(KC_RIGHT), KC_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, KC_PSCR,
|
||||
KC_TRNS, XXXXXXX, XXXXXXX, XXXXXXX, CTL_T(KC_PGUP), CTL_T(KC_PGUP), KC_PGUP, XXXXXXX, KC_DOWN, XXXXXXX, KC_APP, KC_TRNS,
|
||||
TG(4), KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_BSPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
|
||||
@@ -348,7 +348,7 @@ qmk_dict = {
|
||||
":": "S(KC_SCLN)", "'": "KC_QUOT", "\"": "S(KC_QUOT)", "`": "KC_GRV",
|
||||
"~": "S(KC_GRV)", ",": "KC_COMM", "<": "S(KC_COMM)", ".": "KC_DOT",
|
||||
">": "S(KC_DOT)", "/": "KC_SLSH", "?": "S(KC_SLSH)", "Caps": "KC_CAPS",
|
||||
"Pr Scr": "KC_PSCR", "Scr Lck": "KC_SLCK", "Pause": "KC_BRK", "Insert": "KC_INS", "SInsert": "SFT_T(KC_INS)",
|
||||
"Pr Scr": "KC_PSCR", "Scr Lck": "KC_SLCK", "Pause": "KC_BRK", "Insert": "KC_INS", "SInsert": "LSFT(KC_INS)",
|
||||
"Home": "KC_HOME", "Pg Up": "KC_PGUP", "Del": "KC_DEL", "End": "KC_END",
|
||||
"Pg Down": "KC_PGDN", "> Arrow": "KC_RIGHT", "< Arrow": "KC_LEFT",
|
||||
"v Arrow": "KC_DOWN", "^ Arrow": "KC_UP",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# WILBA.TECH WT60-A
|
||||
|
||||

|
||||

|
||||
|
||||
WT60-A is a keyboard PCB supporting 60% layout. [More info at wilba.tech](https://wilba.tech/)
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# WILBA.TECH WT65-A
|
||||
|
||||

|
||||

|
||||
|
||||
WT65-A is a keyboard PCB supporting 65% layout with 0.25U blocker. [More info at wilba.tech](https://wilba.tech/)
|
||||
WT65-A is a keyboard PCB supporting 65% layout with 0.5U blocker. [More info at wilba.tech](https://wilba.tech/)
|
||||
|
||||
Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
|
||||
Hardware Supported: WILBA.TECH WT65-A
|
||||
|
||||
203
keyboards/wilba_tech/wt69_a/config.h
Normal file
203
keyboards/wilba_tech/wt69_a/config.h
Normal file
@@ -0,0 +1,203 @@
|
||||
/* Copyright 2018 Jason Williams (Wilba)
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x6582 // wilba.tech
|
||||
#define PRODUCT_ID 0x069A // 69-A
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER wilba.tech
|
||||
#define PRODUCT wilba.tech WT69-A
|
||||
#define DESCRIPTION wilba.tech WT69-A
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 17
|
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments
|
||||
*
|
||||
* Change this to how you wired your keyboard
|
||||
* COLS: AVR pins used for columns, left to right
|
||||
* ROWS: AVR pins used for rows, top to bottom
|
||||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||
*
|
||||
*/
|
||||
#define MATRIX_ROW_PINS { F0, E6, F4, F6, F7 }
|
||||
#define MATRIX_COL_PINS { B7, B0, F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION ROW2COL
|
||||
|
||||
// #define BACKLIGHT_PIN B7
|
||||
// #define BACKLIGHT_BREATHING
|
||||
// #define BACKLIGHT_LEVELS 3
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* number of backlight levels */
|
||||
|
||||
/* 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
|
||||
|
||||
/*
|
||||
* Magic Key Options
|
||||
*
|
||||
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||
* the keyboard. They are best used in combination with the HID Listen program,
|
||||
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||
*
|
||||
* The options below allow the magic key functionality to be changed. This is
|
||||
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||
*
|
||||
*/
|
||||
|
||||
/* control how magic key switches layers */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||
|
||||
/* override magic key keymap */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||
//#define MAGIC_KEY_HELP1 H
|
||||
//#define MAGIC_KEY_HELP2 SLASH
|
||||
//#define MAGIC_KEY_DEBUG D
|
||||
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||
//#define MAGIC_KEY_DEBUG_KBD K
|
||||
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||
//#define MAGIC_KEY_VERSION V
|
||||
//#define MAGIC_KEY_STATUS S
|
||||
//#define MAGIC_KEY_CONSOLE C
|
||||
//#define MAGIC_KEY_LAYER0_ALT1 ESC
|
||||
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
|
||||
//#define MAGIC_KEY_LAYER0 0
|
||||
//#define MAGIC_KEY_LAYER1 1
|
||||
//#define MAGIC_KEY_LAYER2 2
|
||||
//#define MAGIC_KEY_LAYER3 3
|
||||
//#define MAGIC_KEY_LAYER4 4
|
||||
//#define MAGIC_KEY_LAYER5 5
|
||||
//#define MAGIC_KEY_LAYER6 6
|
||||
//#define MAGIC_KEY_LAYER7 7
|
||||
//#define MAGIC_KEY_LAYER8 8
|
||||
//#define MAGIC_KEY_LAYER9 9
|
||||
//#define MAGIC_KEY_BOOTLOADER PAUSE
|
||||
//#define MAGIC_KEY_LOCK CAPS
|
||||
//#define MAGIC_KEY_EEPROM E
|
||||
//#define MAGIC_KEY_NKRO N
|
||||
//#define MAGIC_KEY_SLEEP_LED Z
|
||||
|
||||
/*
|
||||
* 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
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/*
|
||||
* MIDI options
|
||||
*/
|
||||
|
||||
/* Prevent use of disabled MIDI features in the keymap */
|
||||
//#define MIDI_ENABLE_STRICT 1
|
||||
|
||||
/* enable basic MIDI features:
|
||||
- MIDI notes can be sent when in Music mode is on
|
||||
*/
|
||||
//#define MIDI_BASIC
|
||||
|
||||
/* enable advanced MIDI features:
|
||||
- MIDI notes can be added to the keymap
|
||||
- Octave shift and transpose
|
||||
- Virtual sustain, portamento, and modulation wheel
|
||||
- etc.
|
||||
*/
|
||||
//#define MIDI_ADVANCED
|
||||
|
||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||
|
||||
// Does not use WT_MONO_BACKLIGHT
|
||||
//#define WT_MONO_BACKLIGHT
|
||||
|
||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 4
|
||||
|
||||
// EEPROM usage
|
||||
|
||||
// TODO: refactor with new user EEPROM code (coming soon)
|
||||
#define EEPROM_MAGIC 0x451F
|
||||
#define EEPROM_MAGIC_ADDR 32
|
||||
// Bump this every time we change what we store
|
||||
// This will automatically reset the EEPROM with defaults
|
||||
// and avoid loading invalid data from the EEPROM
|
||||
#define EEPROM_VERSION 0x08
|
||||
#define EEPROM_VERSION_ADDR 34
|
||||
|
||||
// Dynamic keymap starts after EEPROM version
|
||||
#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
|
||||
// Dynamic macro starts after dynamic keymaps (35+(4*5*17*2)) = (35+680)
|
||||
#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 715
|
||||
#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 309
|
||||
#define DYNAMIC_KEYMAP_MACRO_COUNT 16
|
||||
13
keyboards/wilba_tech/wt69_a/info.json
Normal file
13
keyboards/wilba_tech/wt69_a/info.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "wilba.tech WT69-A",
|
||||
"url": "https://wilba.tech",
|
||||
"maintainer": "Wilba",
|
||||
"bootloader": "atmel-dfu",
|
||||
"width": 18.25,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT_all": {
|
||||
"layout": [{"label":"F1", "x":0, "y":0}, {"label":"F2", "x":1, "y":0}, {"label":"Esc", "x":2.25, "y":0}, {"label":"!", "x":3.25, "y":0}, {"label":"@", "x":4.25, "y":0}, {"label":"#", "x":5.25, "y":0}, {"label":"$", "x":6.25, "y":0}, {"label":"%", "x":7.25, "y":0}, {"label":"^", "x":8.25, "y":0}, {"label":"&", "x":9.25, "y":0}, {"label":"*", "x":10.25, "y":0}, {"label":"(", "x":11.25, "y":0}, {"label":")", "x":12.25, "y":0}, {"label":"_", "x":13.25, "y":0}, {"label":"+", "x":14.25, "y":0}, {"label":"BkSp", "x":15.25, "y":0}, {"label":"BkSp", "x":16.25, "y":0}, {"label":"Home", "x":17.25, "y":0}, {"label":"F3", "x":0, "y":1}, {"label":"F4", "x":1, "y":1}, {"label":"Tab", "x":2.25, "y":1, "w":1.5}, {"label":"Q", "x":3.75, "y":1}, {"label":"W", "x":4.75, "y":1}, {"label":"E", "x":5.75, "y":1}, {"label":"R", "x":6.75, "y":1}, {"label":"T", "x":7.75, "y":1}, {"label":"Y", "x":8.75, "y":1}, {"label":"U", "x":9.75, "y":1}, {"label":"I", "x":10.75, "y":1}, {"label":"O", "x":11.75, "y":1}, {"label":"P", "x":12.75, "y":1}, {"label":"{", "x":13.75, "y":1}, {"label":"}", "x":14.75, "y":1}, {"label":"|", "x":15.75, "y":1, "w":1.5}, {"label":"PgUp", "x":17.25, "y":1}, {"label":"F5", "x":0, "y":2}, {"label":"F6", "x":1, "y":2}, {"label":"Caps Lock", "x":2.25, "y":2, "w":1.75}, {"label":"A", "x":4, "y":2}, {"label":"S", "x":5, "y":2}, {"label":"D", "x":6, "y":2}, {"label":"F", "x":7, "y":2}, {"label":"G", "x":8, "y":2}, {"label":"H", "x":9, "y":2}, {"label":"J", "x":10, "y":2}, {"label":"K", "x":11, "y":2}, {"label":"L", "x":12, "y":2}, {"label":":", "x":13, "y":2}, {"label":"\"", "x":14, "y":2}, {"label":"Enter", "x":15, "y":2, "w":2.25}, {"label":"PgDn", "x":17.25, "y":2}, {"label":"F7", "x":0, "y":3}, {"label":"F8", "x":1, "y":3}, {"label":"Shift", "x":2.25, "y":3, "w":2.25}, {"label":"Z", "x":4.5, "y":3}, {"label":"X", "x":5.5, "y":3}, {"label":"C", "x":6.5, "y":3}, {"label":"V", "x":7.5, "y":3}, {"label":"B", "x":8.5, "y":3}, {"label":"N", "x":9.5, "y":3}, {"label":"M", "x":10.5, "y":3}, {"label":"<", "x":11.5, "y":3}, {"label":">", "x":12.5, "y":3}, {"label":"?", "x":13.5, "y":3}, {"label":"Shift", "x":14.5, "y":3, "w":1.75}, {"label":"\u2191", "x":16.25, "y":3}, {"label":"End", "x":17.25, "y":3}, {"label":"F9", "x":0, "y":4}, {"label":"F10", "x":1, "y":4}, {"label":"Control", "x":2.25, "y":4, "w":1.5}, {"label":"Win", "x":3.75, "y":4}, {"label":"Alt", "x":4.75, "y":4, "w":1.5}, {"x":6.25, "y":4, "w":7}, {"label":"Fn", "x":13.25, "y":4, "w":1.5}, {"label":"\u2190", "x":15.25, "y":4}, {"label":"\u2193", "x":16.25, "y":4}, {"label":"\u2192", "x":17.25, "y":4}]
|
||||
}
|
||||
}
|
||||
}
|
||||
36
keyboards/wilba_tech/wt69_a/keymaps/default/keymap.c
Normal file
36
keyboards/wilba_tech/wt69_a/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,36 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
// Default layer
|
||||
[0] = LAYOUT_all(
|
||||
KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
|
||||
KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
|
||||
KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
|
||||
KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
|
||||
KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
// Fn1 Layer
|
||||
[1] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
// Fn2 Layer
|
||||
[2] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
// Fn3 Layer
|
||||
[3] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
};
|
||||
36
keyboards/wilba_tech/wt69_a/keymaps/via/keymap.c
Normal file
36
keyboards/wilba_tech/wt69_a/keymaps/via/keymap.c
Normal file
@@ -0,0 +1,36 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
// Default layer
|
||||
[0] = LAYOUT_all(
|
||||
KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
|
||||
KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
|
||||
KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
|
||||
KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
|
||||
KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
// Fn1 Layer
|
||||
[1] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
// Fn2 Layer
|
||||
[2] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
// Fn3 Layer
|
||||
[3] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
};
|
||||
68
keyboards/wilba_tech/wt69_a/keymaps/via/rules.mk
Normal file
68
keyboards/wilba_tech/wt69_a/keymaps/via/rules.mk
Normal file
@@ -0,0 +1,68 @@
|
||||
# project specific files
|
||||
SRC = keyboards/wilba_tech/wt_main.c
|
||||
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Boot Section
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||
|
||||
RAW_ENABLE = yes
|
||||
DYNAMIC_KEYMAP_ENABLE = yes
|
||||
15
keyboards/wilba_tech/wt69_a/readme.md
Normal file
15
keyboards/wilba_tech/wt69_a/readme.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# WILBA.TECH WT69-A
|
||||
|
||||

|
||||
|
||||
WT69-A is a keyboard PCB supporting 65% layout with 0.5U blocker and left side function keys. [More info at wilba.tech](https://wilba.tech/)
|
||||
|
||||
Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
|
||||
Hardware Supported: WILBA.TECH WT69-A
|
||||
Hardware Availability: Custom keyboard group buys
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make wilba_tech/wt69_a: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).
|
||||
65
keyboards/wilba_tech/wt69_a/rules.mk
Normal file
65
keyboards/wilba_tech/wt69_a/rules.mk
Normal file
@@ -0,0 +1,65 @@
|
||||
# project specific files
|
||||
SRC = keyboards/wilba_tech/wt_main.c
|
||||
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Boot Section
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||
17
keyboards/wilba_tech/wt69_a/wt69_a.c
Normal file
17
keyboards/wilba_tech/wt69_a/wt69_a.c
Normal file
@@ -0,0 +1,17 @@
|
||||
/* Copyright 2018 Jason Williams (Wilba)
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// Nothing to see here, move along... ;-)
|
||||
36
keyboards/wilba_tech/wt69_a/wt69_a.h
Normal file
36
keyboards/wilba_tech/wt69_a/wt69_a.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/* Copyright 2018 Jason Williams (Wilba)
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#define ____ KC_NO
|
||||
|
||||
#define LAYOUT_all( \
|
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K215, K016, \
|
||||
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \
|
||||
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K216, \
|
||||
K300, K301, K302, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, \
|
||||
K400, K401, K402, K403, K404, K408, K413, K414, K415, K416 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016 }, \
|
||||
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \
|
||||
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \
|
||||
{ K300, K301, K302, ____, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316 }, \
|
||||
{ K400, K401, K402, K403, K404, ____, ____, ____, K408, ____, ____, ____, ____, K413, K414, K415, K416 } \
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
BOOTLOADER = caterina
|
||||
|
||||
@@ -28,14 +28,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
* | lshift | Z | X | C | V | B | N | M | , | . | / | enter |
|
||||
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
* | lctrl | lgui | lalt | ralt | lower | space | space | raise | left | down | up | right |
|
||||
* | lctrl | lalt | ralt | lgui | lower | space | space | raise | left | down | up | right |
|
||||
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
*/
|
||||
[_QWERTY] = LAYOUT_ortho_4x12 (
|
||||
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_RALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||
KC_LCTL, KC_LALT, KC_RALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||
),
|
||||
|
||||
/* Lower
|
||||
@@ -44,7 +44,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
* | | - | = | [ | ] | \ | | | | | | |
|
||||
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
* | | vol- | mute | vol+ | | | | | | | | |
|
||||
* | | _ | + | { | } | | | | | | | | |
|
||||
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
* | | | | | | | | | | | | |
|
||||
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
@@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_LOWER] = LAYOUT_ortho_4x12 (
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
|
||||
_______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______, _______, _______, _______,
|
||||
_______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
@@ -60,7 +60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | del |
|
||||
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
* | caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
|
||||
* | | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
|
||||
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 | _ | + | { | } | | |
|
||||
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
@@ -69,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
*/
|
||||
[_RAISE] = LAYOUT_ortho_4x12 (
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
|
||||
KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
|
||||
),
|
||||
@@ -78,7 +78,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_ADJUST] = LAYOUT_ortho_4x12 (
|
||||
_______, RESET, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, BL_STEP, BL_BRTG, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, KC_CAPS, _______, BL_STEP, BL_BRTG, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Jotix ortho 4x12 keymap
|
||||
|
||||

|
||||

|
||||
|
||||
Tested on:
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ const bool ascii_to_shift_lut[0x80] PROGMEM = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
0, 1, 1, 1, 1, 1, 1, 0,
|
||||
0, 1, 1, 0, 1, 1, 1, 0,
|
||||
1, 1, 1, 1, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 1, 0, 1, 0, 1, 1,
|
||||
@@ -45,7 +45,7 @@ const uint8_t ascii_to_keycode_lut[0x80] PROGMEM = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, KC_ESC, 0, 0, 0, 0,
|
||||
|
||||
KC_SPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
|
||||
KC_SPC, KC_1, KC_2, KC_NUHS, KC_4, KC_5, KC_7, KC_QUOT,
|
||||
KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
|
||||
KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
|
||||
KC_8, KC_9, KC_SCLN, KC_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
|
||||
|
||||
@@ -38,11 +38,13 @@
|
||||
/* for split keyboard */
|
||||
#define RGBLIGHT_SPLIT_SET_CHANGE_MODE rgblight_status.change_flags |= RGBLIGHT_STATUS_CHANGE_MODE
|
||||
#define RGBLIGHT_SPLIT_SET_CHANGE_HSVS rgblight_status.change_flags |= RGBLIGHT_STATUS_CHANGE_HSVS
|
||||
#define RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS rgblight_status.change_flags |= (RGBLIGHT_STATUS_CHANGE_MODE|RGBLIGHT_STATUS_CHANGE_HSVS)
|
||||
#define RGBLIGHT_SPLIT_SET_CHANGE_TIMER_ENABLE rgblight_status.change_flags |= RGBLIGHT_STATUS_CHANGE_TIMER
|
||||
#define RGBLIGHT_SPLIT_ANIMATION_TICK rgblight_status.change_flags |= RGBLIGHT_STATUS_ANIMATION_TICK
|
||||
#else
|
||||
#define RGBLIGHT_SPLIT_SET_CHANGE_MODE
|
||||
#define RGBLIGHT_SPLIT_SET_CHANGE_HSVS
|
||||
#define RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS
|
||||
#define RGBLIGHT_SPLIT_SET_CHANGE_TIMER_ENABLE
|
||||
#define RGBLIGHT_SPLIT_ANIMATION_TICK
|
||||
#endif
|
||||
@@ -221,6 +223,7 @@ void eeconfig_update_rgblight_default(void) {
|
||||
rgblight_config.sat = 255;
|
||||
rgblight_config.val = RGBLIGHT_LIMIT_VAL;
|
||||
rgblight_config.speed = 0;
|
||||
RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS;
|
||||
eeconfig_update_rgblight(rgblight_config.raw);
|
||||
}
|
||||
|
||||
@@ -249,7 +252,7 @@ void rgblight_init(void) {
|
||||
eeconfig_update_rgblight_default();
|
||||
}
|
||||
rgblight_config.raw = eeconfig_read_rgblight();
|
||||
RGBLIGHT_SPLIT_SET_CHANGE_HSVS;
|
||||
RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS;
|
||||
if (!rgblight_config.mode) {
|
||||
dprintf("rgblight_init rgblight_config.mode = 0. Write default values to EEPROM.\n");
|
||||
eeconfig_update_rgblight_default();
|
||||
@@ -276,6 +279,7 @@ uint32_t rgblight_read_dword(void) {
|
||||
}
|
||||
|
||||
void rgblight_update_dword(uint32_t dword) {
|
||||
RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS;
|
||||
rgblight_config.raw = dword;
|
||||
if (rgblight_config.enable)
|
||||
rgblight_mode_noeeprom(rgblight_config.mode);
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
#define rgblight_setrgb_orange() rgblight_setrgb (RGB_ORANGE)
|
||||
#define rgblight_setrgb_goldenrod() rgblight_setrgb (RGB_GOLDENROD)
|
||||
#define rgblight_setrgb_gold() rgblight_setrgb (RGB_GOLD)
|
||||
#define rgblight_setrgb_yellow() rgblight_setrgb (RGB_YEllOW)
|
||||
#define rgblight_setrgb_yellow() rgblight_setrgb (RGB_YELLOW)
|
||||
#define rgblight_setrgb_chartreuse() rgblight_setrgb (RGB_CHARTREUSE)
|
||||
#define rgblight_setrgb_green() rgblight_setrgb (RGB_GREEN)
|
||||
#define rgblight_setrgb_springgreen() rgblight_setrgb (RGB_SPRINGGREEN)
|
||||
|
||||
@@ -82,7 +82,7 @@ void suspend_wakeup_init_user(void) { }
|
||||
*/
|
||||
__attribute__ ((weak))
|
||||
void suspend_wakeup_init_kb(void) {
|
||||
suspend_power_down_user();
|
||||
suspend_wakeup_init_user();
|
||||
}
|
||||
|
||||
/** \brief suspend wakeup condition
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
# Changelog
|
||||
All notable changes to my userspace will be documented in this file.
|
||||
|
||||
## [0.2.2] - 2019-04-22
|
||||
### Fixed
|
||||
- `config.h` usage of turning on `RGBLIGHT_ENABLE` when it is not enabled on boards other than my two clueboards were causing issues with boards that didn't have RGB underglow on it.
|
||||
|
||||
## [0.2.1] - 2019-03-01
|
||||
### Fixed
|
||||
- `config.h` usage of `#ifdef RGBLIGHT_ENABLE` caused problems for other of my boards that had `RGBLIGHT_ENABLE`.
|
||||
|
||||
@@ -21,17 +21,11 @@
|
||||
#ifndef RGBLIGHT_ENABLE
|
||||
#define RGBLIGHT_ENABLE
|
||||
#endif
|
||||
|
||||
#ifndef AUDIO_CLICKY
|
||||
#define AUDIO_CLICKY
|
||||
#endif
|
||||
|
||||
#elif defined(KEYBOARD_clueboard_66_hotswap_gen1)
|
||||
#ifndef AUDIO_CLICKY
|
||||
#define AUDIO_CLICKY
|
||||
#endif
|
||||
#else
|
||||
#ifndef RGBLIGHT_ENABLE
|
||||
#define RGBLIGHT_ENABLE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
159
util/new_keyboard.sh
Executable file
159
util/new_keyboard.sh
Executable file
@@ -0,0 +1,159 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This script generates a new keyboard directory under keyboards/,
|
||||
# and copies the template files from quantum/template/ into it.
|
||||
|
||||
# Print an error message with the word "ERROR" in red.
|
||||
echo_error() {
|
||||
echo -e "[\033[0;91mERROR\033[m]: $1"
|
||||
}
|
||||
|
||||
# Print a message in bold.
|
||||
echo_bold() {
|
||||
echo -e "\033[1m$1\033[m"
|
||||
}
|
||||
|
||||
# Prompt the user for information, showing the default value in brackets.
|
||||
prompt() {
|
||||
local message="$1"
|
||||
local default="$2"
|
||||
|
||||
[ -n "$default" ] && message+=" [$default]"
|
||||
message+=": "
|
||||
|
||||
read -rp "$message" prompt_return
|
||||
[ -z "$prompt_return" ] && prompt_return="$default"
|
||||
}
|
||||
|
||||
# Grab a username from Git config.
|
||||
set_git_username() {
|
||||
git_username="$(git config --get user.name)"
|
||||
}
|
||||
|
||||
# Copy the template files to the new keyboard directory.
|
||||
copy_templates() {
|
||||
echo -n "Copying base template files..."
|
||||
cp -r "quantum/template/base" "${keyboard_dir}"
|
||||
echo " done"
|
||||
|
||||
echo -n "Copying $keyboard_type template files..."
|
||||
cp -r "quantum/template/${keyboard_type}/." "${keyboard_dir}"
|
||||
echo " done"
|
||||
|
||||
echo -n "Renaming keyboard files..."
|
||||
mv "${keyboard_dir}/template.c" "${keyboard_dir}/${keyboard_name}.c"
|
||||
mv "${keyboard_dir}/template.h" "${keyboard_dir}/${keyboard_name}.h"
|
||||
echo " done"
|
||||
}
|
||||
|
||||
# Set the inplace editing parameter for sed.
|
||||
# macOS/BSD sed expects a file extension immediately following -i.
|
||||
set_sed_i() {
|
||||
sed_i=(-i)
|
||||
|
||||
case $(uname -a) in
|
||||
*Darwin*) sed_i=(-i "")
|
||||
esac
|
||||
}
|
||||
|
||||
# Replace a token with a value in the given list of files.
|
||||
replace_placeholders() {
|
||||
local replace_token="$1"
|
||||
local replace_value="$2"
|
||||
shift 2
|
||||
local replace_filenames=("$@")
|
||||
|
||||
echo -n "Replacing $replace_token with $replace_value..."
|
||||
for replace_filename in "${replace_filenames[@]}"; do
|
||||
sed "${sed_i[@]}" -e "s/${replace_token}/${replace_value}/g" "$replace_filename"
|
||||
done
|
||||
echo " done"
|
||||
}
|
||||
|
||||
# Replace %KEYBOARD% with the keyboard name.
|
||||
replace_keyboard_placeholders() {
|
||||
local replace_keyboard_filenames=(
|
||||
"${keyboard_dir}/config.h"
|
||||
"${keyboard_dir}/readme.md"
|
||||
"${keyboard_dir}/${keyboard_name}.c"
|
||||
"${keyboard_dir}/keymaps/default/readme.md"
|
||||
)
|
||||
replace_placeholders "%KEYBOARD%" "$keyboard_name" "${replace_keyboard_filenames[@]}"
|
||||
}
|
||||
|
||||
# Replace %YOUR_NAME% with the username.
|
||||
replace_name_placeholders() {
|
||||
local replace_name_filenames=(
|
||||
"${keyboard_dir}/config.h"
|
||||
"${keyboard_dir}/readme.md"
|
||||
"${keyboard_dir}/${keyboard_name}.c"
|
||||
"${keyboard_dir}/${keyboard_name}.h"
|
||||
"${keyboard_dir}/keymaps/default/config.h"
|
||||
"${keyboard_dir}/keymaps/default/keymap.c"
|
||||
)
|
||||
replace_placeholders "%YOUR_NAME%" "$username" "${replace_name_filenames[@]}"
|
||||
}
|
||||
|
||||
# Check if an array contains an element.
|
||||
array_contains() {
|
||||
local e match="$1"
|
||||
shift
|
||||
for e; do
|
||||
[[ "$e" == "$match" ]] && return 0;
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# If we've been started from util/, we want to be in qmk_firmware/
|
||||
[[ "$PWD" == *util ]] && cd ..
|
||||
|
||||
# The root qmk_firmware/ directory should have a subdirectory called quantum/
|
||||
if [ ! -d "quantum" ]; then
|
||||
echo_error "Could not detect the QMK firmware directory!"
|
||||
echo_error "Are you sure you're in the right place?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo_bold "Generating a new QMK keyboard directory"
|
||||
echo
|
||||
|
||||
# Keyboard name is required, so keep prompting until we get one
|
||||
while [ -z "$keyboard_name" ]; do
|
||||
prompt "Keyboard Name" ""
|
||||
keyboard_name=$prompt_return
|
||||
done
|
||||
|
||||
keyboard_dir="keyboards/$keyboard_name"
|
||||
|
||||
if [ -d "$keyboard_dir" ]; then
|
||||
echo_error "Keyboard $keyboard_name already exists!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
KEYBOARD_TYPES=("avr" "ps2avrgb")
|
||||
|
||||
prompt "Keyboard Type" "avr"
|
||||
keyboard_type=$prompt_return
|
||||
|
||||
if ! array_contains "$keyboard_type" "${KEYBOARD_TYPES[@]}"; then
|
||||
echo_error "Keyboard type must be one of: ${KEYBOARD_TYPES[*]}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set_git_username
|
||||
prompt "Your Name" "$git_username"
|
||||
username=$prompt_return
|
||||
|
||||
echo
|
||||
|
||||
copy_templates
|
||||
set_sed_i
|
||||
replace_keyboard_placeholders
|
||||
[ -n "$username" ] && replace_name_placeholders
|
||||
|
||||
echo
|
||||
echo_bold "Created a new keyboard called $keyboard_name."
|
||||
echo
|
||||
echo_bold "To start working on things, cd into keyboards/$keyboard_name,"
|
||||
echo_bold "or open the directory in your favourite text editor."
|
||||
@@ -1,70 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Script to make a new quantum project
|
||||
# Jack Humbert 2015
|
||||
|
||||
KEYBOARD=$1
|
||||
KEYBOARD_TYPE=$2
|
||||
|
||||
if [ -z "$KEYBOARD" ]; then
|
||||
echo "Usage: $0 <keyboard_name> <keyboard_type>"
|
||||
echo "Example: $0 gh60 avr"
|
||||
echo "Example: $0 bfake ps2avrgb"
|
||||
exit 1
|
||||
elif [ -z "$KEYBOARD_TYPE" ]; then
|
||||
KEYBOARD_TYPE=avr
|
||||
fi
|
||||
|
||||
if [ "$KEYBOARD_TYPE" != "avr" ] && [ "$KEYBOARD_TYPE" != "ps2avrgb" ]; then
|
||||
echo "Invalid keyboard type target"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -e "keyboards/$1" ]; then
|
||||
echo "Error! keyboards/$1 already exists!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$(dirname "$0")/.." || exit
|
||||
|
||||
KEYBOARD_NAME=$(basename "$1")
|
||||
KEYBOARD_NAME_UPPERCASE=$(echo "$KEYBOARD_NAME" | awk '{print toupper($0)}')
|
||||
NEW_KBD=keyboards/${KEYBOARD}
|
||||
|
||||
|
||||
cp -r quantum/template/base "$NEW_KBD"
|
||||
cp -r "quantum/template/$KEYBOARD_TYPE/." "$NEW_KBD"
|
||||
|
||||
mv "${NEW_KBD}/template.c" "${NEW_KBD}/${KEYBOARD_NAME}.c"
|
||||
mv "${NEW_KBD}/template.h" "${NEW_KBD}/${KEYBOARD_NAME}.h"
|
||||
find "${NEW_KBD}" -type f -exec sed -i '' -e "s;%KEYBOARD%;${KEYBOARD_NAME};g" {} \;
|
||||
find "${NEW_KBD}" -type f -exec sed -i '' -e "s;%KEYBOARD_UPPERCASE%;${KEYBOARD_NAME_UPPERCASE};g" {} \;
|
||||
|
||||
GIT=$(whereis git)
|
||||
if [ "$GIT" != "" ]; then
|
||||
IS_GIT_REPO=$($GIT log >>/dev/null 2>&1; echo $?)
|
||||
if [ "$IS_GIT_REPO" -eq 0 ]; then
|
||||
ID="$($GIT config --get user.name)"
|
||||
read -rp "What is your name? [$ID] " YOUR_NAME
|
||||
if [ -n "$YOUR_NAME" ]; then
|
||||
ID=$YOUR_NAME
|
||||
fi
|
||||
echo "Using $ID as user name"
|
||||
|
||||
for i in "$NEW_KBD/config.h" \
|
||||
"$NEW_KBD/$KEYBOARD_NAME.c" \
|
||||
"$NEW_KBD/$KEYBOARD_NAME.h" \
|
||||
"$NEW_KBD/keymaps/default/config.h" \
|
||||
"$NEW_KBD/keymaps/default/keymap.c"
|
||||
do
|
||||
awk -v id="$ID" '{sub(/%YOUR_NAME%/,id); print}' < "$i" > "$i.$$"
|
||||
mv "$i.$$" "$i"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
cat <<-EOF
|
||||
######################################################
|
||||
# $NEW_KBD project created. To start
|
||||
# working on things, cd into $NEW_KBD
|
||||
######################################################
|
||||
EOF
|
||||
Reference in New Issue
Block a user