Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e040028f1b | ||
|
|
d417b0cc7d | ||
|
|
b12b26946d | ||
|
|
918fb7f8da | ||
|
|
455f15528c | ||
|
|
00c6892b3f | ||
|
|
171f7c561b | ||
|
|
5b4187ad1b | ||
|
|
d5b01bd34b | ||
|
|
1650ba00f1 | ||
|
|
f9d47ebe2f | ||
|
|
3895b4b868 | ||
|
|
a8647f0d27 | ||
|
|
6c7d173ad7 | ||
|
|
65906f679d | ||
|
|
6af77551c6 | ||
|
|
4747d974aa | ||
|
|
e5d2cb8f98 | ||
|
|
f6c7e11426 | ||
|
|
97a3f806c4 | ||
|
|
c44fc68297 | ||
|
|
5fa0a274ea | ||
|
|
4e375aa1f5 | ||
|
|
f859375284 | ||
|
|
f6651424a0 | ||
|
|
29e9caa82b | ||
|
|
a32f7e1a25 |
No files matched your search
Vendored
+21
-10
@@ -52,26 +52,37 @@ Vagrant.configure(2) do |config|
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Docker provider pulls from hub.docker.com respecting docker.image if
|
# Docker provider pulls from hub.docker.com respecting docker.image if
|
||||||
# config.vm.box is nil. Note that this bind-mounts from the current dir to
|
# config.vm.box is nil. In this case, we adhoc build util/vagrant/Dockerfile.
|
||||||
|
# Note that this bind-mounts from the current dir to
|
||||||
# /vagrant in the guest, so unless your UID is 1000 to match vagrant in the
|
# /vagrant in the guest, so unless your UID is 1000 to match vagrant in the
|
||||||
# image, you'll need to: chmod -R a+rw .
|
# image, you'll need to: chmod -R a+rw .
|
||||||
config.vm.provider "docker" do |docker, override|
|
config.vm.provider "docker" do |docker, override|
|
||||||
override.vm.box = nil
|
override.vm.box = nil
|
||||||
docker.image = "jesselang/debian-vagrant:stretch"
|
docker.build_dir = "util/vagrant"
|
||||||
docker.has_ssh = true
|
docker.has_ssh = true
|
||||||
end
|
end
|
||||||
|
|
||||||
# This script ensures the required packages for AVR programming are installed
|
# Unless we are running the docker container directly
|
||||||
# It also ensures the system always gets the latest updates when powered on
|
# 1. run container detached on vm
|
||||||
# If this causes issues you can run a 'vagrant destroy' and then
|
# 2. attach on 'vagrant ssh'
|
||||||
# add a # before ,run: (or change "always" to "once") and run 'vagrant up' to get a working
|
["virtualbox", "vmware_workstation", "vmware_fusion"].each do |type|
|
||||||
# non-updated box and then attempt to troubleshoot or open a Github issue
|
config.vm.provider type do |virt, override|
|
||||||
config.vm.provision "shell", inline: "/vagrant/util/qmk_install.sh", run: "always"
|
override.vm.provision "docker" do |d|
|
||||||
|
d.run "qmkfm/base_container",
|
||||||
|
cmd: "tail -f /dev/null",
|
||||||
|
args: "--privileged -v /dev:/dev -v '/vagrant:/vagrant'"
|
||||||
|
end
|
||||||
|
|
||||||
|
override.vm.provision "shell", inline: <<-SHELL
|
||||||
|
echo 'docker restart qmkfm-base_container && exec docker exec -it qmkfm-base_container /bin/bash -l' >> ~vagrant/.bashrc
|
||||||
|
SHELL
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
config.vm.post_up_message = <<-EOT
|
config.vm.post_up_message = <<-EOT
|
||||||
|
|
||||||
Log into the VM using 'vagrant ssh'. QMK directory synchronized with host is
|
Log into the environment using 'vagrant ssh'. QMK directory synchronized with
|
||||||
located at /vagrant
|
host is located at /vagrant
|
||||||
To compile the .hex files use make command inside this directory, e.g.
|
To compile the .hex files use make command inside this directory, e.g.
|
||||||
cd /vagrant
|
cd /vagrant
|
||||||
make <keyboard>:default
|
make <keyboard>:default
|
||||||
|
|||||||
@@ -171,8 +171,8 @@ If you define these options you will enable the associated feature, which may in
|
|||||||
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
|
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
|
||||||
* `#define TAP_CODE_DELAY 100`
|
* `#define TAP_CODE_DELAY 100`
|
||||||
* Sets the delay between `register_code` and `unregister_code`, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
|
* Sets the delay between `register_code` and `unregister_code`, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
|
||||||
* `#define TAP_HOLD_CAPS_DELAY 200`
|
* `#define TAP_HOLD_CAPS_DELAY 80`
|
||||||
* Sets the delay for Tap Hold keys (`LT`, `MT`) when using `KC_CAPSLOCK` keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 200ms if not defined.
|
* Sets the delay for Tap Hold keys (`LT`, `MT`) when using `KC_CAPSLOCK` keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher.
|
||||||
|
|
||||||
## RGB Light Configuration
|
## RGB Light Configuration
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ To change the behaviour of the backlighting, `#define` these in your `config.h`:
|
|||||||
|---------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|
|---------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|
||||||
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
|
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
|
||||||
|`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information |
|
|`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information |
|
||||||
|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 15 excluding off) |
|
|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 31 excluding off) |
|
||||||
|`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) |
|
|`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) |
|
||||||
|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported |
|
|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported |
|
||||||
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
|
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
|
||||||
@@ -73,8 +73,10 @@ To change the behaviour of the backlighting, `#define` these in your `config.h`:
|
|||||||
|
|
||||||
## Backlight On State
|
## Backlight On State
|
||||||
|
|
||||||
Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *low*.
|
Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *high*.
|
||||||
Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case you must `#define BACKLIGHT_ON_STATE 1`, so that when the transistor is on, the pin is driven *high* instead.
|
Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case, when the transistor is on, the pin is driven *low* instead.
|
||||||
|
|
||||||
|
This functionality is configured at the keyboard level with the `BACKLIGHT_ON_STATE` define.
|
||||||
|
|
||||||
## Multiple backlight pins
|
## Multiple backlight pins
|
||||||
|
|
||||||
|
|||||||
+23
-9
@@ -59,19 +59,12 @@ void process_combo_event(uint8_t combo_index, bool pressed) {
|
|||||||
switch(combo_index) {
|
switch(combo_index) {
|
||||||
case ZC_COPY:
|
case ZC_COPY:
|
||||||
if (pressed) {
|
if (pressed) {
|
||||||
register_code(KC_LCTL);
|
tap_code16(LCTL(KC_C));
|
||||||
register_code(KC_C);
|
|
||||||
unregister_code(KC_C);
|
|
||||||
unregister_code(KC_LCTL);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XV_PASTE:
|
case XV_PASTE:
|
||||||
if (pressed) {
|
if (pressed) {
|
||||||
register_code(KC_LCTL);
|
tap_code16(LCTL(KC_V));
|
||||||
register_code(KC_V);
|
|
||||||
unregister_code(KC_V);
|
|
||||||
unregister_code(KC_LCTL);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -87,3 +80,24 @@ If you're using long combos, or even longer combos, you may run into issues with
|
|||||||
In this case, you can add either `#define EXTRA_LONG_COMBOS` or `#define EXTRA_EXTRA_LONG_COMBOS` in your `config.h` file.
|
In this case, you can add either `#define EXTRA_LONG_COMBOS` or `#define EXTRA_EXTRA_LONG_COMBOS` in your `config.h` file.
|
||||||
|
|
||||||
You may also be able to enable action keys by defining `COMBO_ALLOW_ACTION_KEYS`.
|
You may also be able to enable action keys by defining `COMBO_ALLOW_ACTION_KEYS`.
|
||||||
|
|
||||||
|
## Keycodes
|
||||||
|
|
||||||
|
You can enable, disable and toggle the Combo feature on the fly. This is useful if you need to disable them temporarily, such as for a game.
|
||||||
|
|
||||||
|
|Keycode |Description |
|
||||||
|
|----------|---------------------------------|
|
||||||
|
|`CMB_ON` |Turns on Combo feature |
|
||||||
|
|`CMB_OFF` |Turns off Combo feature |
|
||||||
|
|`CMB_TOG` |Toggles Combo feature on and off |
|
||||||
|
|
||||||
|
## User callbacks
|
||||||
|
|
||||||
|
In addition to the keycodes, there are a few functions that you can use to set the status, or check it:
|
||||||
|
|
||||||
|
|Function |Description |
|
||||||
|
|-----------|--------------------------------------------------------------------|
|
||||||
|
| `combo_enable()` | Enables the combo feature |
|
||||||
|
| `combo_disable()` | Disables the combo feature, and clears the combo buffer |
|
||||||
|
| `combo_toggle()` | Toggles the state of the combo feature |
|
||||||
|
| `is_combo_enabled()` | Returns the status of the combo feature state (true or false) |
|
||||||
@@ -6,7 +6,6 @@ Basic encoders are supported by adding this to your `rules.mk`:
|
|||||||
|
|
||||||
and this to your `config.h`:
|
and this to your `config.h`:
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
#define ENCODERS_PAD_A { B12 }
|
#define ENCODERS_PAD_A { B12 }
|
||||||
#define ENCODERS_PAD_B { B13 }
|
#define ENCODERS_PAD_B { B13 }
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,20 @@
|
|||||||
# Vagrant Quick Start
|
# Vagrant Quick Start
|
||||||
|
|
||||||
This project includes a Vagrantfile that will allow you to build a new firmware for your keyboard very easily without major changes to your primary operating system. This also ensures that when you clone the project and perform a build, you have the exact same environment as anyone else using the Vagrantfile to build. This makes it much easier for people to help you troubleshoot any issues you encounter.
|
This project includes a `Vagrantfile` that will allow you to build a new firmware for your keyboard very easily without major changes to your primary operating system. This also ensures that when you clone the project and perform a build, you have the exact same environment as anyone else using the Vagrantfile to build. This makes it much easier for people to help you troubleshoot any issues you encounter.
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
Using the `/Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion).
|
Using the `Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as a supported provider installed:
|
||||||
|
|
||||||
*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:** `vagrant plugin install vagrant-vbguest`
|
* [VirtualBox](https://www.virtualbox.org/) (Version at least 5.0.12)
|
||||||
|
* Sold as 'the most accessible platform to use Vagrant'
|
||||||
|
* [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware)
|
||||||
|
* The (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion
|
||||||
|
* [Docker](https://www.docker.com/)
|
||||||
|
|
||||||
Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
|
Other than having Vagrant, a suitable provider installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start an environment (either a virtual machine or container) that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
|
||||||
|
|
||||||
# Flashing the Firmware
|
## Flashing the Firmware
|
||||||
|
|
||||||
The "easy" way to flash the firmware is using a tool from your host OS:
|
The "easy" way to flash the firmware is using a tool from your host OS:
|
||||||
|
|
||||||
@@ -19,3 +23,35 @@ The "easy" way to flash the firmware is using a tool from your host OS:
|
|||||||
* [Atmel FLIP](http://www.atmel.com/tools/flip.aspx)
|
* [Atmel FLIP](http://www.atmel.com/tools/flip.aspx)
|
||||||
|
|
||||||
If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
|
If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
|
||||||
|
|
||||||
|
## Vagrantfile Overview
|
||||||
|
The development environment is configured to run the QMK Docker image, `qmkfm/base_container`. This not only ensures predictability between systems, it also mirrors the CI environment.
|
||||||
|
|
||||||
|
## FAQ
|
||||||
|
|
||||||
|
### Why am I seeing issues under Virtualbox?
|
||||||
|
Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:**
|
||||||
|
|
||||||
|
```console
|
||||||
|
vagrant plugin install vagrant-vbguest
|
||||||
|
```
|
||||||
|
|
||||||
|
### How do I remove an existing environment?
|
||||||
|
Finished with your environment? From anywhere inside the folder where you checked out this project, Execute:
|
||||||
|
|
||||||
|
```console
|
||||||
|
vagrant destory
|
||||||
|
```
|
||||||
|
|
||||||
|
### What if I want to use Docker directly?
|
||||||
|
Want to benefit from the Vagrant workflow without a virtual machine? The Vagrantfile is configured to bypass running a virtual machine, and run the container directly. Execute the following when bringing up the environment to force the use of Docker:
|
||||||
|
```console
|
||||||
|
vagrant up --provider=docker
|
||||||
|
```
|
||||||
|
|
||||||
|
### How do I access the virtual machine instead of the Docker container?
|
||||||
|
Execute the following to bypass the `vagrant` user booting directly to the official qmk builder image:
|
||||||
|
|
||||||
|
```console
|
||||||
|
vagrant ssh -c 'sudo -i'
|
||||||
|
```
|
||||||
+18
-2
@@ -73,7 +73,22 @@ STM32 MCUs allows a variety of pins to be configured as I2C pins depending on th
|
|||||||
| `I2C1_SDA` | The pin number for the SDA pin (0-9) | `7` |
|
| `I2C1_SDA` | The pin number for the SDA pin (0-9) | `7` |
|
||||||
| `I2C1_BANK` (deprecated) | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`), superceded by `I2C1_SCL_BANK`, `I2C1_SDA_BANK` | `GPIOB` |
|
| `I2C1_BANK` (deprecated) | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`), superceded by `I2C1_SCL_BANK`, `I2C1_SDA_BANK` | `GPIOB` |
|
||||||
|
|
||||||
STM32 MCUs allow for different timing parameters when configuring I2C. These can be modified using the following parameters, using https://www.st.com/en/embedded-software/stsw-stm32126.html as a reference:
|
The ChibiOS I2C driver configuration depends on STM32 MCU:
|
||||||
|
|
||||||
|
STM32F1xx, STM32F2xx, STM32F4xx, STM32L0xx and STM32L1xx use I2Cv1;
|
||||||
|
STM32F0xx, STM32F3xx, STM32F7xx and STM32L4xx use I2Cv2;
|
||||||
|
|
||||||
|
#### I2Cv1
|
||||||
|
STM32 MCUs allow for different clock and duty parameters when configuring I2Cv1. These can be modified using the following parameters, using <https://www.playembedded.org/blog/stm32-i2c-chibios/#I2Cv1_configuration_structure> as a reference:
|
||||||
|
|
||||||
|
| Variable | Default |
|
||||||
|
|--------------------|------------------|
|
||||||
|
| `I2C1_OPMODE` | `OPMODE_I2C` |
|
||||||
|
| `I2C1_CLOCK_SPEED` | `100000` |
|
||||||
|
| `I2C1_DUTY_CYCLE` | `STD_DUTY_CYCLE` |
|
||||||
|
|
||||||
|
#### I2Cv2
|
||||||
|
STM32 MCUs allow for different timing parameters when configuring I2Cv2. These can be modified using the following parameters, using <https://www.st.com/en/embedded-software/stsw-stm32126.html> as a reference:
|
||||||
|
|
||||||
| Variable | Default |
|
| Variable | Default |
|
||||||
|-----------------------|---------|
|
|-----------------------|---------|
|
||||||
@@ -83,13 +98,14 @@ STM32 MCUs allow for different timing parameters when configuring I2C. These can
|
|||||||
| `I2C1_TIMINGR_SCLH` | `15U` |
|
| `I2C1_TIMINGR_SCLH` | `15U` |
|
||||||
| `I2C1_TIMINGR_SCLL` | `21U` |
|
| `I2C1_TIMINGR_SCLL` | `21U` |
|
||||||
|
|
||||||
STM32 MCUs allow for different "alternate function" modes when configuring GPIO pins. These are required to switch the pins used to I2C mode. See the respective datasheet for the appropriate values for your MCU.
|
STM32 MCUs allow for different "alternate function" modes when configuring GPIO pins. These are required to switch the pins used to I2Cv2 mode. See the respective datasheet for the appropriate values for your MCU.
|
||||||
|
|
||||||
| Variable | Default |
|
| Variable | Default |
|
||||||
|---------------------|---------|
|
|---------------------|---------|
|
||||||
| `I2C1_SCL_PAL_MODE` | `4` |
|
| `I2C1_SCL_PAL_MODE` | `4` |
|
||||||
| `I2C1_SDA_PAL_MODE` | `4` |
|
| `I2C1_SDA_PAL_MODE` | `4` |
|
||||||
|
|
||||||
|
#### Other
|
||||||
You can also overload the `void i2c_init(void)` function, which has a weak attribute. If you do this the configuration variables above will not be used. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function:
|
You can also overload the `void i2c_init(void)` function, which has a weak attribute. If you do this the configuration variables above will not be used. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function:
|
||||||
|
|
||||||
```C
|
```C
|
||||||
|
|||||||
@@ -33,11 +33,17 @@
|
|||||||
static uint8_t i2c_address;
|
static uint8_t i2c_address;
|
||||||
|
|
||||||
static const I2CConfig i2cconfig = {
|
static const I2CConfig i2cconfig = {
|
||||||
|
#ifdef USE_I2CV1
|
||||||
|
I2C1_OPMODE,
|
||||||
|
I2C1_CLOCK_SPEED,
|
||||||
|
I2C1_DUTY_CYCLE,
|
||||||
|
#else
|
||||||
STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) |
|
STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) |
|
||||||
STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) |
|
STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) |
|
||||||
STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL),
|
STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL),
|
||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static i2c_status_t chibios_to_qmk(const msg_t* status) {
|
static i2c_status_t chibios_to_qmk(const msg_t* status) {
|
||||||
@@ -61,8 +67,13 @@ void i2c_init(void)
|
|||||||
|
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
|
|
||||||
|
#ifdef USE_I2CV1
|
||||||
|
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
||||||
|
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
||||||
|
#else
|
||||||
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
|
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
|
||||||
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
|
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
|
||||||
|
#endif
|
||||||
|
|
||||||
//i2cInit(); //This is invoked by halInit() so no need to redo it.
|
//i2cInit(); //This is invoked by halInit() so no need to redo it.
|
||||||
}
|
}
|
||||||
@@ -106,11 +117,11 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data,
|
|||||||
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)
|
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
|
||||||
{
|
{
|
||||||
i2c_address = devaddr;
|
i2c_address = devaddr;
|
||||||
i2cStart(&I2C_DRIVER, &i2cconfig);
|
i2cStart(&I2C_DRIVER, &i2cconfig);
|
||||||
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), regaddr, 1, data, length, MS2ST(timeout));
|
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), ®addr, 1, data, length, MS2ST(timeout));
|
||||||
return chibios_to_qmk(&status);
|
return chibios_to_qmk(&status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+42
-24
@@ -22,10 +22,16 @@
|
|||||||
* Please ensure that HAL_USE_I2C is TRUE in the halconf.h file and that
|
* Please ensure that HAL_USE_I2C is TRUE in the halconf.h file and that
|
||||||
* STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file.
|
* STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file.
|
||||||
*/
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include <hal.h>
|
#include <hal.h>
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L0xx) || defined(STM32L1xx)
|
||||||
|
#define USE_I2CV1
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef I2C1_BANK
|
#ifdef I2C1_BANK
|
||||||
#define I2C1_SCL_BANK I2C1_BANK
|
#define I2C1_SCL_BANK I2C1_BANK
|
||||||
#define I2C1_SDA_BANK I2C1_BANK
|
#define I2C1_SDA_BANK I2C1_BANK
|
||||||
@@ -46,30 +52,42 @@
|
|||||||
#define I2C1_SDA 7
|
#define I2C1_SDA 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// The default PAL alternate modes are used to signal that the pins are used for I2C
|
#ifdef USE_I2CV1
|
||||||
#ifndef I2C1_SCL_PAL_MODE
|
#ifndef I2C1_OPMODE
|
||||||
#define I2C1_SCL_PAL_MODE 4
|
#define I2C1_OPMODE OPMODE_I2C
|
||||||
#endif
|
#endif
|
||||||
#ifndef I2C1_SDA_PAL_MODE
|
#ifndef I2C1_CLOCK_SPEED
|
||||||
#define I2C1_SDA_PAL_MODE 4
|
#define I2C1_CLOCK_SPEED 100000 /* 400000 */
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef I2C1_DUTY_CYCLE
|
||||||
|
#define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
// The default PAL alternate modes are used to signal that the pins are used for I2C
|
||||||
|
#ifndef I2C1_SCL_PAL_MODE
|
||||||
|
#define I2C1_SCL_PAL_MODE 4
|
||||||
|
#endif
|
||||||
|
#ifndef I2C1_SDA_PAL_MODE
|
||||||
|
#define I2C1_SDA_PAL_MODE 4
|
||||||
|
#endif
|
||||||
|
|
||||||
// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
|
// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
|
||||||
// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
|
// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
|
||||||
#ifndef I2C1_TIMINGR_PRESC
|
#ifndef I2C1_TIMINGR_PRESC
|
||||||
#define I2C1_TIMINGR_PRESC 15U
|
#define I2C1_TIMINGR_PRESC 15U
|
||||||
#endif
|
#endif
|
||||||
#ifndef I2C1_TIMINGR_SCLDEL
|
#ifndef I2C1_TIMINGR_SCLDEL
|
||||||
#define I2C1_TIMINGR_SCLDEL 4U
|
#define I2C1_TIMINGR_SCLDEL 4U
|
||||||
#endif
|
#endif
|
||||||
#ifndef I2C1_TIMINGR_SDADEL
|
#ifndef I2C1_TIMINGR_SDADEL
|
||||||
#define I2C1_TIMINGR_SDADEL 2U
|
#define I2C1_TIMINGR_SDADEL 2U
|
||||||
#endif
|
#endif
|
||||||
#ifndef I2C1_TIMINGR_SCLH
|
#ifndef I2C1_TIMINGR_SCLH
|
||||||
#define I2C1_TIMINGR_SCLH 15U
|
#define I2C1_TIMINGR_SCLH 15U
|
||||||
#endif
|
#endif
|
||||||
#ifndef I2C1_TIMINGR_SCLL
|
#ifndef I2C1_TIMINGR_SCLL
|
||||||
#define I2C1_TIMINGR_SCLL 21U
|
#define I2C1_TIMINGR_SCLL 21U
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef I2C_DRIVER
|
#ifndef I2C_DRIVER
|
||||||
@@ -88,5 +106,5 @@ i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length,
|
|||||||
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
|
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
|
||||||
i2c_status_t i2c_transmit_receive(uint8_t address, uint8_t * tx_body, uint16_t tx_length, uint8_t * rx_body, uint16_t rx_length);
|
i2c_status_t i2c_transmit_receive(uint8_t address, uint8_t * tx_body, uint16_t tx_length, uint8_t * rx_body, uint16_t rx_length);
|
||||||
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
|
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
|
||||||
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
|
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
|
||||||
void i2c_stop(void);
|
void i2c_stop(void);
|
||||||
@@ -125,11 +125,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* key combination for magic key command */
|
|
||||||
/*#define IS_COMMAND() ( \
|
|
||||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
|
||||||
)*/
|
|
||||||
|
|
||||||
/* control how magic key switches layers */
|
/* control how magic key switches layers */
|
||||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||||
@@ -239,7 +234,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
// #define BOOTMAGIC_LITE_ROW 0
|
// #define BOOTMAGIC_LITE_ROW 0
|
||||||
// #define BOOTMAGIC_LITE_COLUMN 0
|
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 3
|
|
||||||
#define ENCODERS_PAD_A { B2, B3, D5 }
|
#define ENCODERS_PAD_A { B2, B3, D5 }
|
||||||
#define ENCODERS_PAD_B { B1, B7, B4 }
|
#define ENCODERS_PAD_B { B1, B7, B4 }
|
||||||
#define ENCODER_RESOLUTION 2
|
#define ENCODER_RESOLUTION 2
|
||||||
+109
-100
@@ -1,103 +1,112 @@
|
|||||||
{
|
{
|
||||||
"keyboard_name": "QMK80",
|
"keyboard_name": "x11",
|
||||||
"url": "",
|
"url": "",
|
||||||
"maintainer": "qmk",
|
"maintainer": "qmk",
|
||||||
"width": 18.25,
|
"width": 18.25,
|
||||||
"height": 6.5,
|
"height": 6.5,
|
||||||
"layouts": {
|
"layouts": {
|
||||||
"LAYOUT": {
|
"LAYOUT": {
|
||||||
"key_count": 88,
|
"key_count": 88,
|
||||||
"layout": [
|
"layout": [
|
||||||
{"label":"K00", "x":0, "y":0},
|
{"label":"K00", "x":0, "y":0},
|
||||||
{"label":"K01", "x":2, "y":0},
|
{"label":"K01", "x":2, "y":0},
|
||||||
{"label":"K02", "x":3, "y":0},
|
{"label":"K02", "x":3, "y":0},
|
||||||
{"label":"K03", "x":4, "y":0},
|
{"label":"K03", "x":4, "y":0},
|
||||||
{"label":"K04", "x":5, "y":0},
|
{"label":"K04", "x":5, "y":0},
|
||||||
{"label":"K05", "x":6.5, "y":0},
|
{"label":"K05", "x":6.5, "y":0},
|
||||||
{"label":"K06", "x":7.5, "y":0},
|
{"label":"K06", "x":7.5, "y":0},
|
||||||
{"label":"K07", "x":8.5, "y":0},
|
{"label":"K07", "x":8.5, "y":0},
|
||||||
{"label":"K08", "x":9.5, "y":0},
|
{"label":"K08", "x":9.5, "y":0},
|
||||||
{"label":"K09", "x":11, "y":0},
|
{"label":"K09", "x":11, "y":0},
|
||||||
{"label":"K0A", "x":12, "y":0},
|
{"label":"K0A", "x":12, "y":0},
|
||||||
{"label":"K0B", "x":13, "y":0},
|
{"label":"K0B", "x":13, "y":0},
|
||||||
{"label":"K0C", "x":14, "y":0},
|
{"label":"K0C", "x":14, "y":0},
|
||||||
{"label":"K60", "x":15.25, "y":0},
|
|
||||||
{"label":"K61", "x":16.25, "y":0},
|
{"label":"K62", "x":15.25, "y":0},
|
||||||
{"label":"K62", "x":17.25, "y":0},
|
{"label":"K61", "x":16.25, "y":0},
|
||||||
{"label":"K10", "x":0, "y":1.5},
|
{"label":"K60", "x":17.25, "y":0},
|
||||||
{"label":"K11", "x":1, "y":1.5},
|
|
||||||
{"label":"K12", "x":2, "y":1.5},
|
{"label":"K10", "x":0, "y":1.5},
|
||||||
{"label":"K13", "x":3, "y":1.5},
|
{"label":"K11", "x":1, "y":1.5},
|
||||||
{"label":"K14", "x":4, "y":1.5},
|
{"label":"K12", "x":2, "y":1.5},
|
||||||
{"label":"K15", "x":5, "y":1.5},
|
{"label":"K13", "x":3, "y":1.5},
|
||||||
{"label":"K16", "x":6, "y":1.5},
|
{"label":"K14", "x":4, "y":1.5},
|
||||||
{"label":"K17", "x":7, "y":1.5},
|
{"label":"K15", "x":5, "y":1.5},
|
||||||
{"label":"K18", "x":8, "y":1.5},
|
{"label":"K16", "x":6, "y":1.5},
|
||||||
{"label":"K19", "x":9, "y":1.5},
|
{"label":"K17", "x":7, "y":1.5},
|
||||||
{"label":"K1A", "x":10, "y":1.5},
|
{"label":"K18", "x":8, "y":1.5},
|
||||||
{"label":"K1B", "x":11, "y":1.5},
|
{"label":"K19", "x":9, "y":1.5},
|
||||||
{"label":"K1C", "x":12, "y":1.5},
|
{"label":"K1A", "x":10, "y":1.5},
|
||||||
{"label":"K5A", "x":13, "y":1.5, "w":2},
|
{"label":"K1B", "x":11, "y":1.5},
|
||||||
{"label":"K63", "x":15.25, "y":1.5},
|
{"label":"K1C", "x":12, "y":1.5},
|
||||||
{"label":"K65", "x":16.25, "y":1.5},
|
{"label":"K5A", "x":13, "y":1.5, "w":2},
|
||||||
{"label":"K67", "x":17.25, "y":1.5},
|
|
||||||
{"label":"K20", "x":0, "y":2.5, "w":1.5},
|
{"label":"K63", "x":15.25, "y":1.5},
|
||||||
{"label":"K21", "x":1.5, "y":2.5},
|
{"label":"K65", "x":16.25, "y":1.5},
|
||||||
{"label":"K22", "x":2.5, "y":2.5},
|
{"label":"K67", "x":17.25, "y":1.5},
|
||||||
{"label":"K23", "x":3.5, "y":2.5},
|
|
||||||
{"label":"K24", "x":4.5, "y":2.5},
|
{"label":"K20", "x":0, "y":2.5, "w":1.5},
|
||||||
{"label":"K25", "x":5.5, "y":2.5},
|
{"label":"K21", "x":1.5, "y":2.5},
|
||||||
{"label":"K26", "x":6.5, "y":2.5},
|
{"label":"K22", "x":2.5, "y":2.5},
|
||||||
{"label":"K27", "x":7.5, "y":2.5},
|
{"label":"K23", "x":3.5, "y":2.5},
|
||||||
{"label":"K28", "x":8.5, "y":2.5},
|
{"label":"K24", "x":4.5, "y":2.5},
|
||||||
{"label":"K29", "x":9.5, "y":2.5},
|
{"label":"K25", "x":5.5, "y":2.5},
|
||||||
{"label":"K2A", "x":10.5, "y":2.5},
|
{"label":"K26", "x":6.5, "y":2.5},
|
||||||
{"label":"K2B", "x":11.5, "y":2.5},
|
{"label":"K27", "x":7.5, "y":2.5},
|
||||||
{"label":"K2C", "x":12.5, "y":2.5},
|
{"label":"K28", "x":8.5, "y":2.5},
|
||||||
{"label":"K4C", "x":13.5, "y":2.5, "w":1.5},
|
{"label":"K29", "x":9.5, "y":2.5},
|
||||||
{"label":"K64", "x":15.25, "y":2.5},
|
{"label":"K2A", "x":10.5, "y":2.5},
|
||||||
{"label":"K66", "x":16.25, "y":2.5},
|
{"label":"K2B", "x":11.5, "y":2.5},
|
||||||
{"label":"K68", "x":17.25, "y":2.5},
|
{"label":"K2C", "x":12.5, "y":2.5},
|
||||||
{"label":"K30", "x":0, "y":3.5, "w":1.75},
|
{"label":"K4C", "x":13.5, "y":2.5, "w":1.5},
|
||||||
{"label":"K31", "x":1.75, "y":3.5},
|
|
||||||
{"label":"K32", "x":2.75, "y":3.5},
|
{"label":"K64", "x":15.25, "y":2.5},
|
||||||
{"label":"K33", "x":3.75, "y":3.5},
|
{"label":"K66", "x":16.25, "y":2.5},
|
||||||
{"label":"K34", "x":4.75, "y":3.5},
|
{"label":"K68", "x":17.25, "y":2.5},
|
||||||
{"label":"K35", "x":5.75, "y":3.5},
|
|
||||||
{"label":"K36", "x":6.75, "y":3.5},
|
{"label":"K30", "x":0, "y":3.5, "w":1.75},
|
||||||
{"label":"K37", "x":7.75, "y":3.5},
|
{"label":"K31", "x":1.75, "y":3.5},
|
||||||
{"label":"K38", "x":8.75, "y":3.5},
|
{"label":"K32", "x":2.75, "y":3.5},
|
||||||
{"label":"K39", "x":9.75, "y":3.5},
|
{"label":"K33", "x":3.75, "y":3.5},
|
||||||
{"label":"K3A", "x":10.75, "y":3.5},
|
{"label":"K34", "x":4.75, "y":3.5},
|
||||||
{"label":"K3B", "x":11.75, "y":3.5},
|
{"label":"K35", "x":5.75, "y":3.5},
|
||||||
{"label":"K3C", "x":12.75, "y":3.5, "w":2.25},
|
{"label":"K36", "x":6.75, "y":3.5},
|
||||||
{"label":"K40", "x":0, "y":4.5, "w":2.25},
|
{"label":"K37", "x":7.75, "y":3.5},
|
||||||
{"label":"K41", "x":2.25, "y":4.5},
|
{"label":"K38", "x":8.75, "y":3.5},
|
||||||
{"label":"K42", "x":3.25, "y":4.5},
|
{"label":"K39", "x":9.75, "y":3.5},
|
||||||
{"label":"K43", "x":4.25, "y":4.5},
|
{"label":"K3A", "x":10.75, "y":3.5},
|
||||||
{"label":"K44", "x":5.25, "y":4.5},
|
{"label":"K3B", "x":11.75, "y":3.5},
|
||||||
{"label":"K45", "x":6.25, "y":4.5},
|
{"label":"K3C", "x":12.75, "y":3.5, "w":2.25},
|
||||||
{"label":"K46", "x":7.25, "y":4.5},
|
|
||||||
{"label":"K47", "x":8.25, "y":4.5},
|
{"label":"K40", "x":0, "y":4.5, "w":2.25},
|
||||||
{"label":"K48", "x":9.25, "y":4.5},
|
{"label":"K41", "x":2.25, "y":4.5},
|
||||||
{"label":"K49", "x":10.25, "y":4.5},
|
{"label":"K42", "x":3.25, "y":4.5},
|
||||||
{"label":"K4A", "x":11.25, "y":4.5},
|
{"label":"K43", "x":4.25, "y":4.5},
|
||||||
{"label":"K4B", "x":12.25, "y":4.5, "w":1.75},
|
{"label":"K44", "x":5.25, "y":4.5},
|
||||||
{"label":"K69", "x":14, "y":4.5},
|
{"label":"K45", "x":6.25, "y":4.5},
|
||||||
{"label":"K58", "x":16.25, "y":4.5},
|
{"label":"K46", "x":7.25, "y":4.5},
|
||||||
{"label":"K50", "x":0, "y":5.5, "w":1.25},
|
{"label":"K47", "x":8.25, "y":4.5},
|
||||||
{"label":"K51", "x":1.25, "y":5.5, "w":1.25},
|
{"label":"K48", "x":9.25, "y":4.5},
|
||||||
{"label":"K52", "x":2.5, "y":5.5, "w":1.25},
|
{"label":"K49", "x":10.25, "y":4.5},
|
||||||
{"label":"K53", "x":3.75, "y":5.5, "w":6.25},
|
{"label":"K4A", "x":11.25, "y":4.5},
|
||||||
{"label":"K54", "x":10, "y":5.5, "w":1.25},
|
{"label":"K4B", "x":12.25, "y":4.5, "w":1.75},
|
||||||
{"label":"K55", "x":11.25, "y":5.5, "w":1.25},
|
{"label":"K69", "x":14, "y":4.5},
|
||||||
{"label":"K56", "x":12.5, "y":5.5, "w":1.25},
|
|
||||||
{"label":"K57", "x":13.75, "y":5.5, "w":1.25},
|
{"label":"K58", "x":16.25, "y":4.5},
|
||||||
{"label":"K6A", "x":15.25, "y":5.5},
|
|
||||||
{"label":"K59", "x":16.25, "y":5.5},
|
{"label":"K50", "x":0, "y":5.5, "w":1.25},
|
||||||
{"label":"K6B", "x":17.25, "y":5.5}
|
{"label":"K51", "x":1.25, "y":5.5, "w":1.25},
|
||||||
]
|
{"label":"K52", "x":2.5, "y":5.5, "w":1.25},
|
||||||
}
|
{"label":"K53", "x":3.75, "y":5.5, "w":6.25},
|
||||||
|
{"label":"K54", "x":10, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K55", "x":11.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K56", "x":12.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K57", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
|
||||||
|
{"label":"K6A", "x":15.25, "y":5.5},
|
||||||
|
{"label":"K59", "x":16.25, "y":5.5},
|
||||||
|
{"label":"K6B", "x":17.25, "y":5.5}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@@ -15,64 +15,23 @@
|
|||||||
*/
|
*/
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
// Defines the keycodes used by our macros in process_record_user
|
|
||||||
enum custom_keycodes {
|
|
||||||
QMKBEST = SAFE_RANGE,
|
|
||||||
QMKURL
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = LAYOUT( \
|
[0] = LAYOUT(
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
|
||||||
KC_PSCR, KC_SLCK, KC_PAUS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, \
|
|
||||||
KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, \
|
|
||||||
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_CAPS, KC_A, \
|
|
||||||
KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSFT, KC_Z, \
|
|
||||||
KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, KC_LCTL, \
|
|
||||||
KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
|
||||||
),
|
|
||||||
[1] = LAYOUT( \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_TOGG, BL_DEC, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_MPLY, KC_MSTP, RGB_TOG, RGB_MOD, \
|
|
||||||
RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, RGB_VAD, RGB_SAD \
|
|
||||||
),
|
|
||||||
|
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[1] = LAYOUT(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
|
||||||
|
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_MPLY, KC_MSTP,
|
||||||
|
RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
switch (keycode) {
|
|
||||||
case QMKBEST:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
// when keycode QMKBEST is pressed
|
|
||||||
SEND_STRING("QMK is the best thing ever!");
|
|
||||||
} else {
|
|
||||||
// when keycode QMKBEST is released
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case QMKURL:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
// when keycode QMKURL is pressed
|
|
||||||
SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
|
|
||||||
} else {
|
|
||||||
// when keycode QMKURL is released
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void led_set_user(uint8_t usb_led) {
|
|
||||||
|
|
||||||
}
|
|
||||||
+30
-29
@@ -16,48 +16,49 @@
|
|||||||
#include "x11.h"
|
#include "x11.h"
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
void matrix_init_kb(void) {
|
||||||
// put your keyboard start-up code here
|
// put your keyboard start-up code here
|
||||||
// runs once when the firmware starts up
|
// runs once when the firmware starts up
|
||||||
setPinOutput(C6);
|
|
||||||
setPinOutput(E6);
|
setPinOutput(C6);
|
||||||
setPinOutput(C7);
|
setPinOutput(E6);
|
||||||
matrix_init_user();
|
setPinOutput(C7);
|
||||||
|
matrix_init_user();
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
void matrix_scan_kb(void) {
|
||||||
// put your looping keyboard code here
|
// put your looping keyboard code here
|
||||||
// runs every cycle (a lot)
|
// runs every cycle (a lot)
|
||||||
|
|
||||||
matrix_scan_user();
|
matrix_scan_user();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
// put your per-action keyboard code here
|
// put your per-action keyboard code here
|
||||||
// runs for every action, just before processing by the firmware
|
// runs for every action, just before processing by the firmware
|
||||||
|
|
||||||
return process_record_user(keycode, record);
|
return process_record_user(keycode, record);
|
||||||
}
|
}
|
||||||
|
|
||||||
void led_set_kb(uint8_t usb_led) {
|
void led_set_kb(uint8_t usb_led) {
|
||||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||||
|
|
||||||
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
|
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
|
||||||
writePinLow(C6);
|
writePinLow(C6);
|
||||||
} else {
|
} else {
|
||||||
writePinHigh(C6);
|
writePinHigh(C6);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
|
if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
|
||||||
writePinLow(E6);
|
writePinLow(E6);
|
||||||
} else {
|
} else {
|
||||||
writePinHigh(E6);
|
writePinHigh(E6);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
|
if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
|
||||||
writePinLow(C7);
|
writePinLow(C7);
|
||||||
} else {
|
} else {
|
||||||
writePinHigh(C7);
|
writePinHigh(C7);
|
||||||
}
|
}
|
||||||
|
|
||||||
led_set_user(usb_led);
|
led_set_user(usb_led);
|
||||||
}
|
}
|
||||||
+13
-13
@@ -26,18 +26,18 @@
|
|||||||
* represents the switch matrix.
|
* represents the switch matrix.
|
||||||
*/
|
*/
|
||||||
#define LAYOUT( \
|
#define LAYOUT( \
|
||||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K60, K61, K62, \
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K62, K61, K60, \
|
||||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K5A, K63, K65, K67, \
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K5A, K63, K65, K67, \
|
||||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K4C, K64, K66, K68, \
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K4C, K64, K66, K68, \
|
||||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
|
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
|
||||||
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K69, K58, \
|
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K69, K58, \
|
||||||
K50, K51, K52, K53, K54, K55, K56, K57, K6A, K59, K6B \
|
K50, K51, K52, K53, K54, K55, K56, K57, K6A, K59, K6B \
|
||||||
) { \
|
) { \
|
||||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C }, \
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C }, \
|
||||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C }, \
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C }, \
|
||||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C }, \
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C }, \
|
||||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C }, \
|
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C }, \
|
||||||
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C }, \
|
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C }, \
|
||||||
{ K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, KC_NO, KC_NO }, \
|
{ K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, KC_NO, KC_NO }, \
|
||||||
{ K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, KC_NO }, \
|
{ K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, KC_NO }, \
|
||||||
}
|
}
|
||||||
@@ -26,7 +26,6 @@
|
|||||||
#define MATRIX_ROW_PINS { A3, B8, B9, B1 }
|
#define MATRIX_ROW_PINS { A3, B8, B9, B1 }
|
||||||
#define MATRIX_COL_PINS { A7, A8, B2, B10 }
|
#define MATRIX_COL_PINS { A7, A8, B2, B10 }
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
#define ENCODERS_PAD_A { B13 }
|
#define ENCODERS_PAD_A { B13 }
|
||||||
#define ENCODERS_PAD_B { B14 }
|
#define ENCODERS_PAD_B { B14 }
|
||||||
|
|
||||||
@@ -142,7 +141,7 @@
|
|||||||
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
|
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
|
||||||
|
|
||||||
/* default 3V ERM vibration motor voltage and library*/
|
/* default 3V ERM vibration motor voltage and library*/
|
||||||
#if FB_ERM_LRA == 0
|
#if FB_ERM_LRA == 0
|
||||||
#define RATED_VOLTAGE 3
|
#define RATED_VOLTAGE 3
|
||||||
#define V_RMS 2.3
|
#define V_RMS 2.3
|
||||||
#define V_PEAK 3.30
|
#define V_PEAK 3.30
|
||||||
@@ -193,4 +192,3 @@
|
|||||||
#define RGB_MATRIX_KEYPRESSES
|
#define RGB_MATRIX_KEYPRESSES
|
||||||
|
|
||||||
#define SOLENOID_PIN A14
|
#define SOLENOID_PIN A14
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
# MCU name
|
# MCU name
|
||||||
#MCU = at90usb1286
|
|
||||||
MCU = atmega32u4
|
MCU = atmega32u4
|
||||||
|
|
||||||
# Processor frequency.
|
# Processor frequency.
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define BACKLIGHT_BREATHING
|
#define BACKLIGHT_BREATHING
|
||||||
#define BREATHING_PERIOD 6
|
#define BREATHING_PERIOD 6
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
#define ENCODERS_PAD_A { B9 }
|
#define ENCODERS_PAD_A { B9 }
|
||||||
#define ENCODERS_PAD_B { B8 }
|
#define ENCODERS_PAD_B { B8 }
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define MATRIX_ROW_PINS { B3, B4, A0, A2, A4, A3 }
|
#define MATRIX_ROW_PINS { B3, B4, A0, A2, A4, A3 }
|
||||||
#define DIODE_DIRECTION COL2ROW
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
#define ENCODERS_PAD_A { B9 }
|
#define ENCODERS_PAD_A { B9 }
|
||||||
#define ENCODERS_PAD_B { B8 }
|
#define ENCODERS_PAD_B { B8 }
|
||||||
|
|
||||||
|
|||||||
@@ -110,11 +110,11 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data,
|
|||||||
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)
|
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
|
||||||
{
|
{
|
||||||
i2c_address = devaddr;
|
i2c_address = devaddr;
|
||||||
i2cStart(&I2C_DRIVER, &i2cconfig);
|
i2cStart(&I2C_DRIVER, &i2cconfig);
|
||||||
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), regaddr, 1, data, length, MS2ST(timeout));
|
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), ®addr, 1, data, length, MS2ST(timeout));
|
||||||
return chibios_to_qmk(status);
|
return chibios_to_qmk(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
|||||||
}
|
}
|
||||||
#endif //DYNAMIC_KEYMAP_ENABLE
|
#endif //DYNAMIC_KEYMAP_ENABLE
|
||||||
|
|
||||||
return true;
|
return process_record_user(keycode, record);;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,366 @@
|
|||||||
{
|
{
|
||||||
"keyboard_name": "ErgoDash rev2",
|
"keyboard_name": "ErgoDash rev1.2",
|
||||||
"url": "",
|
"url": "",
|
||||||
"maintainer": "qmk",
|
"maintainer": "qmk",
|
||||||
"width": 18,
|
"width": 19,
|
||||||
"height": 6.25,
|
"height": 8.375,
|
||||||
"layouts": {
|
"layouts": {
|
||||||
"LAYOUT": {
|
"LAYOUT_4key": {
|
||||||
"key_count": 70,
|
"layout": [
|
||||||
"layout": [{"label":"L00", "x":0, "y":0.375}, {"label":"L01", "x":1, "y":0.375}, {"label":"L02", "x":2, "y":0.125}, {"label":"L03", "x":3, "y":0}, {"label":"L04", "x":4, "y":0.125}, {"label":"L05", "x":5, "y":0.25}, {"label":"L06", "x":6, "y":0.75}, {"label":"R00", "x":11, "y":0.75}, {"label":"R01", "x":12, "y":0.25}, {"label":"R02", "x":13, "y":0.125}, {"label":"R03", "x":14, "y":0}, {"label":"R04", "x":15, "y":0.125}, {"label":"R05", "x":16, "y":0.375}, {"label":"R06", "x":17, "y":0.375}, {"label":"L10", "x":0, "y":1.375}, {"label":"L11", "x":1, "y":1.375}, {"label":"L12", "x":2, "y":1.125}, {"label":"L13", "x":3, "y":1}, {"label":"L14", "x":4, "y":1.125}, {"label":"L15", "x":5, "y":1.25}, {"label":"L16", "x":6, "y":1.75}, {"label":"R10", "x":11, "y":1.75}, {"label":"R11", "x":12, "y":1.25}, {"label":"R12", "x":13, "y":1.125}, {"label":"R13", "x":14, "y":1}, {"label":"R14", "x":15, "y":1.125}, {"label":"R15", "x":16, "y":1.375}, {"label":"R16", "x":17, "y":1.375}, {"label":"L20", "x":0, "y":2.375}, {"label":"L21", "x":1, "y":2.375}, {"label":"L22", "x":2, "y":2.125}, {"label":"L23", "x":3, "y":2}, {"label":"L24", "x":4, "y":2.125}, {"label":"L25", "x":5, "y":2.25}, {"label":"L26", "x":6, "y":2.75}, {"label":"R20", "x":11, "y":2.75}, {"label":"R21", "x":12, "y":2.25}, {"label":"R22", "x":13, "y":2.125}, {"label":"R23", "x":14, "y":2}, {"label":"R24", "x":15, "y":2.125}, {"label":"R25", "x":16, "y":2.375}, {"label":"R26", "x":17, "y":2.375}, {"label":"L30", "x":0, "y":3.375}, {"label":"L31", "x":1, "y":3.375}, {"label":"L32", "x":2, "y":3.125}, {"label":"L33", "x":3, "y":3}, {"label":"L34", "x":4, "y":3.125}, {"label":"L35", "x":5, "y":3.25}, {"label":"L36", "x":6.5, "y":4.25}, {"label":"R30", "x":10.5, "y":4.25}, {"label":"R31", "x":12, "y":3.25}, {"label":"R32", "x":13, "y":3.125}, {"label":"R33", "x":14, "y":3}, {"label":"R34", "x":15, "y":3.125}, {"label":"R35", "x":16, "y":3.375}, {"label":"R36", "x":17, "y":3.375}, {"label":"L40", "x":0, "y":4.375}, {"label":"L41", "x":1, "y":4.375}, {"label":"L42", "x":2, "y":4.125}, {"label":"L43", "x":3, "y":4}, {"label":"L44", "x":5.5, "y":5.25}, {"label":"L45", "x":6.5, "y":5.25}, {"label":"L46", "x":7.5, "y":4.25, "h":2}, {"label":"R40", "x":9.5, "y":4.25, "h":2}, {"label":"R41", "x":10.5, "y":5.25}, {"label":"R42", "x":11.5, "y":5.25}, {"label":"R43", "x":14, "y":4}, {"label":"R44", "x":15, "y":4.125}, {"label":"R45", "x":16, "y":4.375}, {"label":"R46", "x":17, "y":4.375}]
|
{"y": 0.375, "x": 0.5, "label": "L00"},
|
||||||
|
{"y": 0.375, "x": 1.5, "label": "L01"},
|
||||||
|
{"y": 0.125, "x": 2.5, "label": "L02"},
|
||||||
|
{"y": 0, "x": 3.5, "label": "L03"},
|
||||||
|
{"y": 0.125, "x": 4.5, "label": "L04"},
|
||||||
|
{"y": 0.25, "x": 5.5, "label": "L05"},
|
||||||
|
{"y": 0.75, "x": 6.5, "label": "L06"},
|
||||||
|
{"y": 0.75, "x": 12, "label": "R00"},
|
||||||
|
{"y": 0.25, "x": 13, "label": "R01"},
|
||||||
|
{"y": 0.125, "x": 14, "label": "R02"},
|
||||||
|
{"y": 0, "x": 15, "label": "R03"},
|
||||||
|
{"y": 0.125, "x": 16, "label": "R04"},
|
||||||
|
{"y": 0.375, "x": 17, "label": "R05"},
|
||||||
|
{"y": 0.375, "x": 18, "label": "R06"},
|
||||||
|
{"y": 1.375, "x": 0.5, "label": "L10"},
|
||||||
|
{"y": 1.375, "x": 1.5, "label": "L11"},
|
||||||
|
{"y": 1.125, "x": 2.5, "label": "L12"},
|
||||||
|
{"y": 1, "x": 3.5, "label": "L13"},
|
||||||
|
{"y": 1.125, "x": 4.5, "label": "L14"},
|
||||||
|
{"y": 1.25, "x": 5.5, "label": "L15"},
|
||||||
|
{"y": 1.75, "x": 6.5, "label": "L16"},
|
||||||
|
{"y": 1.75, "x": 12, "label": "R10"},
|
||||||
|
{"y": 1.25, "x": 13, "label": "R11"},
|
||||||
|
{"y": 1.125, "x": 14, "label": "R12"},
|
||||||
|
{"y": 1, "x": 15, "label": "R13"},
|
||||||
|
{"y": 1.125, "x": 16, "label": "R14"},
|
||||||
|
{"y": 1.375, "x": 17, "label": "R15"},
|
||||||
|
{"y": 1.375, "x": 18, "label": "R16"},
|
||||||
|
{"y": 2.375, "x": 0.5, "label": "L20"},
|
||||||
|
{"y": 2.375, "x": 1.5, "label": "L21"},
|
||||||
|
{"y": 2.125, "x": 2.5, "label": "L22"},
|
||||||
|
{"y": 2, "x": 3.5, "label": "L23"},
|
||||||
|
{"y": 2.125, "x": 4.5, "label": "L24"},
|
||||||
|
{"y": 2.25, "x": 5.5, "label": "L25"},
|
||||||
|
{"y": 2.75, "x": 6.5, "label": "L26"},
|
||||||
|
{"y": 2.75, "x": 12, "label": "R20"},
|
||||||
|
{"y": 2.25, "x": 13, "label": "R21"},
|
||||||
|
{"y": 2.125, "x": 14, "label": "R22"},
|
||||||
|
{"y": 2, "x": 15, "label": "R23"},
|
||||||
|
{"y": 2.125, "x": 16, "label": "R24"},
|
||||||
|
{"y": 2.375, "x": 17, "label": "R25"},
|
||||||
|
{"y": 2.375, "x": 18, "label": "R26"},
|
||||||
|
{"y": 3.375, "x": 0.5, "label": "L30"},
|
||||||
|
{"y": 3.375, "x": 1.5, "label": "L31"},
|
||||||
|
{"y": 3.125, "x": 2.5, "label": "L32"},
|
||||||
|
{"y": 3, "x": 3.5, "label": "L33"},
|
||||||
|
{"y": 3.125, "x": 4.5, "label": "L34"},
|
||||||
|
{"y": 3.25, "x": 5.5, "label": "L35"},
|
||||||
|
{"y": 4, "x": 6.5, "label": "L36"},
|
||||||
|
{"y": 4, "x": 12, "label": "R30"},
|
||||||
|
{"y": 3.25, "x": 13, "label": "R31"},
|
||||||
|
{"y": 3.125, "x": 14, "label": "R32"},
|
||||||
|
{"y": 3, "x": 15, "label": "R33"},
|
||||||
|
{"y": 3.125, "x": 16, "label": "R34"},
|
||||||
|
{"y": 3.375, "x": 17, "label": "R35"},
|
||||||
|
{"y": 3.375, "x": 18, "label": "R36"},
|
||||||
|
{"y": 4.375, "x": 0.5, "label": "L40"},
|
||||||
|
{"y": 4.375, "x": 1.5, "label": "L41"},
|
||||||
|
{"y": 4.125, "x": 2.5, "label": "L42"},
|
||||||
|
{"y": 4, "x": 3.5, "label": "L43"},
|
||||||
|
{"y": 5, "x": 5.5, "label": "L44"},
|
||||||
|
{"y": 5, "x": 6.5, "label": "L45"},
|
||||||
|
{"h": 2, "y": 4, "x": 7.5, "label": "L46"},
|
||||||
|
{"h": 2, "y": 4, "x": 11, "label": "R40"},
|
||||||
|
{"y": 5, "x": 12, "label": "R41"},
|
||||||
|
{"y": 5, "x": 13, "label": "R42"},
|
||||||
|
{"y": 4, "x": 15, "label": "R43"},
|
||||||
|
{"y": 4.125, "x": 16, "label": "R44"},
|
||||||
|
{"y": 4.375, "x": 17, "label": "R45"},
|
||||||
|
{"y": 4.375, "x": 18, "label": "R46"}]
|
||||||
|
},
|
||||||
|
"LAYOUT_4key_2u_inner": {
|
||||||
|
"layout": [
|
||||||
|
{"y": 0.375, "x": 0.5, "label": "L00"},
|
||||||
|
{"y": 0.375, "x": 1.5, "label": "L01"},
|
||||||
|
{"y": 0.125, "x": 2.5, "label": "L02"},
|
||||||
|
{"y": 0, "x": 3.5, "label": "L03"},
|
||||||
|
{"y": 0.125, "x": 4.5, "label": "L04"},
|
||||||
|
{"y": 0.25, "x": 5.5, "label": "L05"},
|
||||||
|
{"y": 0.75, "x": 6.5, "label": "L06"},
|
||||||
|
{"y": 0.75, "x": 12, "label": "R00"},
|
||||||
|
{"y": 0.25, "x": 13, "label": "R01"},
|
||||||
|
{"y": 0.125, "x": 14, "label": "R02"},
|
||||||
|
{"y": 0, "x": 15, "label": "R03"},
|
||||||
|
{"y": 0.125, "x": 16, "label": "R04"},
|
||||||
|
{"y": 0.375, "x": 17, "label": "R05"},
|
||||||
|
{"y": 0.375, "x": 18, "label": "R06"},
|
||||||
|
{"y": 1.375, "x": 0.5, "label": "L10"},
|
||||||
|
{"y": 1.375, "x": 1.5, "label": "L11"},
|
||||||
|
{"y": 1.125, "x": 2.5, "label": "L12"},
|
||||||
|
{"y": 1, "x": 3.5, "label": "L13"},
|
||||||
|
{"y": 1.125, "x": 4.5, "label": "L14"},
|
||||||
|
{"y": 1.25, "x": 5.5, "label": "L15"},
|
||||||
|
{"y": 1.75, "x": 6.5, "label": "L16"},
|
||||||
|
{"y": 1.75, "x": 12, "label": "R10"},
|
||||||
|
{"y": 1.25, "x": 13, "label": "R11"},
|
||||||
|
{"y": 1.125, "x": 14, "label": "R12"},
|
||||||
|
{"y": 1, "x": 15, "label": "R13"},
|
||||||
|
{"y": 1.125, "x": 16, "label": "R14"},
|
||||||
|
{"y": 1.375, "x": 17, "label": "R15"},
|
||||||
|
{"y": 1.375, "x": 18, "label": "R16"},
|
||||||
|
{"y": 2.375, "x": 0.5, "label": "L20"},
|
||||||
|
{"y": 2.375, "x": 1.5, "label": "L21"},
|
||||||
|
{"y": 2.125, "x": 2.5, "label": "L22"},
|
||||||
|
{"y": 2, "x": 3.5, "label": "L23"},
|
||||||
|
{"y": 2.125, "x": 4.5, "label": "L24"},
|
||||||
|
{"y": 2.25, "x": 5.5, "label": "L25"},
|
||||||
|
{"y": 2.75, "x": 6.5, "label": "L26"},
|
||||||
|
{"y": 2.75, "x": 12, "label": "R20"},
|
||||||
|
{"y": 2.25, "x": 13, "label": "R21"},
|
||||||
|
{"y": 2.125, "x": 14, "label": "R22"},
|
||||||
|
{"y": 2, "x": 15, "label": "R23"},
|
||||||
|
{"y": 2.125, "x": 16, "label": "R24"},
|
||||||
|
{"y": 2.375, "x": 17, "label": "R25"},
|
||||||
|
{"y": 2.375, "x": 18, "label": "R26"},
|
||||||
|
{"y": 3.375, "x": 0.5, "label": "L30"},
|
||||||
|
{"y": 3.375, "x": 1.5, "label": "L31"},
|
||||||
|
{"y": 3.125, "x": 2.5, "label": "L32"},
|
||||||
|
{"y": 3, "x": 3.5, "label": "L33"},
|
||||||
|
{"y": 3.125, "x": 4.5, "label": "L34"},
|
||||||
|
{"y": 3.25, "x": 5.5, "label": "L35"},
|
||||||
|
{"y": 4, "x": 7.5, "label": "L36"},
|
||||||
|
{"y": 4, "x": 11, "label": "R30"},
|
||||||
|
{"y": 3.25, "x": 13, "label": "R31"},
|
||||||
|
{"y": 3.125, "x": 14, "label": "R32"},
|
||||||
|
{"y": 3, "x": 15, "label": "R33"},
|
||||||
|
{"y": 3.125, "x": 16, "label": "R34"},
|
||||||
|
{"y": 3.375, "x": 17, "label": "R35"},
|
||||||
|
{"y": 3.375, "x": 18, "label": "R36"},
|
||||||
|
{"y": 4.375, "x": 0.5, "label": "L40"},
|
||||||
|
{"y": 4.375, "x": 1.5, "label": "L41"},
|
||||||
|
{"y": 4.125, "x": 2.5, "label": "L42"},
|
||||||
|
{"y": 4, "x": 3.5, "label": "L43"},
|
||||||
|
{"y": 5, "x": 5.5, "label": "L44"},
|
||||||
|
{"h": 2, "y": 4, "x": 6.5, "label": "L45"},
|
||||||
|
{"y": 5, "x": 7.5, "label": "L46"},
|
||||||
|
{"y": 5, "x": 11, "label": "R40"},
|
||||||
|
{"h": 2, "y": 4, "x": 12, "label": "R41"},
|
||||||
|
{"y": 5, "x": 13, "label": "R42"},
|
||||||
|
{"y": 4, "x": 15, "label": "R43"},
|
||||||
|
{"y": 4.125, "x": 16, "label": "R44"},
|
||||||
|
{"y": 4.375, "x": 17, "label": "R45"},
|
||||||
|
{"y": 4.375, "x": 18, "label": "R46"}]
|
||||||
|
},
|
||||||
|
"LAYOUT_3key_2us": {
|
||||||
|
"layout": [
|
||||||
|
{"y": 0.375, "x": 0.5, "label": "L00"},
|
||||||
|
{"y": 0.375, "x": 1.5, "label": "L01"},
|
||||||
|
{"y": 0.125, "x": 2.5, "label": "L02"},
|
||||||
|
{"y": 0, "x": 3.5, "label": "L03"},
|
||||||
|
{"y": 0.125, "x": 4.5, "label": "L04"},
|
||||||
|
{"y": 0.25, "x": 5.5, "label": "L05"},
|
||||||
|
{"y": 0.75, "x": 6.5, "label": "L06"},
|
||||||
|
{"y": 0.75, "x": 12, "label": "R00"},
|
||||||
|
{"y": 0.25, "x": 13, "label": "R01"},
|
||||||
|
{"y": 0.125, "x": 14, "label": "R02"},
|
||||||
|
{"y": 0, "x": 15, "label": "R03"},
|
||||||
|
{"y": 0.125, "x": 16, "label": "R04"},
|
||||||
|
{"y": 0.375, "x": 17, "label": "R05"},
|
||||||
|
{"y": 0.375, "x": 18, "label": "R06"},
|
||||||
|
{"y": 1.375, "x": 0.5, "label": "L10"},
|
||||||
|
{"y": 1.375, "x": 1.5, "label": "L11"},
|
||||||
|
{"y": 1.125, "x": 2.5, "label": "L12"},
|
||||||
|
{"y": 1, "x": 3.5, "label": "L13"},
|
||||||
|
{"y": 1.125, "x": 4.5, "label": "L14"},
|
||||||
|
{"y": 1.25, "x": 5.5, "label": "L15"},
|
||||||
|
{"y": 1.75, "x": 6.5, "label": "L16"},
|
||||||
|
{"y": 1.75, "x": 12, "label": "R10"},
|
||||||
|
{"y": 1.25, "x": 13, "label": "R11"},
|
||||||
|
{"y": 1.125, "x": 14, "label": "R12"},
|
||||||
|
{"y": 1, "x": 15, "label": "R13"},
|
||||||
|
{"y": 1.125, "x": 16, "label": "R14"},
|
||||||
|
{"y": 1.375, "x": 17, "label": "R15"},
|
||||||
|
{"y": 1.375, "x": 18, "label": "R16"},
|
||||||
|
{"y": 2.375, "x": 0.5, "label": "L20"},
|
||||||
|
{"y": 2.375, "x": 1.5, "label": "L21"},
|
||||||
|
{"y": 2.125, "x": 2.5, "label": "L22"},
|
||||||
|
{"y": 2, "x": 3.5, "label": "L23"},
|
||||||
|
{"y": 2.125, "x": 4.5, "label": "L24"},
|
||||||
|
{"y": 2.25, "x": 5.5, "label": "L25"},
|
||||||
|
{"y": 2.75, "x": 6.5, "label": "L26"},
|
||||||
|
{"y": 2.75, "x": 12, "label": "R20"},
|
||||||
|
{"y": 2.25, "x": 13, "label": "R21"},
|
||||||
|
{"y": 2.125, "x": 14, "label": "R22"},
|
||||||
|
{"y": 2, "x": 15, "label": "R23"},
|
||||||
|
{"y": 2.125, "x": 16, "label": "R24"},
|
||||||
|
{"y": 2.375, "x": 17, "label": "R25"},
|
||||||
|
{"y": 2.375, "x": 18, "label": "R26"},
|
||||||
|
{"y": 3.375, "x": 0.5, "label": "L30"},
|
||||||
|
{"y": 3.375, "x": 1.5, "label": "L31"},
|
||||||
|
{"y": 3.125, "x": 2.5, "label": "L32"},
|
||||||
|
{"y": 3, "x": 3.5, "label": "L33"},
|
||||||
|
{"y": 3.125, "x": 4.5, "label": "L34"},
|
||||||
|
{"y": 3.25, "x": 5.5, "label": "L35"},
|
||||||
|
{"y": 3.25, "x": 13, "label": "R31"},
|
||||||
|
{"y": 3.125, "x": 14, "label": "R32"},
|
||||||
|
{"y": 3, "x": 15, "label": "R33"},
|
||||||
|
{"y": 3.125, "x": 16, "label": "R34"},
|
||||||
|
{"y": 3.375, "x": 17, "label": "R35"},
|
||||||
|
{"y": 3.375, "x": 18, "label": "R36"},
|
||||||
|
{"y": 4.375, "x": 0.5, "label": "L40"},
|
||||||
|
{"y": 4.375, "x": 1.5, "label": "L41"},
|
||||||
|
{"y": 4.125, "x": 2.5, "label": "L42"},
|
||||||
|
{"y": 4, "x": 3.5, "label": "L43"},
|
||||||
|
{"y": 5, "x": 5.5, "label": "L44"},
|
||||||
|
{"h": 2, "y": 4, "x": 6.5, "label": "L45"},
|
||||||
|
{"h": 2, "y": 4, "x": 7.5, "label": "L46"},
|
||||||
|
{"h": 2, "y": 4, "x": 11, "label": "R40"},
|
||||||
|
{"h": 2, "y": 4, "x": 12, "label": "R41"},
|
||||||
|
{"y": 5, "x": 13, "label": "R42"},
|
||||||
|
{"y": 4, "x": 15, "label": "R43"},
|
||||||
|
{"y": 4.125, "x": 16, "label": "R44"},
|
||||||
|
{"y": 4.375, "x": 17, "label": "R45"},
|
||||||
|
{"y": 4.375, "x": 18, "label": "R46"}]
|
||||||
|
},
|
||||||
|
"LAYOUT_3key_1us": {
|
||||||
|
"layout": [
|
||||||
|
{"y": 0.375, "x": 0.5, "label": "L00"},
|
||||||
|
{"y": 0.375, "x": 1.5, "label": "L01"},
|
||||||
|
{"y": 0.125, "x": 2.5, "label": "L02"},
|
||||||
|
{"y": 0, "x": 3.5, "label": "L03"},
|
||||||
|
{"y": 0.125, "x": 4.5, "label": "L04"},
|
||||||
|
{"y": 0.25, "x": 5.5, "label": "L05"},
|
||||||
|
{"y": 0.75, "x": 6.5, "label": "L06"},
|
||||||
|
{"y": 0.75, "x": 12, "label": "R00"},
|
||||||
|
{"y": 0.25, "x": 13, "label": "R01"},
|
||||||
|
{"y": 0.125, "x": 14, "label": "R02"},
|
||||||
|
{"y": 0, "x": 15, "label": "R03"},
|
||||||
|
{"y": 0.125, "x": 16, "label": "R04"},
|
||||||
|
{"y": 0.375, "x": 17, "label": "R05"},
|
||||||
|
{"y": 0.375, "x": 18, "label": "R06"},
|
||||||
|
{"y": 1.375, "x": 0.5, "label": "L10"},
|
||||||
|
{"y": 1.375, "x": 1.5, "label": "L11"},
|
||||||
|
{"y": 1.125, "x": 2.5, "label": "L12"},
|
||||||
|
{"y": 1, "x": 3.5, "label": "L13"},
|
||||||
|
{"y": 1.125, "x": 4.5, "label": "L14"},
|
||||||
|
{"y": 1.25, "x": 5.5, "label": "L15"},
|
||||||
|
{"y": 1.75, "x": 6.5, "label": "L16"},
|
||||||
|
{"y": 1.75, "x": 12, "label": "R10"},
|
||||||
|
{"y": 1.25, "x": 13, "label": "R11"},
|
||||||
|
{"y": 1.125, "x": 14, "label": "R12"},
|
||||||
|
{"y": 1, "x": 15, "label": "R13"},
|
||||||
|
{"y": 1.125, "x": 16, "label": "R14"},
|
||||||
|
{"y": 1.375, "x": 17, "label": "R15"},
|
||||||
|
{"y": 1.375, "x": 18, "label": "R16"},
|
||||||
|
{"y": 2.375, "x": 0.5, "label": "L20"},
|
||||||
|
{"y": 2.375, "x": 1.5, "label": "L21"},
|
||||||
|
{"y": 2.125, "x": 2.5, "label": "L22"},
|
||||||
|
{"y": 2, "x": 3.5, "label": "L23"},
|
||||||
|
{"y": 2.125, "x": 4.5, "label": "L24"},
|
||||||
|
{"y": 2.25, "x": 5.5, "label": "L25"},
|
||||||
|
{"y": 2.75, "x": 6.5, "label": "L26"},
|
||||||
|
{"y": 2.75, "x": 12, "label": "R20"},
|
||||||
|
{"y": 2.25, "x": 13, "label": "R21"},
|
||||||
|
{"y": 2.125, "x": 14, "label": "R22"},
|
||||||
|
{"y": 2, "x": 15, "label": "R23"},
|
||||||
|
{"y": 2.125, "x": 16, "label": "R24"},
|
||||||
|
{"y": 2.375, "x": 17, "label": "R25"},
|
||||||
|
{"y": 2.375, "x": 18, "label": "R26"},
|
||||||
|
{"y": 3.375, "x": 0.5, "label": "L30"},
|
||||||
|
{"y": 3.375, "x": 1.5, "label": "L31"},
|
||||||
|
{"y": 3.125, "x": 2.5, "label": "L32"},
|
||||||
|
{"y": 3, "x": 3.5, "label": "L33"},
|
||||||
|
{"y": 3.125, "x": 4.5, "label": "L34"},
|
||||||
|
{"y": 3.25, "x": 5.5, "label": "L35"},
|
||||||
|
{"y": 4, "x": 6.5, "label": "L36"},
|
||||||
|
{"y": 4, "x": 12, "label": "R30"},
|
||||||
|
{"y": 3.25, "x": 13, "label": "R31"},
|
||||||
|
{"y": 3.125, "x": 14, "label": "R32"},
|
||||||
|
{"y": 3, "x": 15, "label": "R33"},
|
||||||
|
{"y": 3.125, "x": 16, "label": "R34"},
|
||||||
|
{"y": 3.375, "x": 17, "label": "R35"},
|
||||||
|
{"y": 3.375, "x": 18, "label": "R36"},
|
||||||
|
{"y": 4.375, "x": 0.5, "label": "L40"},
|
||||||
|
{"y": 4.375, "x": 1.5, "label": "L41"},
|
||||||
|
{"y": 4.125, "x": 2.5, "label": "L42"},
|
||||||
|
{"y": 4, "x": 3.5, "label": "L43"},
|
||||||
|
{"y": 5, "x": 5.5, "label": "L44"},
|
||||||
|
{"y": 5, "x": 6.5, "label": "L45"},
|
||||||
|
{"y": 5, "x": 12, "label": "R41"},
|
||||||
|
{"y": 5, "x": 13, "label": "R42"},
|
||||||
|
{"y": 4, "x": 15, "label": "R43"},
|
||||||
|
{"y": 4.125, "x": 16, "label": "R44"},
|
||||||
|
{"y": 4.375, "x": 17, "label": "R45"},
|
||||||
|
{"y": 4.375, "x": 18, "label": "R46"}]
|
||||||
|
},
|
||||||
|
"LAYOUT_2key": {
|
||||||
|
"layout": [
|
||||||
|
{"y": 0.375, "x": 0.5, "label": "L00"},
|
||||||
|
{"y": 0.375, "x": 1.5, "label": "L01"},
|
||||||
|
{"y": 0.125, "x": 2.5, "label": "L02"},
|
||||||
|
{"y": 0, "x": 3.5, "label": "L03"},
|
||||||
|
{"y": 0.125, "x": 4.5, "label": "L04"},
|
||||||
|
{"y": 0.25, "x": 5.5, "label": "L05"},
|
||||||
|
{"y": 0.75, "x": 6.5, "label": "L06"},
|
||||||
|
{"y": 0.75, "x": 12, "label": "R00"},
|
||||||
|
{"y": 0.25, "x": 13, "label": "R01"},
|
||||||
|
{"y": 0.125, "x": 14, "label": "R02"},
|
||||||
|
{"y": 0, "x": 15, "label": "R03"},
|
||||||
|
{"y": 0.125, "x": 16, "label": "R04"},
|
||||||
|
{"y": 0.375, "x": 17, "label": "R05"},
|
||||||
|
{"y": 0.375, "x": 18, "label": "R06"},
|
||||||
|
{"y": 1.375, "x": 0.5, "label": "L10"},
|
||||||
|
{"y": 1.375, "x": 1.5, "label": "L11"},
|
||||||
|
{"y": 1.125, "x": 2.5, "label": "L12"},
|
||||||
|
{"y": 1, "x": 3.5, "label": "L13"},
|
||||||
|
{"y": 1.125, "x": 4.5, "label": "L14"},
|
||||||
|
{"y": 1.25, "x": 5.5, "label": "L15"},
|
||||||
|
{"y": 1.75, "x": 6.5, "label": "L16"},
|
||||||
|
{"y": 1.75, "x": 12, "label": "R10"},
|
||||||
|
{"y": 1.25, "x": 13, "label": "R11"},
|
||||||
|
{"y": 1.125, "x": 14, "label": "R12"},
|
||||||
|
{"y": 1, "x": 15, "label": "R13"},
|
||||||
|
{"y": 1.125, "x": 16, "label": "R14"},
|
||||||
|
{"y": 1.375, "x": 17, "label": "R15"},
|
||||||
|
{"y": 1.375, "x": 18, "label": "R16"},
|
||||||
|
{"y": 2.375, "x": 0.5, "label": "L20"},
|
||||||
|
{"y": 2.375, "x": 1.5, "label": "L21"},
|
||||||
|
{"y": 2.125, "x": 2.5, "label": "L22"},
|
||||||
|
{"y": 2, "x": 3.5, "label": "L23"},
|
||||||
|
{"y": 2.125, "x": 4.5, "label": "L24"},
|
||||||
|
{"y": 2.25, "x": 5.5, "label": "L25"},
|
||||||
|
{"y": 2.75, "x": 6.5, "label": "L26"},
|
||||||
|
{"y": 2.75, "x": 12, "label": "R20"},
|
||||||
|
{"y": 2.25, "x": 13, "label": "R21"},
|
||||||
|
{"y": 2.125, "x": 14, "label": "R22"},
|
||||||
|
{"y": 2, "x": 15, "label": "R23"},
|
||||||
|
{"y": 2.125, "x": 16, "label": "R24"},
|
||||||
|
{"y": 2.375, "x": 17, "label": "R25"},
|
||||||
|
{"y": 2.375, "x": 18, "label": "R26"},
|
||||||
|
{"y": 3.375, "x": 0.5, "label": "L30"},
|
||||||
|
{"y": 3.375, "x": 1.5, "label": "L31"},
|
||||||
|
{"y": 3.125, "x": 2.5, "label": "L32"},
|
||||||
|
{"y": 3, "x": 3.5, "label": "L33"},
|
||||||
|
{"y": 3.125, "x": 4.5, "label": "L34"},
|
||||||
|
{"y": 3.25, "x": 5.5, "label": "L35"},
|
||||||
|
{"y": 3.25, "x": 13, "label": "R31"},
|
||||||
|
{"y": 3.125, "x": 14, "label": "R32"},
|
||||||
|
{"y": 3, "x": 15, "label": "R33"},
|
||||||
|
{"y": 3.125, "x": 16, "label": "R34"},
|
||||||
|
{"y": 3.375, "x": 17, "label": "R35"},
|
||||||
|
{"y": 3.375, "x": 18, "label": "R36"},
|
||||||
|
{"y": 4.375, "x": 0.5, "label": "L40"},
|
||||||
|
{"y": 4.375, "x": 1.5, "label": "L41"},
|
||||||
|
{"y": 4.125, "x": 2.5, "label": "L42"},
|
||||||
|
{"y": 4, "x": 3.5, "label": "L43"},
|
||||||
|
{"y": 5, "x": 5.5, "label": "L44"},
|
||||||
|
{"h": 2, "y": 4, "x": 6.5, "label": "L45"},
|
||||||
|
{"h": 2, "y": 4, "x": 12, "label": "R41"},
|
||||||
|
{"y": 5, "x": 13, "label": "R42"},
|
||||||
|
{"y": 4, "x": 15, "label": "R43"},
|
||||||
|
{"y": 4.125, "x": 16, "label": "R44"},
|
||||||
|
{"y": 4.375, "x": 17, "label": "R45"},
|
||||||
|
{"y": 4.375, "x": 18, "label": "R46"}]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
+124
-39
@@ -10,8 +10,8 @@
|
|||||||
#ifdef USE_I2C
|
#ifdef USE_I2C
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#ifdef __AVR__
|
#ifdef __AVR__
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -20,47 +20,132 @@
|
|||||||
#ifndef FLIP_HALF
|
#ifndef FLIP_HALF
|
||||||
// Standard Keymap
|
// Standard Keymap
|
||||||
// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
|
// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
|
||||||
#define LAYOUT( \
|
#define LAYOUT_4key( \
|
||||||
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
|
||||||
L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
|
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, \
|
L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
|
||||||
L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
|
L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
|
||||||
L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
|
L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
|
||||||
) \
|
) \
|
||||||
{ \
|
{ \
|
||||||
{ L00, L01, L02, L03, L04, L05, L06 }, \
|
{ L00, L01, L02, L03, L04, L05, L06 }, \
|
||||||
{ L10, L11, L12, L13, L14, L15, L16 }, \
|
{ L10, L11, L12, L13, L14, L15, L16 }, \
|
||||||
{ L20, L21, L22, L23, L24, L25, L26 }, \
|
{ L20, L21, L22, L23, L24, L25, L26 }, \
|
||||||
{ L30, L31, L32, L33, L34, L35, L36 }, \
|
{ L30, L31, L32, L33, L34, L35, L36 }, \
|
||||||
{ L40, L41, L42, L43, L44, L45, L46 }, \
|
{ L40, L41, L42, L43, L44, L45, L46 }, \
|
||||||
{ R06, R05, R04, R03, R02, R01, R00 }, \
|
{ R06, R05, R04, R03, R02, R01, R00 }, \
|
||||||
{ R16, R15, R14, R13, R12, R11, R10 }, \
|
{ R16, R15, R14, R13, R12, R11, R10 }, \
|
||||||
{ R26, R25, R24, R23, R22, R21, R20 }, \
|
{ R26, R25, R24, R23, R22, R21, R20 }, \
|
||||||
{ R36, R35, R34, R33, R32, R31, R30 }, \
|
{ R36, R35, R34, R33, R32, R31, R30 }, \
|
||||||
{ R46, R45, R44, R43, R42, R41, R40 } \
|
{ R46, R45, R44, R43, R42, R41, R40 } \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Just defined for configurator support, the matrix is identical to LAYOUT_4key
|
||||||
|
#define LAYOUT_4key_2u_inner( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
|
||||||
|
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, \
|
||||||
|
L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
|
||||||
|
L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ L00, L01, L02, L03, L04, L05, L06 }, \
|
||||||
|
{ L10, L11, L12, L13, L14, L15, L16 }, \
|
||||||
|
{ L20, L21, L22, L23, L24, L25, L26 }, \
|
||||||
|
{ L30, L31, L32, L33, L34, L35, L36 }, \
|
||||||
|
{ L40, L41, L42, L43, L44, L45, L46 }, \
|
||||||
|
{ R06, R05, R04, R03, R02, R01, R00 }, \
|
||||||
|
{ R16, R15, R14, R13, R12, R11, R10 }, \
|
||||||
|
{ R26, R25, R24, R23, R22, R21, R20 }, \
|
||||||
|
{ R36, R35, R34, R33, R32, R31, R30 }, \
|
||||||
|
{ R46, R45, R44, R43, R42, R41, R40 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_3key_2us( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
|
||||||
|
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, \
|
||||||
|
L30, L31, L32, L33, L34, L35, R31, R32, R33, R34, R35, R36, \
|
||||||
|
L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ L00, L01, L02, L03, L04, L05, L06 }, \
|
||||||
|
{ L10, L11, L12, L13, L14, L15, L16 }, \
|
||||||
|
{ L20, L21, L22, L23, L24, L25, L26 }, \
|
||||||
|
{ L30, L31, L32, L33, L34, L35, KC_NO }, \
|
||||||
|
{ L40, L41, L42, L43, L44, L45, L46 }, \
|
||||||
|
{ R06, R05, R04, R03, R02, R01, R00 }, \
|
||||||
|
{ R16, R15, R14, R13, R12, R11, R10 }, \
|
||||||
|
{ R26, R25, R24, R23, R22, R21, R20 }, \
|
||||||
|
{ R36, R35, R34, R33, R32, R31, KC_NO }, \
|
||||||
|
{ R46, R45, R44, R43, R42, R41, R40 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define LAYOUT_3key_1us( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
|
||||||
|
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, \
|
||||||
|
L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
|
||||||
|
L40, L41, L42, L43, L44, L45, R41, R42, R43, R44, R45, R46 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ L00, L01, L02, L03, L04, L05, L06 }, \
|
||||||
|
{ L10, L11, L12, L13, L14, L15, L16 }, \
|
||||||
|
{ L20, L21, L22, L23, L24, L25, L26 }, \
|
||||||
|
{ L30, L31, L32, L33, L34, L35, L36 }, \
|
||||||
|
{ L40, L41, L42, L43, L44, L45, KC_NO }, \
|
||||||
|
{ R06, R05, R04, R03, R02, R01, R00 }, \
|
||||||
|
{ R16, R15, R14, R13, R12, R11, R10 }, \
|
||||||
|
{ R26, R25, R24, R23, R22, R21, R20 }, \
|
||||||
|
{ R36, R35, R34, R33, R32, R31, R30 }, \
|
||||||
|
{ R46, R45, R44, R43, R42, R41, KC_NO } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_2key( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
|
||||||
|
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, \
|
||||||
|
L30, L31, L32, L33, L34, L35, R31, R32, R33, R34, R35, R36, \
|
||||||
|
L40, L41, L42, L43, L44, L45, R41, R42, R43, R44, R45, R46 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ L00, L01, L02, L03, L04, L05, L06 }, \
|
||||||
|
{ L10, L11, L12, L13, L14, L15, L16 }, \
|
||||||
|
{ L20, L21, L22, L23, L24, L25, L26 }, \
|
||||||
|
{ L30, L31, L32, L33, L34, L35, KC_NO }, \
|
||||||
|
{ L40, L41, L42, L43, L44, L45, KC_NO }, \
|
||||||
|
{ R06, R05, R04, R03, R02, R01, R00 }, \
|
||||||
|
{ R16, R15, R14, R13, R12, R11, R10 }, \
|
||||||
|
{ R26, R25, R24, R23, R22, R21, R20 }, \
|
||||||
|
{ R36, R35, R34, R33, R32, R31, KC_NO }, \
|
||||||
|
{ R46, R45, R44, R43, R42, R41, KC_NO } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT LAYOUT_4key
|
||||||
|
|
||||||
#else
|
#else
|
||||||
// Keymap with right side flipped
|
// Keymap with right side flipped
|
||||||
// (TRRS jack on both halves are to the right)
|
// (TRRS jack on both halves are to the right)
|
||||||
#define LAYOUT( \
|
#define LAYOUT( \
|
||||||
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
|
||||||
L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
|
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, \
|
L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
|
||||||
L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
|
L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
|
||||||
L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
|
L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
|
||||||
) \
|
) \
|
||||||
{ \
|
{ \
|
||||||
{ L00, L01, L02, L03, L04, L05, L06 }, \
|
{ L00, L01, L02, L03, L04, L05, L06 }, \
|
||||||
{ L10, L11, L12, L13, L14, L15, L16 }, \
|
{ L10, L11, L12, L13, L14, L15, L16 }, \
|
||||||
{ L20, L21, L22, L23, L24, L25, L26 }, \
|
{ L20, L21, L22, L23, L24, L25, L26 }, \
|
||||||
{ L30, L31, L32, L33, L34, L35, L36 }, \
|
{ L30, L31, L32, L33, L34, L35, L36 }, \
|
||||||
{ L40, L41, L42, L43, L44, L45, L46 }, \
|
{ L40, L41, L42, L43, L44, L45, L46 }, \
|
||||||
{ R00, R01, R02, R03, R04, R05, R06 }, \
|
{ R00, R01, R02, R03, R04, R05, R06 }, \
|
||||||
{ R10, R11, R12, R13, R14, R15, R16 }, \
|
{ R10, R11, R12, R13, R14, R15, R16 }, \
|
||||||
{ R20, R21, R22, R23, R24, R25, R26 }, \
|
{ R20, R21, R22, R23, R24, R25, R26 }, \
|
||||||
{ R30, R31, R32, R33, R34, R35, R36 }, \
|
{ R30, R31, R32, R33, R34, R35, R36 }, \
|
||||||
{ R40, R41, R42, R43, R44, R45, R46 } \
|
{ R40, R41, R42, R43, R44, R45, R46 } \
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -44,7 +44,6 @@
|
|||||||
#define MATRIX_COL_PINS { B8, B2, B10, A0, A1, A2, B0, A3, B1, A6, A7, B12, C13, B11, B9 }
|
#define MATRIX_COL_PINS { B8, B2, B10, A0, A1, A2, B0, A3, B1, A6, A7, B12, C13, B11, B9 }
|
||||||
#define UNUSED_PINS
|
#define UNUSED_PINS
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
#define ENCODERS_PAD_A { B13 }
|
#define ENCODERS_PAD_A { B13 }
|
||||||
#define ENCODERS_PAD_B { B14 }
|
#define ENCODERS_PAD_B { B14 }
|
||||||
|
|
||||||
|
|||||||
@@ -111,13 +111,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* key combination for magic key command */
|
|
||||||
/*
|
|
||||||
#define IS_COMMAND() ( \
|
|
||||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* control how magic key switches layers */
|
/* control how magic key switches layers */
|
||||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
/* Copyright 2019 joaofbmaia
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General 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 "6macro.h"
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/* Copyright 2019 joaofbmaia
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
/* This a shortcut to help you visually see your layout.
|
||||||
|
*
|
||||||
|
* The first section contains all of the arguments representing the physical
|
||||||
|
* layout of the board and position of the keys.
|
||||||
|
*
|
||||||
|
* The second converts the arguments into a two-dimensional array which
|
||||||
|
* represents the switch matrix.
|
||||||
|
*/
|
||||||
|
#define LAYOUT( \
|
||||||
|
k00, k01, k02, \
|
||||||
|
k10, k11, k12 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ k00, k01, k02 }, \
|
||||||
|
{ k10, k11, k12 }, \
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 joaofbmaia
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General 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 0xFEED
|
||||||
|
#define PRODUCT_ID 0x0037
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER joaofbmaia
|
||||||
|
#define PRODUCT 6macro
|
||||||
|
#define DESCRIPTION 6macro
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 2
|
||||||
|
#define MATRIX_COLS 3
|
||||||
|
|
||||||
|
/* pinout - DON'T CHANGE */
|
||||||
|
#define MATRIX_ROW_PINS { B3, B4 }
|
||||||
|
#define MATRIX_COL_PINS { B0, B1, B2 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL*/
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
#define RGB_DI_PIN D2
|
||||||
|
#define RGBLED_NUM 10
|
||||||
|
#define RGBLIGHT_HUE_STEP 10
|
||||||
|
#define RGBLIGHT_SAT_STEP 17
|
||||||
|
#define RGBLIGHT_VAL_STEP 17
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
|
||||||
|
// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||||
|
// /*== all animations enable ==*/
|
||||||
|
// #define RGBLIGHT_ANIMATIONS
|
||||||
|
// /*== or choose animations ==*/
|
||||||
|
#define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
#define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
#define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
// #define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
// #define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
// #define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
// /*== customize breathing effect ==*/
|
||||||
|
// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
|
||||||
|
// /*==== use exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
|
||||||
|
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "6macro",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "joaofbmaia",
|
||||||
|
"width": 3,
|
||||||
|
"height": 2,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k10", "x":0, "y":1}, {"label":"k11", "x":1, "y":1}, {"label":"k12", "x":2, "y":1}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
/* Copyright 2019 joaofbmaia
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General 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
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
/* Copyright 2019 joaofbmaia
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* LAYER 0
|
||||||
|
* ,-----------------------.
|
||||||
|
* | F13 | F14 | F15/FN| Hold for FN
|
||||||
|
* |-------+-------+-------|
|
||||||
|
* | F16 | F17 | F18 |
|
||||||
|
* `-------+-------+-------'
|
||||||
|
*/
|
||||||
|
[0] = LAYOUT(
|
||||||
|
KC_F13, KC_F14, LT(1, KC_F15), \
|
||||||
|
KC_F16, KC_F17, KC_F18 \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* LAYER 1
|
||||||
|
* ,-----------------------.
|
||||||
|
* |RGB_TOG|RGBMOD+| |
|
||||||
|
* |-------+-------+-------|
|
||||||
|
* |RGBHUE+|RGBBRI+|Spec FN| Hold along with previous to access special funtions (RESET)
|
||||||
|
* `-------+-------+-------'
|
||||||
|
*/
|
||||||
|
[1] = LAYOUT(
|
||||||
|
RGB_TOG, RGB_MOD, KC_TRNS, \
|
||||||
|
RGB_HUI, RGB_VAI, MO(2) \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* LAYER 2
|
||||||
|
* ,-----------------------.
|
||||||
|
* | RESET |RGBMOD-| |
|
||||||
|
* |-------+-------+-------|
|
||||||
|
* |RGBHUE-|RGBBRI-| |
|
||||||
|
* `-------+-------+-------'
|
||||||
|
*/
|
||||||
|
[2] = LAYOUT(
|
||||||
|
RESET, RGB_RMOD, KC_NO, \
|
||||||
|
RGB_HUD, RGB_VAD, KC_TRNS \
|
||||||
|
)
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
Layer 0:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Layer 1:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Layer 2:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Default 6macro Layout
|
||||||
|
|
||||||
|
This is the default layout. Layer 0 is mappped to function keys 13-18. Top right key switches to layer above when held. Upper layers are for RGB control.
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
/* Copyright 2019 joaofbmaia
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General 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
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
/* Copyright 2019 joaofbmaia
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* LAYER 0
|
||||||
|
* ,-----------------------.
|
||||||
|
* | ESC | ~ | SPC/FN| Hold for FN
|
||||||
|
* |-------+-------+-------|
|
||||||
|
* | C | Z | X |
|
||||||
|
* `-------+-------+-------'
|
||||||
|
*/
|
||||||
|
[0] = LAYOUT(
|
||||||
|
KC_ESC, KC_GRAVE, LT(1, KC_SPC), \
|
||||||
|
KC_C, KC_Z, KC_X \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* LAYER 1
|
||||||
|
* ,-----------------------.
|
||||||
|
* |RGB_TOG|RGBMOD+| |
|
||||||
|
* |-------+-------+-------|
|
||||||
|
* |RGBHUE+|RGBBRI+|Spec FN| Hold along with previous to access special funtions (RESET)
|
||||||
|
* `-------+-------+-------'
|
||||||
|
*/
|
||||||
|
[1] = LAYOUT(
|
||||||
|
RGB_TOG, RGB_MOD, KC_TRNS, \
|
||||||
|
RGB_HUI, RGB_VAI, MO(2) \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* LAYER 2
|
||||||
|
* ,-----------------------.
|
||||||
|
* | RESET |RGBMOD-| |
|
||||||
|
* |-------+-------+-------|
|
||||||
|
* |RGBHUE-|RGBBRI-| |
|
||||||
|
* `-------+-------+-------'
|
||||||
|
*/
|
||||||
|
[2] = LAYOUT(
|
||||||
|
RESET, RGB_RMOD, KC_NO, \
|
||||||
|
RGB_HUD, RGB_VAD, KC_TRNS \
|
||||||
|
)
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
Layer 0:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Layer 1:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Layer 2:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# OSU 6macro Layout
|
||||||
|
|
||||||
|
This layout is for the game OSU. Layer 0 is mappped as shown above. Top right key switches to layer above when held. Upper layers are for RGB control.
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# 6macro
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
This is a 6-key keyboard intended for macros or as a dedicated controller for games with few bindings.
|
||||||
|
|
||||||
|
Keyboard Maintainer: [joaofbmaia](https://github.com/joaofbmaia)
|
||||||
|
Hardware: https://github.com/joaofbmaia/6macro
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make handwired/6macro:default
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u2
|
||||||
|
|
||||||
|
# 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 = atmel-dfu
|
||||||
|
|
||||||
|
|
||||||
|
# If you don't know the bootloader type, then you can specify the
|
||||||
|
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # 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
|
||||||
|
#RGB_MATRIX_ENABLE = WS2812 # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500)
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||||
|
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||||
|
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
||||||
|
UNICODE_ENABLE = yes # 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)
|
||||||
@@ -52,10 +52,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define DEBOUNCE 5
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
/* Set up rotary encoder */
|
/* Set up rotary encoder */
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
#define ENCODERS_PAD_A { F1 }
|
#define ENCODERS_PAD_A { F1 }
|
||||||
#define ENCODERS_PAD_B { F0 }
|
#define ENCODERS_PAD_B { F0 }
|
||||||
#define ENCODER_RESOLUTION 2
|
#define ENCODER_RESOLUTION 2
|
||||||
|
|
||||||
/* Set delay for tap_code on rotary encoder */
|
/* Set delay for tap_code on rotary encoder */
|
||||||
#define TAP_CODE_DELAY 10
|
#define TAP_CODE_DELAY 10
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
# MCU name
|
# MCU name
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
MCU = atmega32u4
|
||||||
|
|
||||||
# Processor frequency.
|
# Processor frequency.
|
||||||
@@ -64,4 +63,4 @@ API_SYSEX_ENABLE = no
|
|||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
DEFAULT_FOLDER = ivy/rev1
|
DEFAULT_FOLDER = ivy/rev1
|
||||||
@@ -107,11 +107,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* key combination for magic key command */
|
|
||||||
/*#define IS_COMMAND() ( \
|
|
||||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
|
||||||
)*/
|
|
||||||
|
|
||||||
/* control how magic key switches layers */
|
/* control how magic key switches layers */
|
||||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
{ E6, B4, B2 } \
|
{ E6, B4, B2 } \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 2
|
|
||||||
#define ENCODERS_PAD_A { D1, F5 }
|
#define ENCODERS_PAD_A { D1, F5 }
|
||||||
#define ENCODERS_PAD_B { D0, F6 }
|
#define ENCODERS_PAD_B { D0, F6 }
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define QMK_LED B0
|
#define QMK_LED B0
|
||||||
#define QMK_SPEAKER C6
|
#define QMK_SPEAKER C6
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
#define ENCODERS_PAD_A { B5 }
|
#define ENCODERS_PAD_A { B5 }
|
||||||
#define ENCODERS_PAD_B { B7 }
|
#define ENCODERS_PAD_B { B7 }
|
||||||
|
|
||||||
|
|||||||
@@ -8,38 +8,38 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
[QWERTZ] = LAYOUT(
|
[QWERTZ] = LAYOUT(
|
||||||
_______,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
|
_______,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
|
||||||
_______,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
|
_______,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
|
||||||
KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
|
KC_ESC ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
|
||||||
KC_ESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
|
KC_TAB ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
|
||||||
DE_HASH,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
|
DE_PIPE,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
|
||||||
DE_TILD,DE_PIPE,DE_BSLS,DE_GRV,
|
_______,_______,_______,_______,
|
||||||
KC_RCTL,KC_LALT,
|
KC_RCTL,KC_LALT,
|
||||||
KC_HOME,
|
KC_HOME,
|
||||||
KC_LSFT,MO(MOD),KC_BSPC ,
|
KC_SPC ,KC_LSFT,KC_BSPC ,
|
||||||
KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR,KC_SLCK,KC_PAUS,KC_FN0 ,RESET,
|
KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR,KC_SLCK,KC_PAUS,KC_FN0 ,RESET,
|
||||||
KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_AUDIO_MUTE,
|
KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,DE_SS ,
|
||||||
KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,DE_EQL ,
|
KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,DE_AE ,
|
||||||
KC_H ,KC_J ,KC_K ,KC_L ,DE_SLSH,DE_QUOT,
|
KC_H ,KC_J ,KC_K ,KC_L ,DE_SLSH,DE_OE ,
|
||||||
KC_N ,KC_M ,DE_COMM,DE_DOT ,DE_MINS,DE_PLUS,
|
KC_N ,KC_M ,DE_COMM,DE_DOT ,DE_MINS,DE_UE ,
|
||||||
DE_AE ,DE_OE, DE_UE, DE_SS,
|
_______,_______,_______,_______,
|
||||||
KC_LGUI,KC_LCTL,
|
KC_LGUI,KC_LCTL,
|
||||||
KC_END ,
|
KC_END ,
|
||||||
KC_DEL,KC_ENTER ,KC_SPC
|
KC_DEL,MO(MOD),KC_ENTER
|
||||||
),
|
),
|
||||||
[MOD] = LAYOUT(
|
[MOD] = LAYOUT(
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
||||||
_______,_______,_______,_______,_______,_______,
|
_______,_______,_______,_______,_______,_______,
|
||||||
_______,DE_AT ,DE_EURO,DE_LBRC,DE_RBRC,_______,
|
DE_CIRC,DE_QUOT,DE_DQOT,DE_LCBR,DE_RCBR,DE_GRV ,
|
||||||
_______,DE_EXLM,DE_DLR ,DE_LPRN,DE_RPRN,_______,
|
DE_TILD,DE_EXLM,DE_DLR ,DE_LPRN,DE_RPRN,DE_AMPR,
|
||||||
_______,DE_CIRC,DE_AMPR,DE_LCBR,DE_RCBR,_______,
|
DE_BSLS,DE_HASH,DE_LESS,DE_LBRC,DE_RBRC,DE_MORE,
|
||||||
_______,_______,DE_LESS,DE_MORE,
|
_______,_______,_______,_______,
|
||||||
_______,_______,
|
_______,_______,
|
||||||
_______,
|
_______,
|
||||||
_______,_______,_______,
|
_______,_______,_______,
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
||||||
_______,_______,_______,_______,_______,_______,
|
_______,_______,_______,_______,_______,_______,
|
||||||
_______,KC_PGDOWN,KC_PGUP,_______,_______,DE_PERC,
|
KC_HOME,KC_PGDN,KC_PGUP,KC_END ,DE_EQL ,DE_PERC,
|
||||||
KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,DE_QST ,DE_DQOT,
|
KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,DE_QST ,DE_ASTR,
|
||||||
_______,_______,DE_SCLN,DE_COLN,DE_UNDS,DE_ASTR,
|
DE_AT ,DE_EURO,DE_SCLN,DE_COLN,DE_UNDS,DE_PLUS,
|
||||||
_______,_______,_______,_______,
|
_______,_______,_______,_______,
|
||||||
_______,_______,
|
_______,_______,
|
||||||
_______,
|
_______,
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
# The default keymap for kinesis-advantage
|
This is a german keymap for the Kinesis Advantage.
|
||||||
@@ -43,7 +43,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define DEBOUNCE 5
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
/* Rotary encoders */
|
/* Rotary encoders */
|
||||||
#define NUMBER_OF_ENCODERS 2
|
|
||||||
#define ENCODERS_PAD_A { D2, F6 }
|
#define ENCODERS_PAD_A { D2, F6 }
|
||||||
#define ENCODERS_PAD_B { D3, F5 }
|
#define ENCODERS_PAD_B { D3, F5 }
|
||||||
#define ENCODER_RESOLUTION 4
|
#define ENCODER_RESOLUTION 4
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "melody96.h"
|
#include "melody96.h"
|
||||||
|
|
||||||
void led_set_user(uint8_t usb_led) {
|
void led_set_kb(uint8_t usb_led) {
|
||||||
|
|
||||||
if (usb_led & (1 << USB_LED_NUM_LOCK)) {
|
if (usb_led & (1 << USB_LED_NUM_LOCK)) {
|
||||||
DDRC |= (1 << 6); PORTC &= ~(1 << 6);
|
DDRC |= (1 << 6); PORTC &= ~(1 << 6);
|
||||||
} else {
|
} else {
|
||||||
@@ -19,4 +18,6 @@ void led_set_user(uint8_t usb_led) {
|
|||||||
} else {
|
} else {
|
||||||
DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
|
DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
led_set_user(usb_led);
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/* Copyright 2018 James Laird-Wah
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General 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
|
||||||
|
|
||||||
|
/* place overrides here */
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "keymap_german.h"
|
||||||
|
|
||||||
|
/* layer constants */
|
||||||
|
enum {
|
||||||
|
DEF = 0,
|
||||||
|
MOD,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[DEF] = LAYOUT(
|
||||||
|
_______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , DE_SS ,
|
||||||
|
KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_MOD, KC_MUTE, KC_Y , KC_U , KC_I , KC_O , KC_P , DE_AE ,
|
||||||
|
KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , DE_PARA, _______, KC_H , KC_J , KC_K , KC_L , DE_SLSH, DE_OE ,
|
||||||
|
DE_PIPE, KC_Z , KC_X , KC_C , KC_V , KC_B , _______, _______, KC_N , KC_M , DE_COMM, DE_DOT , DE_MINS, DE_UE ,
|
||||||
|
KC_LALT, KC_LGUI,
|
||||||
|
KC_SPC , KC_ENT ,
|
||||||
|
KC_LSFT, MO(MOD),
|
||||||
|
KC_BSPC, KC_DEL ,
|
||||||
|
KC_LCTL, KC_RCTL
|
||||||
|
),
|
||||||
|
[MOD] = LAYOUT(
|
||||||
|
KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
|
||||||
|
DE_CIRC, DE_QUOT, DE_DQOT, DE_LCBR, DE_RCBR, DE_GRV , RGB_TOG, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END , DE_EQL , DE_PERC,
|
||||||
|
DE_TILD, DE_EXLM, DE_DLR , DE_LPRN, DE_RPRN, DE_AMPR, _______, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, DE_QST , DE_ASTR,
|
||||||
|
DE_BSLS, DE_HASH, DE_LESS, DE_LBRC, DE_RBRC, DE_MORE, _______, RESET , DE_AT , DE_EURO, DE_SCLN, DE_COLN, DE_UNDS, DE_PLUS,
|
||||||
|
_______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______, _______
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
/* template for new layouts:
|
||||||
|
LAYOUT(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______, _______
|
||||||
|
)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* vim: set ts=2 sw=2 et: */
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Keymap for Keyboardio's Model01 by tw1t611
|
||||||
|
|
||||||
|
Features:
|
||||||
|
- german keymap
|
||||||
|
- vim optimized
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <[email protected]>
|
||||||
|
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"
|
||||||
|
|
||||||
|
// GCC include 'config.h" sequence in qmk_firmware/keyboards/naked48/
|
||||||
|
// -include keyboards/naked48/config.h
|
||||||
|
// -include keyboards/naked48/rev?/config.h
|
||||||
|
// -include keyboards/naked48/rev?/keymaps/MAPNAME/config.h
|
||||||
|
// XXXX.c
|
||||||
|
|
||||||
|
#include <serial_config.h>
|
||||||
|
|
||||||
|
// GCC include search path in qmk_firmare/keyboards/naked48/
|
||||||
|
// #include "..." search starts here:
|
||||||
|
// #include <...> search starts here:
|
||||||
|
// keyboards/naked48/rev?/keymaps/MAPNAME
|
||||||
|
// keyboards/naked48
|
||||||
|
// keyboards/naked48/rev?
|
||||||
|
// .
|
||||||
|
// ./tmk_core
|
||||||
|
// ......
|
||||||
|
|
||||||
|
// MACRO and FUNCTION are features that are depreciated.
|
||||||
|
#define NO_ACTION_MACRO
|
||||||
|
#define NO_ACTION_FUNCTION
|
||||||
@@ -0,0 +1,251 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "Naked48",
|
||||||
|
"url": "https://salicylic-acid3.hatenablog.com/",
|
||||||
|
"maintainer": "Salicylic_acid3",
|
||||||
|
"width": 14,
|
||||||
|
"height": 4,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{
|
||||||
|
"label":"Tab",
|
||||||
|
"x":0,
|
||||||
|
"y":0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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":8,
|
||||||
|
"y":0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"U",
|
||||||
|
"x":9,
|
||||||
|
"y":0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"I",
|
||||||
|
"x":10,
|
||||||
|
"y":0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"O",
|
||||||
|
"x":11,
|
||||||
|
"y":0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"P",
|
||||||
|
"x":12,
|
||||||
|
"y":0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"Back Space",
|
||||||
|
"x":13,
|
||||||
|
"y":0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"Esc",
|
||||||
|
"x":0,
|
||||||
|
"y":1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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":8,
|
||||||
|
"y":1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"J",
|
||||||
|
"x":9,
|
||||||
|
"y":1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"K",
|
||||||
|
"x":10,
|
||||||
|
"y":1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"L",
|
||||||
|
"x":11,
|
||||||
|
"y":1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":";",
|
||||||
|
"x":12,
|
||||||
|
"y":1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"'",
|
||||||
|
"x":13,
|
||||||
|
"y":1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"Shift",
|
||||||
|
"x":0,
|
||||||
|
"y":2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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":8,
|
||||||
|
"y":2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"M",
|
||||||
|
"x":9,
|
||||||
|
"y":2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":",",
|
||||||
|
"x":10,
|
||||||
|
"y":2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":".",
|
||||||
|
"x":11,
|
||||||
|
"y":2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"/",
|
||||||
|
"x":12,
|
||||||
|
"y":2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"Enter",
|
||||||
|
"x":13,
|
||||||
|
"y":2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"Adjust",
|
||||||
|
"x":1,
|
||||||
|
"y":3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"Ctrl",
|
||||||
|
"x":2,
|
||||||
|
"y":3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"Alt",
|
||||||
|
"x":3,
|
||||||
|
"y":3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"GUI",
|
||||||
|
"x":4,
|
||||||
|
"y":3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"⇓",
|
||||||
|
"x":5,
|
||||||
|
"y":3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":6,
|
||||||
|
"y":3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":7,
|
||||||
|
"y":3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"⇑",
|
||||||
|
"x":8,
|
||||||
|
"y":3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"←",
|
||||||
|
"x":9,
|
||||||
|
"y":3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"↓",
|
||||||
|
"x":10,
|
||||||
|
"y":3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"↑",
|
||||||
|
"x":11,
|
||||||
|
"y":3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":"→",
|
||||||
|
"x":12,
|
||||||
|
"y":3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
/* Copyright 2018 Salicylic_acid3
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General 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
|
||||||
|
|
||||||
|
/* Select hand configuration */
|
||||||
|
|
||||||
|
#define MASTER_LEFT
|
||||||
|
// #define MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
|
#define USE_SERIAL_PD2
|
||||||
|
|
||||||
|
#define TAPPING_FORCE_HOLD
|
||||||
|
#define TAPPING_TERM 180
|
||||||
|
|
||||||
|
// Selection of RGBLIGHT MODE to use.
|
||||||
|
#if defined(LED_ANIMATIONS)
|
||||||
|
//#define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
//#define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
#define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
//#define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
//#define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
//#define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//Following line allows macro to read current RGB settings
|
||||||
|
extern rgblight_config_t rgblight_config;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern uint8_t is_master;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
enum layer_number {
|
||||||
|
_QWERTY = 0,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_ADJUST,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
LOWER = SAFE_RANGE,
|
||||||
|
RAISE,
|
||||||
|
ADJUST,
|
||||||
|
RGBRST
|
||||||
|
};
|
||||||
|
|
||||||
|
// Layer Mode aliases
|
||||||
|
#define _____ KC_TRNS
|
||||||
|
#define XXXXX KC_NO
|
||||||
|
|
||||||
|
#define KC_SNUBS S(KC_NUBS)
|
||||||
|
#define KC_SNUHS S(KC_NUHS)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QWERTY] = LAYOUT(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------.
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
[_LOWER] = LAYOUT(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------.
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR,KC_LPRN, KC_RPRN, KC_DEL,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,KC_SNUHS,KC_SNUBS, _____, _____, _____,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------.
|
||||||
|
KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _____, _____, _____,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
[_ADJUST] = LAYOUT( /* Base */
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------.
|
||||||
|
_____, RESET, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, _____,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||||
|
|
||||||
|
pressed ? layer_on(layer1) : layer_off(layer1);
|
||||||
|
IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
|
||||||
|
}
|
||||||
|
|
||||||
|
int RGB_current_mode;
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|
||||||
|
bool result = false;
|
||||||
|
switch (keycode) {
|
||||||
|
case LOWER:
|
||||||
|
update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
|
||||||
|
break;
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
case RGB_MOD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_mode(RGB_current_mode);
|
||||||
|
rgblight_step();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBRST:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
eeconfig_update_rgblight_default();
|
||||||
|
rgblight_enable();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
result = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
# The default keymap for naked48
|
||||||
|
|
||||||
|
Default
|
||||||
|
//,-----------------------------------------| |-----------------------------------------.
|
||||||
|
TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC,
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
ESC, A, S, D, F, G, H, J, K, L, ;, :,
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
LSFT, Z, X, C, V, B, N, M, ,, ., /, ENT,
|
||||||
|
//|------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
ADJUST, LCTRL, LALT, LGUI, LOWER, SPC, SPC, RAISE, LEFT, DOWN, UP, RIGHT
|
||||||
|
//`----------------------------------------------------------------------------------'
|
||||||
|
|
||||||
|
Lower
|
||||||
|
//,-----------------------------------------| |-----------------------------------------.
|
||||||
|
~, !, @, #, $, %, ^, &, *, (, ), DEL,
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
DEL, F1, F2, F3, F4, F5, F6, _, +, {, }, |,
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
LSFT, F7, F8, F9, F10, F11, F12, ~, |, ,, ., ENT,
|
||||||
|
//|------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
ADJUST, LCTRL, LALT, LGUI, LOWER, SPC, SPC, RAISE, MNXT, VOLD, VOLU, MPLY
|
||||||
|
//`----------------------------------------------------------------------------------'
|
||||||
|
|
||||||
|
Raise
|
||||||
|
//,-----------------------------------------| |-----------------------------------------.
|
||||||
|
~, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL,
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
DEL, F1, F2, F3, F4, F5, F6, -, =, [, ], BSLS,
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
LSFT, F7, F8, F9, F10, F11, F12, #, \, ,, ., ENT,
|
||||||
|
//|------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
ADJUST, LCTRL, LALT, LGUI, LOWER, SPC, SPC, RAISE, MNXT, VOLD, VOLU, MPLY
|
||||||
|
//`----------------------------------------------------------------------------------'
|
||||||
|
|
||||||
|
Adjust
|
||||||
|
//,-----------------------------------------| |----------------------------------------------.
|
||||||
|
~, RST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, DEL,
|
||||||
|
//|------+------+------+------+------+------| |------+-------+-------+-------+-------+-------|
|
||||||
|
DEL, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, LED ON/Off,LED MOD, XXXXX, C+A+D,Alt+PSCR, PSCR,
|
||||||
|
//|------+------+------+------+------+------| |------+-------+-------+-------+-------+-------|
|
||||||
|
LSFT, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, LED VAD,LED VAI,LED HUD,LED HUI,LED SAD,LED SAI,
|
||||||
|
//|------+------+------+------+------+------|------+------+------+-------+-------+-------+-------+-------|
|
||||||
|
ADJUST, LCTRL, LALT, LGUI, LOWER, SPC, SPC, RAISE, MNXT, VOLD, VOLU, MPLY
|
||||||
|
//`--------------------------------------------------------------------------------------'
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
# 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 = no # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = no # 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 = yes # Enable WS2812 RGB underlight.
|
||||||
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
|
# If your custom naked48 pcb, you can rewrite to yes.
|
||||||
|
LED_ANIMATIONS = yes # LED animations
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_ANIMATIONS)), yes)
|
||||||
|
# OPT_DEFS += -DRGBLIGHT_ANIMATIONS
|
||||||
|
OPT_DEFS += -DLED_ANIMATIONS
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
/* Copyright 2018 Salicylic_acid3
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General 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
|
||||||
|
|
||||||
|
/* Select hand configuration */
|
||||||
|
|
||||||
|
#define MASTER_LEFT
|
||||||
|
// #define MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
|
#define USE_SERIAL_PD2
|
||||||
|
|
||||||
|
#define TAPPING_FORCE_HOLD
|
||||||
|
#define TAPPING_TERM 180
|
||||||
|
|
||||||
|
// Selection of RGBLIGHT MODE to use.
|
||||||
|
#if defined(LED_ANIMATIONS)
|
||||||
|
//#define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
//#define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
#define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
//#define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
//#define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
//#define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MK_3_SPEED
|
||||||
|
|
||||||
|
#undef MOUSEKEY_INTERVAL
|
||||||
|
#define MOUSEKEY_INTERVAL 0
|
||||||
|
|
||||||
|
#undef MOUSEKEY_TIME_TO_MAX
|
||||||
|
#define MOUSEKEY_TIME_TO_MAX 150
|
||||||
|
|
||||||
|
#undef MOUSEKEY_MAX_SPEED
|
||||||
|
#define MOUSEKEY_MAX_SPEED 3
|
||||||
|
|
||||||
|
#undef MOUSEKEY_MOVE_DELTA
|
||||||
|
#define MOUSEKEY_MOVE_DELTA 5
|
||||||
|
|
||||||
|
#undef MOUSEKEY_DELAY
|
||||||
|
#define MOUSEKEY_DELAY 0
|
||||||
|
|
||||||
|
#undef MOUSEKEY_WHEEL_MAX_SPEED
|
||||||
|
#define MOUSEKEY_WHEEL_MAX_SPEED 1
|
||||||
|
|
||||||
|
#undef MOUSEKEY_WHEEL_TIME_TO_MAX
|
||||||
|
#define MOUSEKEY_WHEEL_TIME_TO_MAX 0
|
||||||
@@ -0,0 +1,173 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//Following line allows macro to read current RGB settings
|
||||||
|
extern rgblight_config_t rgblight_config;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern uint8_t is_master;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
enum layer_number {
|
||||||
|
_QWERTY = 0,
|
||||||
|
_MOUSE,
|
||||||
|
_BROWSER,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_ADJUST,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
MOUSE = SAFE_RANGE,
|
||||||
|
BROWSER,
|
||||||
|
LOWER,
|
||||||
|
RAISE,
|
||||||
|
ADJUST,
|
||||||
|
RGBRST
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _____ KC_TRNS
|
||||||
|
#define XXXXX KC_NO
|
||||||
|
|
||||||
|
#define KC_CAD LCA(KC_DEL)
|
||||||
|
#define KC_APSCR LALT(KC_PSCR)
|
||||||
|
|
||||||
|
#define KC_SNUBS S(KC_NUBS)
|
||||||
|
#define KC_SNUHS S(KC_NUHS)
|
||||||
|
|
||||||
|
#define KC_RTAB LCTL(KC_TAB)
|
||||||
|
#define KC_LTAB LCTL(LSFT(KC_TAB))
|
||||||
|
#define KC_CTAB LCTL(KC_W)
|
||||||
|
#define KC_RETAB LCTL(LSFT(KC_T))
|
||||||
|
|
||||||
|
#define KC_TGMO TG(_MOUSE)
|
||||||
|
#define KC_TGBR TG(_BROWSER)
|
||||||
|
#define KC_BSAD LT(_ADJUST, KC_BSPC)
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QWERTY] = LAYOUT_with_nafuda(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_TGMO,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSAD, KC_UP, KC_TGBR,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
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_LEFT, KC_DOWN,KC_RIGHT,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_MOUSE] = LAYOUT_with_nafuda(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_TGMO,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BTN1, KC_MS_U, KC_BTN2,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
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_MS_L, KC_MS_D, KC_MS_R,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_BROWSER] = LAYOUT_with_nafuda(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_CTAB,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_RETAB, KC_WH_U, KC_TGBR,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
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_LTAB, KC_WH_D, KC_RTAB,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_LOWER] = LAYOUT_with_nafuda(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
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_TGMO,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_BSAD, KC_UP, KC_TGBR,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
_____, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,KC_SNUHS,KC_SNUBS, _____, _____, _____, KC_LEFT, KC_DOWN,KC_RIGHT,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT_with_nafuda(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_TGMO,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_BSAD, KC_UP, KC_TGBR,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
_____, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _____, _____, _____, KC_LEFT, KC_DOWN,KC_RIGHT,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_ADJUST] = LAYOUT_with_nafuda( /* Base */
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
_____, RESET, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, _____, RGB_VAD,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR, ADJUST, RGB_SAD, RGB_VAI,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
_____, _____, _____, _____, _____, _____, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_MOD, RGB_TOG, RGB_SAI,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||||
|
|
||||||
|
pressed ? layer_on(layer1) : layer_off(layer1);
|
||||||
|
IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
|
||||||
|
}
|
||||||
|
|
||||||
|
int RGB_current_mode;
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|
||||||
|
bool result = false;
|
||||||
|
switch (keycode) {
|
||||||
|
case LOWER:
|
||||||
|
update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
|
||||||
|
break;
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
case RGB_MOD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_mode(RGB_current_mode);
|
||||||
|
rgblight_step();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBRST:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
eeconfig_update_rgblight_default();
|
||||||
|
rgblight_enable();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
result = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# The default_with_nafuda keymap for naked48
|
||||||
|
|
||||||
|
Add Nafuda maps to the default layout.
|
||||||
|
|
||||||
|
Default
|
||||||
|
//|--------------------|
|
||||||
|
Mouse,
|
||||||
|
//|------+------+------|
|
||||||
|
BS + Ad, UP,Browser,
|
||||||
|
//|------+------+------|
|
||||||
|
LEFT, DOWN, RIGHT
|
||||||
|
//|--------------------|
|
||||||
|
|
||||||
|
Mouse
|
||||||
|
//|--------------------|
|
||||||
|
Default,
|
||||||
|
//|------+------+------|
|
||||||
|
BTN1, MS_U, BTN2,
|
||||||
|
//|------+------+------|
|
||||||
|
MS_L, MS_D, MS_R
|
||||||
|
//|--------------------|
|
||||||
|
|
||||||
|
Browser
|
||||||
|
//|--------------------|
|
||||||
|
CloseTAB,
|
||||||
|
//|------+------+------|
|
||||||
|
ReOpenTAB, WH_U,Default,
|
||||||
|
//|------+------+------|
|
||||||
|
LTAB, WH_D, RTAB
|
||||||
|
//|--------------------|
|
||||||
|
|
||||||
|
Adjust
|
||||||
|
//|------------------------|
|
||||||
|
LED VAD,
|
||||||
|
//|------+----------+------|
|
||||||
|
Default, LED HUD,LED VAI,
|
||||||
|
//|------+----------+------|
|
||||||
|
LED MOD,LED ON/Off,LED HUI
|
||||||
|
//|------------------------|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
# 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 = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = no # 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 = yes # Enable WS2812 RGB underlight.
|
||||||
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
|
# If your custom naked48 pcb, you can rewrite to yes.
|
||||||
|
LED_ANIMATIONS = yes # LED animations
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_ANIMATIONS)), yes)
|
||||||
|
# OPT_DEFS += -DRGBLIGHT_ANIMATIONS
|
||||||
|
OPT_DEFS += -DLED_ANIMATIONS
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
/* Copyright 2018 Salicylic_acid3
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General 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
|
||||||
|
|
||||||
|
/* Select hand configuration */
|
||||||
|
|
||||||
|
#define MASTER_LEFT
|
||||||
|
// #define MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
|
#define USE_SERIAL_PD2
|
||||||
|
|
||||||
|
#define TAPPING_FORCE_HOLD
|
||||||
|
#define TAPPING_TERM 180
|
||||||
|
|
||||||
|
// Selection of RGBLIGHT MODE to use.
|
||||||
|
#if defined(LED_ANIMATIONS)
|
||||||
|
//#define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
//#define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
#define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
//#define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
//#define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
//#define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,174 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//Following line allows macro to read current RGB settings
|
||||||
|
extern rgblight_config_t rgblight_config;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern uint8_t is_master;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
enum layer_number {
|
||||||
|
_QWERTY = 0,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_ADJUST,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
LOWER = SAFE_RANGE,
|
||||||
|
RAISE,
|
||||||
|
ADJUST,
|
||||||
|
KANJI,
|
||||||
|
RGBRST,
|
||||||
|
SEND_SUM,
|
||||||
|
SEND_AVERAGE,
|
||||||
|
SEND_COUNTIF,
|
||||||
|
SEND_MAX,
|
||||||
|
SEND_MIN
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _____ KC_TRNS
|
||||||
|
#define XXXXX KC_NO
|
||||||
|
|
||||||
|
#define KC_SNUBS S(KC_NUBS)
|
||||||
|
#define KC_SNUHS S(KC_NUHS)
|
||||||
|
|
||||||
|
#define KC_SSUM SEND_SUM
|
||||||
|
#define KC_SAVE SEND_AVERAGE
|
||||||
|
#define KC_SCOU SEND_COUNTIF
|
||||||
|
#define KC_SMAX SEND_MAX
|
||||||
|
#define KC_SMIN SEND_MIN
|
||||||
|
|
||||||
|
#define KC_RADO LT(_RAISE, KC_PDOT)
|
||||||
|
#define KC_LOP0 LT(_LOWER, KC_P0)
|
||||||
|
#define KC_ADNL LT(_ADJUST, KC_NLCK)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QWERTY] = LAYOUT_with_setta21(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_LOP0, KC_P1, KC_P4, KC_P7,KC_ADNL, KC_ESC,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_P2, KC_P5, KC_P8,KC_PSLS, KC_F2,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
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_RADO, KC_P3, KC_P6, KC_P9,KC_PAST, KC_EQL,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
|
||||||
|
ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL
|
||||||
|
//`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
|
||||||
|
),
|
||||||
|
|
||||||
|
[_LOWER] = LAYOUT_with_setta21(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR,KC_LPRN, KC_RPRN, KC_DEL, LOWER, XXXXX,KC_LEFT, XXXXX, XXXXX, KC_ESC,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_DOWN,KC_DOWN, KC_UP,KC_PSLS, KC_F2,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
_____, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,KC_SNUHS,KC_SNUBS, _____, _____, _____, RAISE, XXXXX,KC_RIGHT, XXXXX,KC_PAST, KC_EQL,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL
|
||||||
|
//`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT_with_setta21(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
|
||||||
|
KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, LOWER, KC_F11, KC_F4, KC_F7,KC_SMIN, KC_ESC,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_F12, KC_F5, KC_F8,KC_SMAX, KC_F2,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
_____, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _____, _____, _____, RAISE, KC_F3, KC_F6, KC_F9,KC_SCOU, KC_EQL,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, KC_RPRN, KC_SSUM,KC_SAVE, KC_DEL
|
||||||
|
//`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
|
||||||
|
),
|
||||||
|
|
||||||
|
[_ADJUST] = LAYOUT_with_setta21( /* Base */
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
|
||||||
|
_____, RESET, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, _____, LOWER,RGB_VAD,RGB_HUD,RGB_SAD, ADJUST,RGB_TOG,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR, RGB_VAI,RGB_HUI,RGB_SAI, XXXXX, _____,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RAISE, XXXXX, XXXXX, XXXXX, XXXXX, _____,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, RGB_MOD, _____, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||||
|
|
||||||
|
pressed ? layer_on(layer1) : layer_off(layer1);
|
||||||
|
IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
|
||||||
|
}
|
||||||
|
|
||||||
|
int RGB_current_mode;
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|
||||||
|
bool result = false;
|
||||||
|
switch (keycode) {
|
||||||
|
case LOWER:
|
||||||
|
update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
|
||||||
|
break;
|
||||||
|
case SEND_SUM:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("=SUM(");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SEND_AVERAGE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("=AVERAGE(");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SEND_COUNTIF:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("=COUNTIF(");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SEND_MAX:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("=MAX(");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SEND_MIN:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("=MIN(");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
case RGB_MOD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_mode(RGB_current_mode);
|
||||||
|
rgblight_step();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBRST:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
eeconfig_update_rgblight_default();
|
||||||
|
rgblight_enable();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
result = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# The default_with_setta21 keymap for naked48
|
||||||
|
|
||||||
|
Add Setta21 maps to the default layout.
|
||||||
|
|
||||||
|
Default
|
||||||
|
//|-----------------------------------------|
|
||||||
|
Rai+0, 1, 4, 7,Ad+Num, ESC,
|
||||||
|
//|------+------+------+------+------+------|
|
||||||
|
2, 5, 8, /, F2,
|
||||||
|
//|------+------+------+------+------+------|
|
||||||
|
Low+., 3, 6, 9, *, =,
|
||||||
|
//|-------------+-------------+------+------|
|
||||||
|
ENT, +, -, DEL
|
||||||
|
//|-----------------------------------------|
|
||||||
|
|
||||||
|
Lower
|
||||||
|
//|-----------------------------------------|
|
||||||
|
RAISE, F11, F4, F7, "=MIN(", ESC,
|
||||||
|
//|------+------+------+------+-----------+------|
|
||||||
|
F12, F5, F8, "=MAX(", F2,
|
||||||
|
//|------+------+------+------+-----------+------|
|
||||||
|
LOWER, F3, F6, F9,"=COUNTIF(", =,
|
||||||
|
//|-------------+-------------+-----------+------|
|
||||||
|
), "=SUM(","=AVERAGE(", DEL
|
||||||
|
//|-----------------------------------------|
|
||||||
|
|
||||||
|
Raise
|
||||||
|
//|-----------------------------------------|
|
||||||
|
RAISE, XXXXX, LEFT, XXXXX, XXXXX, ESC,
|
||||||
|
//|------+------+------+------+------+------|
|
||||||
|
DOWN, DOWN, UP, /, F2,
|
||||||
|
//|------+------+------+------+------+------|
|
||||||
|
LOWER, XXXXX, RIGHT, XXXXX, *, =,
|
||||||
|
//|-------------+-------------+------+------|
|
||||||
|
ENT, +, -, DEL
|
||||||
|
//|-----------------------------------------|
|
||||||
|
|
||||||
|
Adjust
|
||||||
|
//|------------------------------------------------|
|
||||||
|
LED ON/Off,LED VAD,LED HUD,LED SAD, ADJUST, ESC,
|
||||||
|
//|--------+-------+-------+-------+-------+-------|
|
||||||
|
LED VAI,LED HUI,LED SAI, XXXXX, F2,
|
||||||
|
//|--------+-------+-------+-------+-------+-------|
|
||||||
|
XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, =,
|
||||||
|
//|----------------+---------------+-------+-------|
|
||||||
|
LED MOD, +, -, DEL
|
||||||
|
//|------------------------------------------------|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
# 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 = no # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = no # 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 = yes # Enable WS2812 RGB underlight.
|
||||||
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
|
# If your custom naked48 pcb, you can rewrite to yes.
|
||||||
|
LED_ANIMATIONS = yes # LED animations
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_ANIMATIONS)), yes)
|
||||||
|
# OPT_DEFS += -DRGBLIGHT_ANIMATIONS
|
||||||
|
OPT_DEFS += -DLED_ANIMATIONS
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
/* Copyright 2018 Salicylic_acid3
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General 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
|
||||||
|
|
||||||
|
/* Select hand configuration */
|
||||||
|
|
||||||
|
#define MASTER_LEFT
|
||||||
|
// #define MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
|
#define USE_SERIAL_PD2
|
||||||
|
|
||||||
|
#define TAPPING_FORCE_HOLD
|
||||||
|
#define TAPPING_TERM 180
|
||||||
|
|
||||||
|
// Selection of RGBLIGHT MODE to use.
|
||||||
|
#if defined(LED_ANIMATIONS)
|
||||||
|
//#define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
//#define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
#define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
//#define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
//#define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
//#define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,149 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "keymap_jp.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//Following line allows macro to read current RGB settings
|
||||||
|
extern rgblight_config_t rgblight_config;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern uint8_t is_master;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
enum layer_number {
|
||||||
|
_QWERTY = 0,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_ADJUST,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
LOWER = SAFE_RANGE,
|
||||||
|
RAISE,
|
||||||
|
ADJUST,
|
||||||
|
KANJI,
|
||||||
|
RGBRST
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _____ KC_TRNS
|
||||||
|
#define XXXXX KC_NO
|
||||||
|
|
||||||
|
#define KC_CT11 LCTL_T(KC_F11)
|
||||||
|
#define KC_SF12 SFT_T(KC_F12)
|
||||||
|
#define KC_LOEN LT(_LOWER, KC_ENT)
|
||||||
|
#define KC_RASP LT(_RAISE, KC_SPC)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QWERTY] = LAYOUT(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------.
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
[_LOWER] = LAYOUT(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------.
|
||||||
|
KC_ESC, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_6, KC_7, KC_8, KC_9, JP_ASTR, JP_SLSH,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
JP_QUOT, JP_HASH, JP_DQT, JP_LPRN, JP_RPRN, JP_AT, XXXXX, KC_4, KC_5, KC_6, JP_MINS, JP_EQL,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
JP_CIRC, JP_PERC, JP_AMPR, JP_SCLN, JP_COLN, JP_PIPE, KC_0, KC_1, KC_2, KC_3, JP_PLUS, KC_ENT,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, _____, _____, KC_ZKHK, LOWER, _____, _____, RAISE, KC_0, JP_DOT, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------.
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, XXXXX, KC_UP, XXXXX, KC_PGUP, KC_DEL,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_CT11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, KC_LSFT, KC_ENT,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_SF12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXX, XXXXX, XXXXX, XXXXX, KC_PGDN, XXXXX,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_ADJUST] = LAYOUT( /* Base */
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------.
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, KC_7, KC_8, KC_9, KC_0, _____,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, _____, _____, _____, _____, _____, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, _____, _____, _____, _____, _____, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||||
|
|
||||||
|
pressed ? layer_on(layer1) : layer_off(layer1);
|
||||||
|
IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
|
||||||
|
}
|
||||||
|
|
||||||
|
int RGB_current_mode;
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|
||||||
|
bool result = false;
|
||||||
|
switch (keycode) {
|
||||||
|
case LOWER:
|
||||||
|
update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
|
||||||
|
break;
|
||||||
|
case KANJI:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (keymap_config.swap_lalt_lgui == false) {
|
||||||
|
register_code(KC_LANG2);
|
||||||
|
} else {
|
||||||
|
SEND_STRING(SS_LALT("`"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_LANG2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
case RGB_MOD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_mode(RGB_current_mode);
|
||||||
|
rgblight_step();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBRST:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
eeconfig_update_rgblight_default();
|
||||||
|
rgblight_enable();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
result = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
# The salicylic keymap for naked48
|
||||||
|
|
||||||
|
Default
|
||||||
|
//,-----------------------------------------| |-----------------------------------------.
|
||||||
|
TAB, Q, W, E, R, T, Y, U, I, O, P, [,
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
LSFT, A, S, D, F, G, H, J, K, L, -, ],
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
LCTRL, Z, X, C, V, B, N, M, ,, ., /, \,
|
||||||
|
//|------+------+------+------+------+-------|------+-----+-------+-----+------+------+------|
|
||||||
|
LEFT, RIGHT, LGUI, MHEN,Low+Ent, BSPC, DEL,Rai+SPC, HENK, LALT, UP, DOWN
|
||||||
|
//`----------------------------------------------------------------------------------'
|
||||||
|
|
||||||
|
Lower
|
||||||
|
//,-----------------------------------------| |-----------------------------------------.
|
||||||
|
ESC, EXLM, JQUES, JLBRC, JRBRC, JTILD, 6, 7, 8, 9, *, /,
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
JQUOT, HASH, JDQUO, JLPRN, JRPRN, JAT, XXXXX, 4, 5, 6, -, =,
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
JHAT, PERC, JAMPR, SCLN, JCLON, JPIPE, 0, 1, 2, 3, +, ENT,
|
||||||
|
//|------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
LEFT, RIGHT, LGUI, ZKHK, LOWER, BSPC, DEL, RAISE, 0, DOT, UP, DOWN
|
||||||
|
//`----------------------------------------------------------------------------------'
|
||||||
|
|
||||||
|
Raise
|
||||||
|
//,-----------------------------------------| |-----------------------------------------.
|
||||||
|
ESC, 1, 2, 3, 4, 5, 6, XXXXX, UP, XXXXX, PGUP, BSPC,
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
Ctrl F11, F1, F2, F3, F4, F5, XXXXX, LEFT, DOWN, RIGHT, LSFT, ENT,
|
||||||
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
Shift F12, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, XXXXX, PGDN, XXXXX,
|
||||||
|
//|------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
LEFT, RIGHT, LGUI, ZKHK, LOWER, BSPC, DEL, RAISE, 0, DOT, UP, DOWN
|
||||||
|
//`----------------------------------------------------------------------------------'
|
||||||
|
|
||||||
|
Adjust
|
||||||
|
//,-----------------------------------------| |----------------------------------------------.
|
||||||
|
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL,
|
||||||
|
//|------+------+------+------+------+------| |------+-------+-------+-------+-------+-------|
|
||||||
|
Ctrl F11, F1, F2, F3, F4, F5, LED ON/Off,LED MOD, XXXXX, C+A+D,Alt+PSCR, PSCR,
|
||||||
|
//|------+------+------+------+------+------| |------+-------+-------+-------+-------+-------|
|
||||||
|
Shift F12, F6, F7, F8, F9, F10, LED VAD,LED VAI,LED HUD,LED HUI,LED SAD,LED SAI,
|
||||||
|
//|------+------+------+------+------+------|------+------+------+-------+-------+-------+-------|
|
||||||
|
LEFT, RIGHT, LGUI, ZKHK, LOWER, BSPC, DEL, RAISE, 0, DOT, UP, DOWN
|
||||||
|
//`--------------------------------------------------------------------------------------'
|
||||||
|
)
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
# 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 = no # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = no # 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 = yes # Enable WS2812 RGB underlight.
|
||||||
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
|
# If your custom naked48 pcb, you can rewrite to yes.
|
||||||
|
LED_ANIMATIONS = yes # LED animations
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_ANIMATIONS)), yes)
|
||||||
|
# OPT_DEFS += -DRGBLIGHT_ANIMATIONS
|
||||||
|
OPT_DEFS += -DLED_ANIMATIONS
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
/* Copyright 2018 Salicylic_acid3
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General 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
|
||||||
|
|
||||||
|
/* Select hand configuration */
|
||||||
|
|
||||||
|
#define MASTER_LEFT
|
||||||
|
// #define MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
|
#define USE_SERIAL_PD2
|
||||||
|
|
||||||
|
#define TAPPING_FORCE_HOLD
|
||||||
|
#define TAPPING_TERM 180
|
||||||
|
|
||||||
|
// Selection of RGBLIGHT MODE to use.
|
||||||
|
#if defined(LED_ANIMATIONS)
|
||||||
|
//#define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
//#define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
#define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
//#define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
//#define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
//#define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MK_3_SPEED
|
||||||
|
|
||||||
|
#undef MOUSEKEY_INTERVAL
|
||||||
|
#define MOUSEKEY_INTERVAL 0
|
||||||
|
|
||||||
|
#undef MOUSEKEY_TIME_TO_MAX
|
||||||
|
#define MOUSEKEY_TIME_TO_MAX 150
|
||||||
|
|
||||||
|
#undef MOUSEKEY_MAX_SPEED
|
||||||
|
#define MOUSEKEY_MAX_SPEED 3
|
||||||
|
|
||||||
|
#undef MOUSEKEY_MOVE_DELTA
|
||||||
|
#define MOUSEKEY_MOVE_DELTA 5
|
||||||
|
|
||||||
|
#undef MOUSEKEY_DELAY
|
||||||
|
#define MOUSEKEY_DELAY 0
|
||||||
|
|
||||||
|
#undef MOUSEKEY_WHEEL_MAX_SPEED
|
||||||
|
#define MOUSEKEY_WHEEL_MAX_SPEED 1
|
||||||
|
|
||||||
|
#undef MOUSEKEY_WHEEL_TIME_TO_MAX
|
||||||
|
#define MOUSEKEY_WHEEL_TIME_TO_MAX 0
|
||||||
@@ -0,0 +1,188 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "keymap_jp.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//Following line allows macro to read current RGB settings
|
||||||
|
extern rgblight_config_t rgblight_config;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern uint8_t is_master;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
enum layer_number {
|
||||||
|
_QWERTY = 0,
|
||||||
|
_MOUSE,
|
||||||
|
_BROWSER,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_ADJUST,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
MOUSE = SAFE_RANGE,
|
||||||
|
BROWSER,
|
||||||
|
LOWER,
|
||||||
|
RAISE,
|
||||||
|
ADJUST,
|
||||||
|
KANJI,
|
||||||
|
RGBRST
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _____ KC_TRNS
|
||||||
|
#define XXXXX KC_NO
|
||||||
|
|
||||||
|
#define KC_CT11 LCTL_T(KC_F11)
|
||||||
|
#define KC_SF12 SFT_T(KC_F12)
|
||||||
|
|
||||||
|
#define KC_LOEN LT(_LOWER, KC_ENT)
|
||||||
|
#define KC_RASP LT(_RAISE, KC_SPC)
|
||||||
|
#define KC_CAD LCA(KC_DEL)
|
||||||
|
#define KC_APSCR LALT(KC_PSCR)
|
||||||
|
|
||||||
|
#define KC_RTAB LCTL(KC_TAB)
|
||||||
|
#define KC_LTAB LCTL(LSFT(KC_TAB))
|
||||||
|
#define KC_CTAB LCTL(KC_W)
|
||||||
|
#define KC_RETAB LCTL(LSFT(KC_T))
|
||||||
|
|
||||||
|
#define KC_TGMO TG(_MOUSE)
|
||||||
|
#define KC_TGBR TG(_BROWSER)
|
||||||
|
#define KC_BSAD LT(_ADJUST, KC_BSPC)
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QWERTY] = LAYOUT_with_nafuda(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, KC_TGMO,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC, KC_BSAD, KC_UP, KC_TGBR,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_LEFT, KC_DOWN,KC_RIGHT,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_MOUSE] = LAYOUT_with_nafuda(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, KC_TGMO,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC, KC_BTN1, KC_MS_U, KC_BTN2,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_MS_L, KC_MS_D, KC_MS_R,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_BROWSER] = LAYOUT_with_nafuda(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, KC_CTAB,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC, KC_RETAB, KC_WH_U, KC_TGBR,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_LTAB, KC_WH_D, KC_RTAB,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_LOWER] = LAYOUT_with_nafuda(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
KC_ESC, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_6, KC_7, KC_8, KC_9, JP_ASTR, JP_SLSH, KC_TGMO,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
JP_QUOT, JP_HASH, JP_DQT, JP_LPRN, JP_RPRN, JP_AT, XXXXX, KC_4, KC_5, KC_6, JP_MINS, JP_EQL, KC_BSAD, KC_UP, KC_TGBR,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
JP_CIRC, JP_PERC, JP_AMPR, JP_SCLN, JP_COLN, JP_PIPE, KC_0, KC_1, KC_2, KC_3, JP_PLUS, KC_ENT, KC_LEFT, KC_DOWN,KC_RIGHT,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
_____, _____, _____, KC_ZKHK, LOWER, _____, _____, RAISE, KC_0, JP_DOT, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT_with_nafuda(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
KC_ESC, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_6, KC_7, KC_8, KC_9, JP_ASTR, JP_SLSH, KC_TGMO,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_CT11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, KC_LSFT, KC_ENT, KC_BSAD, KC_UP, KC_TGBR,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
KC_SF12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXX, XXXXX, XXXXX, XXXXX, KC_PGDN, XXXXX, KC_LEFT, KC_DOWN,KC_RIGHT,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_ADJUST] = LAYOUT_with_nafuda( /* Base */
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, KC_7, KC_8, KC_9, KC_0, _____, RGB_VAD,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
_____, _____, _____, _____, _____, _____, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR, ADJUST, RGB_SAD, RGB_VAI,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
|
||||||
|
_____, _____, _____, _____, _____, _____, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_MOD, RGB_TOG, RGB_SAI,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------'
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||||
|
|
||||||
|
pressed ? layer_on(layer1) : layer_off(layer1);
|
||||||
|
IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
|
||||||
|
}
|
||||||
|
|
||||||
|
int RGB_current_mode;
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|
||||||
|
bool result = false;
|
||||||
|
switch (keycode) {
|
||||||
|
case LOWER:
|
||||||
|
update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
|
||||||
|
break;
|
||||||
|
case KANJI:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (keymap_config.swap_lalt_lgui == false) {
|
||||||
|
register_code(KC_LANG2);
|
||||||
|
} else {
|
||||||
|
SEND_STRING(SS_LALT("`"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_LANG2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
case RGB_MOD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_mode(RGB_current_mode);
|
||||||
|
rgblight_step();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBRST:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
eeconfig_update_rgblight_default();
|
||||||
|
rgblight_enable();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
result = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# The salicylic_with_nafuda keymap for naked48
|
||||||
|
|
||||||
|
Add Nafuda maps to the salicylic layout.
|
||||||
|
|
||||||
|
Default
|
||||||
|
//|--------------------|
|
||||||
|
Mouse,
|
||||||
|
//|------+------+------|
|
||||||
|
BS + Ad, UP,Browser,
|
||||||
|
//|------+------+------|
|
||||||
|
LEFT, DOWN, RIGHT
|
||||||
|
//|--------------------|
|
||||||
|
|
||||||
|
Mouse
|
||||||
|
//|--------------------|
|
||||||
|
Default,
|
||||||
|
//|------+------+------|
|
||||||
|
BTN1, MS_U, BTN2,
|
||||||
|
//|------+------+------|
|
||||||
|
MS_L, MS_D, MS_R
|
||||||
|
//|--------------------|
|
||||||
|
|
||||||
|
Browser
|
||||||
|
//|--------------------|
|
||||||
|
CloseTAB,
|
||||||
|
//|------+------+------|
|
||||||
|
ReOpenTAB, WH_U,Default,
|
||||||
|
//|------+------+------|
|
||||||
|
LTAB, WH_D, RTAB
|
||||||
|
//|--------------------|
|
||||||
|
|
||||||
|
Adjust
|
||||||
|
//|------------------------|
|
||||||
|
LED VAD,
|
||||||
|
//|------+----------+------|
|
||||||
|
Default, LED HUD,LED VAI,
|
||||||
|
//|------+----------+------|
|
||||||
|
LED MOD,LED ON/Off,LED HUI
|
||||||
|
//|------------------------|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
# 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 = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = no # 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 = yes # Enable WS2812 RGB underlight.
|
||||||
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
|
# If your custom naked48 pcb, you can rewrite to yes.
|
||||||
|
LED_ANIMATIONS = yes # LED animations
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_ANIMATIONS)), yes)
|
||||||
|
# OPT_DEFS += -DRGBLIGHT_ANIMATIONS
|
||||||
|
OPT_DEFS += -DLED_ANIMATIONS
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
/* Copyright 2018 Salicylic_acid3
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General 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
|
||||||
|
|
||||||
|
/* Select hand configuration */
|
||||||
|
|
||||||
|
#define MASTER_LEFT
|
||||||
|
// #define MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
|
#define USE_SERIAL_PD2
|
||||||
|
|
||||||
|
#define TAPPING_FORCE_HOLD
|
||||||
|
#define TAPPING_TERM 180
|
||||||
|
|
||||||
|
// Selection of RGBLIGHT MODE to use.
|
||||||
|
#if defined(LED_ANIMATIONS)
|
||||||
|
//#define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
//#define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
#define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
//#define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
//#define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
//#define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,187 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "keymap_jp.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//Following line allows macro to read current RGB settings
|
||||||
|
extern rgblight_config_t rgblight_config;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern uint8_t is_master;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
enum layer_number {
|
||||||
|
_QWERTY = 0,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_ADJUST,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
LOWER = SAFE_RANGE,
|
||||||
|
RAISE,
|
||||||
|
ADJUST,
|
||||||
|
KANJI,
|
||||||
|
RGBRST,
|
||||||
|
SEND_SUM,
|
||||||
|
SEND_AVERAGE,
|
||||||
|
SEND_COUNTIF,
|
||||||
|
SEND_MAX,
|
||||||
|
SEND_MIN
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _____ KC_TRNS
|
||||||
|
#define XXXXX KC_NO
|
||||||
|
|
||||||
|
#define KC_CT11 LCTL_T(KC_F11)
|
||||||
|
#define KC_SF12 SFT_T(KC_F12)
|
||||||
|
#define KC_LOEN LT(_LOWER, KC_ENT)
|
||||||
|
#define KC_RASP LT(_RAISE, KC_SPC)
|
||||||
|
|
||||||
|
#define KC_SSUM SEND_SUM
|
||||||
|
#define KC_SAVE SEND_AVERAGE
|
||||||
|
#define KC_SCOU SEND_COUNTIF
|
||||||
|
#define KC_SMAX SEND_MAX
|
||||||
|
#define KC_SMIN SEND_MIN
|
||||||
|
|
||||||
|
#define KC_RADO LT(_RAISE, KC_PDOT)
|
||||||
|
#define KC_LOP0 LT(_LOWER, KC_P0)
|
||||||
|
#define KC_ADNL LT(_ADJUST, KC_NLCK)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QWERTY] = LAYOUT_with_setta21(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, KC_LOP0, KC_P1, KC_P4, KC_P7,KC_ADNL, KC_ESC,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC, KC_P2, KC_P5, KC_P8,KC_PSLS, KC_F2,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_RADO, KC_P3, KC_P6, KC_P9,KC_PAST, JP_EQL,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
|
||||||
|
KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL
|
||||||
|
//`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
|
||||||
|
),
|
||||||
|
|
||||||
|
[_LOWER] = LAYOUT_with_setta21(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
|
||||||
|
KC_ESC, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_6, KC_7, KC_8, KC_9, JP_ASTR, JP_SLSH, LOWER, XXXXX,KC_LEFT, XXXXX, XXXXX, KC_ESC,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
JP_QUOT, JP_HASH, JP_DQT, JP_LPRN, JP_RPRN, JP_AT, XXXXX, KC_4, KC_5, KC_6, JP_MINS, JP_EQL, KC_DOWN,KC_DOWN, KC_UP,KC_PSLS, KC_F2,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
JP_CIRC, JP_PERC, JP_AMPR, JP_SCLN, JP_COLN, JP_PIPE, KC_0, KC_1, KC_2, KC_3, JP_PLUS, KC_ENT, RAISE, XXXXX,KC_RIGHT, XXXXX,KC_PAST, JP_EQL,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
|
||||||
|
_____, _____, _____, KC_ZKHK, LOWER, _____, _____, RAISE, KC_0, JP_DOT, _____, _____, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL
|
||||||
|
//`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
|
||||||
|
),
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT_with_setta21(
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, XXXXX, KC_UP, XXXXX, KC_PGUP, KC_DEL, LOWER, KC_F11, KC_F4, KC_F7,KC_SMIN, KC_ESC,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
KC_CT11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, KC_LSFT, KC_ENT, KC_F12, KC_F5, KC_F8,KC_SMAX, KC_F2,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
KC_SF12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXX, XXXXX, XXXXX, XXXXX, KC_PGDN, XXXXX, RAISE, KC_F3, KC_F6, KC_F9,KC_SCOU, JP_EQL,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, JP_RPRN, KC_SSUM,KC_SAVE, KC_DEL
|
||||||
|
//`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
|
||||||
|
),
|
||||||
|
|
||||||
|
[_ADJUST] = LAYOUT_with_setta21( /* Base */
|
||||||
|
//,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, KC_7, KC_8, KC_9, KC_0, _____, LOWER,RGB_VAD,RGB_HUD,RGB_SAD, ADJUST,RGB_TOG,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
_____, _____, _____, _____, _____, _____, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR, RGB_VAI,RGB_HUI,RGB_SAI, XXXXX, _____,
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
|
||||||
|
_____, _____, _____, _____, _____, _____, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RAISE, XXXXX, XXXXX, XXXXX, XXXXX, _____,
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
|
||||||
|
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, RGB_MOD, _____, _____, _____
|
||||||
|
//`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||||
|
|
||||||
|
pressed ? layer_on(layer1) : layer_off(layer1);
|
||||||
|
IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
|
||||||
|
}
|
||||||
|
|
||||||
|
int RGB_current_mode;
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|
||||||
|
bool result = false;
|
||||||
|
switch (keycode) {
|
||||||
|
case LOWER:
|
||||||
|
update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
|
||||||
|
break;
|
||||||
|
case KANJI:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (keymap_config.swap_lalt_lgui == false) {
|
||||||
|
register_code(KC_LANG2);
|
||||||
|
} else {
|
||||||
|
SEND_STRING(SS_LALT("`"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_LANG2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SEND_SUM:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("_SUM*");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SEND_AVERAGE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("_AVERAGE*");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SEND_COUNTIF:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("_COUNTIF*");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SEND_MAX:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("_MAX*");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SEND_MIN:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("_MIN*");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
case RGB_MOD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_mode(RGB_current_mode);
|
||||||
|
rgblight_step();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBRST:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
eeconfig_update_rgblight_default();
|
||||||
|
rgblight_enable();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
result = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# The salicylic_with_setta21 keymap for naked48
|
||||||
|
|
||||||
|
Add Setta21 maps to the salicylic layout.
|
||||||
|
|
||||||
|
Default
|
||||||
|
//|-----------------------------------------|
|
||||||
|
Rai+0, 1, 4, 7,Ad+Num, ESC,
|
||||||
|
//|------+------+------+------+------+------|
|
||||||
|
2, 5, 8, /, F2,
|
||||||
|
//|------+------+------+------+------+------|
|
||||||
|
Low+., 3, 6, 9, *, =,
|
||||||
|
//|-------------+-------------+------+------|
|
||||||
|
ENT, +, -, DEL
|
||||||
|
//|-----------------------------------------|
|
||||||
|
|
||||||
|
Lower
|
||||||
|
//|-----------------------------------------|
|
||||||
|
RAISE, F11, F4, F7, "=MIN(", ESC,
|
||||||
|
//|------+------+------+------+-----------+------|
|
||||||
|
F12, F5, F8, "=MAX(", F2,
|
||||||
|
//|------+------+------+------+-----------+------|
|
||||||
|
LOWER, F3, F6, F9,"=COUNTIF(", =,
|
||||||
|
//|-------------+-------------+-----------+------|
|
||||||
|
), "=SUM(","=AVERAGE(", DEL
|
||||||
|
//|-----------------------------------------|
|
||||||
|
|
||||||
|
Raise
|
||||||
|
//|-----------------------------------------|
|
||||||
|
RAISE, XXXXX, LEFT, XXXXX, XXXXX, ESC,
|
||||||
|
//|------+------+------+------+------+------|
|
||||||
|
DOWN, DOWN, UP, /, F2,
|
||||||
|
//|------+------+------+------+------+------|
|
||||||
|
LOWER, XXXXX, RIGHT, XXXXX, *, =,
|
||||||
|
//|-------------+-------------+------+------|
|
||||||
|
ENT, +, -, DEL
|
||||||
|
//|-----------------------------------------|
|
||||||
|
|
||||||
|
Adjust
|
||||||
|
//|------------------------------------------------|
|
||||||
|
LED ON/Off,LED VAD,LED HUD,LED SAD, ADJUST, ESC,
|
||||||
|
//|--------+-------+-------+-------+-------+-------|
|
||||||
|
LED VAI,LED HUI,LED SAI, XXXXX, F2,
|
||||||
|
//|--------+-------+-------+-------+-------+-------|
|
||||||
|
XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, =,
|
||||||
|
//|----------------+---------------+-------+-------|
|
||||||
|
LED MOD, +, -, DEL
|
||||||
|
//|------------------------------------------------|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
# 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 = no # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = no # 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 = yes # Enable WS2812 RGB underlight.
|
||||||
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
|
# If your custom naked48 pcb, you can rewrite to yes.
|
||||||
|
LED_ANIMATIONS = yes # LED animations
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_ANIMATIONS)), yes)
|
||||||
|
# OPT_DEFS += -DRGBLIGHT_ANIMATIONS
|
||||||
|
OPT_DEFS += -DLED_ANIMATIONS
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#include "naked48.h"
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef KEYBOARD_naked48_rev1
|
||||||
|
#include "rev1.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#ifdef PROTOCOL_LUFA
|
||||||
|
#include "lufa.h"
|
||||||
|
#include "split_util.h"
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# naked48
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This is 48 keys modification Ortholinear keyboard.
|
||||||
|
|
||||||
|
Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
|
||||||
|
Hardware Supported: The PCBs, controllers supported
|
||||||
|
Hardware Availability: links to where you can find this hardware
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make naked48:default:avrdude
|
||||||
|
|
||||||
|
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).
|
||||||
|
|
||||||
|
[Build guide](https://salicylic-acid3.hatenablog.com/entry/naked48led-build-guide)
|
||||||
|
[Firmware](https://github.com/Salicylic-acid3/qmk_firmware/tree/master/keyboards/naked48)
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <[email protected]>
|
||||||
|
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
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x3060
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Salicylic_Acid
|
||||||
|
#define PRODUCT naked48
|
||||||
|
#define DESCRIPTION Ortholinear 48 Keys Keyboard
|
||||||
|
|
||||||
|
/* Use I2C or Serial */
|
||||||
|
//#define USE_I2C
|
||||||
|
#define USE_SERIAL
|
||||||
|
//#define USE_MATRIX_I2C
|
||||||
|
|
||||||
|
/* Select hand configuration */
|
||||||
|
#define MASTER_LEFT
|
||||||
|
// #define MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
|
// OLED support
|
||||||
|
// see ./rules.mk: OLED_ENABLE=yes or no
|
||||||
|
#ifdef OLED_ENABLE
|
||||||
|
#define SSD1306OLED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 8
|
||||||
|
#define MATRIX_COLS 14
|
||||||
|
|
||||||
|
// Rows are doubled-up
|
||||||
|
#define MATRIX_ROW_PINS { D1, D0, D4, C6 }
|
||||||
|
|
||||||
|
// wiring of each half
|
||||||
|
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, D7, E6, B4, B5 }
|
||||||
|
// #define MATRIX_COL_PINS { B5, B4, E6, D7, D6, B2, B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order
|
||||||
|
|
||||||
|
/* 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 DEBOUNCE 5
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
//#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
//#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* ws2812 RGB LED */
|
||||||
|
#define RGB_DI_PIN D3
|
||||||
|
#define RGBLIGHT_TIMER
|
||||||
|
#define ws2812_PORTREG PORTD
|
||||||
|
#define ws2812_DDRREG DDRD
|
||||||
|
|
||||||
|
// naked48 keyboard RGB LED support
|
||||||
|
//#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no
|
||||||
|
// see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes
|
||||||
|
#define RGBLED_NUM 48
|
||||||
|
|
||||||
|
#ifndef IOS_DEVICE_ENABLE
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 180
|
||||||
|
#define RGBLIGHT_VAL_STEP 17
|
||||||
|
#else
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 50
|
||||||
|
#define RGBLIGHT_VAL_STEP 4
|
||||||
|
#endif
|
||||||
|
#define RGBLIGHT_HUE_STEP 10
|
||||||
|
#define RGBLIGHT_SAT_STEP 17
|
||||||
|
|
||||||
|
#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
|
||||||
|
// USB_MAX_POWER_CONSUMPTION value for naked48 keyboard
|
||||||
|
// 120 RGBoff, OLEDoff
|
||||||
|
// 120 OLED
|
||||||
|
// 330 RGB 6
|
||||||
|
// 300 RGB 32
|
||||||
|
// 310 OLED & RGB 32
|
||||||
|
#define USB_MAX_POWER_CONSUMPTION 400
|
||||||
|
#else
|
||||||
|
// fix iPhone and iPad power adapter issue
|
||||||
|
// iOS device need lessthan 100
|
||||||
|
#define USB_MAX_POWER_CONSUMPTION 100
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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
|
||||||
@@ -0,0 +1,357 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <[email protected]>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* scan matrix
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <avr/wdt.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include "print.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "split_util.h"
|
||||||
|
#include "pro_micro.h"
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
# include "i2c.h"
|
||||||
|
#else // USE_SERIAL
|
||||||
|
# include "split_scomm.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DEBOUNCE
|
||||||
|
# define DEBOUNCE 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ERROR_DISCONNECT_COUNT 5
|
||||||
|
|
||||||
|
static uint8_t debouncing = DEBOUNCE;
|
||||||
|
static const int ROWS_PER_HAND = MATRIX_ROWS/2;
|
||||||
|
static uint8_t error_count = 0;
|
||||||
|
uint8_t is_master = 0 ;
|
||||||
|
|
||||||
|
static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
||||||
|
static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
||||||
|
|
||||||
|
/* matrix state(1:on, 0:off) */
|
||||||
|
static matrix_row_t matrix[MATRIX_ROWS];
|
||||||
|
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||||
|
|
||||||
|
static matrix_row_t read_cols(void);
|
||||||
|
static void init_cols(void);
|
||||||
|
static void unselect_rows(void);
|
||||||
|
static void select_row(uint8_t row);
|
||||||
|
static uint8_t matrix_master_scan(void);
|
||||||
|
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
uint8_t matrix_rows(void)
|
||||||
|
{
|
||||||
|
return MATRIX_ROWS;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
uint8_t matrix_cols(void)
|
||||||
|
{
|
||||||
|
return MATRIX_COLS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init(void)
|
||||||
|
{
|
||||||
|
debug_enable = true;
|
||||||
|
debug_matrix = true;
|
||||||
|
debug_mouse = true;
|
||||||
|
// initialize row and col
|
||||||
|
unselect_rows();
|
||||||
|
init_cols();
|
||||||
|
|
||||||
|
TX_RX_LED_INIT;
|
||||||
|
TXLED0;
|
||||||
|
RXLED0;
|
||||||
|
|
||||||
|
// initialize matrix state: all keys off
|
||||||
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
|
matrix[i] = 0;
|
||||||
|
matrix_debouncing[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_master = has_usb();
|
||||||
|
|
||||||
|
matrix_init_quantum();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t _matrix_scan(void)
|
||||||
|
{
|
||||||
|
// Right hand is stored after the left in the matirx so, we need to offset it
|
||||||
|
int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
|
||||||
|
select_row(i);
|
||||||
|
_delay_us(30); // without this wait read unstable value.
|
||||||
|
matrix_row_t cols = read_cols();
|
||||||
|
if (matrix_debouncing[i+offset] != cols) {
|
||||||
|
matrix_debouncing[i+offset] = cols;
|
||||||
|
debouncing = DEBOUNCE;
|
||||||
|
}
|
||||||
|
unselect_rows();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (debouncing) {
|
||||||
|
if (--debouncing) {
|
||||||
|
_delay_ms(1);
|
||||||
|
} else {
|
||||||
|
for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
|
||||||
|
matrix[i+offset] = matrix_debouncing[i+offset];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
|
||||||
|
// Get rows from other half over i2c
|
||||||
|
int i2c_transaction(void) {
|
||||||
|
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||||
|
|
||||||
|
int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
|
||||||
|
if (err) goto i2c_error;
|
||||||
|
|
||||||
|
// start of matrix stored at 0x00
|
||||||
|
err = i2c_master_write(0x00);
|
||||||
|
if (err) goto i2c_error;
|
||||||
|
|
||||||
|
// Start read
|
||||||
|
err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
|
||||||
|
if (err) goto i2c_error;
|
||||||
|
|
||||||
|
if (!err) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < ROWS_PER_HAND-1; ++i) {
|
||||||
|
matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
|
||||||
|
}
|
||||||
|
matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
|
||||||
|
i2c_master_stop();
|
||||||
|
} else {
|
||||||
|
i2c_error: // the cable is disconnceted, or something else went wrong
|
||||||
|
i2c_reset_state();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // USE_SERIAL
|
||||||
|
|
||||||
|
int serial_transaction(int master_changed) {
|
||||||
|
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||||
|
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
int ret=serial_update_buffers(master_changed);
|
||||||
|
#else
|
||||||
|
int ret=serial_update_buffers();
|
||||||
|
#endif
|
||||||
|
if (ret ) {
|
||||||
|
if(ret==2) RXLED1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
RXLED0;
|
||||||
|
memcpy(&matrix[slaveOffset],
|
||||||
|
(void *)serial_slave_buffer, sizeof(serial_slave_buffer));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint8_t matrix_scan(void)
|
||||||
|
{
|
||||||
|
if (is_master) {
|
||||||
|
matrix_master_scan();
|
||||||
|
}else{
|
||||||
|
matrix_slave_scan();
|
||||||
|
int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
|
||||||
|
memcpy(&matrix[offset],
|
||||||
|
(void *)serial_master_buffer, sizeof(serial_master_buffer));
|
||||||
|
matrix_scan_quantum();
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t matrix_master_scan(void) {
|
||||||
|
|
||||||
|
int ret = _matrix_scan();
|
||||||
|
int mchanged = 1;
|
||||||
|
|
||||||
|
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
// for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
/* i2c_slave_buffer[i] = matrix[offset+i]; */
|
||||||
|
// i2c_slave_buffer[i] = matrix[offset+i];
|
||||||
|
// }
|
||||||
|
#else // USE_SERIAL
|
||||||
|
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
mchanged = memcmp((void *)serial_master_buffer,
|
||||||
|
&matrix[offset], sizeof(serial_master_buffer));
|
||||||
|
#endif
|
||||||
|
memcpy((void *)serial_master_buffer,
|
||||||
|
&matrix[offset], sizeof(serial_master_buffer));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
if( i2c_transaction() ) {
|
||||||
|
#else // USE_SERIAL
|
||||||
|
if( serial_transaction(mchanged) ) {
|
||||||
|
#endif
|
||||||
|
// turn on the indicator led when halves are disconnected
|
||||||
|
TXLED1;
|
||||||
|
|
||||||
|
error_count++;
|
||||||
|
|
||||||
|
if (error_count > ERROR_DISCONNECT_COUNT) {
|
||||||
|
// reset other half if disconnected
|
||||||
|
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||||
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
matrix[slaveOffset+i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// turn off the indicator led on no error
|
||||||
|
TXLED0;
|
||||||
|
error_count = 0;
|
||||||
|
}
|
||||||
|
matrix_scan_quantum();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_slave_scan(void) {
|
||||||
|
_matrix_scan();
|
||||||
|
|
||||||
|
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
/* i2c_slave_buffer[i] = matrix[offset+i]; */
|
||||||
|
i2c_slave_buffer[i] = matrix[offset+i];
|
||||||
|
}
|
||||||
|
#else // USE_SERIAL
|
||||||
|
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
int change = 0;
|
||||||
|
#endif
|
||||||
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
if( serial_slave_buffer[i] != matrix[offset+i] )
|
||||||
|
change = 1;
|
||||||
|
#endif
|
||||||
|
serial_slave_buffer[i] = matrix[offset+i];
|
||||||
|
}
|
||||||
|
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
slave_buffer_change_count += change;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool matrix_is_modified(void)
|
||||||
|
{
|
||||||
|
if (debouncing) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
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];
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_print(void)
|
||||||
|
{
|
||||||
|
print("\nr/c 0123456789ABCDEF\n");
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
phex(row); print(": ");
|
||||||
|
pbin_reverse16(matrix_get_row(row));
|
||||||
|
print("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_key_count(void)
|
||||||
|
{
|
||||||
|
uint8_t count = 0;
|
||||||
|
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||||
|
count += bitpop16(matrix[i]);
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init_cols(void)
|
||||||
|
{
|
||||||
|
for(int x = 0; x < MATRIX_COLS; x++) {
|
||||||
|
_SFR_IO8((col_pins[x] >> 4) + 1) &= ~_BV(col_pins[x] & 0xF);
|
||||||
|
_SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static matrix_row_t read_cols(void)
|
||||||
|
{
|
||||||
|
matrix_row_t result = 0;
|
||||||
|
for(int x = 0; x < MATRIX_COLS; x++) {
|
||||||
|
result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void unselect_rows(void)
|
||||||
|
{
|
||||||
|
for(int x = 0; x < ROWS_PER_HAND; x++) {
|
||||||
|
_SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF);
|
||||||
|
_SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void select_row(uint8_t row)
|
||||||
|
{
|
||||||
|
_SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF);
|
||||||
|
_SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF);
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#include "naked48.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef SSD1306OLED
|
||||||
|
void led_set_kb(uint8_t usb_led) {
|
||||||
|
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||||
|
//led_set_user(usb_led);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
|
||||||
|
matrix_init_user();
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "naked48.h"
|
||||||
|
|
||||||
|
//void promicro_bootloader_jmp(bool program);
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//rgb led driver
|
||||||
|
#include "ws2812.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//void promicro_bootloader_jmp(bool program);
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
// When only use Naked48.
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
/*
|
||||||
|
* ,------------------------------------ ------------------------------------.
|
||||||
|
* | L00 | L01 | L02 | L03 | L04 | L05 | | L06 | L07 | L08 | L09 | L0A | L0B |
|
||||||
|
* |------------------------------------ ------------------------------------+
|
||||||
|
* | L10 | L11 | L12 | L13 | L14 | L15 | | L16 | L17 | L18 | L19 | L1A | L1B |
|
||||||
|
* |------------------------------------ ------------------------------------+
|
||||||
|
* | L20 | L21 | L22 | L23 | L24 | L25 | | L26 | L17 | L28 | L29 | L2A | L2B |
|
||||||
|
* |-----------------------------------------------------------------------------------+
|
||||||
|
* | L30 | L32 | L33 | L34 | L35 | L36 | L37 | L38 | L39 | L3A | L3B | L3D |
|
||||||
|
* |-----------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B, \
|
||||||
|
L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B, \
|
||||||
|
L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B, \
|
||||||
|
L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B }, \
|
||||||
|
{ L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B }, \
|
||||||
|
{ L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B }, \
|
||||||
|
{ L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B }, \
|
||||||
|
{KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
|
||||||
|
{KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
|
||||||
|
{KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
|
||||||
|
{KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO } \
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
// When connecting Setta21 to Naked48.
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define LAYOUT_with_setta21( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B, R00, R01, R02, R03, R04, R05, \
|
||||||
|
L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B, R11, R12, R13, R14, R15, \
|
||||||
|
L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B, R20, R21, R22, R23, R24, R25, \
|
||||||
|
L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B, R30, R32, R34, R35 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B,KC_NO,KC_NO }, \
|
||||||
|
{ L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B,KC_NO,KC_NO }, \
|
||||||
|
{ L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B,KC_NO,KC_NO }, \
|
||||||
|
{ L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B,KC_NO,KC_NO }, \
|
||||||
|
{ R00, R01, R02, R03, R04, R05,KC_NO,KC_NO,KC_NO, R11, R12, R13, R14, R15 }, \
|
||||||
|
{ R20, R21, R22, R23, R24, R25,KC_NO,KC_NO, R30,KC_NO, R32,KC_NO, R34, R35 }, \
|
||||||
|
{KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
|
||||||
|
{KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO } \
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
// When connecting Nafuda to Naked48.
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define LAYOUT_with_nafuda( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B, R01, \
|
||||||
|
L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B, R10, R11, R12, \
|
||||||
|
L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B, R20, R21, R22, \
|
||||||
|
L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B,KC_NO,KC_NO }, \
|
||||||
|
{ L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B,KC_NO,KC_NO }, \
|
||||||
|
{ L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B,KC_NO,KC_NO }, \
|
||||||
|
{ L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B,KC_NO,KC_NO }, \
|
||||||
|
{KC_NO, R01,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, R10, R11, R12,KC_NO,KC_NO,KC_NO }, \
|
||||||
|
{ R20, R21, R22,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
|
||||||
|
{KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
|
||||||
|
{KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO } \
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
SRC += matrix.c \
|
||||||
|
split_util.c \
|
||||||
|
split_scomm.c
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
//// #error rev2 serial config
|
||||||
|
|
||||||
|
#ifndef SOFT_SERIAL_PIN
|
||||||
|
/* Soft Serial defines */
|
||||||
|
#define SOFT_SERIAL_PIN D2
|
||||||
|
|
||||||
|
#define SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#ifndef SERIAL_CONFIG_SIMPLEAPI_H
|
||||||
|
#define SERIAL_CONFIG_SIMPLEAPI_H
|
||||||
|
|
||||||
|
#undef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
|
||||||
|
#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
|
||||||
|
|
||||||
|
#endif // SERIAL_CONFIG_SIMPLEAPI_H
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
#ifdef USE_SERIAL
|
||||||
|
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
/* --- USE flexible API (using multi-type transaction function) --- */
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <split_scomm.h>
|
||||||
|
#include "serial.h"
|
||||||
|
#ifdef CONSOLE_ENABLE
|
||||||
|
#include <print.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
|
||||||
|
uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
|
||||||
|
uint8_t volatile status_com = 0;
|
||||||
|
uint8_t volatile status1 = 0;
|
||||||
|
uint8_t slave_buffer_change_count = 0;
|
||||||
|
uint8_t s_change_old = 0xff;
|
||||||
|
uint8_t s_change_new = 0xff;
|
||||||
|
|
||||||
|
SSTD_t transactions[] = {
|
||||||
|
#define GET_SLAVE_STATUS 0
|
||||||
|
/* master buffer not changed, only recive slave_buffer_change_count */
|
||||||
|
{ (uint8_t *)&status_com,
|
||||||
|
0, NULL,
|
||||||
|
sizeof(slave_buffer_change_count), &slave_buffer_change_count,
|
||||||
|
},
|
||||||
|
#define PUT_MASTER_GET_SLAVE_STATUS 1
|
||||||
|
/* master buffer changed need send, and recive slave_buffer_change_count */
|
||||||
|
{ (uint8_t *)&status_com,
|
||||||
|
sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer,
|
||||||
|
sizeof(slave_buffer_change_count), &slave_buffer_change_count,
|
||||||
|
},
|
||||||
|
#define GET_SLAVE_BUFFER 2
|
||||||
|
/* recive serial_slave_buffer */
|
||||||
|
{ (uint8_t *)&status1,
|
||||||
|
0, NULL,
|
||||||
|
sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void serial_master_init(void)
|
||||||
|
{
|
||||||
|
soft_serial_initiator_init(transactions, TID_LIMIT(transactions));
|
||||||
|
}
|
||||||
|
|
||||||
|
void serial_slave_init(void)
|
||||||
|
{
|
||||||
|
soft_serial_target_init(transactions, TID_LIMIT(transactions));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 0 => no error
|
||||||
|
// 1 => slave did not respond
|
||||||
|
// 2 => checksum error
|
||||||
|
int serial_update_buffers(int master_update)
|
||||||
|
{
|
||||||
|
int status, smatstatus;
|
||||||
|
static int need_retry = 0;
|
||||||
|
|
||||||
|
if( s_change_old != s_change_new ) {
|
||||||
|
smatstatus = soft_serial_transaction(GET_SLAVE_BUFFER);
|
||||||
|
if( smatstatus == TRANSACTION_END ) {
|
||||||
|
s_change_old = s_change_new;
|
||||||
|
#ifdef CONSOLE_ENABLE
|
||||||
|
uprintf("slave matrix = %b %b %b %b %b\n",
|
||||||
|
serial_slave_buffer[0], serial_slave_buffer[1],
|
||||||
|
serial_slave_buffer[2], serial_slave_buffer[3],
|
||||||
|
serial_slave_buffer[4] );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// serial_slave_buffer dosen't change
|
||||||
|
smatstatus = TRANSACTION_END; // dummy status
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !master_update && !need_retry) {
|
||||||
|
status = soft_serial_transaction(GET_SLAVE_STATUS);
|
||||||
|
} else {
|
||||||
|
status = soft_serial_transaction(PUT_MASTER_GET_SLAVE_STATUS);
|
||||||
|
}
|
||||||
|
if( status == TRANSACTION_END ) {
|
||||||
|
s_change_new = slave_buffer_change_count;
|
||||||
|
need_retry = 0;
|
||||||
|
} else {
|
||||||
|
need_retry = 1;
|
||||||
|
}
|
||||||
|
return smatstatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
#endif /* USE_SERIAL */
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
/* --- USE Simple API (OLD API, compatible with let's split serial.c) --- */
|
||||||
|
#include "serial.h"
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* --- USE flexible API (using multi-type transaction function) --- */
|
||||||
|
// Buffers for master - slave communication
|
||||||
|
#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
|
||||||
|
#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
|
||||||
|
|
||||||
|
extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
|
||||||
|
extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
|
||||||
|
extern uint8_t slave_buffer_change_count;
|
||||||
|
|
||||||
|
void serial_master_init(void);
|
||||||
|
void serial_slave_init(void);
|
||||||
|
int serial_update_buffers(int master_changed);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
#include <avr/io.h>
|
||||||
|
#include <avr/wdt.h>
|
||||||
|
#include <avr/power.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include <avr/eeprom.h>
|
||||||
|
#include "split_util.h"
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "keyboard.h"
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
# include "i2c.h"
|
||||||
|
#else
|
||||||
|
# include "split_scomm.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
volatile bool isLeftHand = true;
|
||||||
|
|
||||||
|
static void setup_handedness(void) {
|
||||||
|
#ifdef EE_HANDS
|
||||||
|
isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
|
||||||
|
#else
|
||||||
|
// I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c
|
||||||
|
#if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT)
|
||||||
|
isLeftHand = !has_usb();
|
||||||
|
#else
|
||||||
|
isLeftHand = has_usb();
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keyboard_master_setup(void) {
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
i2c_master_init();
|
||||||
|
#else
|
||||||
|
serial_master_init();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keyboard_slave_setup(void) {
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
i2c_slave_init(SLAVE_I2C_ADDRESS);
|
||||||
|
#else
|
||||||
|
serial_slave_init();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool has_usb(void) {
|
||||||
|
USBCON |= (1 << OTGPADE); //enables VBUS pad
|
||||||
|
_delay_us(5);
|
||||||
|
return (USBSTA & (1<<VBUS)); //checks state of VBUS
|
||||||
|
}
|
||||||
|
|
||||||
|
void split_keyboard_setup(void) {
|
||||||
|
setup_handedness();
|
||||||
|
|
||||||
|
if (has_usb()) {
|
||||||
|
keyboard_master_setup();
|
||||||
|
} else {
|
||||||
|
keyboard_slave_setup();
|
||||||
|
}
|
||||||
|
sei();
|
||||||
|
}
|
||||||
|
|
||||||
|
// this code runs before the usb and keyboard is initialized
|
||||||
|
void matrix_setup(void) {
|
||||||
|
split_keyboard_setup();
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
|
#define SLAVE_I2C_ADDRESS 0x32
|
||||||
|
|
||||||
|
extern volatile bool isLeftHand;
|
||||||
|
|
||||||
|
// slave version of matix scan, defined in matrix.c
|
||||||
|
void matrix_slave_scan(void);
|
||||||
|
|
||||||
|
void split_keyboard_setup(void);
|
||||||
|
bool has_usb(void);
|
||||||
|
|
||||||
|
void matrix_master_OLED_init (void);
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
# SRC += i2c.c
|
||||||
|
QUANTUM_LIB_SRC += serial.c
|
||||||
|
# SRC += ssd1306.c
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
# Bootloader
|
||||||
|
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
||||||
|
# different sizes, comment this out, and the correct address will be loaded
|
||||||
|
# automatically (+60). See bootloader.mk for all options.
|
||||||
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
# 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 = no # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = no # 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.
|
||||||
|
SUBPROJECT_rev1 = no
|
||||||
|
USE_I2C = no
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
CUSTOM_MATRIX = yes
|
||||||
|
|
||||||
|
DEFAULT_FOLDER = naked48/rev1
|
||||||
@@ -0,0 +1,590 @@
|
|||||||
|
/*
|
||||||
|
* WARNING: be careful changing this code, it is very timing dependent
|
||||||
|
*
|
||||||
|
* 2018-10-28 checked
|
||||||
|
* avr-gcc 4.9.2
|
||||||
|
* avr-gcc 5.4.0
|
||||||
|
* avr-gcc 7.3.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef F_CPU
|
||||||
|
#define F_CPU 16000000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "serial.h"
|
||||||
|
//#include <pro_micro.h>
|
||||||
|
|
||||||
|
#ifdef SOFT_SERIAL_PIN
|
||||||
|
|
||||||
|
#ifdef __AVR_ATmega32U4__
|
||||||
|
// if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial.
|
||||||
|
#ifdef USE_I2C
|
||||||
|
#if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1
|
||||||
|
#error Using ATmega32U4 I2C, so can not use PD0, PD1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3
|
||||||
|
#define SERIAL_PIN_DDR DDRD
|
||||||
|
#define SERIAL_PIN_PORT PORTD
|
||||||
|
#define SERIAL_PIN_INPUT PIND
|
||||||
|
#if SOFT_SERIAL_PIN == D0
|
||||||
|
#define SERIAL_PIN_MASK _BV(PD0)
|
||||||
|
#define EIMSK_BIT _BV(INT0)
|
||||||
|
#define EICRx_BIT (~(_BV(ISC00) | _BV(ISC01)))
|
||||||
|
#define SERIAL_PIN_INTERRUPT INT0_vect
|
||||||
|
#elif SOFT_SERIAL_PIN == D1
|
||||||
|
#define SERIAL_PIN_MASK _BV(PD1)
|
||||||
|
#define EIMSK_BIT _BV(INT1)
|
||||||
|
#define EICRx_BIT (~(_BV(ISC10) | _BV(ISC11)))
|
||||||
|
#define SERIAL_PIN_INTERRUPT INT1_vect
|
||||||
|
#elif SOFT_SERIAL_PIN == D2
|
||||||
|
#define SERIAL_PIN_MASK _BV(PD2)
|
||||||
|
#define EIMSK_BIT _BV(INT2)
|
||||||
|
#define EICRx_BIT (~(_BV(ISC20) | _BV(ISC21)))
|
||||||
|
#define SERIAL_PIN_INTERRUPT INT2_vect
|
||||||
|
#elif SOFT_SERIAL_PIN == D3
|
||||||
|
#define SERIAL_PIN_MASK _BV(PD3)
|
||||||
|
#define EIMSK_BIT _BV(INT3)
|
||||||
|
#define EICRx_BIT (~(_BV(ISC30) | _BV(ISC31)))
|
||||||
|
#define SERIAL_PIN_INTERRUPT INT3_vect
|
||||||
|
#endif
|
||||||
|
#elif SOFT_SERIAL_PIN == E6
|
||||||
|
#define SERIAL_PIN_DDR DDRE
|
||||||
|
#define SERIAL_PIN_PORT PORTE
|
||||||
|
#define SERIAL_PIN_INPUT PINE
|
||||||
|
#define SERIAL_PIN_MASK _BV(PE6)
|
||||||
|
#define EIMSK_BIT _BV(INT6)
|
||||||
|
#define EICRx_BIT (~(_BV(ISC60) | _BV(ISC61)))
|
||||||
|
#define SERIAL_PIN_INTERRUPT INT6_vect
|
||||||
|
#else
|
||||||
|
#error invalid SOFT_SERIAL_PIN value
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error serial.c now support ATmega32U4 only
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//////////////// for backward compatibility ////////////////////////////////
|
||||||
|
#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION)
|
||||||
|
/* --- USE OLD API (compatible with let's split serial.c) */
|
||||||
|
#if SERIAL_SLAVE_BUFFER_LENGTH > 0
|
||||||
|
uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
|
||||||
|
#endif
|
||||||
|
#if SERIAL_MASTER_BUFFER_LENGTH > 0
|
||||||
|
uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
|
||||||
|
#endif
|
||||||
|
uint8_t volatile status0 = 0;
|
||||||
|
|
||||||
|
SSTD_t transactions[] = {
|
||||||
|
{ (uint8_t *)&status0,
|
||||||
|
#if SERIAL_MASTER_BUFFER_LENGTH > 0
|
||||||
|
sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer,
|
||||||
|
#else
|
||||||
|
0, (uint8_t *)NULL,
|
||||||
|
#endif
|
||||||
|
#if SERIAL_SLAVE_BUFFER_LENGTH > 0
|
||||||
|
sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer
|
||||||
|
#else
|
||||||
|
0, (uint8_t *)NULL,
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void serial_master_init(void)
|
||||||
|
{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
|
||||||
|
|
||||||
|
void serial_slave_init(void)
|
||||||
|
{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
|
||||||
|
|
||||||
|
// 0 => no error
|
||||||
|
// 1 => slave did not respond
|
||||||
|
// 2 => checksum error
|
||||||
|
int serial_update_buffers()
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
result = soft_serial_transaction();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // end of OLD API (compatible with let's split serial.c)
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define ALWAYS_INLINE __attribute__((always_inline))
|
||||||
|
#define NO_INLINE __attribute__((noinline))
|
||||||
|
#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
|
||||||
|
|
||||||
|
// parity check
|
||||||
|
#define ODD_PARITY 1
|
||||||
|
#define EVEN_PARITY 0
|
||||||
|
#define PARITY EVEN_PARITY
|
||||||
|
|
||||||
|
#ifdef SERIAL_DELAY
|
||||||
|
// custom setup in config.h
|
||||||
|
// #define TID_SEND_ADJUST 2
|
||||||
|
// #define SERIAL_DELAY 6 // micro sec
|
||||||
|
// #define READ_WRITE_START_ADJUST 30 // cycles
|
||||||
|
// #define READ_WRITE_WIDTH_ADJUST 8 // cycles
|
||||||
|
#else
|
||||||
|
// ============ Standard setups ============
|
||||||
|
|
||||||
|
#ifndef SELECT_SOFT_SERIAL_SPEED
|
||||||
|
#define SELECT_SOFT_SERIAL_SPEED 1
|
||||||
|
// 0: about 189kbps
|
||||||
|
// 1: about 137kbps (default)
|
||||||
|
// 2: about 75kbps
|
||||||
|
// 3: about 39kbps
|
||||||
|
// 4: about 26kbps
|
||||||
|
// 5: about 20kbps
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __GNUC__ < 6
|
||||||
|
#define TID_SEND_ADJUST 14
|
||||||
|
#else
|
||||||
|
#define TID_SEND_ADJUST 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SELECT_SOFT_SERIAL_SPEED == 0
|
||||||
|
// Very High speed
|
||||||
|
#define SERIAL_DELAY 4 // micro sec
|
||||||
|
#if __GNUC__ < 6
|
||||||
|
#define READ_WRITE_START_ADJUST 33 // cycles
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 3 // cycles
|
||||||
|
#else
|
||||||
|
#define READ_WRITE_START_ADJUST 34 // cycles
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 7 // cycles
|
||||||
|
#endif
|
||||||
|
#elif SELECT_SOFT_SERIAL_SPEED == 1
|
||||||
|
// High speed
|
||||||
|
#define SERIAL_DELAY 6 // micro sec
|
||||||
|
#if __GNUC__ < 6
|
||||||
|
#define READ_WRITE_START_ADJUST 30 // cycles
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 3 // cycles
|
||||||
|
#else
|
||||||
|
#define READ_WRITE_START_ADJUST 33 // cycles
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 7 // cycles
|
||||||
|
#endif
|
||||||
|
#elif SELECT_SOFT_SERIAL_SPEED == 2
|
||||||
|
// Middle speed
|
||||||
|
#define SERIAL_DELAY 12 // micro sec
|
||||||
|
#define READ_WRITE_START_ADJUST 30 // cycles
|
||||||
|
#if __GNUC__ < 6
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 3 // cycles
|
||||||
|
#else
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 7 // cycles
|
||||||
|
#endif
|
||||||
|
#elif SELECT_SOFT_SERIAL_SPEED == 3
|
||||||
|
// Low speed
|
||||||
|
#define SERIAL_DELAY 24 // micro sec
|
||||||
|
#define READ_WRITE_START_ADJUST 30 // cycles
|
||||||
|
#if __GNUC__ < 6
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 3 // cycles
|
||||||
|
#else
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 7 // cycles
|
||||||
|
#endif
|
||||||
|
#elif SELECT_SOFT_SERIAL_SPEED == 4
|
||||||
|
// Very Low speed
|
||||||
|
#define SERIAL_DELAY 36 // micro sec
|
||||||
|
#define READ_WRITE_START_ADJUST 30 // cycles
|
||||||
|
#if __GNUC__ < 6
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 3 // cycles
|
||||||
|
#else
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 7 // cycles
|
||||||
|
#endif
|
||||||
|
#elif SELECT_SOFT_SERIAL_SPEED == 5
|
||||||
|
// Ultra Low speed
|
||||||
|
#define SERIAL_DELAY 48 // micro sec
|
||||||
|
#define READ_WRITE_START_ADJUST 30 // cycles
|
||||||
|
#if __GNUC__ < 6
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 3 // cycles
|
||||||
|
#else
|
||||||
|
#define READ_WRITE_WIDTH_ADJUST 7 // cycles
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#error invalid SELECT_SOFT_SERIAL_SPEED value
|
||||||
|
#endif /* SELECT_SOFT_SERIAL_SPEED */
|
||||||
|
#endif /* SERIAL_DELAY */
|
||||||
|
|
||||||
|
#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2)
|
||||||
|
#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2)
|
||||||
|
|
||||||
|
#define SLAVE_INT_WIDTH_US 1
|
||||||
|
#ifndef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
#define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY
|
||||||
|
#else
|
||||||
|
#define SLAVE_INT_ACK_WIDTH_UNIT 2
|
||||||
|
#define SLAVE_INT_ACK_WIDTH 4
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static SSTD_t *Transaction_table = NULL;
|
||||||
|
static uint8_t Transaction_table_size = 0;
|
||||||
|
|
||||||
|
inline static void serial_delay(void) ALWAYS_INLINE;
|
||||||
|
inline static
|
||||||
|
void serial_delay(void) {
|
||||||
|
_delay_us(SERIAL_DELAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static void serial_delay_half1(void) ALWAYS_INLINE;
|
||||||
|
inline static
|
||||||
|
void serial_delay_half1(void) {
|
||||||
|
_delay_us(SERIAL_DELAY_HALF1);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static void serial_delay_half2(void) ALWAYS_INLINE;
|
||||||
|
inline static
|
||||||
|
void serial_delay_half2(void) {
|
||||||
|
_delay_us(SERIAL_DELAY_HALF2);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static void serial_output(void) ALWAYS_INLINE;
|
||||||
|
inline static
|
||||||
|
void serial_output(void) {
|
||||||
|
SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
// make the serial pin an input with pull-up resistor
|
||||||
|
inline static void serial_input_with_pullup(void) ALWAYS_INLINE;
|
||||||
|
inline static
|
||||||
|
void serial_input_with_pullup(void) {
|
||||||
|
SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
|
||||||
|
SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static uint8_t serial_read_pin(void) ALWAYS_INLINE;
|
||||||
|
inline static
|
||||||
|
uint8_t serial_read_pin(void) {
|
||||||
|
return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static void serial_low(void) ALWAYS_INLINE;
|
||||||
|
inline static
|
||||||
|
void serial_low(void) {
|
||||||
|
SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static void serial_high(void) ALWAYS_INLINE;
|
||||||
|
inline static
|
||||||
|
void serial_high(void) {
|
||||||
|
SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size)
|
||||||
|
{
|
||||||
|
Transaction_table = sstd_table;
|
||||||
|
Transaction_table_size = (uint8_t)sstd_table_size;
|
||||||
|
serial_output();
|
||||||
|
serial_high();
|
||||||
|
}
|
||||||
|
|
||||||
|
void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size)
|
||||||
|
{
|
||||||
|
Transaction_table = sstd_table;
|
||||||
|
Transaction_table_size = (uint8_t)sstd_table_size;
|
||||||
|
serial_input_with_pullup();
|
||||||
|
|
||||||
|
// Enable INT0-INT3,INT6
|
||||||
|
EIMSK |= EIMSK_BIT;
|
||||||
|
#if SERIAL_PIN_MASK == _BV(PE6)
|
||||||
|
// Trigger on falling edge of INT6
|
||||||
|
EICRB &= EICRx_BIT;
|
||||||
|
#else
|
||||||
|
// Trigger on falling edge of INT0-INT3
|
||||||
|
EICRA &= EICRx_BIT;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used by the sender to synchronize timing with the reciver.
|
||||||
|
static void sync_recv(void) NO_INLINE;
|
||||||
|
static
|
||||||
|
void sync_recv(void) {
|
||||||
|
for (uint8_t i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
|
||||||
|
}
|
||||||
|
// This shouldn't hang if the target disconnects because the
|
||||||
|
// serial line will float to high if the target does disconnect.
|
||||||
|
while (!serial_read_pin());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used by the reciver to send a synchronization signal to the sender.
|
||||||
|
static void sync_send(void) NO_INLINE;
|
||||||
|
static
|
||||||
|
void sync_send(void) {
|
||||||
|
serial_low();
|
||||||
|
serial_delay();
|
||||||
|
serial_high();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reads a byte from the serial line
|
||||||
|
static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) NO_INLINE;
|
||||||
|
static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) {
|
||||||
|
uint8_t byte, i, p, pb;
|
||||||
|
|
||||||
|
_delay_sub_us(READ_WRITE_START_ADJUST);
|
||||||
|
for( i = 0, byte = 0, p = PARITY; i < bit; i++ ) {
|
||||||
|
serial_delay_half1(); // read the middle of pulses
|
||||||
|
if( serial_read_pin() ) {
|
||||||
|
byte = (byte << 1) | 1; p ^= 1;
|
||||||
|
} else {
|
||||||
|
byte = (byte << 1) | 0; p ^= 0;
|
||||||
|
}
|
||||||
|
_delay_sub_us(READ_WRITE_WIDTH_ADJUST);
|
||||||
|
serial_delay_half2();
|
||||||
|
}
|
||||||
|
/* recive parity bit */
|
||||||
|
serial_delay_half1(); // read the middle of pulses
|
||||||
|
pb = serial_read_pin();
|
||||||
|
_delay_sub_us(READ_WRITE_WIDTH_ADJUST);
|
||||||
|
serial_delay_half2();
|
||||||
|
|
||||||
|
*pterrcount += (p != pb)? 1 : 0;
|
||||||
|
|
||||||
|
return byte;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sends a byte with MSB ordering
|
||||||
|
void serial_write_chunk(uint8_t data, uint8_t bit) NO_INLINE;
|
||||||
|
void serial_write_chunk(uint8_t data, uint8_t bit) {
|
||||||
|
uint8_t b, p;
|
||||||
|
for( p = PARITY, b = 1<<(bit-1); b ; b >>= 1) {
|
||||||
|
if(data & b) {
|
||||||
|
serial_high(); p ^= 1;
|
||||||
|
} else {
|
||||||
|
serial_low(); p ^= 0;
|
||||||
|
}
|
||||||
|
serial_delay();
|
||||||
|
}
|
||||||
|
/* send parity bit */
|
||||||
|
if(p & 1) { serial_high(); }
|
||||||
|
else { serial_low(); }
|
||||||
|
serial_delay();
|
||||||
|
|
||||||
|
serial_low(); // sync_send() / senc_recv() need raise edge
|
||||||
|
}
|
||||||
|
|
||||||
|
static void serial_send_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
|
||||||
|
static
|
||||||
|
void serial_send_packet(uint8_t *buffer, uint8_t size) {
|
||||||
|
for (uint8_t i = 0; i < size; ++i) {
|
||||||
|
uint8_t data;
|
||||||
|
data = buffer[i];
|
||||||
|
sync_send();
|
||||||
|
serial_write_chunk(data,8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
|
||||||
|
static
|
||||||
|
uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) {
|
||||||
|
uint8_t pecount = 0;
|
||||||
|
for (uint8_t i = 0; i < size; ++i) {
|
||||||
|
uint8_t data;
|
||||||
|
sync_recv();
|
||||||
|
data = serial_read_chunk(&pecount, 8);
|
||||||
|
buffer[i] = data;
|
||||||
|
}
|
||||||
|
return pecount == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static
|
||||||
|
void change_sender2reciver(void) {
|
||||||
|
sync_send(); //0
|
||||||
|
serial_delay_half1(); //1
|
||||||
|
serial_low(); //2
|
||||||
|
serial_input_with_pullup(); //2
|
||||||
|
serial_delay_half1(); //3
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static
|
||||||
|
void change_reciver2sender(void) {
|
||||||
|
sync_recv(); //0
|
||||||
|
serial_delay(); //1
|
||||||
|
serial_low(); //3
|
||||||
|
serial_output(); //3
|
||||||
|
serial_delay_half1(); //4
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint8_t nibble_bits_count(uint8_t bits)
|
||||||
|
{
|
||||||
|
bits = (bits & 0x5) + (bits >> 1 & 0x5);
|
||||||
|
bits = (bits & 0x3) + (bits >> 2 & 0x3);
|
||||||
|
return bits;
|
||||||
|
}
|
||||||
|
|
||||||
|
// interrupt handle to be used by the target device
|
||||||
|
ISR(SERIAL_PIN_INTERRUPT) {
|
||||||
|
|
||||||
|
#ifndef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
serial_low();
|
||||||
|
serial_output();
|
||||||
|
SSTD_t *trans = Transaction_table;
|
||||||
|
#else
|
||||||
|
// recive transaction table index
|
||||||
|
uint8_t tid, bits;
|
||||||
|
uint8_t pecount = 0;
|
||||||
|
sync_recv();
|
||||||
|
bits = serial_read_chunk(&pecount,7);
|
||||||
|
tid = bits>>3;
|
||||||
|
bits = (bits&7) != nibble_bits_count(tid);
|
||||||
|
if( bits || pecount> 0 || tid > Transaction_table_size ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
serial_delay_half1();
|
||||||
|
|
||||||
|
serial_high(); // response step1 low->high
|
||||||
|
serial_output();
|
||||||
|
_delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT*SLAVE_INT_ACK_WIDTH);
|
||||||
|
SSTD_t *trans = &Transaction_table[tid];
|
||||||
|
serial_low(); // response step2 ack high->low
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// target send phase
|
||||||
|
if( trans->target2initiator_buffer_size > 0 )
|
||||||
|
serial_send_packet((uint8_t *)trans->target2initiator_buffer,
|
||||||
|
trans->target2initiator_buffer_size);
|
||||||
|
// target switch to input
|
||||||
|
change_sender2reciver();
|
||||||
|
|
||||||
|
// target recive phase
|
||||||
|
if( trans->initiator2target_buffer_size > 0 ) {
|
||||||
|
if (serial_recive_packet((uint8_t *)trans->initiator2target_buffer,
|
||||||
|
trans->initiator2target_buffer_size) ) {
|
||||||
|
*trans->status = TRANSACTION_ACCEPTED;
|
||||||
|
} else {
|
||||||
|
*trans->status = TRANSACTION_DATA_ERROR;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
*trans->status = TRANSACTION_ACCEPTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
sync_recv(); //weit initiator output to high
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////
|
||||||
|
// start transaction by initiator
|
||||||
|
//
|
||||||
|
// int soft_serial_transaction(int sstd_index)
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// TRANSACTION_END
|
||||||
|
// TRANSACTION_NO_RESPONSE
|
||||||
|
// TRANSACTION_DATA_ERROR
|
||||||
|
// this code is very time dependent, so we need to disable interrupts
|
||||||
|
#ifndef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
int soft_serial_transaction(void) {
|
||||||
|
SSTD_t *trans = Transaction_table;
|
||||||
|
#else
|
||||||
|
int soft_serial_transaction(int sstd_index) {
|
||||||
|
if( sstd_index > Transaction_table_size )
|
||||||
|
return TRANSACTION_TYPE_ERROR;
|
||||||
|
SSTD_t *trans = &Transaction_table[sstd_index];
|
||||||
|
#endif
|
||||||
|
cli();
|
||||||
|
|
||||||
|
// signal to the target that we want to start a transaction
|
||||||
|
serial_output();
|
||||||
|
serial_low();
|
||||||
|
_delay_us(SLAVE_INT_WIDTH_US);
|
||||||
|
|
||||||
|
#ifndef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
// wait for the target response
|
||||||
|
serial_input_with_pullup();
|
||||||
|
_delay_us(SLAVE_INT_RESPONSE_TIME);
|
||||||
|
|
||||||
|
// check if the target is present
|
||||||
|
if (serial_read_pin()) {
|
||||||
|
// target failed to pull the line low, assume not present
|
||||||
|
serial_output();
|
||||||
|
serial_high();
|
||||||
|
*trans->status = TRANSACTION_NO_RESPONSE;
|
||||||
|
sei();
|
||||||
|
return TRANSACTION_NO_RESPONSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
// send transaction table index
|
||||||
|
int tid = (sstd_index<<3) | (7 & nibble_bits_count(sstd_index));
|
||||||
|
sync_send();
|
||||||
|
_delay_sub_us(TID_SEND_ADJUST);
|
||||||
|
serial_write_chunk(tid, 7);
|
||||||
|
serial_delay_half1();
|
||||||
|
|
||||||
|
// wait for the target response (step1 low->high)
|
||||||
|
serial_input_with_pullup();
|
||||||
|
while( !serial_read_pin() ) {
|
||||||
|
_delay_sub_us(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if the target is present (step2 high->low)
|
||||||
|
for( int i = 0; serial_read_pin(); i++ ) {
|
||||||
|
if (i > SLAVE_INT_ACK_WIDTH + 1) {
|
||||||
|
// slave failed to pull the line low, assume not present
|
||||||
|
serial_output();
|
||||||
|
serial_high();
|
||||||
|
*trans->status = TRANSACTION_NO_RESPONSE;
|
||||||
|
sei();
|
||||||
|
return TRANSACTION_NO_RESPONSE;
|
||||||
|
}
|
||||||
|
_delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// initiator recive phase
|
||||||
|
// if the target is present syncronize with it
|
||||||
|
if( trans->target2initiator_buffer_size > 0 ) {
|
||||||
|
if (!serial_recive_packet((uint8_t *)trans->target2initiator_buffer,
|
||||||
|
trans->target2initiator_buffer_size) ) {
|
||||||
|
serial_output();
|
||||||
|
serial_high();
|
||||||
|
*trans->status = TRANSACTION_DATA_ERROR;
|
||||||
|
sei();
|
||||||
|
return TRANSACTION_DATA_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// initiator switch to output
|
||||||
|
change_reciver2sender();
|
||||||
|
|
||||||
|
// initiator send phase
|
||||||
|
if( trans->initiator2target_buffer_size > 0 ) {
|
||||||
|
serial_send_packet((uint8_t *)trans->initiator2target_buffer,
|
||||||
|
trans->initiator2target_buffer_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
// always, release the line when not in use
|
||||||
|
sync_send();
|
||||||
|
|
||||||
|
*trans->status = TRANSACTION_END;
|
||||||
|
sei();
|
||||||
|
return TRANSACTION_END;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
int soft_serial_get_and_clean_status(int sstd_index) {
|
||||||
|
SSTD_t *trans = &Transaction_table[sstd_index];
|
||||||
|
cli();
|
||||||
|
int retval = *trans->status;
|
||||||
|
*trans->status = 0;;
|
||||||
|
sei();
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Helix serial.c history
|
||||||
|
// 2018-1-29 fork from let's split and add PD2, modify sync_recv() (#2308, bceffdefc)
|
||||||
|
// 2018-6-28 bug fix master to slave comm and speed up (#3255, 1038bbef4)
|
||||||
|
// (adjusted with avr-gcc 4.9.2)
|
||||||
|
// 2018-7-13 remove USE_SERIAL_PD2 macro (#3374, f30d6dd78)
|
||||||
|
// (adjusted with avr-gcc 4.9.2)
|
||||||
|
// 2018-8-11 add support multi-type transaction (#3608, feb5e4aae)
|
||||||
|
// (adjusted with avr-gcc 4.9.2)
|
||||||
|
// 2018-10-21 fix serial and RGB animation conflict (#4191, 4665e4fff)
|
||||||
|
// (adjusted with avr-gcc 7.3.0)
|
||||||
|
// 2018-10-28 re-adjust compiler depend value of delay (#4269, 8517f8a66)
|
||||||
|
// (adjusted with avr-gcc 5.4.0, 7.3.0)
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
// /////////////////////////////////////////////////////////////////
|
||||||
|
// Need Soft Serial defines in config.h
|
||||||
|
// /////////////////////////////////////////////////////////////////
|
||||||
|
// ex.
|
||||||
|
// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6
|
||||||
|
// OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5
|
||||||
|
// // 1: about 137kbps (default)
|
||||||
|
// // 2: about 75kbps
|
||||||
|
// // 3: about 39kbps
|
||||||
|
// // 4: about 26kbps
|
||||||
|
// // 5: about 20kbps
|
||||||
|
//
|
||||||
|
// //// USE OLD API (compatible with let's split serial.c)
|
||||||
|
// ex.
|
||||||
|
// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
|
||||||
|
// #define SERIAL_MASTER_BUFFER_LENGTH 1
|
||||||
|
//
|
||||||
|
// //// USE NEW API
|
||||||
|
// //// USE simple API (using signle-type transaction function)
|
||||||
|
// #define SERIAL_USE_SINGLE_TRANSACTION
|
||||||
|
// //// USE flexible API (using multi-type transaction function)
|
||||||
|
// #define SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
//
|
||||||
|
// /////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
//////////////// for backward compatibility ////////////////////////////////
|
||||||
|
#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION)
|
||||||
|
/* --- USE OLD API (compatible with let's split serial.c) */
|
||||||
|
#if SERIAL_SLAVE_BUFFER_LENGTH > 0
|
||||||
|
extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
|
||||||
|
#endif
|
||||||
|
#if SERIAL_MASTER_BUFFER_LENGTH > 0
|
||||||
|
extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void serial_master_init(void);
|
||||||
|
void serial_slave_init(void);
|
||||||
|
int serial_update_buffers(void);
|
||||||
|
|
||||||
|
#endif // end of USE OLD API
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Soft Serial Transaction Descriptor
|
||||||
|
typedef struct _SSTD_t {
|
||||||
|
uint8_t *status;
|
||||||
|
uint8_t initiator2target_buffer_size;
|
||||||
|
uint8_t *initiator2target_buffer;
|
||||||
|
uint8_t target2initiator_buffer_size;
|
||||||
|
uint8_t *target2initiator_buffer;
|
||||||
|
} SSTD_t;
|
||||||
|
#define TID_LIMIT( table ) (sizeof(table) / sizeof(SSTD_t))
|
||||||
|
|
||||||
|
// initiator is transaction start side
|
||||||
|
void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size);
|
||||||
|
// target is interrupt accept side
|
||||||
|
void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size);
|
||||||
|
|
||||||
|
// initiator resullt
|
||||||
|
#define TRANSACTION_END 0
|
||||||
|
#define TRANSACTION_NO_RESPONSE 0x1
|
||||||
|
#define TRANSACTION_DATA_ERROR 0x2
|
||||||
|
#define TRANSACTION_TYPE_ERROR 0x4
|
||||||
|
#ifndef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
int soft_serial_transaction(void);
|
||||||
|
#else
|
||||||
|
int soft_serial_transaction(int sstd_index);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// target status
|
||||||
|
// *SSTD_t.status has
|
||||||
|
// initiator:
|
||||||
|
// TRANSACTION_END
|
||||||
|
// or TRANSACTION_NO_RESPONSE
|
||||||
|
// or TRANSACTION_DATA_ERROR
|
||||||
|
// target:
|
||||||
|
// TRANSACTION_DATA_ERROR
|
||||||
|
// or TRANSACTION_ACCEPTED
|
||||||
|
#define TRANSACTION_ACCEPTED 0x8
|
||||||
|
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
int soft_serial_get_and_clean_status(int sstd_index);
|
||||||
|
#endif
|
||||||
@@ -46,8 +46,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
/* Locking resynchronize hack */
|
/* Locking resynchronize hack */
|
||||||
#define LOCKING_RESYNC_ENABLE
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
/* key combination for magic key command */
|
|
||||||
#define IS_COMMAND() ( \
|
|
||||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
|
||||||
)
|
|
||||||
@@ -43,7 +43,6 @@
|
|||||||
#define MATRIX_ROW_PINS { A10, A9, A8, B15, C13, C14, C15, A2 }
|
#define MATRIX_ROW_PINS { A10, A9, A8, B15, C13, C14, C15, A2 }
|
||||||
#define MATRIX_COL_PINS { B11, B10, B2, B1, A7, B0 }
|
#define MATRIX_COL_PINS { B11, B10, B2, B1, A7, B0 }
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
#define ENCODERS_PAD_A { B12 }
|
#define ENCODERS_PAD_A { B12 }
|
||||||
#define ENCODERS_PAD_B { B13 }
|
#define ENCODERS_PAD_B { B13 }
|
||||||
|
|
||||||
|
|||||||
@@ -1,39 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLE
|
#ifdef AUDIO_ENABLE
|
||||||
#define STARTUP_SONG SONG(PLANCK_SOUND)
|
#define STARTUP_SONG SONG(DVORAK_SOUND)
|
||||||
// #define STARTUP_SONG SONG(NO_SOUND)
|
|
||||||
|
|
||||||
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
|
|
||||||
SONG(COLEMAK_SOUND), \
|
|
||||||
SONG(DVORAK_SOUND) \
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* 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
|
|
||||||
|
|
||||||
// Most tactile encoders have detents every 4 stages
|
|
||||||
#define ENCODER_RESOLUTION 4
|
|
||||||
|
|
||||||
@@ -1,19 +1,3 @@
|
|||||||
/* Copyright 2015-2017 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
#include "muse.h"
|
#include "muse.h"
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
* #define UNUSED_PINS
|
* #define UNUSED_PINS
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
#define ENCODERS_PAD_A { B12 }
|
#define ENCODERS_PAD_A { B12 }
|
||||||
#define ENCODERS_PAD_B { B13 }
|
#define ENCODERS_PAD_B { B13 }
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
* #define UNUSED_PINS
|
* #define UNUSED_PINS
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
#define ENCODERS_PAD_A { B12 }
|
#define ENCODERS_PAD_A { B12 }
|
||||||
#define ENCODERS_PAD_B { B13 }
|
#define ENCODERS_PAD_B { B13 }
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/* Copyright 2018 Holten Campbell
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT(
|
||||||
|
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_DEL,
|
||||||
|
LT(2, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(2, KC_ENT),
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, LT(3, KC_B), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), LT(1, KC_SPC), KC_RALT, KC_RGUI, KC_RCTL
|
||||||
|
),
|
||||||
|
|
||||||
|
[1] = LAYOUT(
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_TRNS,
|
||||||
|
KC_TRNS, KC_MINS, KC_EQL, KC_SCLN, KC_QUOT, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_QUOT, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
|
||||||
|
[2] = LAYOUT(
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, KC_TRNS,
|
||||||
|
KC_TRNS, KC_UNDS, KC_PLUS, KC_COLN, KC_DQUO, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_DQUO, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
|
||||||
|
[3] = LAYOUT(
|
||||||
|
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
// set CapsLock LED to output and low
|
||||||
|
setPinOutput(B1);
|
||||||
|
writePinLow(B1);
|
||||||
|
// set NumLock LED to output and low
|
||||||
|
setPinOutput(B2);
|
||||||
|
writePinLow(B2);
|
||||||
|
// set ScrollLock LED to output and low
|
||||||
|
setPinOutput(B3);
|
||||||
|
writePinLow(B3);
|
||||||
|
}
|
||||||
|
|
||||||
|
//function for layer indicator LED
|
||||||
|
uint32_t layer_state_set_user(uint32_t state)
|
||||||
|
{
|
||||||
|
if (state & (1<<1)) {
|
||||||
|
writePinHigh(B1);
|
||||||
|
} else {
|
||||||
|
writePinLow(B1);
|
||||||
|
}
|
||||||
|
if (state & (1<<2)) {
|
||||||
|
writePinHigh(B2);
|
||||||
|
} else {
|
||||||
|
writePinLow(B2);
|
||||||
|
}
|
||||||
|
if (state & (1<<3)) {
|
||||||
|
writePinHigh(B3);
|
||||||
|
} else {
|
||||||
|
writePinLow(B3);
|
||||||
|
}
|
||||||
|
return state;
|
||||||
|
}
|
||||||
@@ -36,7 +36,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7 }
|
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7 }
|
||||||
|
|
||||||
// Encoder support
|
// Encoder support
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
#define ENCODERS_PAD_A { D2 }
|
#define ENCODERS_PAD_A { D2 }
|
||||||
#define ENCODERS_PAD_B { D6 }
|
#define ENCODERS_PAD_B { D6 }
|
||||||
|
|
||||||
|
|||||||
@@ -41,8 +41,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define MATRIX_ROW_PINS { C6, E6, B5, D7, B4 }
|
#define MATRIX_ROW_PINS { C6, E6, B5, D7, B4 }
|
||||||
#define MATRIX_COL_PINS { F4, F5, F6, F7, B3, B1, B2 }
|
#define MATRIX_COL_PINS { F4, F5, F6, F7, B3, B1, B2 }
|
||||||
|
|
||||||
#define NUMBER_OF_ENCODERS 1
|
|
||||||
|
|
||||||
#define ENCODERS_PAD_A { D4 }
|
#define ENCODERS_PAD_A { D4 }
|
||||||
#define ENCODERS_PAD_B { D2 }
|
#define ENCODERS_PAD_B { D2 }
|
||||||
|
|
||||||
|
|||||||
Loaded 100 of 128 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user