Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
552b1cccec | ||
|
|
11c4c71131 | ||
|
|
79d495f51d | ||
|
|
ca56c2145f | ||
|
|
704a2e8d3c | ||
|
|
e745144836 | ||
|
|
352bef99a9 | ||
|
|
6d7745a110 | ||
|
|
bf57587e62 | ||
|
|
47dcda1087 | ||
|
|
a2b650df47 | ||
|
|
9374c0c9db | ||
|
|
ab3fbfdb3b | ||
|
|
7e99d869de | ||
|
|
00b6f14821 | ||
|
|
5694e7b6a6 | ||
|
|
cf19cb0dbe | ||
|
|
387bd555c7 | ||
|
|
f69333a0e5 | ||
|
|
4665e4ffff | ||
|
|
fbc6bd8266 | ||
|
|
91bfbb6256 | ||
|
|
dedbc37196 | ||
|
|
8e3330bbf6 | ||
|
|
877c285ec8 | ||
|
|
4fffef8853 | ||
|
|
ea17e363a6 | ||
|
|
26d2ef2ad1 | ||
|
|
f775168c4f | ||
|
|
6c086f2b6d | ||
|
|
0d1e0a0d97 | ||
|
|
6f6d28fa8d | ||
|
|
9ca73a9edc | ||
|
|
78b48371aa | ||
|
|
efc88a0b16 | ||
|
|
6c6897f778 | ||
|
|
ae31eb564a |
No files matched your search
Vendored
+1
-1
@@ -59,7 +59,7 @@ Vagrant.configure(2) do |config|
|
|||||||
# add a # before ,args: and run 'vagrant up' to get a working
|
# add a # before ,args: and run 'vagrant up' to get a working
|
||||||
# non-updated box and then attempt to troubleshoot or open a Github issue
|
# non-updated box and then attempt to troubleshoot or open a Github issue
|
||||||
|
|
||||||
config.vm.provision "shell", run: "always", path: "./util/install_dependencies.sh", args: "-update"
|
config.vm.provision "shell", run: "always", path: "./util/qmk_install.sh", args: "-update"
|
||||||
|
|
||||||
config.vm.post_up_message = <<-EOT
|
config.vm.post_up_message = <<-EOT
|
||||||
|
|
||||||
|
|||||||
+11
-1
@@ -17,7 +17,7 @@ or just:
|
|||||||
|
|
||||||
Note that running `make` with `sudo` is generally *not* a good idea, and you should use one of the former methods, if possible.
|
Note that running `make` with `sudo` is generally *not* a good idea, and you should use one of the former methods, if possible.
|
||||||
|
|
||||||
## Linux `udev` Rules
|
### Linux `udev` Rules
|
||||||
On Linux, you'll need proper privileges to access the MCU. You can either use
|
On Linux, you'll need proper privileges to access the MCU. You can either use
|
||||||
`sudo` when flashing firmware, or place these files in `/etc/udev/rules.d/`.
|
`sudo` when flashing firmware, or place these files in `/etc/udev/rules.d/`.
|
||||||
|
|
||||||
@@ -37,6 +37,14 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="066
|
|||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Unknown Device for DFU Bootloader
|
||||||
|
|
||||||
|
If you're using Windows to flash your keyboard, and you are running into issues, check the Device Manager. If you see an "Unknown Device" when the keyboard is in "bootloader mode", then you may have a driver issue.
|
||||||
|
|
||||||
|
Re-running the installation script for MSYS2 may help (eg run `./util/qmk_install.sh` from MSYS2/WSL) or reinstalling the QMK Toolbox may fix the issue.
|
||||||
|
|
||||||
|
If that doesn't work, then you may need to grab the [Zadig Utility](https://zadig.akeo.ie/). Download this, find the device in question, and select the `WinUS(libusb-1.0)` option, and hit "Reinstall driver". Once you've done that, try flashing your board, again.
|
||||||
|
|
||||||
## WINAVR is Obsolete
|
## WINAVR is Obsolete
|
||||||
It is no longer recommended and may cause some problem.
|
It is no longer recommended and may cause some problem.
|
||||||
See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
|
See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
|
||||||
@@ -97,10 +105,12 @@ The solution is to remove and reinstall all affected modules.
|
|||||||
```
|
```
|
||||||
brew rm avr-gcc
|
brew rm avr-gcc
|
||||||
brew rm dfu-programmer
|
brew rm dfu-programmer
|
||||||
|
brew rm dfu-util
|
||||||
brew rm gcc-arm-none-eabi
|
brew rm gcc-arm-none-eabi
|
||||||
brew rm avrdude
|
brew rm avrdude
|
||||||
brew install avr-gcc
|
brew install avr-gcc
|
||||||
brew install dfu-programmer
|
brew install dfu-programmer
|
||||||
|
brew install dfu-util
|
||||||
brew install gcc-arm-none-eabi
|
brew install gcc-arm-none-eabi
|
||||||
brew install avrdude
|
brew install avrdude
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Your keymap can include keycodes that are more advanced than normal, for example keys that switch layers or send modifiers when held, but send regular keycodes when tapped. This page documents the functions that are available to you.
|
Your keymap can include keycodes that are more advanced than normal, for example keys that switch layers or send modifiers when held, but send regular keycodes when tapped. This page documents the functions that are available to you.
|
||||||
|
|
||||||
### Assigning Custom Names
|
## Assigning Custom Names
|
||||||
|
|
||||||
People often define custom names using `#define`. For example:
|
People often define custom names using `#define`. For example:
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ People often define custom names using `#define`. For example:
|
|||||||
|
|
||||||
This will allow you to use `FN_CAPS` and `ALT_TAB` in your `KEYMAP()`, keeping it more readable.
|
This will allow you to use `FN_CAPS` and `ALT_TAB` in your `KEYMAP()`, keeping it more readable.
|
||||||
|
|
||||||
### Caveats
|
## Caveats
|
||||||
|
|
||||||
Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored.
|
Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored.
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ These functions allow you to activate layers in various ways. Note that layers a
|
|||||||
|
|
||||||
Care must be taken when switching layers, it's possible to lock yourself into a layer with no way to deactivate that layer (without unplugging your keyboard.) We've created some guidelines to help users avoid the most common problems.
|
Care must be taken when switching layers, it's possible to lock yourself into a layer with no way to deactivate that layer (without unplugging your keyboard.) We've created some guidelines to help users avoid the most common problems.
|
||||||
|
|
||||||
### Beginners
|
## Beginners
|
||||||
|
|
||||||
If you are just getting started with QMK you will want to keep everything simple. Follow these guidelines when setting up your layers:
|
If you are just getting started with QMK you will want to keep everything simple. Follow these guidelines when setting up your layers:
|
||||||
|
|
||||||
@@ -44,11 +44,11 @@ If you are just getting started with QMK you will want to keep everything simple
|
|||||||
* Arrange your layers in a "tree" layout, with layer 0 as the root. Do not try to enter the same layer from more than one other layer.
|
* Arrange your layers in a "tree" layout, with layer 0 as the root. Do not try to enter the same layer from more than one other layer.
|
||||||
* In a layer's keymap, only reference higher-numbered layers. Because layers are processed from the highest-numbered (topmost) active layer down, modifying the state of lower layers can be tricky and error-prone.
|
* In a layer's keymap, only reference higher-numbered layers. Because layers are processed from the highest-numbered (topmost) active layer down, modifying the state of lower layers can be tricky and error-prone.
|
||||||
|
|
||||||
### Intermediate Users
|
## Intermediate Users
|
||||||
|
|
||||||
Sometimes you need more than one base layer. For example, if you want to switch between QWERTY and Dvorak, switch between layouts for different countries, or switch your layout for different videogames. Your base layers should always be the lowest numbered layers. When you have multiple base layers you should always treat them as mutually exclusive. When one base layer is on the others are off.
|
Sometimes you need more than one base layer. For example, if you want to switch between QWERTY and Dvorak, switch between layouts for different countries, or switch your layout for different videogames. Your base layers should always be the lowest numbered layers. When you have multiple base layers you should always treat them as mutually exclusive. When one base layer is on the others are off.
|
||||||
|
|
||||||
### Advanced Users
|
## Advanced Users
|
||||||
|
|
||||||
Once you have a good feel for how layers work and what you can do, you can get more creative. The rules listed in the beginner section will help you be successful by avoiding some of the tricker details but they can be constraining, especially for ultra-compact keyboard users. Understanding how layers work will allow you to use them in more advanced ways.
|
Once you have a good feel for how layers work and what you can do, you can get more creative. The rules listed in the beginner section will help you be successful by avoiding some of the tricker details but they can be constraining, especially for ultra-compact keyboard users. Understanding how layers work will allow you to use them in more advanced ways.
|
||||||
|
|
||||||
@@ -126,6 +126,14 @@ For convenience, QMK includes some Mod-Tap shortcuts to make common combinations
|
|||||||
|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|
|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|
||||||
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
|
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
|
||||||
|
|
||||||
|
## Caveats
|
||||||
|
|
||||||
|
Unfortunately, these keycodes cannot be used in Mod-Taps or Layer-Taps, since any modifiers specified in the keycode are ignored.
|
||||||
|
|
||||||
|
Additionally, you may run into issues when using Remote Desktop Connection on Windows. Because these codes send shift very fast, Remote Desktop may miss the codes.
|
||||||
|
|
||||||
|
To fix this, open Remote Desktop Connection, click on "Show Options", open the the "Local Resources" tab. In the keyboard section, change the drop down to "On this Computer". This will fix the issue, and allow the characters to work correctly.
|
||||||
|
|
||||||
# One Shot Keys
|
# One Shot Keys
|
||||||
|
|
||||||
One shot keys are keys that remain active until the next key is pressed, and then are released. This allows you to type keyboard combinations without pressing more than one key at a time. These keys are usually called "Sticky keys" or "Dead keys".
|
One shot keys are keys that remain active until the next key is pressed, and then are released. This allows you to type keyboard combinations without pressing more than one key at a time. These keys are usually called "Sticky keys" or "Dead keys".
|
||||||
@@ -146,7 +154,7 @@ You can control the behavior of one shot keys by defining these in `config.h`:
|
|||||||
|
|
||||||
Sometimes, you want to activate a one-shot layer as part of a macro or tap dance routine. To do this, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `set_oneshot_layer(ONESHOT_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`. For more complicated actions, take a look at the oneshot implementation in [`process_record`](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action.c#L429).
|
Sometimes, you want to activate a one-shot layer as part of a macro or tap dance routine. To do this, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `set_oneshot_layer(ONESHOT_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`. For more complicated actions, take a look at the oneshot implementation in [`process_record`](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action.c#L429).
|
||||||
|
|
||||||
If you're having issues with OSM translating over Remote Desktop Connection, this can be fixed by opening the settings, going to the "Local Resources" tap, and in the keyboard section, change the drop down to "On this Computer". This will fix the issue and allow OSM to function properly over Remote Desktop.
|
If you're having issues with OSM translating over Remote Desktop Connection, this can be fixed by clicking on "Show Options", going to the "Local Resources" tab, and in the keyboard section, change the drop down to "On this Computer". This will fix the issue and allow OSM to function properly over Remote Desktop.
|
||||||
|
|
||||||
# Permissive Hold
|
# Permissive Hold
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Note: If it is your first time here, Check out the "Complete Newbs guide" instea
|
|||||||
|
|
||||||
## Linux
|
## Linux
|
||||||
|
|
||||||
To ensure you are always up to date, you can just run `sudo util/install_dependencies.sh`. That should always install all the dependencies needed. **This will run `apt-get upgrade`.**
|
To ensure you are always up to date, you can just run `sudo util/qmk_install.sh`. That should always install all the dependencies needed. **This will run `apt-get upgrade`.**
|
||||||
|
|
||||||
You can also install things manually, but this documentation might not be always up to date with all requirements.
|
You can also install things manually, but this documentation might not be always up to date with all requirements.
|
||||||
|
|
||||||
@@ -58,10 +58,11 @@ If you're using [homebrew,](http://brew.sh/) you can use the following commands:
|
|||||||
brew update
|
brew update
|
||||||
brew install avr-gcc@7
|
brew install avr-gcc@7
|
||||||
brew install dfu-programmer
|
brew install dfu-programmer
|
||||||
|
brew install dfu-util
|
||||||
brew install gcc-arm-none-eabi
|
brew install gcc-arm-none-eabi
|
||||||
brew install avrdude
|
brew install avrdude
|
||||||
|
|
||||||
This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of avr-libc can take over 20 minutes and exhibit high CPU usage.
|
This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of `avr-gcc@7` can take over 20 minutes and exhibit high CPU usage.
|
||||||
|
|
||||||
## Windows with msys2 (recommended)
|
## Windows with msys2 (recommended)
|
||||||
|
|
||||||
@@ -69,9 +70,9 @@ The best environment to use, for Windows Vista through any later version (tested
|
|||||||
|
|
||||||
* Install msys2 by downloading it and following the instructions here: http://www.msys2.org
|
* Install msys2 by downloading it and following the instructions here: http://www.msys2.org
|
||||||
* Open the ``MSYS2 MingGW 64-bit`` shortcut
|
* Open the ``MSYS2 MingGW 64-bit`` shortcut
|
||||||
* Navigate to your qmk checkout. For example, if it's in the root of your c drive:
|
* Navigate to your QMK repository. For example, if it's in the root of your c drive:
|
||||||
* `$ cd /c/qmk_firmware`
|
* `$ cd /c/qmk_firmware`
|
||||||
* Run `util/msys2_install.sh` and follow the prompts
|
* Run `util/qmk_install.sh` and follow the prompts
|
||||||
|
|
||||||
## Windows 10 (deprecated)
|
## Windows 10 (deprecated)
|
||||||
These are the old instructions for Windows 10. We recommend you use [MSYS2 as outlined above](#windows-with-msys2-recommended).
|
These are the old instructions for Windows 10. We recommend you use [MSYS2 as outlined above](#windows-with-msys2-recommended).
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ Do change the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` lines to accurately r
|
|||||||
#define DESCRIPTION A custom keyboard
|
#define DESCRIPTION A custom keyboard
|
||||||
```
|
```
|
||||||
|
|
||||||
?> Note: On Windows and macOS the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` fields will be displayed in the list of USB devices. On Linux these values will not be visible in `lsusb`, since Linux takes that information from the list published by the USB-IF.
|
?> Note: On Windows and macOS the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` fields will be displayed in the list of USB devices. ?> On Linux these values will not be visible in lsusb by default, since Linux takes the information from the list maintained by [USB ID Repository](http://www.linux-usb.org/usb-ids.html) by default. lsusb will show the information reported by the device when executed with -v option. It is also present in kernel logs after plugging in the device.
|
||||||
|
|
||||||
### Keyboard Matrix Configuration
|
### Keyboard Matrix Configuration
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ These keycodes correspond to characters that are "shifted" on a standard US ANSI
|
|||||||
|
|
||||||
Unfortunately, these keycodes cannot be used in Mod-Taps or Layer-Taps, since any modifiers specified in the keycode are ignored.
|
Unfortunately, these keycodes cannot be used in Mod-Taps or Layer-Taps, since any modifiers specified in the keycode are ignored.
|
||||||
|
|
||||||
|
Additionally, you may run into issues when using Remote Desktop Connection on Windows. Because these codes send shift very fast, Remote Desktop may miss the codes.
|
||||||
|
|
||||||
|
To fix this, open Remote Desktop Connection, click on "Show Options", open the the "Local Resources" tab. In the keyboard section, change the drop down to "On this Computer". This will fix the issue, and allow the characters to work correctly.
|
||||||
|
|
||||||
## Keycodes
|
## Keycodes
|
||||||
|
|
||||||
|Key |Aliases |Description |
|
|Key |Aliases |Description |
|
||||||
|
|||||||
@@ -69,7 +69,4 @@ void ws2812_sendarray_mask(uint8_t *array,uint16_t length, uint8_t pinmask);
|
|||||||
#define CONCAT_EXP(a, b) CONCAT(a, b)
|
#define CONCAT_EXP(a, b) CONCAT(a, b)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// #define ws2812_PORTREG CONCAT_EXP(PORT,ws2812_port)
|
|
||||||
// #define ws2812_DDRREG CONCAT_EXP(DDR,ws2812_port)
|
|
||||||
|
|
||||||
#endif /* LIGHT_WS2812_H_ */
|
#endif /* LIGHT_WS2812_H_ */
|
||||||
+2
-2
@@ -35,7 +35,7 @@
|
|||||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, ___, ___, ___, ___, ___}, \
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, ___, ___, ___, ___, ___}, \
|
||||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, ___, ___, ___, ___, ___}, \
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, ___, ___, ___, ___, ___}, \
|
||||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, ___, ___, ___, ___, ___}, \
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, ___, ___, ___, ___, ___}, \
|
||||||
{ K30, K31, K32, K33, K34, K35, K35, K37, K38, K39, ___, ___, ___, ___, ___}, \
|
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, ___, ___, ___, ___, ___}, \
|
||||||
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, ___, ___, ___, ___, ___} \
|
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, ___, ___, ___, ___, ___} \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e}, \
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e}, \
|
||||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e}, \
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e}, \
|
||||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e}, \
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e}, \
|
||||||
{ K30, K31, K32, K33, K34, K35, K35, K37, K38, K39, K3a, K3b, K3c, K3d, K3e}, \
|
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3c, K3d, K3e}, \
|
||||||
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4a, K4b, K4c, K4d, K4e} \
|
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4a, K4b, K4c, K4d, K4e} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,11 +39,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
/* ws2812 RGB LED */
|
/* ws2812 RGB LED */
|
||||||
#define RGB_DI_PIN F7
|
#define RGB_DI_PIN F7
|
||||||
#define RGBLIGHT_TIMER
|
|
||||||
#define RGBLIGHT_ANIMATIONS
|
#define RGBLIGHT_ANIMATIONS
|
||||||
#define RGBLED_NUM 6 // Number of LEDs
|
#define RGBLED_NUM 6 // Number of LEDs
|
||||||
#define ws2812_PORTREG PORTD
|
|
||||||
#define ws2812_DDRREG DDRD
|
|
||||||
|
|
||||||
/* COL2ROW or ROW2COL */
|
/* COL2ROW or ROW2COL */
|
||||||
#define DIODE_DIRECTION COL2ROW
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|||||||
@@ -39,10 +39,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
/* ws2812 RGB LED */
|
/* ws2812 RGB LED */
|
||||||
#define RGB_DI_PIN F7
|
#define RGB_DI_PIN F7
|
||||||
#define RGBLIGHT_TIMER
|
|
||||||
#define RGBLED_NUM 1 // Number of LEDs
|
#define RGBLED_NUM 1 // Number of LEDs
|
||||||
#define ws2812_PORTREG PORTD
|
|
||||||
#define ws2812_DDRREG DDRD
|
|
||||||
|
|
||||||
/* COL2ROW or ROW2COL */
|
/* COL2ROW or ROW2COL */
|
||||||
#define DIODE_DIRECTION COL2ROW
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Build Options
|
# Build Options
|
||||||
# change to "no" to disable the options, or define them in the Makefile in
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
@@ -13,14 +13,11 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
#define ws2812_PORTREG PORTD
|
|
||||||
#define ws2812_DDRREG DDRD
|
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
include ../../../../Makefile
|
include ../../../../Makefile
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Build Options
|
# Build Options
|
||||||
# change to "no" to disable the options, or define them in the Makefile in
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
@@ -13,15 +13,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
#define ws2812_PORTREG PORTD
|
|
||||||
#define ws2812_DDRREG DDRD
|
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../../Makefile
|
|
||||||
endif
|
|
||||||
@@ -13,15 +13,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
#define ws2812_PORTREG PORTD
|
|
||||||
#define ws2812_DDRREG DDRD
|
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../../Makefile
|
|
||||||
endif
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Build Options
|
# Build Options
|
||||||
# change to "no" to disable the options, or define them in the Makefile in
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
@@ -13,15 +13,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
#define ws2812_PORTREG PORTD
|
|
||||||
#define ws2812_DDRREG DDRD
|
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../../Makefile
|
|
||||||
endif
|
|
||||||
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
# 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
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = yes # Audio output on port C6
|
AUDIO_ENABLE = yes # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
# 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
|
||||||
@@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
# 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
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = yes # Unicode
|
UNICODE_ENABLE = yes # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
/* ws2812 RGB LED */
|
/* ws2812 RGB LED */
|
||||||
#define RGB_DI_PIN B4
|
#define RGB_DI_PIN B4
|
||||||
#define RGBLIGHT_TIMER
|
|
||||||
#define RGBLED_NUM 20 // Number of LEDs
|
#define RGBLED_NUM 20 // Number of LEDs
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
# 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
|
||||||
|
|
||||||
|
|||||||
@@ -26,10 +26,12 @@ void matrix_init_user(void) {
|
|||||||
|
|
||||||
__attribute__ ((weak))
|
__attribute__ ((weak))
|
||||||
void matrix_scan_user(void) {
|
void matrix_scan_user(void) {
|
||||||
|
#if defined(RGBLIGHT_ENABLE)
|
||||||
if (runonce && timer_elapsed(my_timer) > 1000) {
|
if (runonce && timer_elapsed(my_timer) > 1000) {
|
||||||
runonce = false;
|
runonce = false;
|
||||||
rgblight_sethsv_noeeprom(0x0, 0xff, 0x80);
|
rgblight_sethsv_noeeprom(0x0, 0xff, 0x80);
|
||||||
rgblight_mode_noeeprom(9);
|
rgblight_mode_noeeprom(9);
|
||||||
rgblight_enable_noeeprom();
|
rgblight_enable_noeeprom();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,6 @@
|
|||||||
#define MATRIX_ROW_PINS { B4 }
|
#define MATRIX_ROW_PINS { B4 }
|
||||||
#undef MATRIX_COL_PINS
|
#undef MATRIX_COL_PINS
|
||||||
#define MATRIX_COL_PINS { B6 }
|
#define MATRIX_COL_PINS { B6 }
|
||||||
//#define UNUSED_PINS
|
|
||||||
|
|
||||||
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
|
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
|
||||||
#undef DIODE_DIRECTION
|
#undef DIODE_DIRECTION
|
||||||
@@ -32,14 +31,12 @@
|
|||||||
#define BACKLIGHT_LEVELS 3
|
#define BACKLIGHT_LEVELS 3
|
||||||
#define BREATHING_PERIOD 5
|
#define BREATHING_PERIOD 5
|
||||||
|
|
||||||
/* for Tap Dance */
|
|
||||||
#undef TAPPING_TERM
|
|
||||||
#define TAPPING_TERM 700
|
|
||||||
|
|
||||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
//#define DEBOUNCING_DELAY 5
|
|
||||||
#undef DEBOUNCING_DELAY
|
#undef DEBOUNCING_DELAY
|
||||||
#define DEBOUNCING_DELAY 2
|
#define DEBOUNCING_DELAY 5
|
||||||
|
|
||||||
// set flashing LED with QMK DFU
|
// set flashing LED with QMK DFU
|
||||||
#define QMK_LED B0
|
#define QMK_LED B0
|
||||||
|
|
||||||
|
// set audio pin
|
||||||
|
#define C6_AUDIO
|
||||||
@@ -20,8 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
[0] = LAYOUT( /* Base */
|
[0] = LAYOUT( /* Base */
|
||||||
TD(CAD_TD) \
|
TD(CAD_TD) \
|
||||||
),
|
),
|
||||||
};
|
[1] = LAYOUT( /*Secondary*/
|
||||||
|
TD(BSW_TAP_DANCE) \
|
||||||
void led_set_user(uint8_t usb_led) {
|
),
|
||||||
|
};
|
||||||
}
|
|
||||||
@@ -1,7 +1,16 @@
|
|||||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
|
|
||||||
|
|
||||||
#If using a ProMicro and it has the QMK DFU bootloader instead of Caterina,
|
#If using a ProMicro and it has the QMK DFU bootloader instead of Caterina,
|
||||||
#run "make <keyboard>:<keymap> dfu=qmk" when compiling to ensure it is flagged properly after being flashed
|
#run "make <keyboard>:<keymap> dfu=qmk" when compiling to ensure it is flagged properly after being flashed
|
||||||
ifeq ($(strip $(dfu)), qmk)
|
ifeq ($(strip $(dfu)), qmk)
|
||||||
BOOTLOADER = qmk-dfu
|
BOOTLOADER = qmk-dfu
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
AUDIO_ENABLE = yes # Audio output on port C6
|
||||||
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||||
|
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
|
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
|
||||||
@@ -51,11 +51,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
/* ws2812 RGB LED */
|
/* ws2812 RGB LED */
|
||||||
#define RGB_DI_PIN B1
|
#define RGB_DI_PIN B1
|
||||||
#define RGBLIGHT_TIMER
|
|
||||||
#define RGBLED_NUM 4
|
|
||||||
#define ws2812_PORTREG PORTB
|
|
||||||
#define ws2812_DDRREG DDRB
|
|
||||||
|
|
||||||
|
#define RGBLED_NUM 4
|
||||||
#define RGBLIGHT_HUE_STEP 10
|
#define RGBLIGHT_HUE_STEP 10
|
||||||
#define RGBLIGHT_SAT_STEP 17
|
#define RGBLIGHT_SAT_STEP 17
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,211 @@
|
|||||||
|
/**
|
||||||
|
* Backlighting code for PS2AVRGB boards (ATMEGA32A)
|
||||||
|
* Kenneth A. (github.com/krusli | krusli.me)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "backlight.h"
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
|
||||||
|
#include "backlight_custom.h"
|
||||||
|
#include "breathing_custom.h"
|
||||||
|
|
||||||
|
// DEBUG
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// Port D: digital pins of the AVR chipset
|
||||||
|
#define NUMLOCK_PORT (1 << 0) // D0
|
||||||
|
#define CAPSLOCK_PORT (1 << 1) // D1
|
||||||
|
#define BACKLIGHT_PORT (1 << 4) // D4
|
||||||
|
#define SCROLLLOCK_PORT (1 << 6) // D6
|
||||||
|
|
||||||
|
#define TIMER_CLK_DIV64 0x03 ///< Timer clocked at F_CPU/64
|
||||||
|
#define TIMER1PRESCALE TIMER_CLK_DIV64 ///< timer 1 prescaler default
|
||||||
|
|
||||||
|
#define TIMER_PRESCALE_MASK 0x07 ///< Timer Prescaler Bit-Mask
|
||||||
|
|
||||||
|
#define PWM_MAX 0xFF
|
||||||
|
#define TIMER_TOP 255 // 8 bit PWM
|
||||||
|
|
||||||
|
extern backlight_config_t backlight_config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* References
|
||||||
|
* Port Registers: https://www.arduino.cc/en/Reference/PortManipulation
|
||||||
|
* TCCR1A: https://electronics.stackexchange.com/questions/92350/what-is-the-difference-between-tccr1a-and-tccr1b
|
||||||
|
* Timers: http://www.avrbeginners.net/architecture/timers/timers.html
|
||||||
|
* 16-bit timer setup: http://sculland.com/ATmega168/Interrupts-And-Timers/16-Bit-Timer-Setup/
|
||||||
|
* PS2AVRGB firmware: https://github.com/showjean/ps2avrU/tree/master/firmware
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @Override
|
||||||
|
// turn LEDs on and off depending on USB caps/num/scroll lock states.
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void led_set_user(uint8_t usb_led) {
|
||||||
|
if (usb_led & (1 << USB_LED_NUM_LOCK)) {
|
||||||
|
// turn on
|
||||||
|
DDRD |= NUMLOCK_PORT;
|
||||||
|
PORTD |= NUMLOCK_PORT;
|
||||||
|
} else {
|
||||||
|
// turn off
|
||||||
|
DDRD &= ~NUMLOCK_PORT;
|
||||||
|
PORTD &= ~NUMLOCK_PORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||||
|
DDRD |= CAPSLOCK_PORT;
|
||||||
|
PORTD |= CAPSLOCK_PORT;
|
||||||
|
} else {
|
||||||
|
DDRD &= ~CAPSLOCK_PORT;
|
||||||
|
PORTD &= ~CAPSLOCK_PORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
|
||||||
|
DDRD |= SCROLLLOCK_PORT;
|
||||||
|
PORTD |= SCROLLLOCK_PORT;
|
||||||
|
} else {
|
||||||
|
DDRD &= ~SCROLLLOCK_PORT;
|
||||||
|
PORTD &= ~SCROLLLOCK_PORT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
|
||||||
|
// sets up Timer 1 for 8-bit PWM
|
||||||
|
void timer1PWMSetup(void) { // NOTE ONLY CALL THIS ONCE
|
||||||
|
// default 8 bit mode
|
||||||
|
TCCR1A &= ~(1 << 1); // cbi(TCCR1A,PWM11); <- set PWM11 bit to HIGH
|
||||||
|
TCCR1A |= (1 << 0); // sbi(TCCR1A,PWM10); <- set PWM10 bit to LOW
|
||||||
|
|
||||||
|
// clear output compare value A
|
||||||
|
// outb(OCR1AH, 0);
|
||||||
|
// outb(OCR1AL, 0);
|
||||||
|
|
||||||
|
// clear output comparator registers for B
|
||||||
|
OCR1BH = 0; // outb(OCR1BH, 0);
|
||||||
|
OCR1BL = 0; // outb(OCR1BL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_init = false;
|
||||||
|
void timer1Init(void) {
|
||||||
|
// timer1SetPrescaler(TIMER1PRESCALE)
|
||||||
|
// set to DIV/64
|
||||||
|
(TCCR1B) = ((TCCR1B) & ~TIMER_PRESCALE_MASK) | TIMER1PRESCALE;
|
||||||
|
|
||||||
|
// reset TCNT1
|
||||||
|
TCNT1H = 0; // outb(TCNT1H, 0);
|
||||||
|
TCNT1L = 0; // outb(TCNT1L, 0);
|
||||||
|
|
||||||
|
// TOIE1: Timer Overflow Interrupt Enable (Timer 1);
|
||||||
|
TIMSK |= _BV(TOIE1); // sbi(TIMSK, TOIE1);
|
||||||
|
|
||||||
|
is_init = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void timer1UnInit(void) {
|
||||||
|
// set prescaler back to NONE
|
||||||
|
(TCCR1B) = ((TCCR1B) & ~TIMER_PRESCALE_MASK) | 0x00; // TIMERRTC_CLK_STOP
|
||||||
|
|
||||||
|
// disable timer overflow interrupt
|
||||||
|
TIMSK &= ~_BV(TOIE1); // overflow bit?
|
||||||
|
|
||||||
|
setPWM(0);
|
||||||
|
|
||||||
|
is_init = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// handle TCNT1 overflow
|
||||||
|
//! Interrupt handler for tcnt1 overflow interrupt
|
||||||
|
ISR(TIMER1_OVF_vect, ISR_NOBLOCK)
|
||||||
|
{
|
||||||
|
// sei();
|
||||||
|
// handle breathing here
|
||||||
|
#ifdef BACKLIGHT_BREATHING
|
||||||
|
if (is_breathing()) {
|
||||||
|
custom_breathing_handler();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// enable timer 1 PWM
|
||||||
|
// timer1PWMBOn()
|
||||||
|
void timer1PWMBEnable(void) {
|
||||||
|
// turn on channel B (OC1B) PWM output
|
||||||
|
// set OC1B as non-inverted PWM
|
||||||
|
TCCR1A |= _BV(COM1B1);
|
||||||
|
TCCR1A &= ~_BV(COM1B0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// disable timer 1 PWM
|
||||||
|
// timer1PWMBOff()
|
||||||
|
void timer1PWMBDisable(void) {
|
||||||
|
TCCR1A &= ~_BV(COM1B1);
|
||||||
|
TCCR1A &= ~_BV(COM1B0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void enableBacklight(void) {
|
||||||
|
DDRD |= BACKLIGHT_PORT; // set digital pin 4 as output
|
||||||
|
PORTD |= BACKLIGHT_PORT; // set digital pin 4 to high
|
||||||
|
}
|
||||||
|
|
||||||
|
void disableBacklight(void) {
|
||||||
|
// DDRD &= ~BACKLIGHT_PORT; // set digital pin 4 as input
|
||||||
|
PORTD &= ~BACKLIGHT_PORT; // set digital pin 4 to low
|
||||||
|
}
|
||||||
|
|
||||||
|
void startPWM(void) {
|
||||||
|
timer1Init();
|
||||||
|
timer1PWMBEnable();
|
||||||
|
enableBacklight();
|
||||||
|
}
|
||||||
|
|
||||||
|
void stopPWM(void) {
|
||||||
|
timer1UnInit();
|
||||||
|
disableBacklight();
|
||||||
|
timer1PWMBDisable();
|
||||||
|
}
|
||||||
|
|
||||||
|
void b_led_init_ports(void) {
|
||||||
|
/* turn backlight on/off depending on user preference */
|
||||||
|
#if BACKLIGHT_ON_STATE == 0
|
||||||
|
// DDRx register: sets the direction of Port D
|
||||||
|
// DDRD &= ~BACKLIGHT_PORT; // set digital pin 4 as input
|
||||||
|
PORTD &= ~BACKLIGHT_PORT; // set digital pin 4 to low
|
||||||
|
#else
|
||||||
|
DDRD |= BACKLIGHT_PORT; // set digital pin 4 as output
|
||||||
|
PORTD |= BACKLIGHT_PORT; // set digital pin 4 to high
|
||||||
|
#endif
|
||||||
|
|
||||||
|
timer1PWMSetup();
|
||||||
|
startPWM();
|
||||||
|
|
||||||
|
#ifdef BACKLIGHT_BREATHING
|
||||||
|
breathing_enable();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void b_led_set(uint8_t level) {
|
||||||
|
if (level > BACKLIGHT_LEVELS) {
|
||||||
|
level = BACKLIGHT_LEVELS;
|
||||||
|
}
|
||||||
|
|
||||||
|
setPWM((int)(TIMER_TOP * (float) level / BACKLIGHT_LEVELS));
|
||||||
|
}
|
||||||
|
|
||||||
|
// called every matrix scan
|
||||||
|
void b_led_task(void) {
|
||||||
|
// do nothing for now
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPWM(uint16_t xValue) {
|
||||||
|
if (xValue > TIMER_TOP) {
|
||||||
|
xValue = TIMER_TOP;
|
||||||
|
}
|
||||||
|
OCR1B = xValue; // timer1PWMBSet(xValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // BACKLIGHT_ENABLE
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Backlighting code for PS2AVRGB boards (ATMEGA32A)
|
||||||
|
* Kenneth A. (github.com/krusli | krusli.me)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
void b_led_init_ports(void);
|
||||||
|
void b_led_set(uint8_t level);
|
||||||
|
void b_led_task(void);
|
||||||
|
void setPWM(uint16_t xValue);
|
||||||
|
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "bminiex.h"
|
||||||
|
#include "rgblight.h"
|
||||||
|
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "i2c.h"
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#include "backlight.h"
|
||||||
|
#include "backlight_custom.h"
|
||||||
|
|
||||||
|
// for keyboard subdirectory level init functions
|
||||||
|
// @Override
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
// call user level keymaps, if any
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
/// Overrides functions in `quantum.c`
|
||||||
|
void backlight_init_ports(void) {
|
||||||
|
b_led_init_ports();
|
||||||
|
}
|
||||||
|
|
||||||
|
void backlight_task(void) {
|
||||||
|
b_led_task();
|
||||||
|
}
|
||||||
|
|
||||||
|
void backlight_set(uint8_t level) {
|
||||||
|
b_led_set(level);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
extern rgblight_config_t rgblight_config;
|
||||||
|
|
||||||
|
// custom RGB driver
|
||||||
|
void rgblight_set(void) {
|
||||||
|
if (!rgblight_config.enable) {
|
||||||
|
for (uint8_t i=0; i<RGBLED_NUM; i++) {
|
||||||
|
led[i].r = 0;
|
||||||
|
led[i].g = 0;
|
||||||
|
led[i].b = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_init();
|
||||||
|
i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool rgb_init = false;
|
||||||
|
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
// if LEDs were previously on before poweroff, turn them back on
|
||||||
|
if (rgb_init == false && rgblight_config.enable) {
|
||||||
|
i2c_init();
|
||||||
|
i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
|
||||||
|
rgb_init = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
rgblight_task();
|
||||||
|
#else
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
#endif
|
||||||
|
matrix_scan_user();
|
||||||
|
/* Nothing else for now. */
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__((weak)) // overridable
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__((weak)) // overridable
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \
|
||||||
|
K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \
|
||||||
|
K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, K63, K73, K83, \
|
||||||
|
K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KC2, KD2, KE0, K62, K72, K82, K92, \
|
||||||
|
K01, K30, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, K61, K71, K81, \
|
||||||
|
K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96, K60, K80, K90 \
|
||||||
|
){ \
|
||||||
|
{ K00, K10, K20, K30, KC_NO, KC_NO, K60, KC_NO, K80, K90, KC_NO, KB0, KC0, KD0, KE0 }, \
|
||||||
|
{ K01, K11, K21, K31, K41, K51, K61, K71, K81, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \
|
||||||
|
{ K02, K12, K22, K32, K42, K52, K62, K72, K82, K92, KA2, KB2, KC2, KD2, KE2 }, \
|
||||||
|
{ K03, K13, K23, K33, K43, K53, K63, K73, K83, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \
|
||||||
|
{ K04, K14, K24, K34, K44, K54, K64, K74, K84, K94, KA4, KB4, KC4, KC_NO, KE4 }, \
|
||||||
|
{ K05, KC_NO, K25, K35, K45, K55, K65, K75, K85, K95, KC_NO, KB5, KC5, KD5, KE5 }, \
|
||||||
|
{ K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \
|
||||||
|
{ K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_kc( \
|
||||||
|
K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \
|
||||||
|
K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \
|
||||||
|
K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, K63, K73, K83, \
|
||||||
|
K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KC2, KD2, KE0, K62, K72, K82, K92, \
|
||||||
|
K01, K30, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, K61, K71, K81, \
|
||||||
|
K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96, K60, K80, K90 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ KC_##K00, KC_##K10, KC_##K20, KC_##K30, KC_NO, KC_NO, KC_##K60, KC_NO, KC_##K80, KC_##K90, KC_NO, KC_##KB0, KC_##KC0, KC_##KD0, KC_##KE0 }, \
|
||||||
|
{ KC_##K01, KC_##K11, KC_##K21, KC_##K31, KC_##K41, KC_##K51, KC_##K61, KC_##K71, KC_##K81, KC_NO, KC_##KA1, KC_##KB1, KC_NO, KC_##KD1, KC_##KE1 }, \
|
||||||
|
{ KC_##K02, KC_##K12, KC_##K22, KC_##K32, KC_##K42, KC_##K52, KC_##K62, KC_##K72, KC_##K82, KC_##K92, KC_##KA2, KC_##KB2, KC_##KC2, KC_##KD2, KC_##KE2 }, \
|
||||||
|
{ KC_##K03, KC_##K13, KC_##K23, KC_##K33, KC_##K43, KC_##K53, KC_##K63, KC_##K73, KC_##K83, KC_NO, KC_##KA3, KC_##KB3, KC_##KC3, KC_##KD3, KC_NO }, \
|
||||||
|
{ KC_##K04, KC_##K14, KC_##K24, KC_##K34, KC_##K44, KC_##K54, KC_##K64, KC_##K74, KC_##K84, KC_##K94, KC_##KA4, KC_##KB4, KC_##KC4, KC_NO, KC_##KE4 }, \
|
||||||
|
{ KC_##K05, KC_NO, KC_##K25, KC_##K35, KC_##K45, KC_##K55, KC_##K65, KC_##K75, KC_##K85, KC_##K95, KC_NO, KC_##KB5, KC_##KC5, KC_##KD5, KC_##KE5 }, \
|
||||||
|
{ KC_##K06, KC_##K16, KC_##K26, KC_##K36, KC_##K46, KC_##K56, KC_##K66, KC_##K76, KC_##K86, KC_##K96, KC_##KA6, KC_##KB6, KC_##KC6, KC_##KD6, KC_##KE6 }, \
|
||||||
|
{ KC_##K07, KC_##K17, KC_##K27, KC_##K37, KC_##K47, KC_##K57, KC_##K67, KC_##K77, KC_NO, KC_NO, KC_##KA7, KC_##KB7, KC_##KC7, KC_##KD7, KC_##KE7 } \
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
/**
|
||||||
|
* Breathing effect code for PS2AVRGB boards (ATMEGA32A)
|
||||||
|
* Works in conjunction with `backlight.c`.
|
||||||
|
*
|
||||||
|
* Code adapted from `quantum.c` to register with the existing TIMER1 overflow
|
||||||
|
* handler in `backlight.c` instead of setting up its own timer.
|
||||||
|
* Kenneth A. (github.com/krusli | krusli.me)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
#ifdef BACKLIGHT_BREATHING
|
||||||
|
|
||||||
|
#include "backlight_custom.h"
|
||||||
|
|
||||||
|
#ifndef BREATHING_PERIOD
|
||||||
|
#define BREATHING_PERIOD 6
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define breathing_min() do {breathing_counter = 0;} while (0)
|
||||||
|
#define breathing_max() do {breathing_counter = breathing_period * 244 / 2;} while (0)
|
||||||
|
|
||||||
|
// TODO make this share code with quantum.c
|
||||||
|
|
||||||
|
#define BREATHING_NO_HALT 0
|
||||||
|
#define BREATHING_HALT_OFF 1
|
||||||
|
#define BREATHING_HALT_ON 2
|
||||||
|
#define BREATHING_STEPS 128
|
||||||
|
|
||||||
|
static uint8_t breathing_period = BREATHING_PERIOD;
|
||||||
|
static uint8_t breathing_halt = BREATHING_NO_HALT;
|
||||||
|
static uint16_t breathing_counter = 0;
|
||||||
|
|
||||||
|
static bool breathing = false;
|
||||||
|
|
||||||
|
bool is_breathing(void) {
|
||||||
|
return breathing;
|
||||||
|
}
|
||||||
|
|
||||||
|
// See http://jared.geek.nz/2013/feb/linear-led-pwm
|
||||||
|
static uint16_t cie_lightness(uint16_t v) {
|
||||||
|
if (v <= 5243) // if below 8% of max
|
||||||
|
return v / 9; // same as dividing by 900%
|
||||||
|
else {
|
||||||
|
uint32_t y = (((uint32_t) v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
|
||||||
|
// to get a useful result with integer division, we shift left in the expression above
|
||||||
|
// and revert what we've done again after squaring.
|
||||||
|
y = y * y * y >> 8;
|
||||||
|
if (y > 0xFFFFUL) // prevent overflow
|
||||||
|
return 0xFFFFU;
|
||||||
|
else
|
||||||
|
return (uint16_t) y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void breathing_enable(void) {
|
||||||
|
breathing = true;
|
||||||
|
breathing_counter = 0;
|
||||||
|
breathing_halt = BREATHING_NO_HALT;
|
||||||
|
// interrupt already registered
|
||||||
|
}
|
||||||
|
|
||||||
|
void breathing_pulse(void) {
|
||||||
|
if (get_backlight_level() == 0)
|
||||||
|
breathing_min();
|
||||||
|
else
|
||||||
|
breathing_max();
|
||||||
|
breathing_halt = BREATHING_HALT_ON;
|
||||||
|
// breathing_interrupt_enable();
|
||||||
|
breathing = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void breathing_disable(void) {
|
||||||
|
breathing = false;
|
||||||
|
// backlight_set(get_backlight_level());
|
||||||
|
b_led_set(get_backlight_level()); // custom implementation of backlight_set()
|
||||||
|
}
|
||||||
|
|
||||||
|
void breathing_self_disable(void)
|
||||||
|
{
|
||||||
|
if (get_backlight_level() == 0)
|
||||||
|
breathing_halt = BREATHING_HALT_OFF;
|
||||||
|
else
|
||||||
|
breathing_halt = BREATHING_HALT_ON;
|
||||||
|
}
|
||||||
|
|
||||||
|
void breathing_toggle(void) {
|
||||||
|
if (is_breathing())
|
||||||
|
breathing_disable();
|
||||||
|
else
|
||||||
|
breathing_enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
void breathing_period_set(uint8_t value)
|
||||||
|
{
|
||||||
|
if (!value)
|
||||||
|
value = 1;
|
||||||
|
breathing_period = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void breathing_period_default(void) {
|
||||||
|
breathing_period_set(BREATHING_PERIOD);
|
||||||
|
}
|
||||||
|
|
||||||
|
void breathing_period_inc(void)
|
||||||
|
{
|
||||||
|
breathing_period_set(breathing_period+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void breathing_period_dec(void)
|
||||||
|
{
|
||||||
|
breathing_period_set(breathing_period-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* To generate breathing curve in python:
|
||||||
|
* from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
|
||||||
|
*/
|
||||||
|
static const uint8_t breathing_table[BREATHING_STEPS] PROGMEM = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
|
// Use this before the cie_lightness function.
|
||||||
|
static inline uint16_t scale_backlight(uint16_t v) {
|
||||||
|
return v / BACKLIGHT_LEVELS * get_backlight_level();
|
||||||
|
}
|
||||||
|
|
||||||
|
void custom_breathing_handler(void) {
|
||||||
|
uint16_t interval = (uint16_t) breathing_period * 244 / BREATHING_STEPS;
|
||||||
|
// resetting after one period to prevent ugly reset at overflow.
|
||||||
|
breathing_counter = (breathing_counter + 1) % (breathing_period * 244);
|
||||||
|
uint8_t index = breathing_counter / interval % BREATHING_STEPS;
|
||||||
|
|
||||||
|
if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) ||
|
||||||
|
((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1)))
|
||||||
|
{
|
||||||
|
// breathing_interrupt_disable();
|
||||||
|
}
|
||||||
|
|
||||||
|
setPWM(cie_lightness(scale_backlight((uint16_t) pgm_read_byte(&breathing_table[index]) * 0x0101U)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // BACKLIGHT_BREATHING
|
||||||
|
#endif // BACKLIGHT_ENABLE
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
#define VENDOR_ID 0x20A0
|
||||||
|
#define PRODUCT_ID 0x422E
|
||||||
|
#define MANUFACTURER winkeyless.kr
|
||||||
|
#define PRODUCT B.mini Ex
|
||||||
|
|
||||||
|
#define RGBLED_NUM 20
|
||||||
|
|
||||||
|
/* matrix size */
|
||||||
|
#define MATRIX_ROWS 8
|
||||||
|
#define MATRIX_COLS 15
|
||||||
|
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
|
||||||
|
#define BACKLIGHT_LEVELS 5
|
||||||
|
|
||||||
|
#define NO_UART 1
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
|
||||||
|
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 Luiz Ribeiro <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Please do not modify this file
|
||||||
|
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <util/twi.h>
|
||||||
|
|
||||||
|
#include "i2c.h"
|
||||||
|
|
||||||
|
void i2c_set_bitrate(uint16_t bitrate_khz) {
|
||||||
|
uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
|
||||||
|
if (bitrate_div >= 16) {
|
||||||
|
bitrate_div = (bitrate_div - 16) / 2;
|
||||||
|
}
|
||||||
|
TWBR = bitrate_div;
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_init(void) {
|
||||||
|
// set pull-up resistors on I2C bus pins
|
||||||
|
PORTC |= 0b11;
|
||||||
|
|
||||||
|
i2c_set_bitrate(400);
|
||||||
|
|
||||||
|
// enable TWI (two-wire interface)
|
||||||
|
TWCR |= (1 << TWEN);
|
||||||
|
|
||||||
|
// enable TWI interrupt and slave address ACK
|
||||||
|
TWCR |= (1 << TWIE);
|
||||||
|
TWCR |= (1 << TWEA);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_start(uint8_t address) {
|
||||||
|
// reset TWI control register
|
||||||
|
TWCR = 0;
|
||||||
|
|
||||||
|
// begin transmission and wait for it to end
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
|
||||||
|
while (!(TWCR & (1<<TWINT)));
|
||||||
|
|
||||||
|
// check if the start condition was successfully transmitted
|
||||||
|
if ((TWSR & 0xF8) != TW_START) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// transmit address and wait
|
||||||
|
TWDR = address;
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||||
|
while (!(TWCR & (1<<TWINT)));
|
||||||
|
|
||||||
|
// check if the device has acknowledged the READ / WRITE mode
|
||||||
|
uint8_t twst = TW_STATUS & 0xF8;
|
||||||
|
if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_stop(void) {
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_write(uint8_t data) {
|
||||||
|
TWDR = data;
|
||||||
|
|
||||||
|
// transmit data and wait
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||||
|
while (!(TWCR & (1<<TWINT)));
|
||||||
|
|
||||||
|
if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
|
||||||
|
if (i2c_start(address)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint16_t i = 0; i < length; i++) {
|
||||||
|
if (i2c_write(data[i])) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_stop();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 Luiz Ribeiro <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Please do not modify this file
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
void i2c_init(void);
|
||||||
|
void i2c_set_bitrate(uint16_t bitrate_khz);
|
||||||
|
uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
|
||||||
|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_HOME,KC_END, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_DEL, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_NO, KC_INS, KC_P7, KC_P8, KC_P9,
|
||||||
|
KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PPLS,
|
||||||
|
KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3,
|
||||||
|
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_APP ,KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT, KC_PENT
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "backlight.h"
|
||||||
|
|
||||||
|
#ifndef DEBOUNCE
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static uint8_t debouncing = DEBOUNCE;
|
||||||
|
|
||||||
|
static matrix_row_t matrix[MATRIX_ROWS];
|
||||||
|
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_init_user(void) {}
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_user(void) {}
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init(void) {
|
||||||
|
// all outputs for rows high
|
||||||
|
DDRB = 0xFF;
|
||||||
|
PORTB = 0xFF;
|
||||||
|
// all inputs for columns
|
||||||
|
DDRA = 0x00;
|
||||||
|
DDRC &= ~(0x111111<<2);
|
||||||
|
DDRD &= ~(1<<PIND7);
|
||||||
|
// all columns are pulled-up
|
||||||
|
PORTA = 0xFF;
|
||||||
|
PORTC |= (0b111111<<2);
|
||||||
|
PORTD |= (1<<PIND7);
|
||||||
|
|
||||||
|
// initialize matrix state: all keys off
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
matrix[row] = 0x00;
|
||||||
|
matrix_debouncing[row] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix_init_quantum();
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_set_row_status(uint8_t row) {
|
||||||
|
DDRB = (1 << row);
|
||||||
|
PORTB = ~(1 << row);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t bit_reverse(uint8_t x) {
|
||||||
|
x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
|
||||||
|
x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
|
||||||
|
x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_scan(void) {
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
matrix_set_row_status(row);
|
||||||
|
_delay_us(5);
|
||||||
|
|
||||||
|
matrix_row_t cols = (
|
||||||
|
// cols 0..7, PORTA 0 -> 7
|
||||||
|
(~PINA) & 0xFF
|
||||||
|
) | (
|
||||||
|
// cols 8..13, PORTC 7 -> 0
|
||||||
|
bit_reverse((~PINC) & 0xFF) << 8
|
||||||
|
) | (
|
||||||
|
// col 14, PORTD 7
|
||||||
|
((~PIND) & (1 << PIND7)) << 7
|
||||||
|
);
|
||||||
|
|
||||||
|
if (matrix_debouncing[row] != cols) {
|
||||||
|
matrix_debouncing[row] = cols;
|
||||||
|
debouncing = DEBOUNCE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (debouncing) {
|
||||||
|
if (--debouncing) {
|
||||||
|
_delay_ms(1);
|
||||||
|
} else {
|
||||||
|
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||||
|
matrix[i] = matrix_debouncing[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix_scan_quantum();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline matrix_row_t matrix_get_row(uint8_t row) {
|
||||||
|
return matrix[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_print(void) {
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
B.mini EX
|
||||||
|
=========
|
||||||
|
|
||||||
|
A compact fullsize keyboard with RGB
|
||||||
|
|
||||||
|
Keyboard Maintainer: QMK Community
|
||||||
|
Hardware Supported: B.mini EX PCB
|
||||||
|
Hardware Availability: https://winkeyless.kr/product/b-mini-ex-x2-pcb/
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make bminiex: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,56 @@
|
|||||||
|
# Copyright 2017 Luiz Ribeiro <[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/>.
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
MCU = atmega32a
|
||||||
|
PROTOCOL = VUSB
|
||||||
|
|
||||||
|
# unsupported features for now
|
||||||
|
NO_UART = yes
|
||||||
|
NO_SUSPEND_POWER_DOWN = yes
|
||||||
|
|
||||||
|
# processor frequency
|
||||||
|
F_CPU = 12000000
|
||||||
|
|
||||||
|
# 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 = bootloadHID
|
||||||
|
|
||||||
|
# build options
|
||||||
|
BOOTMAGIC_ENABLE = yes
|
||||||
|
MOUSEKEY_ENABLE = yes
|
||||||
|
EXTRAKEY_ENABLE = yes
|
||||||
|
CONSOLE_ENABLE = no
|
||||||
|
DEBUG_ENABLE = no
|
||||||
|
COMMAND_ENABLE = no
|
||||||
|
BACKLIGHT_ENABLE = yes
|
||||||
|
BACKLIGHT_CUSTOM_DRIVER = yes
|
||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
|
RGBLIGHT_CUSTOM_DRIVER = yes
|
||||||
|
TAP_DANCE_ENABLE = 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
|
||||||
|
|
||||||
|
OPT_DEFS = -DDEBUG_LEVEL=0
|
||||||
|
|
||||||
|
# custom matrix setup
|
||||||
|
CUSTOM_MATRIX = yes
|
||||||
|
SRC = matrix.c i2c.c backlight.c
|
||||||
|
|
||||||
|
# programming options
|
||||||
|
PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
|
||||||
@@ -0,0 +1,396 @@
|
|||||||
|
/* Name: usbconfig.h
|
||||||
|
* Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
|
||||||
|
* Author: Christian Starkjohann
|
||||||
|
* Creation Date: 2005-04-01
|
||||||
|
* Tabsize: 4
|
||||||
|
* Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
|
||||||
|
* License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
|
||||||
|
* This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __usbconfig_h_included__
|
||||||
|
#define __usbconfig_h_included__
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
General Description:
|
||||||
|
This file is an example configuration (with inline documentation) for the USB
|
||||||
|
driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
|
||||||
|
also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
|
||||||
|
wire the lines to any other port, as long as D+ is also wired to INT0 (or any
|
||||||
|
other hardware interrupt, as long as it is the highest level interrupt, see
|
||||||
|
section at the end of this file).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ---------------------------- Hardware Config ---------------------------- */
|
||||||
|
|
||||||
|
#define USB_CFG_IOPORTNAME D
|
||||||
|
/* This is the port where the USB bus is connected. When you configure it to
|
||||||
|
* "B", the registers PORTB, PINB and DDRB will be used.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DMINUS_BIT 3
|
||||||
|
/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
|
||||||
|
* This may be any bit in the port.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DPLUS_BIT 2
|
||||||
|
/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
|
||||||
|
* This may be any bit in the port. Please note that D+ must also be connected
|
||||||
|
* to interrupt pin INT0! [You can also use other interrupts, see section
|
||||||
|
* "Optional MCU Description" below, or you can connect D- to the interrupt, as
|
||||||
|
* it is required if you use the USB_COUNT_SOF feature. If you use D- for the
|
||||||
|
* interrupt, the USB interrupt will also be triggered at Start-Of-Frame
|
||||||
|
* markers every millisecond.]
|
||||||
|
*/
|
||||||
|
#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
|
||||||
|
/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
|
||||||
|
* 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
|
||||||
|
* require no crystal, they tolerate +/- 1% deviation from the nominal
|
||||||
|
* frequency. All other rates require a precision of 2000 ppm and thus a
|
||||||
|
* crystal!
|
||||||
|
* Since F_CPU should be defined to your actual clock rate anyway, you should
|
||||||
|
* not need to modify this setting.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_CHECK_CRC 0
|
||||||
|
/* Define this to 1 if you want that the driver checks integrity of incoming
|
||||||
|
* data packets (CRC checks). CRC checks cost quite a bit of code size and are
|
||||||
|
* currently only available for 18 MHz crystal clock. You must choose
|
||||||
|
* USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ----------------------- Optional Hardware Config ------------------------ */
|
||||||
|
|
||||||
|
/* #define USB_CFG_PULLUP_IOPORTNAME D */
|
||||||
|
/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
|
||||||
|
* V+, you can connect and disconnect the device from firmware by calling
|
||||||
|
* the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
|
||||||
|
* This constant defines the port on which the pullup resistor is connected.
|
||||||
|
*/
|
||||||
|
/* #define USB_CFG_PULLUP_BIT 4 */
|
||||||
|
/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
|
||||||
|
* above) where the 1.5k pullup resistor is connected. See description
|
||||||
|
* above for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* --------------------------- Functional Range ---------------------------- */
|
||||||
|
|
||||||
|
#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
|
||||||
|
/* Define this to 1 if you want to compile a version with two endpoints: The
|
||||||
|
* default control endpoint 0 and an interrupt-in endpoint (any other endpoint
|
||||||
|
* number).
|
||||||
|
*/
|
||||||
|
#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1
|
||||||
|
/* Define this to 1 if you want to compile a version with three endpoints: The
|
||||||
|
* default control endpoint 0, an interrupt-in endpoint 3 (or the number
|
||||||
|
* configured below) and a catch-all default interrupt-in endpoint as above.
|
||||||
|
* You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_EP3_NUMBER 3
|
||||||
|
/* If the so-called endpoint 3 is used, it can now be configured to any other
|
||||||
|
* endpoint number (except 0) with this macro. Default if undefined is 3.
|
||||||
|
*/
|
||||||
|
/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
|
||||||
|
/* The above macro defines the startup condition for data toggling on the
|
||||||
|
* interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
|
||||||
|
* Since the token is toggled BEFORE sending any data, the first packet is
|
||||||
|
* sent with the oposite value of this configuration!
|
||||||
|
*/
|
||||||
|
#define USB_CFG_IMPLEMENT_HALT 0
|
||||||
|
/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
|
||||||
|
* for endpoint 1 (interrupt endpoint). Although you may not need this feature,
|
||||||
|
* it is required by the standard. We have made it a config option because it
|
||||||
|
* bloats the code considerably.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_SUPPRESS_INTR_CODE 0
|
||||||
|
/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
|
||||||
|
* want to send any data over them. If this macro is defined to 1, functions
|
||||||
|
* usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
|
||||||
|
* you need the interrupt-in endpoints in order to comply to an interface
|
||||||
|
* (e.g. HID), but never want to send any data. This option saves a couple
|
||||||
|
* of bytes in flash memory and the transmit buffers in RAM.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_INTR_POLL_INTERVAL 1
|
||||||
|
/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
|
||||||
|
* interval. The value is in milliseconds and must not be less than 10 ms for
|
||||||
|
* low speed devices.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_IS_SELF_POWERED 0
|
||||||
|
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
|
||||||
|
* device is powered from the USB bus.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_MAX_BUS_POWER 500
|
||||||
|
/* Set this variable to the maximum USB bus power consumption of your device.
|
||||||
|
* The value is in milliamperes. [It will be divided by two since USB
|
||||||
|
* communicates power requirements in units of 2 mA.]
|
||||||
|
*/
|
||||||
|
#define USB_CFG_IMPLEMENT_FN_WRITE 1
|
||||||
|
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
|
||||||
|
* transfers. Set it to 0 if you don't need it and want to save a couple of
|
||||||
|
* bytes.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_IMPLEMENT_FN_READ 0
|
||||||
|
/* Set this to 1 if you need to send control replies which are generated
|
||||||
|
* "on the fly" when usbFunctionRead() is called. If you only want to send
|
||||||
|
* data from a static buffer, set it to 0 and return the data from
|
||||||
|
* usbFunctionSetup(). This saves a couple of bytes.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
|
||||||
|
/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
|
||||||
|
* You must implement the function usbFunctionWriteOut() which receives all
|
||||||
|
* interrupt/bulk data sent to any endpoint other than 0. The endpoint number
|
||||||
|
* can be found in 'usbRxToken'.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_HAVE_FLOWCONTROL 0
|
||||||
|
/* Define this to 1 if you want flowcontrol over USB data. See the definition
|
||||||
|
* of the macros usbDisableAllRequests() and usbEnableAllRequests() in
|
||||||
|
* usbdrv.h.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DRIVER_FLASH_PAGE 0
|
||||||
|
/* If the device has more than 64 kBytes of flash, define this to the 64 k page
|
||||||
|
* where the driver's constants (descriptors) are located. Or in other words:
|
||||||
|
* Define this to 1 for boot loaders on the ATMega128.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_LONG_TRANSFERS 0
|
||||||
|
/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
|
||||||
|
* in a single control-in or control-out transfer. Note that the capability
|
||||||
|
* for long transfers increases the driver size.
|
||||||
|
*/
|
||||||
|
/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
|
||||||
|
/* This macro is a hook if you want to do unconventional things. If it is
|
||||||
|
* defined, it's inserted at the beginning of received message processing.
|
||||||
|
* If you eat the received message and don't want default processing to
|
||||||
|
* proceed, do a return after doing your things. One possible application
|
||||||
|
* (besides debugging) is to flash a status LED on each packet.
|
||||||
|
*/
|
||||||
|
/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
|
||||||
|
/* This macro is a hook if you need to know when an USB RESET occurs. It has
|
||||||
|
* one parameter which distinguishes between the start of RESET state and its
|
||||||
|
* end.
|
||||||
|
*/
|
||||||
|
/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
|
||||||
|
/* This macro (if defined) is executed when a USB SET_ADDRESS request was
|
||||||
|
* received.
|
||||||
|
*/
|
||||||
|
#define USB_COUNT_SOF 1
|
||||||
|
/* define this macro to 1 if you need the global variable "usbSofCount" which
|
||||||
|
* counts SOF packets. This feature requires that the hardware interrupt is
|
||||||
|
* connected to D- instead of D+.
|
||||||
|
*/
|
||||||
|
/* #ifdef __ASSEMBLER__
|
||||||
|
* macro myAssemblerMacro
|
||||||
|
* in YL, TCNT0
|
||||||
|
* sts timer0Snapshot, YL
|
||||||
|
* endm
|
||||||
|
* #endif
|
||||||
|
* #define USB_SOF_HOOK myAssemblerMacro
|
||||||
|
* This macro (if defined) is executed in the assembler module when a
|
||||||
|
* Start Of Frame condition is detected. It is recommended to define it to
|
||||||
|
* the name of an assembler macro which is defined here as well so that more
|
||||||
|
* than one assembler instruction can be used. The macro may use the register
|
||||||
|
* YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
|
||||||
|
* immediately after an SOF pulse may be lost and must be retried by the host.
|
||||||
|
* What can you do with this hook? Since the SOF signal occurs exactly every
|
||||||
|
* 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
|
||||||
|
* designs running on the internal RC oscillator.
|
||||||
|
* Please note that Start Of Frame detection works only if D- is wired to the
|
||||||
|
* interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
|
||||||
|
*/
|
||||||
|
#define USB_CFG_CHECK_DATA_TOGGLING 0
|
||||||
|
/* define this macro to 1 if you want to filter out duplicate data packets
|
||||||
|
* sent by the host. Duplicates occur only as a consequence of communication
|
||||||
|
* errors, when the host does not receive an ACK. Please note that you need to
|
||||||
|
* implement the filtering yourself in usbFunctionWriteOut() and
|
||||||
|
* usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
|
||||||
|
* for each control- and out-endpoint to check for duplicate packets.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
|
||||||
|
/* define this macro to 1 if you want the function usbMeasureFrameLength()
|
||||||
|
* compiled in. This function can be used to calibrate the AVR's RC oscillator.
|
||||||
|
*/
|
||||||
|
#define USB_USE_FAST_CRC 0
|
||||||
|
/* The assembler module has two implementations for the CRC algorithm. One is
|
||||||
|
* faster, the other is smaller. This CRC routine is only used for transmitted
|
||||||
|
* messages where timing is not critical. The faster routine needs 31 cycles
|
||||||
|
* per byte while the smaller one needs 61 to 69 cycles. The faster routine
|
||||||
|
* may be worth the 32 bytes bigger code size if you transmit lots of data and
|
||||||
|
* run the AVR close to its limit.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* -------------------------- Device Description --------------------------- */
|
||||||
|
|
||||||
|
#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
|
||||||
|
/* USB vendor ID for the device, low byte first. If you have registered your
|
||||||
|
* own Vendor ID, define it here. Otherwise you may use one of obdev's free
|
||||||
|
* shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
|
||||||
|
* *** IMPORTANT NOTE ***
|
||||||
|
* This template uses obdev's shared VID/PID pair for Vendor Class devices
|
||||||
|
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
|
||||||
|
* the implications!
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
|
||||||
|
/* This is the ID of the product, low byte first. It is interpreted in the
|
||||||
|
* scope of the vendor ID. If you have registered your own VID with usb.org
|
||||||
|
* or if you have licensed a PID from somebody else, define it here. Otherwise
|
||||||
|
* you may use one of obdev's free shared VID/PID pairs. See the file
|
||||||
|
* USB-IDs-for-free.txt for details!
|
||||||
|
* *** IMPORTANT NOTE ***
|
||||||
|
* This template uses obdev's shared VID/PID pair for Vendor Class devices
|
||||||
|
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
|
||||||
|
* the implications!
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DEVICE_VERSION 0x00, 0x02
|
||||||
|
/* Version number of the device: Minor number first, then major number.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_VENDOR_NAME 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
|
||||||
|
#define USB_CFG_VENDOR_NAME_LEN 13
|
||||||
|
/* These two values define the vendor name returned by the USB device. The name
|
||||||
|
* must be given as a list of characters under single quotes. The characters
|
||||||
|
* are interpreted as Unicode (UTF-16) entities.
|
||||||
|
* If you don't want a vendor name string, undefine these macros.
|
||||||
|
* ALWAYS define a vendor name containing your Internet domain name if you use
|
||||||
|
* obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
|
||||||
|
* details.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DEVICE_NAME 'p', 's', '2', 'a', 'v', 'r', 'G', 'B'
|
||||||
|
#define USB_CFG_DEVICE_NAME_LEN 8
|
||||||
|
/* Same as above for the device name. If you don't want a device name, undefine
|
||||||
|
* the macros. See the file USB-IDs-for-free.txt before you assign a name if
|
||||||
|
* you use a shared VID/PID.
|
||||||
|
*/
|
||||||
|
/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
|
||||||
|
/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
|
||||||
|
/* Same as above for the serial number. If you don't want a serial number,
|
||||||
|
* undefine the macros.
|
||||||
|
* It may be useful to provide the serial number through other means than at
|
||||||
|
* compile time. See the section about descriptor properties below for how
|
||||||
|
* to fine tune control over USB descriptors such as the string descriptor
|
||||||
|
* for the serial number.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DEVICE_CLASS 0
|
||||||
|
#define USB_CFG_DEVICE_SUBCLASS 0
|
||||||
|
/* See USB specification if you want to conform to an existing device class.
|
||||||
|
* Class 0xff is "vendor specific".
|
||||||
|
*/
|
||||||
|
#define USB_CFG_INTERFACE_CLASS 3 /* HID */
|
||||||
|
#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
|
||||||
|
#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
|
||||||
|
/* See USB specification if you want to conform to an existing device class or
|
||||||
|
* protocol. The following classes must be set at interface level:
|
||||||
|
* HID class is 3, no subclass and protocol required (but may be useful!)
|
||||||
|
* CDC class is 2, use subclass 2 and protocol 1 for ACM
|
||||||
|
*/
|
||||||
|
#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
|
||||||
|
/* Define this to the length of the HID report descriptor, if you implement
|
||||||
|
* an HID device. Otherwise don't define it or define it to 0.
|
||||||
|
* If you use this define, you must add a PROGMEM character array named
|
||||||
|
* "usbHidReportDescriptor" to your code which contains the report descriptor.
|
||||||
|
* Don't forget to keep the array and this define in sync!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* #define USB_PUBLIC static */
|
||||||
|
/* Use the define above if you #include usbdrv.c instead of linking against it.
|
||||||
|
* This technique saves a couple of bytes in flash memory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ------------------- Fine Control over USB Descriptors ------------------- */
|
||||||
|
/* If you don't want to use the driver's default USB descriptors, you can
|
||||||
|
* provide our own. These can be provided as (1) fixed length static data in
|
||||||
|
* flash memory, (2) fixed length static data in RAM or (3) dynamically at
|
||||||
|
* runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
|
||||||
|
* information about this function.
|
||||||
|
* Descriptor handling is configured through the descriptor's properties. If
|
||||||
|
* no properties are defined or if they are 0, the default descriptor is used.
|
||||||
|
* Possible properties are:
|
||||||
|
* + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
|
||||||
|
* at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
|
||||||
|
* used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
|
||||||
|
* you want RAM pointers.
|
||||||
|
* + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
|
||||||
|
* in static memory is in RAM, not in flash memory.
|
||||||
|
* + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
|
||||||
|
* the driver must know the descriptor's length. The descriptor itself is
|
||||||
|
* found at the address of a well known identifier (see below).
|
||||||
|
* List of static descriptor names (must be declared PROGMEM if in flash):
|
||||||
|
* char usbDescriptorDevice[];
|
||||||
|
* char usbDescriptorConfiguration[];
|
||||||
|
* char usbDescriptorHidReport[];
|
||||||
|
* char usbDescriptorString0[];
|
||||||
|
* int usbDescriptorStringVendor[];
|
||||||
|
* int usbDescriptorStringDevice[];
|
||||||
|
* int usbDescriptorStringSerialNumber[];
|
||||||
|
* Other descriptors can't be provided statically, they must be provided
|
||||||
|
* dynamically at runtime.
|
||||||
|
*
|
||||||
|
* Descriptor properties are or-ed or added together, e.g.:
|
||||||
|
* #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
|
||||||
|
*
|
||||||
|
* The following descriptors are defined:
|
||||||
|
* USB_CFG_DESCR_PROPS_DEVICE
|
||||||
|
* USB_CFG_DESCR_PROPS_CONFIGURATION
|
||||||
|
* USB_CFG_DESCR_PROPS_STRINGS
|
||||||
|
* USB_CFG_DESCR_PROPS_STRING_0
|
||||||
|
* USB_CFG_DESCR_PROPS_STRING_VENDOR
|
||||||
|
* USB_CFG_DESCR_PROPS_STRING_PRODUCT
|
||||||
|
* USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
|
||||||
|
* USB_CFG_DESCR_PROPS_HID
|
||||||
|
* USB_CFG_DESCR_PROPS_HID_REPORT
|
||||||
|
* USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
|
||||||
|
*
|
||||||
|
* Note about string descriptors: String descriptors are not just strings, they
|
||||||
|
* are Unicode strings prefixed with a 2 byte header. Example:
|
||||||
|
* int serialNumberDescriptor[] = {
|
||||||
|
* USB_STRING_DESCRIPTOR_HEADER(6),
|
||||||
|
* 'S', 'e', 'r', 'i', 'a', 'l'
|
||||||
|
* };
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define USB_CFG_DESCR_PROPS_DEVICE 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
|
||||||
|
//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_STRINGS 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_STRING_0 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC
|
||||||
|
//#define USB_CFG_DESCR_PROPS_HID 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC
|
||||||
|
//#define USB_CFG_DESCR_PROPS_HID_REPORT 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_UNKNOWN 0
|
||||||
|
|
||||||
|
#define usbMsgPtr_t unsigned short
|
||||||
|
/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to
|
||||||
|
* a scalar type here because gcc generates slightly shorter code for scalar
|
||||||
|
* arithmetics than for pointer arithmetics. Remove this define for backward
|
||||||
|
* type compatibility or define it to an 8 bit type if you use data in RAM only
|
||||||
|
* and all RAM is below 256 bytes (tiny memory model in IAR CC).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ----------------------- Optional MCU Description ------------------------ */
|
||||||
|
|
||||||
|
/* The following configurations have working defaults in usbdrv.h. You
|
||||||
|
* usually don't need to set them explicitly. Only if you want to run
|
||||||
|
* the driver on a device which is not yet supported or with a compiler
|
||||||
|
* which is not fully supported (such as IAR C) or if you use a differnt
|
||||||
|
* interrupt than INT0, you may have to define some of these.
|
||||||
|
*/
|
||||||
|
/* #define USB_INTR_CFG MCUCR */
|
||||||
|
/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */
|
||||||
|
/* #define USB_INTR_CFG_CLR 0 */
|
||||||
|
/* #define USB_INTR_ENABLE GIMSK */
|
||||||
|
/* #define USB_INTR_ENABLE_BIT INT0 */
|
||||||
|
/* #define USB_INTR_PENDING GIFR */
|
||||||
|
/* #define USB_INTR_PENDING_BIT INTF0 */
|
||||||
|
/* #define USB_INTR_VECTOR INT0_vect */
|
||||||
|
|
||||||
|
/* Set INT1 for D- falling edge to count SOF */
|
||||||
|
/* #define USB_INTR_CFG EICRA */
|
||||||
|
#define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10))
|
||||||
|
/* #define USB_INTR_CFG_CLR 0 */
|
||||||
|
/* #define USB_INTR_ENABLE EIMSK */
|
||||||
|
#define USB_INTR_ENABLE_BIT INT1
|
||||||
|
/* #define USB_INTR_PENDING EIFR */
|
||||||
|
#define USB_INTR_PENDING_BIT INTF1
|
||||||
|
#define USB_INTR_VECTOR INT1_vect
|
||||||
|
|
||||||
|
#endif /* __usbconfig_h_included__ */
|
||||||
@@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ AUDIO_ENABLE = no # Audio output on port C6
|
|||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
UNICODEMAP_ENABLE = yes # unicodemap
|
UNICODEMAP_ENABLE = yes # unicodemap
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
TAP_DANCE_ENABLE = yes
|
TAP_DANCE_ENABLE = yes
|
||||||
LEADER_ENABLE = yes
|
LEADER_ENABLE = yes
|
||||||
|
|||||||
@@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
@@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
TAP_DANCE_ENABLE = yes # see https://docs.qmk.fm/#/feature_tap_dance (+1000)
|
TAP_DANCE_ENABLE = yes # see https://docs.qmk.fm/#/feature_tap_dance (+1000)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
|
|
||||||
CUSTOM_MATRIX = yes
|
CUSTOM_MATRIX = yes
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define DIODE_DIRECTION COL2ROW
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
/* Set 0 if debouncing isn't needed */
|
/* Set 0 if debouncing isn't needed */
|
||||||
#define DEBOUNCING_DELAY 50
|
// #define DEBOUNCING_DELAY 0
|
||||||
|
|
||||||
/* key combination for command */
|
/* key combination for command */
|
||||||
#define IS_COMMAND() ( \
|
#define IS_COMMAND() ( \
|
||||||
|
|||||||
@@ -47,9 +47,7 @@
|
|||||||
#define RGBLIGHT_VAL_STEP 8
|
#define RGBLIGHT_VAL_STEP 8
|
||||||
#endif
|
#endif
|
||||||
#define RGB_DI_PIN D3
|
#define RGB_DI_PIN D3
|
||||||
#define RGBLIGHT_TIMER
|
|
||||||
#define RGBLED_NUM 4
|
#define RGBLED_NUM 4
|
||||||
#define ws2812_PORTREG PORTD
|
|
||||||
#define ws2812_DDRREG DDRD
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
# change to "no" to disable the options, or define them in the makefile.mk in
|
# change to "no" to disable the options, or define them in the makefile.mk in
|
||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
include ../../../../Makefile
|
include ../../../../Makefile
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
ONEHAND_ENABLE = no # Enable one-hand typing
|
ONEHAND_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
# 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
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ COMMAND_ENABLE = no # Commands for debug and configuration
|
|||||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
MIDI_ENABLE = no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
include ../../../../Makefile
|
include ../../../../Makefile
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ AUDIO_ENABLE = no # Audio output on port C6
|
|||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
UNICODEMAP_ENABLE = yes
|
UNICODEMAP_ENABLE = yes
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
PS2_USE_USART = yes
|
PS2_USE_USART = yes
|
||||||
API_SYSEX_ENABLE = no
|
API_SYSEX_ENABLE = no
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ AUDIO_ENABLE = no # Audio output on port C6
|
|||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
UNICODEMAP_ENABLE = yes
|
UNICODEMAP_ENABLE = yes
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
PS2_USE_USART = yes
|
PS2_USE_USART = yes
|
||||||
API_SYSEX_ENABLE = no
|
API_SYSEX_ENABLE = no
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ AUDIO_ENABLE = no # Audio output on port C6
|
|||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
UNICODEMAP_ENABLE = yes
|
UNICODEMAP_ENABLE = yes
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
PS2_USE_USART = yes
|
PS2_USE_USART = yes
|
||||||
API_SYSEX_ENABLE = n
|
API_SYSEX_ENABLE = n
|
||||||
CUSTOM_MATRIX = yes
|
CUSTOM_MATRIX = yes
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ AUDIO_ENABLE = no # Audio output on port C6
|
|||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
UNICODEMAP_ENABLE = yes
|
UNICODEMAP_ENABLE = yes
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
CUSTOM_MATRIX = yes
|
CUSTOM_MATRIX = yes
|
||||||
|
|
||||||
# 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
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
XT to USB keyboard converter
|
||||||
|
==============================
|
||||||
|
This is a port of TMK's converter/xt_usb to QMK.
|
||||||
|
|
||||||
|
This firmware converts XT keyboard protocol to USB.(It supports Scan Code Set 1.)
|
||||||
|
|
||||||
|
|
||||||
|
Connect Wires
|
||||||
|
-------------
|
||||||
|
1. Connect **Vcc** and **GND**.
|
||||||
|
2. Connect **Clock** and **Data** line. **Clock** is on `PD1`, **Data** on `PD0` by default. And optionally you can use `PB7` for **Reset**.(Compatible to Soarer's converter) To change pin configuration edit `config.h`.
|
||||||
|
3. You need pull-up resistor. **1K-10K Ohm** will be OK.
|
||||||
|
|
||||||
|
|
||||||
|
XT keyboard protocol resource
|
||||||
|
------------------------------
|
||||||
|
https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-XT-Keyboard-Protocol
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x6512
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER QMK
|
||||||
|
#define PRODUCT XT keyboard converter
|
||||||
|
#define DESCRIPTION convert XT keyboard to USB
|
||||||
|
|
||||||
|
|
||||||
|
/* matrix size */
|
||||||
|
#define MATRIX_ROWS 16 // keycode bit: 3-0
|
||||||
|
#define MATRIX_COLS 8 // keycode bit: 6-4
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
//#define NO_SUSPEND_POWER_DOWN
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XT Pin interrupt
|
||||||
|
*/
|
||||||
|
#define XT_CLOCK_PORT PORTD
|
||||||
|
#define XT_CLOCK_PIN PIND
|
||||||
|
#define XT_CLOCK_DDR DDRD
|
||||||
|
#define XT_CLOCK_BIT 1
|
||||||
|
#define XT_DATA_PORT PORTD
|
||||||
|
#define XT_DATA_PIN PIND
|
||||||
|
#define XT_DATA_DDR DDRD
|
||||||
|
#define XT_DATA_BIT 0
|
||||||
|
#define XT_RST_PORT PORTB
|
||||||
|
#define XT_RST_PIN PINB
|
||||||
|
#define XT_RST_DDR DDRB
|
||||||
|
#define XT_RST_BIT 7
|
||||||
|
|
||||||
|
/* hard reset: low pulse for 500ms and after that HiZ for safety */
|
||||||
|
#define XT_RESET() do { \
|
||||||
|
XT_RST_PORT &= ~(1<<XT_RST_BIT); \
|
||||||
|
XT_RST_DDR |= (1<<XT_RST_BIT); \
|
||||||
|
_delay_ms(500); \
|
||||||
|
XT_RST_DDR &= ~(1<<XT_RST_BIT); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* INT1 for falling edge of clock line */
|
||||||
|
#define XT_INT_INIT() do { \
|
||||||
|
EICRA |= ((1<<ISC11) | \
|
||||||
|
(0<<ISC10)); \
|
||||||
|
} while (0)
|
||||||
|
/* clears flag and enables interrupt */
|
||||||
|
#define XT_INT_ON() do { \
|
||||||
|
EIFR |= (1<<INTF1); \
|
||||||
|
EIMSK |= (1<<INT1); \
|
||||||
|
} while (0)
|
||||||
|
#define XT_INT_OFF() do { \
|
||||||
|
EIMSK &= ~(1<<INT1); \
|
||||||
|
} while (0)
|
||||||
|
#define XT_INT_VECT INT1_vect
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#pragma once
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* IBM XT keyboard layout
|
||||||
|
* ,-------. ,--------------------------------------------------------------------------.
|
||||||
|
* | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck |
|
||||||
|
* |-------| |--------------------------------------------------------------------------|
|
||||||
|
* | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -|
|
||||||
|
* |-------| |------------------------------------------------------|Ent|---------------|
|
||||||
|
* | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| |
|
||||||
|
* |-------| |----------------------------------------------------------------------| |
|
||||||
|
* | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +|
|
||||||
|
* |-------| |----------------------------------------------------------------------| |
|
||||||
|
* | F9|F10| | Alt | Space |CapsLck| 0 | . | |
|
||||||
|
* `-------' `--------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
LAYOUT_xt( \
|
||||||
|
KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_NLCK, KC_SLCK,
|
||||||
|
KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_P7, KC_P8, KC_P9, KC_PMNS,
|
||||||
|
KC_F5, KC_F6, KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4, KC_P5, KC_P6,
|
||||||
|
KC_F7, KC_F8, KC_LSFT,KC_BSLS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_PSCR,KC_P1, KC_P2, KC_P3, KC_PPLS,
|
||||||
|
KC_F9, KC_F10, KC_LALT, KC_SPC, KC_CAPS, KC_P0, KC_PDOT
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Extended keyboard layout
|
||||||
|
* ,-----------------------------------------------.
|
||||||
|
* |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24|
|
||||||
|
* ,---. |-----------------------------------------------| ,-----------. ,-----------.
|
||||||
|
* |Esc| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|
|
||||||
|
* `---' `-----------------------------------------------' `-----------' `-----------'
|
||||||
|
* ,-----------------------------------------------------------. ,-----------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
|
||||||
|
* |-----------------------------------------------------------| |-----------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +|
|
||||||
|
* |-----------------------------------------------------------| `-----------' |---------------|
|
||||||
|
* |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #|Entr| | 4| 5| 6|KP,|
|
||||||
|
* |-----------------------------------------------------------| ,---. |---------------|
|
||||||
|
* |Shft| <| Z| X| C| V| B| N| M| ,| .| /| RO|Shift | |Up | | 1| 2| 3|KP=|
|
||||||
|
* |-----------------------------------------------------------| ,-----------. |---------------|
|
||||||
|
* |Ctl|Gui|Alt|MHEN| Space |HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent|
|
||||||
|
* `-----------------------------------------------------------' `-----------' `---------------'
|
||||||
|
*/
|
||||||
|
/* Try this if your keyboad has exotic keys.
|
||||||
|
LAYOUT(
|
||||||
|
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
|
||||||
|
KC_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_VOLD,KC_VOLU,KC_MUTE,
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_JYEN,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
|
||||||
|
KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS,KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM,
|
||||||
|
KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
|
||||||
|
KC_LCTL,KC_LGUI,KC_LALT,KC_MHEN, KC_SPC, KC_HENK,KC_KANA,KC_RALT,KC_RGUI,KC_APP, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT,KC_PEQL
|
||||||
|
),
|
||||||
|
*/
|
||||||
|
};
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 Ethan Apodaca <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "led.h"
|
||||||
|
|
||||||
|
void led_set(uint8_t usb_led) {
|
||||||
|
//XT Keyboards do not have LEDs, nothing to do.
|
||||||
|
}
|
||||||
@@ -0,0 +1,309 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2011 Jun Wako <[email protected]>
|
||||||
|
Copyright 2016 Ethan Apodaca <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "action.h"
|
||||||
|
#include "print.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "xt.h"
|
||||||
|
#include "matrix.h"
|
||||||
|
|
||||||
|
|
||||||
|
static void matrix_make(uint8_t code);
|
||||||
|
static void matrix_break(uint8_t code);
|
||||||
|
|
||||||
|
static uint8_t matrix[MATRIX_ROWS];
|
||||||
|
#define ROW(code) (code>>3)
|
||||||
|
#define COL(code) (code&0x07)
|
||||||
|
|
||||||
|
__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) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init(void)
|
||||||
|
{
|
||||||
|
debug_enable = true;
|
||||||
|
xt_host_init();
|
||||||
|
|
||||||
|
// initialize matrix state: all keys off
|
||||||
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
|
||||||
|
|
||||||
|
matrix_init_quantum();
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert E0-escaped codes into unused area
|
||||||
|
static uint8_t move_e0code(uint8_t code) {
|
||||||
|
switch(code) {
|
||||||
|
// Original IBM XT keyboard has these keys
|
||||||
|
case 0x37: return 0x54; // Print Screen
|
||||||
|
case 0x46: return 0x55; // Ctrl + Pause
|
||||||
|
case 0x1C: return 0x6F; // Keypad Enter
|
||||||
|
case 0x35: return 0x7F; // Keypad /
|
||||||
|
|
||||||
|
// Any XT keyobard with these keys?
|
||||||
|
// http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf
|
||||||
|
// https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc
|
||||||
|
case 0x5B: return 0x5A; // Left GUI
|
||||||
|
case 0x5C: return 0x5B; // Right GUI
|
||||||
|
case 0x5D: return 0x5C; // Application
|
||||||
|
case 0x5E: return 0x5D; // Power(not used)
|
||||||
|
case 0x5F: return 0x5E; // Sleep(not used)
|
||||||
|
case 0x63: return 0x5F; // Wake (not used)
|
||||||
|
case 0x48: return 0x60; // Up
|
||||||
|
case 0x4B: return 0x61; // Left
|
||||||
|
case 0x50: return 0x62; // Down
|
||||||
|
case 0x4D: return 0x63; // Right
|
||||||
|
case 0x52: return 0x71; // Insert
|
||||||
|
case 0x53: return 0x72; // Delete
|
||||||
|
case 0x47: return 0x74; // Home
|
||||||
|
case 0x4F: return 0x75; // End
|
||||||
|
case 0x49: return 0x77; // Home
|
||||||
|
case 0x51: return 0x78; // End
|
||||||
|
case 0x1D: return 0x7A; // Right Ctrl
|
||||||
|
case 0x38: return 0x7C; // Right Alt
|
||||||
|
}
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_scan(void)
|
||||||
|
{
|
||||||
|
static enum {
|
||||||
|
INIT,
|
||||||
|
E0,
|
||||||
|
// Pause: E1 1D 45, E1 9D C5
|
||||||
|
E1,
|
||||||
|
E1_1D,
|
||||||
|
E1_9D,
|
||||||
|
} state = INIT;
|
||||||
|
|
||||||
|
uint8_t code = xt_host_recv();
|
||||||
|
if (!code) return 0;
|
||||||
|
xprintf("%02X ", code);
|
||||||
|
switch (state) {
|
||||||
|
case INIT:
|
||||||
|
switch (code) {
|
||||||
|
case 0xE0:
|
||||||
|
state = E0;
|
||||||
|
break;
|
||||||
|
case 0xE1:
|
||||||
|
state = E1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (code < 0x80)
|
||||||
|
matrix_make(code);
|
||||||
|
else
|
||||||
|
matrix_break(code & 0x7F);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case E0:
|
||||||
|
switch (code) {
|
||||||
|
case 0x2A:
|
||||||
|
case 0xAA:
|
||||||
|
case 0x36:
|
||||||
|
case 0xB6:
|
||||||
|
//ignore fake shift
|
||||||
|
state = INIT;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (code < 0x80)
|
||||||
|
matrix_make(move_e0code(code));
|
||||||
|
else
|
||||||
|
matrix_break(move_e0code(code & 0x7F));
|
||||||
|
state = INIT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case E1:
|
||||||
|
switch (code) {
|
||||||
|
case 0x1D:
|
||||||
|
state = E1_1D;
|
||||||
|
break;
|
||||||
|
case 0x9D:
|
||||||
|
state = E1_9D;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
state = INIT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case E1_1D:
|
||||||
|
switch (code) {
|
||||||
|
case 0x45:
|
||||||
|
matrix_make(0x55);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
state = INIT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case E1_9D:
|
||||||
|
switch (code) {
|
||||||
|
case 0x45:
|
||||||
|
matrix_break(0x55);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
state = INIT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
state = INIT;
|
||||||
|
}
|
||||||
|
matrix_scan_quantum();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
uint8_t matrix_get_row(uint8_t row)
|
||||||
|
{
|
||||||
|
return matrix[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
static void matrix_make(uint8_t code)
|
||||||
|
{
|
||||||
|
if (!matrix_is_on(ROW(code), COL(code))) {
|
||||||
|
matrix[ROW(code)] |= 1<<COL(code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
static void matrix_break(uint8_t code)
|
||||||
|
{
|
||||||
|
if (matrix_is_on(ROW(code), COL(code))) {
|
||||||
|
matrix[ROW(code)] &= ~(1<<COL(code));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_clear(void)
|
||||||
|
{
|
||||||
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool matrix_is_on(uint8_t row, uint8_t col)
|
||||||
|
{
|
||||||
|
return (matrix_get_row(row) & (1<<col));
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (MATRIX_COLS <= 8)
|
||||||
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
|
#elif (MATRIX_COLS <= 16)
|
||||||
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
|
#elif (MATRIX_COLS <= 32)
|
||||||
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void matrix_print(void)
|
||||||
|
{
|
||||||
|
print_matrix_header();
|
||||||
|
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
phex(row); print(": ");
|
||||||
|
print_matrix_row(row);
|
||||||
|
print("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
XT Scancodes
|
||||||
|
============
|
||||||
|
- http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf
|
||||||
|
- https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc
|
||||||
|
|
||||||
|
01-53: Normal codes used in original XT keyboard
|
||||||
|
54-7F: Not used in original XT keyboard
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||||
|
50 - - - - * * x x x x * * * o o o
|
||||||
|
60 * * * * x x x x x x x x x x x *
|
||||||
|
70 x * * x * * x * * x * x * x x *
|
||||||
|
|
||||||
|
-: codes existed in original XT keyboard
|
||||||
|
*: E0-escaped codes converted into unused code area(internal use in TMK)
|
||||||
|
x: Non-espcaped codes(not used in real keyboards probably, for CodeSet2-CodeSet1 translation purpose)
|
||||||
|
o: reserved
|
||||||
|
|
||||||
|
Usage in TMK:
|
||||||
|
|
||||||
|
00 (reserved) DO NOT USE
|
||||||
|
54 PrintScr*
|
||||||
|
55 Pause*
|
||||||
|
56 Euro2
|
||||||
|
57 F11
|
||||||
|
58 F12
|
||||||
|
59 Keypad =
|
||||||
|
5A LGUI*
|
||||||
|
5B RGUI*
|
||||||
|
5C APP*
|
||||||
|
5D (reserved)
|
||||||
|
5E (reserved)
|
||||||
|
5F (reserved)
|
||||||
|
60 cursor*
|
||||||
|
61 cursor*
|
||||||
|
62 cursor*
|
||||||
|
63 cursor*
|
||||||
|
64 F13
|
||||||
|
65 F14
|
||||||
|
66 F15
|
||||||
|
67 F16
|
||||||
|
68 F17
|
||||||
|
69 F18
|
||||||
|
6A F19
|
||||||
|
6B F20
|
||||||
|
6C F21
|
||||||
|
6D F22
|
||||||
|
6E F23
|
||||||
|
6F Keypad Enter*
|
||||||
|
70 KANA
|
||||||
|
71 nav*
|
||||||
|
72 nav*
|
||||||
|
73 RO
|
||||||
|
74 nav*
|
||||||
|
75 nav*
|
||||||
|
76 F24
|
||||||
|
77 nav*
|
||||||
|
78 nav*
|
||||||
|
79 HENKAN
|
||||||
|
7A RCTL*
|
||||||
|
7B MUHENKAN
|
||||||
|
7C RALT*
|
||||||
|
7D JPY
|
||||||
|
7E Keypad ,
|
||||||
|
7F Keypad / *
|
||||||
|
|
||||||
|
*/
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
# Bootloader
|
||||||
|
# This indicates which bootloader is present on the board.
|
||||||
|
# BOOTLOADER = caterina # Pro Micro
|
||||||
|
BOOTLOADER = halfkay # Teensy
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
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 = yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||||
|
XT_ENABLE = yes
|
||||||
|
CUSTOM_MATRIX = yes
|
||||||
|
|
||||||
|
|
||||||
|
# Optimize size but this may cause error "relocation truncated to fit"
|
||||||
|
#EXTRALDFLAGS = -Wl,--relax
|
||||||
|
|
||||||
|
SRC = matrix.c led.c
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#include "xt_usb.h"
|
||||||
@@ -0,0 +1,132 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2011,2012,2013 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/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
/* IBM XT keyboard layout
|
||||||
|
* ,-------. ,--------------------------------------------------------------------------.
|
||||||
|
* | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck |
|
||||||
|
* |-------| |--------------------------------------------------------------------------|
|
||||||
|
* | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -|
|
||||||
|
* |-------| |------------------------------------------------------|Ent|---------------|
|
||||||
|
* | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| |
|
||||||
|
* |-------| |----------------------------------------------------------------------| |
|
||||||
|
* | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +|
|
||||||
|
* |-------| |----------------------------------------------------------------------| |
|
||||||
|
* | F9|F10| | Alt | Space |CapsLck| 0 | . | |
|
||||||
|
* `-------' `--------------------------------------------------------------------------'
|
||||||
|
* Scan code set 1
|
||||||
|
* ,-------. ,--------------------------------------------------------------------------.
|
||||||
|
* | 3B| 3C| | 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E | 45 | 46 |
|
||||||
|
* |-------| |--------------------------------------------------------------------------|
|
||||||
|
* | 3D| 3E| | 0F | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B | | 47| 48| 49| 4A|
|
||||||
|
* |-------| |------------------------------------------------------| 1C|---------------|
|
||||||
|
* | 3F| 40| | 1D | 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| | 4B| 4C| 4D| |
|
||||||
|
* |-------| |----------------------------------------------------------------------| |
|
||||||
|
* | 41| 42| | 2A | 2B| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35| 36 |*37| 4F| 50| 51| 4E|
|
||||||
|
* |-------| |----------------------------------------------------------------------| |
|
||||||
|
* | 43| 44| | 38 | 39 | 3A | 52 | 53 | |
|
||||||
|
* `-------' `--------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
#define LAYOUT_xt( \
|
||||||
|
K3B,K3C, K01,K02,K03,K04,K05,K06,K07,K08,K09,K0A,K0B,K0C,K0D,K0E, K45, K46, \
|
||||||
|
K3D,K3E, K0F,K10,K11,K12,K13,K14,K15,K16,K17,K18,K19,K1A,K1B, K47,K48,K49,K4A, \
|
||||||
|
K3F,K40, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K1C,K4B,K4C,K4D, \
|
||||||
|
K41,K42, K2A,K2B,K2C,K2D,K2E,K2F,K30,K31,K32,K33,K34,K35,K36,K54,K4F,K50,K51,K4E, \
|
||||||
|
K43,K44, K38, K39, K3A, K52, K53 \
|
||||||
|
) { \
|
||||||
|
{ KC_NO, K01, K02, K03, K04, K05, K06, K07 }, \
|
||||||
|
{ K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17 }, \
|
||||||
|
{ K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27 }, \
|
||||||
|
{ K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36, KC_NO }, \
|
||||||
|
{ K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
|
||||||
|
{ K40, K41, K42, K43, K44, K45, K46, K47 }, \
|
||||||
|
{ K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \
|
||||||
|
{ K50, K51, K52, K53, K54, KC_NO, KC_NO, KC_NO }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extended keyboard layout
|
||||||
|
* ,-----------------------------------------------.
|
||||||
|
* |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24|
|
||||||
|
* ,---. |-----------------------------------------------| ,-----------. ,-----------.
|
||||||
|
* |Esc| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|
|
||||||
|
* `---' `-----------------------------------------------' `-----------' `-----------'
|
||||||
|
* ,-----------------------------------------------------------. ,-----------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
|
||||||
|
* |-----------------------------------------------------------| |-----------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +|
|
||||||
|
* |-----------------------------------------------------------| `-----------' |---------------|
|
||||||
|
* |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #|Entr| | 4| 5| 6|KP,|
|
||||||
|
* |-----------------------------------------------------------| ,---. |---------------|
|
||||||
|
* |Shft| <| Z| X| C| V| B| N| M| ,| .| /| RO|Shift | |Up | | 1| 2| 3|Ent|
|
||||||
|
* |-----------------------------------------------------------| ,-----------. |---------------|
|
||||||
|
* |Ctl|Gui|Alt|MHEN| Space |HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|KP=|
|
||||||
|
* `-----------------------------------------------------------' `-----------' `---------------'
|
||||||
|
* ,-----------------------------------------------.
|
||||||
|
* | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E| 76|
|
||||||
|
* ,---. |-----------------------------------------------| ,-----------. ,-----------.
|
||||||
|
* | 01| | 3B| 3C| 3D| 3E| 3F| 40| 41| 42| 43| 44| 57| 58| |*37| 46|*45| |e5E|e5F|e63|
|
||||||
|
* `---' `-----------------------------------------------' `-----------' `-----------'
|
||||||
|
* ,-----------------------------------------------------------. ,-----------. ,---------------.
|
||||||
|
* | 29| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 7D| 0E| |e52|e47|e49| | 45|e35| 37| 4A|
|
||||||
|
* |-----------------------------------------------------------| |-----------| |---------------|
|
||||||
|
* | 0F | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 2B | |e53|e4F|e51| | 47| 48| 49| 4E|
|
||||||
|
* |-----------------------------------------------------------| `-----------' |---------------|
|
||||||
|
* | 3A | 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 00| 1C | | 4B| 4C| 4D| 7E|
|
||||||
|
* |-----------------------------------------------------------| ,---. |---------------|
|
||||||
|
* | 2A | 56| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35| 73| 36 | |e48| | 4F| 50| 51|e1C|
|
||||||
|
* |-----------------------------------------------------------| ,-----------. |---------------|
|
||||||
|
* | 1D|e5B| 38| 7B | 39 | 79 | 70 |e38|e5C|e5D|e1D| |e4B|e50|e4D| | 52| 53| 59|
|
||||||
|
* `-----------------------------------------------------------' `-----------' `---------------'
|
||||||
|
* e: E0-escaped codes
|
||||||
|
* *: special handling codes
|
||||||
|
*/
|
||||||
|
#define LAYOUT( \
|
||||||
|
K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D,K6E,K76, \
|
||||||
|
K01, K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K57,K58, K54,K46,K55, K5D,K5E,K5F, \
|
||||||
|
K29,K02,K03,K04,K05,K06,K07,K08,K09,K0A,K0B,K0C,K0D,K7D,K0E, K71,K74,K77, K45,K7F,K37,K4A, \
|
||||||
|
K0F,K10,K11,K12,K13,K14,K15,K16,K17,K18,K19,K1A,K1B, K2B, K72,K75,K78, K47,K48,K49,K4E, \
|
||||||
|
K3A,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28, K00,K1C, K4B,K4C,K4D,K7E, \
|
||||||
|
K2A,K56,K2C,K2D,K2E,K2F,K30,K31,K32,K33,K34,K35, K73,K36, K60, K4F,K50,K51,K6F, \
|
||||||
|
K1D,K5A,K38,K7B, K39, K79,K70,K7C,K5B,K5C,K7A, K61,K62,K63, K52,K53,K59 \
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
|
||||||
|
{ K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17 }, \
|
||||||
|
{ K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27 }, \
|
||||||
|
{ K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36, K37 }, \
|
||||||
|
{ K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
|
||||||
|
{ K40, K41, K42, K43, K44, K45, K46, K47 }, \
|
||||||
|
{ K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \
|
||||||
|
{ K50, K51, K52, K53, K54, K55, K56, K57 }, \
|
||||||
|
{ K58, K59, K5A, K5B, K5C, K5D, K5E, K5F }, \
|
||||||
|
{ K60, K61, K62, K63, K64, K65, K66, K67 }, \
|
||||||
|
{ K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
|
||||||
|
{ K70, K71, K72, K73, K74, K75, K76, K77 }, \
|
||||||
|
{ K78, K79, K7A, K7B, K7C, K7D, K7E, K7F } \
|
||||||
|
}
|
||||||
@@ -4,24 +4,25 @@
|
|||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
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
|
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
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
MIDI_ENABLE = no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
# If you want to change the display of OLED, you need to change here
|
# If you want to change the display of OLED, you need to change here
|
||||||
SRC += ./lib/rgb_state_reader.c \
|
SRC += ./lib/glcdfont.c \
|
||||||
|
./lib/rgb_state_reader.c \
|
||||||
./lib/layer_state_reader.c \
|
./lib/layer_state_reader.c \
|
||||||
./lib/logo_reader.c \
|
./lib/logo_reader.c \
|
||||||
./lib/keylogger.c \
|
./lib/keylogger.c \
|
||||||
|
|||||||
@@ -1,244 +0,0 @@
|
|||||||
// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
|
|
||||||
// See gfxfont.h for newer custom bitmap font info.
|
|
||||||
|
|
||||||
#ifndef FONT5X7_H
|
|
||||||
#define FONT5X7_H
|
|
||||||
|
|
||||||
#ifdef __AVR__
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <avr/pgmspace.h>
|
|
||||||
#elif defined(ESP8266)
|
|
||||||
#include <pgmspace.h>
|
|
||||||
#else
|
|
||||||
#define PROGMEM
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Standard ASCII 5x7 font
|
|
||||||
|
|
||||||
static const unsigned char font[] PROGMEM = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
|
|
||||||
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
|
|
||||||
0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
|
|
||||||
0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
|
|
||||||
0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
|
|
||||||
0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
|
|
||||||
0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
|
|
||||||
0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
|
|
||||||
0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
|
|
||||||
0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
|
|
||||||
0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
|
|
||||||
0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
|
|
||||||
0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
|
|
||||||
0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
|
|
||||||
0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
|
|
||||||
0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
|
|
||||||
0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
|
|
||||||
0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
|
|
||||||
0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
|
|
||||||
0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
|
|
||||||
0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
|
|
||||||
0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
|
|
||||||
0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
|
|
||||||
0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
|
|
||||||
0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
|
|
||||||
0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
|
|
||||||
0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
|
|
||||||
0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
|
|
||||||
0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
|
|
||||||
0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
|
|
||||||
0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
|
|
||||||
0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
|
|
||||||
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
|
|
||||||
0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
|
|
||||||
0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
|
|
||||||
0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
|
|
||||||
0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
|
|
||||||
0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
|
|
||||||
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
|
|
||||||
0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
|
|
||||||
0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
|
|
||||||
0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
|
|
||||||
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
|
|
||||||
0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
|
|
||||||
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
|
|
||||||
0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
|
|
||||||
0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
|
|
||||||
0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
|
|
||||||
0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
|
|
||||||
0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
|
|
||||||
0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
|
|
||||||
0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
|
|
||||||
0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
|
|
||||||
0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
|
|
||||||
0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
|
|
||||||
0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
|
|
||||||
0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
|
|
||||||
0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
|
|
||||||
0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
|
|
||||||
0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
|
|
||||||
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
|
|
||||||
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
|
|
||||||
0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
|
|
||||||
0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
|
|
||||||
0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
|
|
||||||
0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
|
|
||||||
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
|
|
||||||
0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
|
|
||||||
0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
|
|
||||||
0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
|
|
||||||
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
|
|
||||||
0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
|
|
||||||
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
|
|
||||||
0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
|
|
||||||
0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
|
|
||||||
0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
|
|
||||||
0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
|
|
||||||
0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
|
|
||||||
0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
|
|
||||||
0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
|
|
||||||
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
|
|
||||||
0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
|
|
||||||
0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
|
|
||||||
0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
|
|
||||||
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
|
|
||||||
0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
|
|
||||||
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
|
|
||||||
0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
|
|
||||||
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
|
|
||||||
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
|
|
||||||
0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
|
|
||||||
0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
|
|
||||||
0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
|
|
||||||
0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
|
|
||||||
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
|
|
||||||
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
|
|
||||||
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
|
|
||||||
0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
|
|
||||||
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
|
|
||||||
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
|
|
||||||
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
|
|
||||||
0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
|
|
||||||
0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
|
|
||||||
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
|
|
||||||
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
|
|
||||||
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
|
|
||||||
0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
|
|
||||||
0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
|
|
||||||
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
|
|
||||||
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
|
|
||||||
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
|
|
||||||
0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
|
|
||||||
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
|
|
||||||
0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
|
|
||||||
0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
|
|
||||||
0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
|
|
||||||
0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
|
|
||||||
0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
|
|
||||||
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
|
|
||||||
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x0E, 0x3F, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFE, 0xE0, 0x80, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x1E, 0xBE,
|
|
||||||
0x7F, 0xFF, 0xFF, 0xFE, 0xFE, 0xF0,
|
|
||||||
0xE0, 0xC0, 0x80, 0x00, 0x0E, 0xEF,
|
|
||||||
0xDF, 0xDE, 0xBE, 0x3C, 0x38, 0x70,
|
|
||||||
0xE0, 0xDD, 0xBB, 0x7B, 0x07, 0x0E,
|
|
||||||
0x0E, 0x0C, 0x98, 0xF0, 0xE0, 0xF0,
|
|
||||||
0xF0, 0xF8, 0x78, 0x3C, 0x1C, 0x1E,
|
|
||||||
0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
||||||
0x1F, 0xFE, 0xFE, 0xF8, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
|
|
||||||
0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
|
|
||||||
0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
|
|
||||||
0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
|
|
||||||
0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
|
|
||||||
0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
|
|
||||||
0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
|
|
||||||
0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x03,
|
|
||||||
0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE,
|
|
||||||
0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x7F,
|
|
||||||
0xFF, 0xFE, 0xFD, 0xFB, 0x1B, 0x07,
|
|
||||||
0x07, 0x0F, 0x1F, 0x1F, 0x1E, 0x1D,
|
|
||||||
0x0B, 0x07, 0x01, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
|
|
||||||
0xF8, 0xFE, 0xFF, 0xFF, 0x1F, 0x07,
|
|
||||||
0x01, 0x01, 0x01, 0x03, 0x06, 0x06,
|
|
||||||
0x0C, 0x0C, 0x08, 0x0C, 0x0C, 0x0E,
|
|
||||||
0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30,
|
|
||||||
0x18, 0x1C, 0x7C, 0xCC, 0x8C, 0xDC,
|
|
||||||
0xF8, 0xC0, 0xE0, 0xE0, 0x70, 0xB8,
|
|
||||||
0xF0, 0x60, 0x00, 0x00, 0x80, 0xC0,
|
|
||||||
0xE0, 0xF0, 0x70, 0xF8, 0xFC, 0xFC,
|
|
||||||
0x3C, 0x30, 0x38, 0xF8, 0xF8, 0xF8,
|
|
||||||
0x78, 0x00, 0x80, 0x80, 0xC0, 0xE0,
|
|
||||||
0x70, 0x38, 0x38, 0x9C, 0xDC, 0xFC,
|
|
||||||
0x7C, 0x38, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
|
|
||||||
0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
|
|
||||||
0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
|
|
||||||
0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
|
|
||||||
0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
|
|
||||||
0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
|
|
||||||
0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
|
|
||||||
0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x01, 0x03, 0x07,
|
|
||||||
0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F,
|
|
||||||
0x7E, 0x7D, 0x3B, 0x17, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
|
|
||||||
0x0F, 0x1F, 0x3F, 0x3F, 0x7E, 0x7C,
|
|
||||||
0x78, 0x70, 0x70, 0x70, 0x70, 0x70,
|
|
||||||
0x70, 0x78, 0x38, 0x18, 0x1C, 0x0E,
|
|
||||||
0x07, 0x0F, 0x1F, 0x3F, 0x3C, 0x38,
|
|
||||||
0x38, 0x18, 0x0C, 0x06, 0x03, 0x01,
|
|
||||||
0x01, 0x01, 0x01, 0x0E, 0x1F, 0x1F,
|
|
||||||
0x1C, 0x1C, 0x1E, 0x0F, 0x0F, 0x03,
|
|
||||||
0x1D, 0x0E, 0x07, 0x03, 0x01, 0x00,
|
|
||||||
0x00, 0x0E, 0x1F, 0x1F, 0x1D, 0x1E,
|
|
||||||
0x0F, 0x07, 0x03, 0x03, 0x0F, 0x1F,
|
|
||||||
0x1F, 0x19, 0x19, 0x19, 0x19, 0x0C,
|
|
||||||
0x0C, 0x04, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
};
|
|
||||||
#endif // FONT5X7_H
|
|
||||||
@@ -4,24 +4,25 @@
|
|||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
MIDI_ENABLE = no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
# If you want to change the display of OLED, you need to change here
|
# If you want to change the display of OLED, you need to change here
|
||||||
SRC += ./lib/rgb_state_reader.c \
|
SRC += ./lib/glcdfont.c \
|
||||||
|
./lib/rgb_state_reader.c \
|
||||||
./lib/layer_state_reader.c \
|
./lib/layer_state_reader.c \
|
||||||
./lib/logo_reader.c \
|
./lib/logo_reader.c \
|
||||||
./lib/keylogger.c \
|
./lib/keylogger.c \
|
||||||
|
|||||||
@@ -1,244 +0,0 @@
|
|||||||
// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
|
|
||||||
// See gfxfont.h for newer custom bitmap font info.
|
|
||||||
|
|
||||||
#ifndef FONT5X7_H
|
|
||||||
#define FONT5X7_H
|
|
||||||
|
|
||||||
#ifdef __AVR__
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <avr/pgmspace.h>
|
|
||||||
#elif defined(ESP8266)
|
|
||||||
#include <pgmspace.h>
|
|
||||||
#else
|
|
||||||
#define PROGMEM
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Standard ASCII 5x7 font
|
|
||||||
|
|
||||||
static const unsigned char font[] PROGMEM = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
|
|
||||||
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
|
|
||||||
0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
|
|
||||||
0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
|
|
||||||
0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
|
|
||||||
0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
|
|
||||||
0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
|
|
||||||
0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
|
|
||||||
0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
|
|
||||||
0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
|
|
||||||
0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
|
|
||||||
0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
|
|
||||||
0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
|
|
||||||
0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
|
|
||||||
0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
|
|
||||||
0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
|
|
||||||
0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
|
|
||||||
0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
|
|
||||||
0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
|
|
||||||
0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
|
|
||||||
0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
|
|
||||||
0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
|
|
||||||
0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
|
|
||||||
0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
|
|
||||||
0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
|
|
||||||
0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
|
|
||||||
0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
|
|
||||||
0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
|
|
||||||
0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
|
|
||||||
0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
|
|
||||||
0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
|
|
||||||
0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
|
|
||||||
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
|
|
||||||
0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
|
|
||||||
0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
|
|
||||||
0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
|
|
||||||
0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
|
|
||||||
0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
|
|
||||||
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
|
|
||||||
0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
|
|
||||||
0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
|
|
||||||
0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
|
|
||||||
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
|
|
||||||
0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
|
|
||||||
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
|
|
||||||
0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
|
|
||||||
0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
|
|
||||||
0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
|
|
||||||
0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
|
|
||||||
0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
|
|
||||||
0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
|
|
||||||
0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
|
|
||||||
0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
|
|
||||||
0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
|
|
||||||
0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
|
|
||||||
0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
|
|
||||||
0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
|
|
||||||
0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
|
|
||||||
0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
|
|
||||||
0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
|
|
||||||
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
|
|
||||||
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
|
|
||||||
0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
|
|
||||||
0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
|
|
||||||
0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
|
|
||||||
0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
|
|
||||||
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
|
|
||||||
0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
|
|
||||||
0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
|
|
||||||
0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
|
|
||||||
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
|
|
||||||
0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
|
|
||||||
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
|
|
||||||
0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
|
|
||||||
0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
|
|
||||||
0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
|
|
||||||
0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
|
|
||||||
0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
|
|
||||||
0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
|
|
||||||
0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
|
|
||||||
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
|
|
||||||
0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
|
|
||||||
0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
|
|
||||||
0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
|
|
||||||
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
|
|
||||||
0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
|
|
||||||
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
|
|
||||||
0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
|
|
||||||
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
|
|
||||||
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
|
|
||||||
0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
|
|
||||||
0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
|
|
||||||
0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
|
|
||||||
0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
|
|
||||||
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
|
|
||||||
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
|
|
||||||
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
|
|
||||||
0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
|
|
||||||
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
|
|
||||||
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
|
|
||||||
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
|
|
||||||
0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
|
|
||||||
0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
|
|
||||||
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
|
|
||||||
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
|
|
||||||
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
|
|
||||||
0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
|
|
||||||
0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
|
|
||||||
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
|
|
||||||
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
|
|
||||||
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
|
|
||||||
0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
|
|
||||||
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
|
|
||||||
0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
|
|
||||||
0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
|
|
||||||
0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
|
|
||||||
0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
|
|
||||||
0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
|
|
||||||
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
|
|
||||||
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x0E, 0x3F, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFE, 0xE0, 0x80, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x1E, 0xBE,
|
|
||||||
0x7F, 0xFF, 0xFF, 0xFE, 0xFE, 0xF0,
|
|
||||||
0xE0, 0xC0, 0x80, 0x00, 0x0E, 0xEF,
|
|
||||||
0xDF, 0xDE, 0xBE, 0x3C, 0x38, 0x70,
|
|
||||||
0xE0, 0xDD, 0xBB, 0x7B, 0x07, 0x0E,
|
|
||||||
0x0E, 0x0C, 0x98, 0xF0, 0xE0, 0xF0,
|
|
||||||
0xF0, 0xF8, 0x78, 0x3C, 0x1C, 0x1E,
|
|
||||||
0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
||||||
0x1F, 0xFE, 0xFE, 0xF8, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
|
|
||||||
0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
|
|
||||||
0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
|
|
||||||
0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
|
|
||||||
0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
|
|
||||||
0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
|
|
||||||
0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
|
|
||||||
0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x03,
|
|
||||||
0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE,
|
|
||||||
0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x7F,
|
|
||||||
0xFF, 0xFE, 0xFD, 0xFB, 0x1B, 0x07,
|
|
||||||
0x07, 0x0F, 0x1F, 0x1F, 0x1E, 0x1D,
|
|
||||||
0x0B, 0x07, 0x01, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
|
|
||||||
0xF8, 0xFE, 0xFF, 0xFF, 0x1F, 0x07,
|
|
||||||
0x01, 0x01, 0x01, 0x03, 0x06, 0x06,
|
|
||||||
0x0C, 0x0C, 0x08, 0x0C, 0x0C, 0x0E,
|
|
||||||
0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30,
|
|
||||||
0x18, 0x1C, 0x7C, 0xCC, 0x8C, 0xDC,
|
|
||||||
0xF8, 0xC0, 0xE0, 0xE0, 0x70, 0xB8,
|
|
||||||
0xF0, 0x60, 0x00, 0x00, 0x80, 0xC0,
|
|
||||||
0xE0, 0xF0, 0x70, 0xF8, 0xFC, 0xFC,
|
|
||||||
0x3C, 0x30, 0x38, 0xF8, 0xF8, 0xF8,
|
|
||||||
0x78, 0x00, 0x80, 0x80, 0xC0, 0xE0,
|
|
||||||
0x70, 0x38, 0x38, 0x9C, 0xDC, 0xFC,
|
|
||||||
0x7C, 0x38, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
|
|
||||||
0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
|
|
||||||
0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
|
|
||||||
0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
|
|
||||||
0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
|
|
||||||
0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
|
|
||||||
0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
|
|
||||||
0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x01, 0x03, 0x07,
|
|
||||||
0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F,
|
|
||||||
0x7E, 0x7D, 0x3B, 0x17, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
|
|
||||||
0x0F, 0x1F, 0x3F, 0x3F, 0x7E, 0x7C,
|
|
||||||
0x78, 0x70, 0x70, 0x70, 0x70, 0x70,
|
|
||||||
0x70, 0x78, 0x38, 0x18, 0x1C, 0x0E,
|
|
||||||
0x07, 0x0F, 0x1F, 0x3F, 0x3C, 0x38,
|
|
||||||
0x38, 0x18, 0x0C, 0x06, 0x03, 0x01,
|
|
||||||
0x01, 0x01, 0x01, 0x0E, 0x1F, 0x1F,
|
|
||||||
0x1C, 0x1C, 0x1E, 0x0F, 0x0F, 0x03,
|
|
||||||
0x1D, 0x0E, 0x07, 0x03, 0x01, 0x00,
|
|
||||||
0x00, 0x0E, 0x1F, 0x1F, 0x1D, 0x1E,
|
|
||||||
0x0F, 0x07, 0x03, 0x03, 0x0F, 0x1F,
|
|
||||||
0x1F, 0x19, 0x19, 0x19, 0x19, 0x0C,
|
|
||||||
0x0C, 0x04, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
};
|
|
||||||
#endif // FONT5X7_H
|
|
||||||
@@ -109,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
int RGB_current_mode;
|
int RGB_current_mode;
|
||||||
|
|
||||||
// Setting ADJUST layer RGB back to default
|
// Setting ADJUST layer RGB back to default
|
||||||
inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
static inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||||
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
|
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
|
||||||
layer_on(layer3);
|
layer_on(layer3);
|
||||||
} else {
|
} else {
|
||||||
@@ -155,7 +155,7 @@ void matrix_scan_user(void) {
|
|||||||
iota_gfx_task();
|
iota_gfx_task();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void matrix_render_user(struct CharacterMatrix *matrix) {
|
static inline void matrix_render_user(struct CharacterMatrix *matrix) {
|
||||||
if (is_master) {
|
if (is_master) {
|
||||||
// If you want to change the display of OLED, you need to change here
|
// If you want to change the display of OLED, you need to change here
|
||||||
matrix_write_ln(matrix, read_layer_state());
|
matrix_write_ln(matrix, read_layer_state());
|
||||||
@@ -171,7 +171,7 @@ inline void matrix_render_user(struct CharacterMatrix *matrix) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
|
static inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
|
||||||
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
||||||
memcpy(dest->display, source->display, sizeof(dest->display));
|
memcpy(dest->display, source->display, sizeof(dest->display));
|
||||||
dest->dirty = true;
|
dest->dirty = true;
|
||||||
|
|||||||
@@ -4,24 +4,25 @@
|
|||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
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
|
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
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
MIDI_ENABLE = no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
# If you want to change the display of OLED, you need to change here
|
# If you want to change the display of OLED, you need to change here
|
||||||
SRC += ./lib/rgb_state_reader.c \
|
SRC += ./lib/glcdfont.c \
|
||||||
|
./lib/rgb_state_reader.c \
|
||||||
./lib/layer_state_reader.c \
|
./lib/layer_state_reader.c \
|
||||||
./lib/logo_reader.c \
|
./lib/logo_reader.c \
|
||||||
./lib/keylogger.c \
|
./lib/keylogger.c \
|
||||||
|
|||||||
@@ -14,8 +14,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Standard ASCII 5x7 font
|
// Standard ASCII 5x7 font
|
||||||
|
const unsigned char font[] PROGMEM = {
|
||||||
static const unsigned char font[] PROGMEM = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
|
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
|
||||||
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
|
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
|
||||||
@@ -119,7 +118,7 @@ static const unsigned char font[] PROGMEM = {
|
|||||||
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
|
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
|
||||||
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
|
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
|
||||||
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
|
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
|
||||||
0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
|
0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
|
||||||
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
|
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
|
||||||
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
|
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
|
||||||
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
|
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
|
||||||
@@ -128,8 +127,8 @@ static const unsigned char font[] PROGMEM = {
|
|||||||
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
|
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
|
||||||
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
|
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
|
||||||
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
|
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
|
||||||
0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
|
0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
|
||||||
0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
|
0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
|
||||||
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
|
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
|
||||||
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
|
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
|
||||||
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
|
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
|
||||||
@@ -145,24 +144,24 @@ static const unsigned char font[] PROGMEM = {
|
|||||||
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
|
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
|
||||||
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
|
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x0E, 0x3F, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFE, 0xE0, 0x80, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x1E, 0xBE,
|
|
||||||
0x7F, 0xFF, 0xFF, 0xFE, 0xFE, 0xF0,
|
|
||||||
0xE0, 0xC0, 0x80, 0x00, 0x0E, 0xEF,
|
|
||||||
0xDF, 0xDE, 0xBE, 0x3C, 0x38, 0x70,
|
|
||||||
0xE0, 0xDD, 0xBB, 0x7B, 0x07, 0x0E,
|
|
||||||
0x0E, 0x0C, 0x98, 0xF0, 0xE0, 0xF0,
|
|
||||||
0xF0, 0xF8, 0x78, 0x3C, 0x1C, 0x1E,
|
|
||||||
0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
||||||
0x1F, 0xFE, 0xFE, 0xF8, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0,
|
||||||
|
0xF0, 0xF8, 0xF8, 0x18, 0x00, 0xC0,
|
||||||
|
0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF,
|
||||||
|
0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0,
|
||||||
|
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
|
||||||
|
0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0,
|
||||||
|
0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
|
||||||
|
0x00, 0x00, 0x00, 0xE0, 0xE0, 0xC0,
|
||||||
|
0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00,
|
||||||
|
0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0,
|
||||||
|
0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
|
||||||
|
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
|
||||||
|
0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
|
0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
|
||||||
@@ -177,25 +176,25 @@ static const unsigned char font[] PROGMEM = {
|
|||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x03,
|
0x00, 0x00, 0x00, 0xF8, 0xFC, 0xFE,
|
||||||
0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE,
|
0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF,
|
||||||
0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x7F,
|
0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF,
|
||||||
0xFF, 0xFE, 0xFD, 0xFB, 0x1B, 0x07,
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||||
0x07, 0x0F, 0x1F, 0x1F, 0x1E, 0x1D,
|
0xFF, 0x1F, 0x07, 0x01, 0x00, 0x00,
|
||||||
0x0B, 0x07, 0x01, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
|
0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00,
|
||||||
0xF8, 0xFE, 0xFF, 0xFF, 0x1F, 0x07,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x81,
|
||||||
0x01, 0x01, 0x01, 0x03, 0x06, 0x06,
|
0xC3, 0xC3, 0xC3, 0x00, 0x00, 0xFF,
|
||||||
0x0C, 0x0C, 0x08, 0x0C, 0x0C, 0x0E,
|
0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00,
|
||||||
0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30,
|
0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF,
|
||||||
0x18, 0x1C, 0x7C, 0xCC, 0x8C, 0xDC,
|
0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
|
||||||
0xF8, 0xC0, 0xE0, 0xE0, 0x70, 0xB8,
|
0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0xF0, 0x60, 0x00, 0x00, 0x80, 0xC0,
|
0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
|
||||||
0xE0, 0xF0, 0x70, 0xF8, 0xFC, 0xFC,
|
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
|
||||||
0x3C, 0x30, 0x38, 0xF8, 0xF8, 0xF8,
|
0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
|
||||||
0x78, 0x00, 0x80, 0x80, 0xC0, 0xE0,
|
0x9D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
|
||||||
0x70, 0x38, 0x38, 0x9C, 0xDC, 0xFC,
|
0x1C, 0x9D, 0xDF, 0xDF, 0xDF, 0x00,
|
||||||
0x7C, 0x38, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
|
0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
|
||||||
0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
|
0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
|
||||||
@@ -209,26 +208,26 @@ static const unsigned char font[] PROGMEM = {
|
|||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x03, 0x0F, 0x1F,
|
||||||
|
0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F,
|
||||||
|
0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F,
|
||||||
|
0x3F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
|
||||||
|
0x7F, 0x7C, 0x78, 0x78, 0x38, 0x1C,
|
||||||
|
0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x01, 0x03, 0x07, 0x07,
|
||||||
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
||||||
|
0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x03, 0x07, 0x07, 0x07, 0x07,
|
||||||
|
0x07, 0x07, 0x07, 0x07, 0x03, 0x01,
|
||||||
|
0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x01, 0x03, 0x07,
|
0x00, 0x07, 0x07, 0x07, 0x00, 0x00,
|
||||||
0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F,
|
0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
|
||||||
0x7E, 0x7D, 0x3B, 0x17, 0x00, 0x00,
|
0x07, 0x00, 0x00, 0x00, 0x01, 0x03,
|
||||||
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
||||||
|
0x07, 0x07, 0x03, 0x01, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
|
|
||||||
0x0F, 0x1F, 0x3F, 0x3F, 0x7E, 0x7C,
|
|
||||||
0x78, 0x70, 0x70, 0x70, 0x70, 0x70,
|
|
||||||
0x70, 0x78, 0x38, 0x18, 0x1C, 0x0E,
|
|
||||||
0x07, 0x0F, 0x1F, 0x3F, 0x3C, 0x38,
|
|
||||||
0x38, 0x18, 0x0C, 0x06, 0x03, 0x01,
|
|
||||||
0x01, 0x01, 0x01, 0x0E, 0x1F, 0x1F,
|
|
||||||
0x1C, 0x1C, 0x1E, 0x0F, 0x0F, 0x03,
|
|
||||||
0x1D, 0x0E, 0x07, 0x03, 0x01, 0x00,
|
|
||||||
0x00, 0x0E, 0x1F, 0x1F, 0x1D, 0x1E,
|
|
||||||
0x0F, 0x07, 0x03, 0x03, 0x0F, 0x1F,
|
|
||||||
0x1F, 0x19, 0x19, 0x19, 0x19, 0x0C,
|
|
||||||
0x0C, 0x04, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
@@ -57,10 +57,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
/* ws2812 RGB LED */
|
/* ws2812 RGB LED */
|
||||||
#define RGB_DI_PIN D3
|
#define RGB_DI_PIN D3
|
||||||
#define RGBLIGHT_TIMER
|
|
||||||
#define RGBLED_NUM 12 // Number of LEDs
|
#define RGBLED_NUM 12 // Number of LEDs
|
||||||
#define ws2812_PORTREG PORTD
|
|
||||||
#define ws2812_DDRREG DDRD
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Feature disable options
|
* Feature disable options
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
SUBPROJECT_rev1 = no
|
SUBPROJECT_rev1 = no
|
||||||
USE_I2C = yes
|
USE_I2C = yes
|
||||||
# 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
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
#include "i2c.h"
|
#include "i2c.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "print.h"
|
#include "print.h"
|
||||||
#include "glcdfont.c"
|
|
||||||
#ifdef ADAFRUIT_BLE_ENABLE
|
#ifdef ADAFRUIT_BLE_ENABLE
|
||||||
#include "adafruit_ble.h"
|
#include "adafruit_ble.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -14,6 +13,8 @@
|
|||||||
#include "sendchar.h"
|
#include "sendchar.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
|
||||||
|
static const unsigned char font[] PROGMEM;
|
||||||
|
|
||||||
// Set this to 1 to help diagnose early startup problems
|
// Set this to 1 to help diagnose early startup problems
|
||||||
// when testing power-on with ble. Turn it off otherwise,
|
// when testing power-on with ble. Turn it off otherwise,
|
||||||
// as the latency of printing most of the debug info messes
|
// as the latency of printing most of the debug info messes
|
||||||
|
|||||||
@@ -62,5 +62,5 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
AUDIO_ENABLE = no # Audio disabled while using RGB underlight.
|
AUDIO_ENABLE = no # Audio disabled while using RGB underlight.
|
||||||
EXTRAKEY_ENABLE = yes
|
EXTRAKEY_ENABLE = yes
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ F_USB = $(F_CPU)
|
|||||||
|
|
||||||
# Bootloader
|
# Bootloader
|
||||||
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
||||||
# different sizes, comment this out, and the correct address will be loaded
|
# different sizes, comment this out, and the correct address will be loaded
|
||||||
# automatically (+60). See bootloader.mk for all options.
|
# automatically (+60). See bootloader.mk for all options.
|
||||||
BOOTLOADER = caterina
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
SUBPROJECT_rev1 = yes
|
SUBPROJECT_rev1 = yes
|
||||||
USE_I2C = yes
|
USE_I2C = yes
|
||||||
# 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
|
||||||
@@ -71,4 +71,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
|||||||
|
|
||||||
CUSTOM_MATRIX = yes
|
CUSTOM_MATRIX = yes
|
||||||
|
|
||||||
DEFAULT_FOLDER = deltasplit75/v2
|
DEFAULT_FOLDER = deltasplit75/v2
|
||||||
@@ -61,10 +61,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
/* ws2812 RGB LED */
|
/* ws2812 RGB LED */
|
||||||
#define RGB_DI_PIN D3
|
#define RGB_DI_PIN D3
|
||||||
#define RGBLIGHT_TIMER
|
|
||||||
#define RGBLED_NUM 12 // Number of LEDs
|
#define RGBLED_NUM 12 // Number of LEDs
|
||||||
#define ws2812_PORTREG PORTD
|
|
||||||
#define ws2812_DDRREG DDRD
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Feature disable options
|
* Feature disable options
|
||||||
@@ -85,4 +83,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
//#define NO_ACTION_FUNCTION
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -50,9 +50,7 @@
|
|||||||
#define RGBLIGHT_VAL_STEP 8
|
#define RGBLIGHT_VAL_STEP 8
|
||||||
#endif
|
#endif
|
||||||
#define RGB_DI_PIN D3
|
#define RGB_DI_PIN D3
|
||||||
#define RGBLIGHT_TIMER
|
|
||||||
#define RGBLED_NUM 10
|
#define RGBLED_NUM 10
|
||||||
#define ws2812_PORTREG PORTD
|
|
||||||
#define ws2812_DDRREG DDRD
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.vscode
|
||||||
@@ -31,7 +31,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
/* key matrix size */
|
/* key matrix size */
|
||||||
#define MATRIX_ROWS 10
|
#define MATRIX_ROWS 10
|
||||||
#define MATRIX_COLS 8
|
#define MATRIX_COLS 8
|
||||||
// SERIAL is the only supported
|
// Only SERIAL is currently supported
|
||||||
|
// By converting this to use I2C, backlight
|
||||||
|
// would/should be fully functional as well
|
||||||
#define USE_SERIAL
|
#define USE_SERIAL
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -51,7 +53,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
|
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
|
||||||
#define DIODE_DIRECTION ROW2COL
|
#define DIODE_DIRECTION ROW2COL
|
||||||
|
|
||||||
// #define BACKLIGHT_PIN B7
|
// #define BACKLIGHT_PIN C6
|
||||||
// #define BACKLIGHT_BREATHING
|
// #define BACKLIGHT_BREATHING
|
||||||
// #define BACKLIGHT_LEVELS 3
|
// #define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
@@ -61,8 +63,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
//#define MATRIX_HAS_GHOST
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
/* number of backlight levels */
|
|
||||||
|
|
||||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
#define LOCKING_SUPPORT_ENABLE
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// place overrides here
|
||||||
|
#define PERMISSIVE_HOLD
|
||||||
|
#define TAPPING_TERM 150
|
||||||
@@ -0,0 +1,212 @@
|
|||||||
|
/* Copyright 2017 IslandMan93
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General 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
|
||||||
|
|
||||||
|
// KEYMAP
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
#define _WORKMAN_P 0
|
||||||
|
#define _GAME 1
|
||||||
|
#define _RAISE 2
|
||||||
|
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
#define SHIFT_MOD MOD_BIT(KC_LSFT)
|
||||||
|
#define SPACE_RAISE LT(_RAISE, KC_SPC)
|
||||||
|
#define ENT_RAISE LT(_RAISE, KC_ENT)
|
||||||
|
#define PAGE_PREV S(LCTL(KC_TAB))
|
||||||
|
#define PAGE_NEXT LCTL(KC_TAB)
|
||||||
|
|
||||||
|
enum custom_keycodes
|
||||||
|
{
|
||||||
|
LO_BSPC = SAFE_RANGE,
|
||||||
|
LO_1,
|
||||||
|
LO_2,
|
||||||
|
LO_3,
|
||||||
|
LO_4,
|
||||||
|
LO_5,
|
||||||
|
LO_6,
|
||||||
|
LO_7,
|
||||||
|
LO_8,
|
||||||
|
LO_9,
|
||||||
|
LO_0,
|
||||||
|
};
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t* record)
|
||||||
|
{
|
||||||
|
if (record->event.pressed) {
|
||||||
|
switch (keycode) {
|
||||||
|
case LO_BSPC:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (get_mods() & SHIFT_MOD) {
|
||||||
|
uint8_t current_mods = get_mods();
|
||||||
|
clear_mods();
|
||||||
|
SEND_STRING(SS_TAP(X_DELETE));
|
||||||
|
set_mods(current_mods);
|
||||||
|
} else {
|
||||||
|
SEND_STRING(SS_TAP(X_BSPACE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case LO_1:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t current_mods = get_mods();
|
||||||
|
if (current_mods & SHIFT_MOD) {
|
||||||
|
clear_mods();
|
||||||
|
SEND_STRING("1");
|
||||||
|
set_mods(current_mods);
|
||||||
|
} else {
|
||||||
|
SEND_STRING("!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case LO_2:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t current_mods = get_mods();
|
||||||
|
if (current_mods & SHIFT_MOD) {
|
||||||
|
clear_mods();
|
||||||
|
SEND_STRING("2");
|
||||||
|
set_mods(current_mods);
|
||||||
|
} else {
|
||||||
|
SEND_STRING("@");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case LO_3:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t current_mods = get_mods();
|
||||||
|
if (current_mods & SHIFT_MOD) {
|
||||||
|
clear_mods();
|
||||||
|
SEND_STRING("3");
|
||||||
|
set_mods(current_mods);
|
||||||
|
} else {
|
||||||
|
SEND_STRING("#");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case LO_4:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t current_mods = get_mods();
|
||||||
|
if (current_mods & SHIFT_MOD) {
|
||||||
|
clear_mods();
|
||||||
|
SEND_STRING("4");
|
||||||
|
set_mods(current_mods);
|
||||||
|
} else {
|
||||||
|
SEND_STRING("$");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case LO_5:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t current_mods = get_mods();
|
||||||
|
if (current_mods & SHIFT_MOD) {
|
||||||
|
clear_mods();
|
||||||
|
SEND_STRING("5");
|
||||||
|
set_mods(current_mods);
|
||||||
|
} else {
|
||||||
|
SEND_STRING("%");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case LO_6:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t current_mods = get_mods();
|
||||||
|
if (current_mods & SHIFT_MOD) {
|
||||||
|
clear_mods();
|
||||||
|
SEND_STRING("6");
|
||||||
|
set_mods(current_mods);
|
||||||
|
} else {
|
||||||
|
SEND_STRING("^");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case LO_7:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t current_mods = get_mods();
|
||||||
|
if (current_mods & SHIFT_MOD) {
|
||||||
|
clear_mods();
|
||||||
|
SEND_STRING("7");
|
||||||
|
set_mods(current_mods);
|
||||||
|
} else {
|
||||||
|
SEND_STRING("&");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case LO_8:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t current_mods = get_mods();
|
||||||
|
if (current_mods & SHIFT_MOD) {
|
||||||
|
clear_mods();
|
||||||
|
SEND_STRING("8");
|
||||||
|
set_mods(current_mods);
|
||||||
|
} else {
|
||||||
|
SEND_STRING("*");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case LO_9:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t current_mods = get_mods();
|
||||||
|
if (current_mods & SHIFT_MOD) {
|
||||||
|
clear_mods();
|
||||||
|
SEND_STRING("9");
|
||||||
|
set_mods(current_mods);
|
||||||
|
} else {
|
||||||
|
SEND_STRING("(");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case LO_0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t current_mods = get_mods();
|
||||||
|
if (current_mods & SHIFT_MOD) {
|
||||||
|
clear_mods();
|
||||||
|
SEND_STRING("0");
|
||||||
|
set_mods(current_mods);
|
||||||
|
} else {
|
||||||
|
SEND_STRING(")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[_WORKMAN_P] = LAYOUT(
|
||||||
|
KC_ESC, LO_1, LO_2, LO_3, LO_4, LO_5, LO_6, LO_6, LO_7, LO_8, LO_9, LO_0, KC_MINS, KC_ESC,
|
||||||
|
KC_GRV, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_LPRN, KC_RPRN, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_EQL,
|
||||||
|
KC_TAB, KC_A, KC_S, KC_H, KC_T, KC_G, KC_LCBR, KC_RCBR, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_BSLS,
|
||||||
|
KC_LCTL, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_LBRC, KC_RBRC, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
|
||||||
|
KC_LSFT, RESET, PAGE_PREV, PAGE_NEXT, KC_END, KC_LGUI, KC_LALT, TG(_GAME), LO_BSPC, ENT_RAISE, SPACE_RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL),
|
||||||
|
|
||||||
|
[_GAME] = LAYOUT(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_ESC,
|
||||||
|
KC_GRV, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_LPRN, KC_RPRN, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_EQL,
|
||||||
|
KC_TAB, KC_A, KC_S, KC_H, KC_T, KC_G, KC_LCBR, KC_RCBR, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_BSLS,
|
||||||
|
KC_LCTL, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_LBRC, KC_RBRC, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
|
||||||
|
KC_LSFT, KC_F1, KC_F2, KC_3, KC_F5, KC_SPC, KC_LALT, TG(_GAME), LO_BSPC, ENT_RAISE, SPACE_RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL),
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT(
|
||||||
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, RESET,
|
||||||
|
_______, _______, _______, _______, _______, _______, BL_INC, KC_VOLU, _______, _______, _______, _______, _______, KC_F12,
|
||||||
|
_______, _______, _______, _______, _______, _______, BL_DEC, KC_VOLD, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, BL_BRTG, KC_MUTE, _______, _______, KC_MPRV, KC_MNXT, KC_MPLY, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
# The Workman keymap for diverge3
|
||||||
|
|
||||||
|
Basic example of the [Workman Programming Layout](https://github.com/ojbucao/workman) which uses the `SHIFT`ed variants of the number row, by default.
|
||||||
|
|
||||||
|
## Layer 1 - Default Layer
|
||||||
|
|
||||||
|
Workman programming layout.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Layer 2 - Gaming Layer
|
||||||
|
|
||||||
|
Reverts the number row to the normal 1, 2, 3, etc... for better gaming compatibility.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Layer 3 - Raise Layer
|
||||||
|
|
||||||
|
Volume and backlight controls (although backlight is not fully functional using `USE_SERIAL` in `../config.h`).
|
||||||
|
|
||||||
|

|
||||||
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
@@ -10,7 +10,11 @@ Make example for this keyboard (after setting up your build environment):
|
|||||||
|
|
||||||
make diverge3:default
|
make diverge3:default
|
||||||
|
|
||||||
|
Or for the [Workman](https://github.com/ojbucao/workman) layout:
|
||||||
|
|
||||||
|
make diverge3:workman
|
||||||
|
|
||||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||||
|
|
||||||
# Reflashing Animus
|
# Reflashing Animus
|
||||||
Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST) during the upload step. Then reapply your keymap through Arbites.
|
Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST pins) during the upload step. Then reapply your keymap through Arbites.
|
||||||
@@ -66,7 +66,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
# 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
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
# 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
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
|||||||
MIDI_ENABLE = no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
|
||||||
|
|||||||
@@ -196,6 +196,20 @@
|
|||||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \
|
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \
|
||||||
{ k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \
|
{ k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \
|
||||||
}
|
}
|
||||||
|
// iso split
|
||||||
|
#define LAYOUT_60_iso_split( \
|
||||||
|
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
|
||||||
|
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
|
||||||
|
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, \
|
||||||
|
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
|
||||||
|
K400, K401, K403, K404, K406, K408, K410, K411, K413, K414 \
|
||||||
|
) { \
|
||||||
|
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \
|
||||||
|
{ K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||||
|
{ K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
|
||||||
|
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \
|
||||||
|
{ K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, K414 } \
|
||||||
|
}
|
||||||
|
|
||||||
/* LAYOUT_60_iso_5x1u
|
/* LAYOUT_60_iso_5x1u
|
||||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||||
|
|||||||
@@ -28,6 +28,10 @@
|
|||||||
"LAYOUT_60_iso": {
|
"LAYOUT_60_iso": {
|
||||||
"key_count": 62,
|
"key_count": 62,
|
||||||
"layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
"layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||||
|
},
|
||||||
|
"LAYOUT_60_iso_split": {
|
||||||
|
"key_count": 64,
|
||||||
|
"layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"label":"FN", "x":6.00, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||||
},
|
},
|
||||||
"LAYOUT_60_hhkb": {
|
"LAYOUT_60_hhkb": {
|
||||||
"key_count": 60,
|
"key_count": 60,
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# ISO DE layout
|
||||||
|
|
||||||
|
This layout is ISO-DE and similar to a standard 60 ISO layout. There are vim style arrow keys on the function layer. The bottom right is the expected default.
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* ISO 60 layout by andys8 (ISO German keyboard layout shown)
|
||||||
|
*
|
||||||
|
* This layout starts from a standard ISO 60% layout, and adds a function layer.
|
||||||
|
*
|
||||||
|
* ,-----------------------------------------------------------------------------------------.
|
||||||
|
* | Esc | 1 ! | 2 " | 3 § | 4 $ | 5 % | 6 & | 7 / | 8 ( | 9 ) | 0 = | ß ? | ´ ` | Backspace |
|
||||||
|
* |-----------------------------------------------------------------------------------------|
|
||||||
|
* | Tab | Q | W | E | R | T | Z | U | I | O | P | Ä | + * | Enter |
|
||||||
|
* |---------------------------------------------------------------------------------- |
|
||||||
|
* | Layer_1 | A | S | D | F | G | H | J | K | L | Ö | Ü | # ' | |
|
||||||
|
* |-----------------------------------------------------------------------------------------|
|
||||||
|
* | Shift | < > | Y | X | C | V | B | N | M | , ; | . : | - _ | Shift |
|
||||||
|
* |-----------------------------------------------------------------------------------------|
|
||||||
|
* | LCtl | LGUI | LAlt | Space | RAlt | RGUI | App | RCtl |
|
||||||
|
* `-----------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
LAYOUT_60_iso(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||||
|
KC_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,
|
||||||
|
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT,
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
LAYOUT_60_iso(
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PSCR, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_DEL, KC_NO, KC_NO,
|
||||||
|
KC_LSFT, BL_TOGG, KC_APP, KC_PAUS, KC_INS, KC_NO, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_RSFT,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
AUDIO_ENABLE = no
|
||||||
|
RGBLIGHT_ENABLE = no
|
||||||
|
AUTO_SHIFT_ENABLE = no # If the time depressed is greater than or equal to the AUTO_SHIFT_TIMEOUT, then a shifted version of the key is emitted. If the time is less than the AUTO_SHIFT_TIMEOUT time, then the normal state is emitted
|
||||||
|
TAP_DANCE_ENABLE = no
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# iso layout with a split spacebar
|
||||||
|
|
||||||
|
i needed to have an ISO layout
|
||||||
|
and i wanted to have a split spacebar
|
||||||
|
i couldn't find anything ready so i cobbled this together
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---- Layer 0 - BL
|
||||||
|
this is basically the standard iso layout with the addition of the split spacebar
|
||||||
|
menu key (KC_APP) is used to move to the next layer
|
||||||
|
the key in between the two spacebars is the function key
|
||||||
|
*,-----------------------------------------------------------.
|
||||||
|
*| ' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*| Tab | q | w | e | r | t | y | u | i | o | p | [ | ] |enter|
|
||||||
|
*|------------------------------------------------------ |
|
||||||
|
*| Caps | a | s | d | f | g | h | j | k | l | ; | ' | # | |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*|Shft| < | z | x | c | v | b | n | m | , | . | / | Shift |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*|Ctrl|Gui |Alt | Space | FN | Space |Alt |Gui | NL |Ctrl |
|
||||||
|
*`-----------------------------------------------------------'
|
||||||
|
|
||||||
|
---- Layer 1 - FL
|
||||||
|
quite standard function layer
|
||||||
|
arrow keys and mouse movement/buttons on the home row
|
||||||
|
*,-----------------------------------------------------------.
|
||||||
|
*|ESC|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| DEL |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*| | | | | | | | | | |prt| | | |
|
||||||
|
*|------------------------------------------------------ |
|
||||||
|
*| |m l|m d|m u|m r| | | l | d | u | r | | | |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*| | | | | |mb1|mb2| |hm |pgd|pgu|end| |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*| | | | | | | | | | |
|
||||||
|
*`-----------------------------------------------------------'
|
||||||
|
|
||||||
|
---- Layer 2 - NL
|
||||||
|
numbers numbers numbers...
|
||||||
|
first key (top left) to return to BL
|
||||||
|
menu key (KC_APP) is used to move to the next layer
|
||||||
|
*,-----------------------------------------------------------.
|
||||||
|
*|BL | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*| | 4 | 5 | 6 | * | / | | 4 | 5 | 6 | * | / | ] | |
|
||||||
|
*|------------------------------------------------------ |
|
||||||
|
*| | 7 | 8 | 9 | + | - | | 1 | 2 | 3 | + | - | | |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*| | | 0 | , | . | = | | | 0 | , | . | = | |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*| | | | | | | | | RL | |
|
||||||
|
*`-----------------------------------------------------------'
|
||||||
|
|
||||||
|
---- Layer 3 - BL
|
||||||
|
all the fancy lights
|
||||||
|
and useful reset button (top right)
|
||||||
|
*,-----------------------------------------------------------.
|
||||||
|
*|BL | | | | | | | | | | | | |Reset |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*| |tog|mod|hui|hud| | |sai|sad|vai|vad| | | |
|
||||||
|
*|------------------------------------------------------ |
|
||||||
|
*| |sta|bre|rai|swi| | |sna|kni|gra|xms| | | |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*| | |bd |bt |bi |bs | | | | | | | |
|
||||||
|
*|-----------------------------------------------------------|
|
||||||
|
*| | | | | | | | | BL | |
|
||||||
|
*`-----------------------------------------------------------'
|
||||||
@@ -0,0 +1,193 @@
|
|||||||
|
// using as reference
|
||||||
|
// https://docs.qmk.fm/#/keymap
|
||||||
|
|
||||||
|
// thanks to atlacat, hailbreno, itsaferbie and weeheavy...
|
||||||
|
|
||||||
|
// and special thanks to AGausmann and drashna for the layer-activated RGB underglow
|
||||||
|
// https://www.reddit.com/r/olkb/comments/6t1vdu/update_layeractivated_rgb_underglow/
|
||||||
|
// https://github.com/AGausmann/qmk_firmware/blob/agausmann-v3.x/keyboards/nyquist/keymaps/agausmann/keymap.c
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
|
||||||
|
// Helpful defines
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Each layer gets a name for readability.
|
||||||
|
* 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, and you can also skip them entirely
|
||||||
|
* and just use numbers.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define BL 0 // Base Layer
|
||||||
|
#define FL 1 // Function Layer
|
||||||
|
#define NL 2 // Numpad Layer
|
||||||
|
#define RL 3 // RGB Layer
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Let's give an easier name to the RGB modes
|
||||||
|
* and assign the ones we want to the different layer
|
||||||
|
* these will then be used by the function below
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define RGB_STA RGB_M_P //rgb static
|
||||||
|
#define RGB_BRE RGB_M_B //rgb breathe
|
||||||
|
#define RGB_RAI RGB_M_R //rgb rainbow
|
||||||
|
#define RGB_SWI RGB_M_SW //rgb swirl
|
||||||
|
#define RGB_SNA RGB_M_SN //rgb snake
|
||||||
|
#define RGB_KNI RGB_M_K //rgb knight
|
||||||
|
#define RGB_GRA RGB_M_G //rgb gradient
|
||||||
|
#define RGB_XMS RGB_M_X //rgb christmas
|
||||||
|
//
|
||||||
|
#define RGB_BL_MODE rgblight_mode_noeeprom(3) //rgb mode for BL layer
|
||||||
|
#define RGB_BL_LIGHT rgblight_sethsv_noeeprom_turquoise() //rgb light for BL layer
|
||||||
|
//
|
||||||
|
#define RGB_FL_MODE rgblight_mode_noeeprom(1) //rgb mode for FL layer
|
||||||
|
#define RGB_FL_LIGHT rgblight_sethsv_noeeprom_orange() //rgb light for FL layer
|
||||||
|
//
|
||||||
|
#define RGB_NL_MODE rgblight_mode_noeeprom(12) //rgb mode for NL layer
|
||||||
|
#define RGB_NL_LIGHT rgblight_sethsv_noeeprom_turquoise() //rgb light for NL layer
|
||||||
|
//
|
||||||
|
#define RGB_RL_MODE rgblight_mode_noeeprom(22) //rgb mode for RL layer
|
||||||
|
#define RGB_RL_LIGHT rgblight_sethsv_noeeprom_red() //rgb light for RL layer
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* Keymap BL: Base Layer (Default Layer)
|
||||||
|
*
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* | ' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | Tab | q | w | e | r | t | y | u | i | o | p | [ | ] |enter|
|
||||||
|
* |------------------------------------------------------ |
|
||||||
|
* | Caps | a | s | d | f | g | h | j | k | l | ; | ' | # | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Shft| < | z | x | c | v | b | n | m | , | . | / | Shift |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Ctrl|Gui |Alt | Space | FN | Space |Alt |Gui | NL |Ctrl |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[BL] = LAYOUT_60_iso_split(
|
||||||
|
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||||
|
KC_TAB , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(FL), KC_SPC, KC_RALT, KC_RGUI, TO(NL), KC_RCTL),
|
||||||
|
|
||||||
|
/* Keymap FL: Function Layer
|
||||||
|
*
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |ESC|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| DEL |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | | |prt| | | |
|
||||||
|
* |------------------------------------------------------ |
|
||||||
|
* | |m l|m d|m u|m r| | | l | d | u | r | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | |mb1|mb2| |hm |pgd|pgu|end| |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[FL] = LAYOUT_60_iso_split(
|
||||||
|
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
|
||||||
|
_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______,
|
||||||
|
_______, KC_MS_LEFT,KC_MS_DOWN,KC_MS_UP, KC_MS_RIGHT,_______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, KC_MS_BTN1,KC_MS_BTN2,_______, KC_HOME, KC_PGDOWN, KC_PGUP, KC_END, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
/* Keymap NL: Numpad Layer
|
||||||
|
*
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |BL | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | 4 | 5 | 6 | * | / | | 4 | 5 | 6 | * | / | ] | |
|
||||||
|
* |------------------------------------------------------ |
|
||||||
|
* | | 7 | 8 | 9 | + | - | | 1 | 2 | 3 | + | - | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | 0 | , | . | = | | | 0 | , | . | = | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | RL | |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[NL] = LAYOUT_60_iso_split(
|
||||||
|
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
||||||
|
TG(NL), 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_4, KC_5, KC_6, KC_PAST, KC_PSLS, _______, KC_4, KC_5, KC_6, KC_PAST, KC_PSLS, _______,
|
||||||
|
_______, KC_7, KC_8, KC_9, KC_PPLS, KC_PMNS, _______, KC_1, KC_2, KC_3, KC_PPLS, KC_PMNS, _______, _______,
|
||||||
|
_______, KC_0, KC_COMM, KC_DOT, KC_EQL, _______, _______, _______, KC_0, KC_COMM, KC_DOT, KC_EQL, _______,
|
||||||
|
_______, _______, _______, _______, MO(FL), _______, _______, _______, TG(RL), _______),
|
||||||
|
|
||||||
|
/* Keymap RL: RGB Layer
|
||||||
|
*
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |BL | | | | | | | | | | | | |Reset |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | |tog|mod|hui|hud| | |sai|sad|vai|vad| | | |
|
||||||
|
* |------------------------------------------------------ |
|
||||||
|
* | |sta|bre|rai|swi| | |sna|kni|gra|xms| | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | |bd |bt |bi |bs | | | | | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | BL | |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[RL] = LAYOUT_60_iso_split(
|
||||||
|
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
||||||
|
TG(RL), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
|
||||||
|
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, _______, _______, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______,
|
||||||
|
_______, RGB_STA, RGB_BRE, RGB_RAI, RGB_SWI, _______, _______, RGB_SNA, RGB_KNI, RGB_GRA, RGB_XMS, _______, _______, _______,
|
||||||
|
_______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, MO(FL), _______, _______, _______, TO(BL), _______),
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void persistent_default_layer_set(uint16_t default_layer) {
|
||||||
|
eeconfig_update_default_layer(default_layer);
|
||||||
|
default_layer_set(default_layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// layer-activated RGB underglow
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
|
||||||
|
static uint8_t old_layer = 1;
|
||||||
|
uint8_t new_layer = biton32(layer_state);
|
||||||
|
|
||||||
|
if (old_layer != new_layer) {
|
||||||
|
switch (new_layer) {
|
||||||
|
case BL:
|
||||||
|
RGB_BL_MODE;
|
||||||
|
RGB_BL_LIGHT;
|
||||||
|
break;
|
||||||
|
case FL:
|
||||||
|
RGB_FL_MODE;
|
||||||
|
RGB_FL_LIGHT;
|
||||||
|
break;
|
||||||
|
case NL:
|
||||||
|
RGB_NL_MODE;
|
||||||
|
// RGB_NL_LIGHT;
|
||||||
|
break;
|
||||||
|
case RL:
|
||||||
|
RGB_RL_MODE;
|
||||||
|
// RGB_RL_LIGHT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
old_layer = new_layer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //RGBLIGHT_ENABLE
|
||||||
|
|
||||||
|
}
|
||||||
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
# 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
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
# 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
|
||||||
|
|||||||
Loaded 100 of 519 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user