Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
812d80efbd | ||
|
|
86c4c4e91d | ||
|
|
5f5c2a219c | ||
|
|
e415198235 | ||
|
|
b17482c3fd | ||
|
|
5b4870c046 | ||
|
|
47fc2f8855 | ||
|
|
ee29b515ec | ||
|
|
c031e13982 | ||
|
|
a6bd8fe67b | ||
|
|
db4b11f866 |
No files matched your search
+18
-1
@@ -18,7 +18,24 @@ You may use more than one slave select pin, not just the `SS` pin. This is usefu
|
|||||||
|
|
||||||
## ChibiOS/ARM Configuration
|
## ChibiOS/ARM Configuration
|
||||||
|
|
||||||
ARM support for this driver is not ready yet. Check back later!
|
You'll need to determine which pins can be used for SPI -- as an example, STM32 parts generally have multiple SPI peripherals, labeled SPI1, SPI2, SPI3 etc.
|
||||||
|
|
||||||
|
To enable SPI, modify your board's `halconf.h` to enable SPI - both `HAL_USE_SPI` and `SPI_USE_WAIT` should be `TRUE`, and `SPI_SELECT_MODE` should be `SPI_SELECT_MODE_PAD`.
|
||||||
|
Then, modify your board's `mcuconf.h` to enable the SPI peripheral you've chosen -- in the case of using SPI2, modify `STM32_SPI_USE_SPI2` to be `TRUE`.
|
||||||
|
|
||||||
|
As per the AVR configuration, you may select any other standard GPIO as a slave select pin, and can be supplied to `spi_start()`.
|
||||||
|
|
||||||
|
Configuration-wise, you'll need to set up the peripheral as per your MCU's datasheet -- the defaults match the pins for a Proton-C, i.e. STM32F303.
|
||||||
|
|
||||||
|
`config.h` override | Description | Default Value
|
||||||
|
----------------------------|---------------------------------------------------------------|--------------
|
||||||
|
`#define SPI_DRIVER` | SPI peripheral to use - SPI1 => `SPID1`, SPI2 => `SPID2` etc. | `SPID2`
|
||||||
|
`#define SPI_SCK_PIN` | The pin to use for the SCK | `B13`
|
||||||
|
`#define SPI_SCK_PAL_MODE` | The alternate function mode for the SCK pin | `5`
|
||||||
|
`#define SPI_MOSI_PIN` | The pin to use for the MOSI | `B15`
|
||||||
|
`#define SPI_MOSI_PAL_MODE` | The alternate function mode for the MOSI pin | `5`
|
||||||
|
`#define SPI_MISO_PIN` | The pin to use for the MISO | `B14`
|
||||||
|
`#define SPI_MISO_PAL_MODE` | The alternate function mode for the MISO pin | `5`
|
||||||
|
|
||||||
## Functions
|
## Functions
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,137 @@
|
|||||||
|
/* Copyright 2020 Nick Brassel (tzarc)
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "spi_master.h"
|
||||||
|
#include "quantum.h"
|
||||||
|
#include "timer.h"
|
||||||
|
|
||||||
|
static pin_t currentSlavePin = NO_PIN;
|
||||||
|
static SPIConfig spiConfig = {false, NULL, 0, 0, 0, 0};
|
||||||
|
|
||||||
|
__attribute__((weak)) void spi_init(void) {
|
||||||
|
// Try releasing special pins for a short time
|
||||||
|
palSetPadMode(PAL_PORT(SPI_SCK_PIN), PAL_PAD(SPI_SCK_PIN), PAL_MODE_INPUT);
|
||||||
|
palSetPadMode(PAL_PORT(SPI_MOSI_PIN), PAL_PAD(SPI_MOSI_PIN), PAL_MODE_INPUT);
|
||||||
|
palSetPadMode(PAL_PORT(SPI_MISO_PIN), PAL_PAD(SPI_MISO_PIN), PAL_MODE_INPUT);
|
||||||
|
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
#if defined(USE_GPIOV1)
|
||||||
|
palSetPadMode(PAL_PORT(SPI_SCK_PIN), PAL_PAD(SPI_SCK_PIN), PAL_MODE_STM32_ALTERNATE_PUSHPULL);
|
||||||
|
palSetPadMode(PAL_PORT(SPI_MOSI_PIN), PAL_PAD(SPI_MOSI_PIN), PAL_MODE_STM32_ALTERNATE_PUSHPULL);
|
||||||
|
palSetPadMode(PAL_PORT(SPI_MISO_PIN), PAL_PAD(SPI_MISO_PIN), PAL_MODE_STM32_ALTERNATE_PUSHPULL);
|
||||||
|
#else
|
||||||
|
palSetPadMode(PAL_PORT(SPI_SCK_PIN), PAL_PAD(SPI_SCK_PIN), PAL_MODE_ALTERNATE(SPI_SCK_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
|
||||||
|
palSetPadMode(PAL_PORT(SPI_MOSI_PIN), PAL_PAD(SPI_MOSI_PIN), PAL_MODE_ALTERNATE(SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
|
||||||
|
palSetPadMode(PAL_PORT(SPI_MISO_PIN), PAL_PAD(SPI_MISO_PIN), PAL_MODE_ALTERNATE(SPI_MISO_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor) {
|
||||||
|
if (currentSlavePin != NO_PIN || slavePin == NO_PIN) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t roundedDivisor = 2;
|
||||||
|
while (roundedDivisor < divisor) {
|
||||||
|
roundedDivisor <<= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roundedDivisor < 2 || roundedDivisor > 256) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
spiConfig.cr1 = 0;
|
||||||
|
|
||||||
|
if (lsbFirst) {
|
||||||
|
spiConfig.cr1 |= SPI_CR1_LSBFIRST;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
spiConfig.cr1 |= SPI_CR1_CPHA;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
spiConfig.cr1 |= SPI_CR1_CPOL;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
spiConfig.cr1 |= SPI_CR1_CPHA | SPI_CR1_CPOL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (roundedDivisor) {
|
||||||
|
case 2:
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
spiConfig.cr1 |= SPI_CR1_BR_0;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
spiConfig.cr1 |= SPI_CR1_BR_1;
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
spiConfig.cr1 |= SPI_CR1_BR_1 | SPI_CR1_BR_0;
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
spiConfig.cr1 |= SPI_CR1_BR_2;
|
||||||
|
break;
|
||||||
|
case 64:
|
||||||
|
spiConfig.cr1 |= SPI_CR1_BR_2 | SPI_CR1_BR_0;
|
||||||
|
break;
|
||||||
|
case 128:
|
||||||
|
spiConfig.cr1 |= SPI_CR1_BR_2 | SPI_CR1_BR_1;
|
||||||
|
break;
|
||||||
|
case 256:
|
||||||
|
spiConfig.cr1 |= SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentSlavePin = slavePin;
|
||||||
|
spiConfig.ssport = PAL_PORT(slavePin);
|
||||||
|
spiConfig.sspad = PAL_PAD(slavePin);
|
||||||
|
|
||||||
|
setPinOutput(slavePin);
|
||||||
|
spiStart(&SPI_DRIVER, &spiConfig);
|
||||||
|
spiSelect(&SPI_DRIVER);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
spi_status_t spi_write(uint8_t data) { return spi_transmit(&data, 1); }
|
||||||
|
|
||||||
|
spi_status_t spi_read(void) {
|
||||||
|
uint8_t data = 0;
|
||||||
|
spi_receive(&data, 1);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
spi_status_t spi_transmit(const uint8_t *data, uint16_t length) {
|
||||||
|
spiSend(&SPI_DRIVER, length, data);
|
||||||
|
return SPI_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
spi_status_t spi_receive(uint8_t *data, uint16_t length) {
|
||||||
|
spiReceive(&SPI_DRIVER, length, data);
|
||||||
|
return SPI_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void spi_stop(void) {
|
||||||
|
if (currentSlavePin != NO_PIN) {
|
||||||
|
spiUnselect(&SPI_DRIVER);
|
||||||
|
spiStop(&SPI_DRIVER);
|
||||||
|
currentSlavePin = NO_PIN;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
/* Copyright 2020 Nick Brassel (tzarc)
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ch.h>
|
||||||
|
#include <hal.h>
|
||||||
|
#include <quantum.h>
|
||||||
|
|
||||||
|
#ifndef SPI_DRIVER
|
||||||
|
# define SPI_DRIVER SPID2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SPI_SCK_PIN
|
||||||
|
# define SPI_SCK_PIN B13
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SPI_SCK_PAL_MODE
|
||||||
|
# define SPI_SCK_PAL_MODE 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SPI_MOSI_PIN
|
||||||
|
# define SPI_MOSI_PIN B15
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SPI_MOSI_PAL_MODE
|
||||||
|
# define SPI_MOSI_PAL_MODE 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SPI_MISO_PIN
|
||||||
|
# define SPI_MISO_PIN B14
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SPI_MISO_PAL_MODE
|
||||||
|
# define SPI_MISO_PAL_MODE 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef int16_t spi_status_t;
|
||||||
|
|
||||||
|
#define SPI_STATUS_SUCCESS (0)
|
||||||
|
#define SPI_STATUS_ERROR (-1)
|
||||||
|
#define SPI_STATUS_TIMEOUT (-2)
|
||||||
|
|
||||||
|
#define SPI_TIMEOUT_IMMEDIATE (0)
|
||||||
|
#define SPI_TIMEOUT_INFINITE (0xFFFF)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
void spi_init(void);
|
||||||
|
|
||||||
|
bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor);
|
||||||
|
|
||||||
|
spi_status_t spi_write(uint8_t data);
|
||||||
|
|
||||||
|
spi_status_t spi_read(void);
|
||||||
|
|
||||||
|
spi_status_t spi_transmit(const uint8_t *data, uint16_t length);
|
||||||
|
|
||||||
|
spi_status_t spi_receive(uint8_t *data, uint16_t length);
|
||||||
|
|
||||||
|
void spi_stop(void);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -22,31 +22,11 @@
|
|||||||
*/
|
*/
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
|
||||||
# include "ws2812.c"
|
|
||||||
# include "ergodox_ez.h"
|
# include "ergodox_ez.h"
|
||||||
|
|
||||||
extern rgblight_config_t rgblight_config;
|
extern rgblight_config_t rgblight_config;
|
||||||
|
|
||||||
void rgblight_set(void) {
|
void rgblight_call_driver(LED_TYPE *led, uint8_t led_num) {
|
||||||
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;
|
|
||||||
#ifdef RGBW
|
|
||||||
led[i].w = 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef RGBW
|
|
||||||
else {
|
|
||||||
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
|
||||||
convert_rgb_to_rgbw(&led[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint8_t led_num = RGBLED_NUM;
|
|
||||||
i2c_init();
|
i2c_init();
|
||||||
i2c_start(0x84, ERGODOX_EZ_I2C_TIMEOUT);
|
i2c_start(0x84, ERGODOX_EZ_I2C_TIMEOUT);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@@ -54,8 +34,8 @@ void rgblight_set(void) {
|
|||||||
// prevent right-half code from trying to bitbang all 30
|
// prevent right-half code from trying to bitbang all 30
|
||||||
// so with 30 LEDs, we count from 29 to 15 here, and the
|
// so with 30 LEDs, we count from 29 to 15 here, and the
|
||||||
// other half does 0 to 14.
|
// other half does 0 to 14.
|
||||||
led_num = RGBLED_NUM / 2;
|
uint8_t half_led_num = RGBLED_NUM / 2;
|
||||||
for (i = led_num + led_num - 1; i >= led_num; --i)
|
for (i = half_led_num + half_led_num - 1; i >= half_led_num; --i)
|
||||||
# elif defined(ERGODOX_LED_15_MIRROR)
|
# elif defined(ERGODOX_LED_15_MIRROR)
|
||||||
for (i = 0; i < led_num; ++i)
|
for (i = 0; i < led_num; ++i)
|
||||||
# else // ERGDOX_LED_15 non-mirrored
|
# else // ERGDOX_LED_15 non-mirrored
|
||||||
@@ -72,7 +52,7 @@ void rgblight_set(void) {
|
|||||||
}
|
}
|
||||||
i2c_stop();
|
i2c_stop();
|
||||||
|
|
||||||
ws2812_setleds(led, RGBLED_NUM);
|
ws2812_setleds(led, led_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ SWAP_HANDS_ENABLE= yes # Allow swapping hands of keyboard
|
|||||||
SLEEP_LED_ENABLE = no
|
SLEEP_LED_ENABLE = no
|
||||||
API_SYSEX_ENABLE = no
|
API_SYSEX_ENABLE = no
|
||||||
RGBLIGHT_ENABLE = yes
|
RGBLIGHT_ENABLE = yes
|
||||||
RGBLIGHT_CUSTOM_DRIVER = yes
|
|
||||||
|
|
||||||
RGB_MATRIX_ENABLE = no # enable later
|
RGB_MATRIX_ENABLE = no # enable later
|
||||||
DEBOUNCE_TYPE = eager_pr
|
DEBOUNCE_TYPE = eager_pr
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
// readability
|
// readability
|
||||||
#define XXX KC_NO
|
#define XXX KC_NO
|
||||||
|
|
||||||
/* TADA68 ANSI layout
|
/* SICK68 ANSI layout
|
||||||
* ,----------------------------------------------------------------.
|
* ,----------------------------------------------------------------.
|
||||||
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
|
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
|
||||||
* |----------------------------------------------------------------|
|
* |----------------------------------------------------------------|
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
* |----------------------------------------------------------------|
|
* |----------------------------------------------------------------|
|
||||||
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d| 3e |
|
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d| 3e |
|
||||||
* |----------------------------------------------------------------|
|
* |----------------------------------------------------------------|
|
||||||
* | 40 | 41 | 42 | 45 | 49| 4a| 4b| 4c| 4d| 4e |
|
* | 40 | 41 | 42 | 46 | 49| 4a| 4b| 4c| 4d| 4e |
|
||||||
* `----------------------------------------------------------------'
|
* `----------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
// The first section contains all of the arguments
|
// The first section contains all of the arguments
|
||||||
@@ -51,12 +51,12 @@
|
|||||||
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, k2d, k2e, \
|
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
|
||||||
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
|
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
|
||||||
k40, k41, k42, k45, k49, k4a, k4b, k4c, k4d, k4e \
|
k40, k41, k42, k46, k49, k4a, k4b, k4c, k4d, k4e \
|
||||||
) \
|
) \
|
||||||
{ \
|
{ \
|
||||||
{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, XXX, k2d, k2e}, \
|
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e}, \
|
||||||
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
|
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
|
||||||
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d, k4e} \
|
{k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, k49, k4a, k4b, k4c, k4d, k4e} \
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
/* USB Device descriptor parameter */
|
/* USB Device descriptor parameter */
|
||||||
#define VENDOR_ID 0x21FF
|
#define VENDOR_ID 0x21FF
|
||||||
#define PRODUCT_ID 0xAA97
|
#define PRODUCT_ID 0xAA98
|
||||||
#define DEVICE_VER 0x0002
|
#define DEVICE_VER 0x0002
|
||||||
#define MANUFACTURER westfoxtrot
|
#define MANUFACTURER westfoxtrot
|
||||||
#define PRODUCT cypher
|
#define PRODUCT cypher
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/* VIA Layout > http://www.keyboard-layout-editor.com/#/gists/0e8d4957e77f3179aa09bd6e195f7afa */
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[0] = LAYOUT_all(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_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_BSLS, 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_PEQL,
|
||||||
|
KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RALT, MO(1), KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT, KC_BSPC),
|
||||||
|
|
||||||
|
[1] = LAYOUT_all(
|
||||||
|
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, BL_TOGG, BL_STEP, BL_ON, BL_OFF, BL_INC, BL_DEC, BL_BRTG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
|
|
||||||
|
[2] = LAYOUT_all(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
|
|
||||||
|
[3] = LAYOUT_all(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
|
LTO_ENABLE = yes
|
||||||
@@ -10,6 +10,8 @@ enum custom_keycodes {
|
|||||||
QMKURL
|
QMKURL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define FN_CAPS LT(_FN, KC_CAPS)
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
/* QWERTY
|
/* QWERTY
|
||||||
@@ -18,18 +20,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
||||||
* | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | Mute |
|
* | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | Mute |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
|
||||||
* | TT(1) | A | S | D | F | G | H | J | K | L | ; | ' | Vol- | Vol+ | ENTER |
|
* | FN(CPS)| A | S | D | F | G | H | J | K | L | ; | ' | Vol- | Vol+ | ENTER |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
|
||||||
* | LSHIFT | Z | X | C | V | B | N | M | , | . | / | Home | PGUP | UP | PGDWN |
|
* | LSHIFT | Z | X | C | V | B | N | M | , | . | / | Home | PGUP | UP | PGDWN |
|
||||||
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
|
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
|
||||||
* | LCTRL | Prev | Next | LALT | SPACE | End | LEFT | DOWN | RIGHT |
|
* | LCTRL | Del | ENTER | LALT | SPACE | End | LEFT | DOWN | RIGHT |
|
||||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[_QW] = LAYOUT_ortho_5x15( /* QWERTY */
|
[_QW] = LAYOUT_ortho_5x15( /* QWERTY */
|
||||||
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC,
|
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC,
|
||||||
KC_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_MUTE,
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_MUTE,
|
||||||
TT(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_VOLD, KC_VOLU, KC_ENT,
|
FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_VOLD, KC_VOLU, KC_ENT,
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_HOME, KC_PGUP, KC_UP, KC_PGDN,
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_HOME, KC_PGUP, KC_UP, KC_PGDN,
|
||||||
KC_LCTL, KC_MPRV, KC_MNXT, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_END, KC_LEFT, KC_DOWN, KC_RGHT
|
KC_LCTL, KC_MPRV, KC_MNXT, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_END, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
),
|
),
|
||||||
@@ -38,22 +40,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
* | XXXXXXX| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | _______| _______|
|
* | XXXXXXX| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | _______| _______|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | P* | P7 | P8 | P9 | + | NumLk | PR SCR | SCR LK | PAUSE | XXXXXXX| XXXXXXX| BL_DEC | BL_INC | RGB HD | RGB HI |
|
* | _______| P7 | P8 | P9 | + | P* | XXXXXXX| PR SCR | SCR LK | PAUSE | XXXXXXX| BL_DEC | BL_INC | RGB HD | RGB HI |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | _______| P4 | P5 | P6 | PENT | CALC | XXXXXXX| POWER | XXXXXXX| RESET | XXXXXXX| BL_BRTG| BL_STEP| RGB SD | RGB SI |
|
* | _______| P4 | P5 | P6 | NumLk | CALC | XXXXXXX| POWER | XXXXXXX| RESET | XXXXXXX| BL_BRTG| BL_STEP| RGB SD | RGB SI |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | P/ | P1 | P2 | P3 | - | OS | XXXXXXX| XXXXXXX| XXXXXXX| XXXXXXX| XXXXXXX| BL_OFF | BL_ON | RGB VD | RGB VI |
|
* | _______| P1 | P2 | P3 | - | P/ | XXXXXXX| OS | PLAY | PREV | NXT | BL_OFF | BL_ON | RGB VD | RGB VI |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | CPSLCK | P0 | P. | _______| SPACE | BL_TOGG| RGB TG | RGB RMD| RGB MD |
|
* | _______| P0 | P. | PENT | SPACE | BL_TOGG| RGB TG | RGB RMD| RGB MD |
|
||||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[_FN] = LAYOUT_ortho_5x15( /* FUNCTION */
|
[_FN] = LAYOUT_ortho_5x15( /* FUNCTION */
|
||||||
XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
|
XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
|
||||||
KC_PAST, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_NLCK, KC_PSCR, KC_SLCK, KC_PAUS, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, RGB_HUD, RGB_HUI,
|
_______, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_PAST, XXXXXXX, KC_SLCK, KC_PAUS, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, RGB_HUD, RGB_HUI,
|
||||||
_______, KC_P4, KC_P5, KC_P6, KC_PENT, KC_CALC, XXXXXXX, KC_PWR, XXXXXXX, RESET, XXXXXXX, BL_BRTG, BL_STEP, RGB_SAD, RGB_SAI,
|
_______, KC_P4, KC_P5, KC_P6, KC_NLCK, KC_CALC, XXXXXXX, KC_PWR, XXXXXXX, RESET, XXXXXXX, BL_BRTG, BL_STEP, RGB_SAD, RGB_SAI,
|
||||||
KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, KC_LWIN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_OFF, BL_ON, RGB_VAD, RGB_VAI,
|
_______, KC_P1, KC_P2, KC_P3, KC_PMNS, KC_PSLS, XXXXXXX, KC_LWIN, KC_MPLY, KC_MPRV, KC_MNXT, BL_OFF, BL_ON, RGB_VAD, RGB_VAI,
|
||||||
KC_CAPS, KC_P0, KC_PDOT, _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG, RGB_TOG, RGB_RMOD,RGB_MOD
|
_______, KC_P0, KC_PDOT, KC_PENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG, RGB_TOG, RGB_RMOD,RGB_MOD
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,41 +1,47 @@
|
|||||||
# XD75 with 7U spacebar for EN-RU gamers
|
# XD75 with 7U spacebar for EN-RU gamers
|
||||||
|
|
||||||
Standard QWERTY oriented on gamers with a Russian alternative input.
|
Standard QWERTY made for gamers with a Russian alternative input.
|
||||||
Base layout is as close to classic layout as possible due to RU alphabet having more letters (thus the need for those extra keys remain on the right side).
|
The keys for extra letters in RU alphabet are where they are expected.
|
||||||
Full uncut 2x4 nav cluster.
|
Full 2x4 nav cluster.
|
||||||
Caps Lock and Win keys sent to the Function layer.
|
Volume/mute control are on base layer, Win key is on function layer.
|
||||||
TT(1) - Function layer tap-toggle at CapsLock position provides fast F-keys access in a heat of a battle. As well as easy access to a Numpad.
|
FN_CAPS provides fast F-keys access while gaming. Lefthanded Numpad operation.
|
||||||
|
NKRO is working (forced).
|
||||||
|
|
||||||
/* QWERTY
|
## QWERTY
|
||||||
|
|
||||||
|
```c
|
||||||
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
* | GESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Del | BACKSP |
|
* | GESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Del | BACKSP |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
||||||
* | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | Mute |
|
* | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | Mute |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
|
||||||
* | TT(1) | A | S | D | F | G | H | J | K | L | ; | '' | Vol- | Vol+ | ENTER |
|
* | FN(CPS)| A | S | D | F | G | H | J | K | L | ; | ' | Vol- | Vol+ | ENTER |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
|
||||||
* | LSHIFT | Z | X | C | V | B | N | M | , | . | / | Home | PGUP | UP | PGDWN |
|
* | LSHIFT | Z | X | C | V | B | N | M | , | . | / | Home | PGUP | UP | PGDWN |
|
||||||
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
|
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
|
||||||
* | LCTRL | Prev | Next | LALT | SPACE | End | LEFT | DOWN | RIGHT |
|
* | LCTRL | Del | ENTER | LALT | SPACE | End | LEFT | DOWN | RIGHT |
|
||||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
*/
|
|
||||||
|
|
||||||
/* FUNCTION
|
```
|
||||||
|
|
||||||
|
## FUNCTION
|
||||||
|
|
||||||
|
```c
|
||||||
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
* | XXXXXXX| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | _______| _______|
|
* | XXXXXXX| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | _______| _______|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | P* | P7 | P8 | P9 | + | NumLk | PR SCR | SCR LK | PAUSE | XXXXXXX| XXXXXXX| BL_DEC | BL_INC | RGB HD | RGB HI |
|
* | _______| P7 | P8 | P9 | + | P* | XXXXXXX| PR SCR | SCR LK | PAUSE | XXXXXXX| BL_DEC | BL_INC | RGB HD | RGB HI |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | _______| P4 | P5 | P6 | PENT | CALC | XXXXXXX| POWER | XXXXXXX| RESET | XXXXXXX| BL_BRTG| BL_STEP| RGB SD | RGB SI |
|
* | _______| P4 | P5 | P6 | NumLk | CALC | XXXXXXX| POWER | XXXXXXX| RESET | XXXXXXX| BL_BRTG| BL_STEP| RGB SD | RGB SI |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | P/ | P1 | P2 | P3 | - | OS | XXXXXXX| XXXXXXX| XXXXXXX| XXXXXXX| XXXXXXX| BL_OFF | BL_ON | RGB VD | RGB VI |
|
* | _______| P1 | P2 | P3 | - | P/ | XXXXXXX| OS | PLAY | PREV | NXT | BL_OFF | BL_ON | RGB VD | RGB VI |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | CPSLCK | P0 | P. | _______| SPACE | BL_TOGG| RGB TG | RGB RMD| RGB MD |
|
* | _______| P0 | P. | PENT | SPACE | BL_TOGG| RGB TG | RGB RMD| RGB MD |
|
||||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
*/
|
```
|
||||||
|
|
||||||
|
|
||||||
## LED control
|
## LEDs ID
|
||||||
|
|
||||||
Top left LED - Function layer active.
|
Top left LED - Function layer active.
|
||||||
Mid left LED - CapsLock active.
|
Mid left LED - CapsLock active.
|
||||||
+34
-36
@@ -107,23 +107,19 @@ LED_TYPE led[RGBLED_NUM];
|
|||||||
rgblight_segment_t const *const *rgblight_layers = NULL;
|
rgblight_segment_t const *const *rgblight_layers = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static uint8_t clipping_start_pos = 0;
|
rgblight_ranges_t rgblight_ranges = {0, RGBLED_NUM, 0, RGBLED_NUM, RGBLED_NUM};
|
||||||
static uint8_t clipping_num_leds = RGBLED_NUM;
|
|
||||||
static uint8_t effect_start_pos = 0;
|
|
||||||
static uint8_t effect_end_pos = RGBLED_NUM;
|
|
||||||
static uint8_t effect_num_leds = RGBLED_NUM;
|
|
||||||
|
|
||||||
void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) {
|
void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) {
|
||||||
clipping_start_pos = start_pos;
|
rgblight_ranges.clipping_start_pos = start_pos;
|
||||||
clipping_num_leds = num_leds;
|
rgblight_ranges.clipping_num_leds = num_leds;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rgblight_set_effect_range(uint8_t start_pos, uint8_t num_leds) {
|
void rgblight_set_effect_range(uint8_t start_pos, uint8_t num_leds) {
|
||||||
if (start_pos >= RGBLED_NUM) return;
|
if (start_pos >= RGBLED_NUM) return;
|
||||||
if (start_pos + num_leds > RGBLED_NUM) return;
|
if (start_pos + num_leds > RGBLED_NUM) return;
|
||||||
effect_start_pos = start_pos;
|
rgblight_ranges.effect_start_pos = start_pos;
|
||||||
effect_end_pos = start_pos + num_leds;
|
rgblight_ranges.effect_end_pos = start_pos + num_leds;
|
||||||
effect_num_leds = num_leds;
|
rgblight_ranges.effect_num_leds = num_leds;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
|
void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
|
||||||
@@ -468,15 +464,15 @@ void rgblight_sethsv_eeprom_helper(uint8_t hue, uint8_t sat, uint8_t val, bool w
|
|||||||
# else
|
# else
|
||||||
uint8_t range = RGBLED_GRADIENT_RANGES[delta / 2];
|
uint8_t range = RGBLED_GRADIENT_RANGES[delta / 2];
|
||||||
# endif
|
# endif
|
||||||
for (uint8_t i = 0; i < effect_num_leds; i++) {
|
for (uint8_t i = 0; i < rgblight_ranges.effect_num_leds; i++) {
|
||||||
uint8_t _hue = ((uint16_t)i * (uint16_t)range) / effect_num_leds;
|
uint8_t _hue = ((uint16_t)i * (uint16_t)range) / rgblight_ranges.effect_num_leds;
|
||||||
if (direction) {
|
if (direction) {
|
||||||
_hue = hue + _hue;
|
_hue = hue + _hue;
|
||||||
} else {
|
} else {
|
||||||
_hue = hue - _hue;
|
_hue = hue - _hue;
|
||||||
}
|
}
|
||||||
dprintf("rgblight rainbow set hsv: %d,%d,%d,%u\n", i, _hue, direction, range);
|
dprintf("rgblight rainbow set hsv: %d,%d,%d,%u\n", i, _hue, direction, range);
|
||||||
sethsv(_hue, sat, val, (LED_TYPE *)&led[i + effect_start_pos]);
|
sethsv(_hue, sat, val, (LED_TYPE *)&led[i + rgblight_ranges.effect_start_pos]);
|
||||||
}
|
}
|
||||||
rgblight_set();
|
rgblight_set();
|
||||||
}
|
}
|
||||||
@@ -530,7 +526,7 @@ void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint8_t i = effect_start_pos; i < effect_end_pos; i++) {
|
for (uint8_t i = rgblight_ranges.effect_start_pos; i < rgblight_ranges.effect_end_pos; i++) {
|
||||||
led[i].r = r;
|
led[i].r = r;
|
||||||
led[i].g = g;
|
led[i].g = g;
|
||||||
led[i].b = b;
|
led[i].b = b;
|
||||||
@@ -664,10 +660,12 @@ static void rgblight_layers_write(void) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
__attribute__((weak)) void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { ws2812_setleds(start_led, num_leds); }
|
||||||
|
|
||||||
#ifndef RGBLIGHT_CUSTOM_DRIVER
|
#ifndef RGBLIGHT_CUSTOM_DRIVER
|
||||||
void rgblight_set(void) {
|
void rgblight_set(void) {
|
||||||
LED_TYPE *start_led;
|
LED_TYPE *start_led;
|
||||||
uint16_t num_leds = clipping_num_leds;
|
uint8_t num_leds = rgblight_ranges.clipping_num_leds;
|
||||||
|
|
||||||
# ifdef RGBLIGHT_LAYERS
|
# ifdef RGBLIGHT_LAYERS
|
||||||
if (rgblight_layers != NULL) {
|
if (rgblight_layers != NULL) {
|
||||||
@@ -676,7 +674,7 @@ void rgblight_set(void) {
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
if (!rgblight_config.enable) {
|
if (!rgblight_config.enable) {
|
||||||
for (uint8_t i = effect_start_pos; i < effect_end_pos; i++) {
|
for (uint8_t i = rgblight_ranges.effect_start_pos; i < rgblight_ranges.effect_end_pos; i++) {
|
||||||
led[i].r = 0;
|
led[i].r = 0;
|
||||||
led[i].g = 0;
|
led[i].g = 0;
|
||||||
led[i].b = 0;
|
led[i].b = 0;
|
||||||
@@ -691,9 +689,9 @@ void rgblight_set(void) {
|
|||||||
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
||||||
led0[i] = led[pgm_read_byte(&led_map[i])];
|
led0[i] = led[pgm_read_byte(&led_map[i])];
|
||||||
}
|
}
|
||||||
start_led = led0 + clipping_start_pos;
|
start_led = led0 + rgblight_ranges.clipping_start_pos;
|
||||||
# else
|
# else
|
||||||
start_led = led + clipping_start_pos;
|
start_led = led + rgblight_ranges.clipping_start_pos;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef RGBW
|
# ifdef RGBW
|
||||||
@@ -701,7 +699,7 @@ void rgblight_set(void) {
|
|||||||
convert_rgb_to_rgbw(&start_led[i]);
|
convert_rgb_to_rgbw(&start_led[i]);
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
ws2812_setleds(start_led, num_leds);
|
rgblight_call_driver(start_led, num_leds);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -961,9 +959,9 @@ void rgblight_effect_rainbow_swirl(animation_status_t *anim) {
|
|||||||
uint8_t hue;
|
uint8_t hue;
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
for (i = 0; i < effect_num_leds; i++) {
|
for (i = 0; i < rgblight_ranges.effect_num_leds; i++) {
|
||||||
hue = (RGBLIGHT_RAINBOW_SWIRL_RANGE / effect_num_leds * i + anim->current_hue);
|
hue = (RGBLIGHT_RAINBOW_SWIRL_RANGE / rgblight_ranges.effect_num_leds * i + anim->current_hue);
|
||||||
sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i + effect_start_pos]);
|
sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i + rgblight_ranges.effect_start_pos]);
|
||||||
}
|
}
|
||||||
rgblight_set();
|
rgblight_set();
|
||||||
|
|
||||||
@@ -991,7 +989,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
|
|||||||
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
||||||
if (anim->pos == 0) { // restart signal
|
if (anim->pos == 0) { // restart signal
|
||||||
if (increment == 1) {
|
if (increment == 1) {
|
||||||
pos = effect_num_leds - 1;
|
pos = rgblight_ranges.effect_num_leds - 1;
|
||||||
} else {
|
} else {
|
||||||
pos = 0;
|
pos = 0;
|
||||||
}
|
}
|
||||||
@@ -999,8 +997,8 @@ void rgblight_effect_snake(animation_status_t *anim) {
|
|||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
for (i = 0; i < effect_num_leds; i++) {
|
for (i = 0; i < rgblight_ranges.effect_num_leds; i++) {
|
||||||
LED_TYPE *ledp = led + i + effect_start_pos;
|
LED_TYPE *ledp = led + i + rgblight_ranges.effect_start_pos;
|
||||||
ledp->r = 0;
|
ledp->r = 0;
|
||||||
ledp->g = 0;
|
ledp->g = 0;
|
||||||
ledp->b = 0;
|
ledp->b = 0;
|
||||||
@@ -1013,7 +1011,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
|
|||||||
k = k % RGBLED_NUM;
|
k = k % RGBLED_NUM;
|
||||||
}
|
}
|
||||||
if (k < 0) {
|
if (k < 0) {
|
||||||
k = k + effect_num_leds;
|
k = k + rgblight_ranges.effect_num_leds;
|
||||||
}
|
}
|
||||||
if (i == k) {
|
if (i == k) {
|
||||||
sethsv(rgblight_config.hue, rgblight_config.sat, (uint8_t)(rgblight_config.val * (RGBLIGHT_EFFECT_SNAKE_LENGTH - j) / RGBLIGHT_EFFECT_SNAKE_LENGTH), ledp);
|
sethsv(rgblight_config.hue, rgblight_config.sat, (uint8_t)(rgblight_config.val * (RGBLIGHT_EFFECT_SNAKE_LENGTH - j) / RGBLIGHT_EFFECT_SNAKE_LENGTH), ledp);
|
||||||
@@ -1023,7 +1021,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
|
|||||||
rgblight_set();
|
rgblight_set();
|
||||||
if (increment == 1) {
|
if (increment == 1) {
|
||||||
if (pos - 1 < 0) {
|
if (pos - 1 < 0) {
|
||||||
pos = effect_num_leds - 1;
|
pos = rgblight_ranges.effect_num_leds - 1;
|
||||||
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
||||||
anim->pos = 0;
|
anim->pos = 0;
|
||||||
# endif
|
# endif
|
||||||
@@ -1034,7 +1032,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
|
|||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pos = (pos + 1) % effect_num_leds;
|
pos = (pos + 1) % rgblight_ranges.effect_num_leds;
|
||||||
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
||||||
anim->pos = pos;
|
anim->pos = pos;
|
||||||
# endif
|
# endif
|
||||||
@@ -1060,7 +1058,7 @@ void rgblight_effect_knight(animation_status_t *anim) {
|
|||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
// Set all the LEDs to 0
|
// Set all the LEDs to 0
|
||||||
for (i = effect_start_pos; i < effect_end_pos; i++) {
|
for (i = rgblight_ranges.effect_start_pos; i < rgblight_ranges.effect_end_pos; i++) {
|
||||||
led[i].r = 0;
|
led[i].r = 0;
|
||||||
led[i].g = 0;
|
led[i].g = 0;
|
||||||
led[i].b = 0;
|
led[i].b = 0;
|
||||||
@@ -1070,7 +1068,7 @@ void rgblight_effect_knight(animation_status_t *anim) {
|
|||||||
}
|
}
|
||||||
// Determine which LEDs should be lit up
|
// Determine which LEDs should be lit up
|
||||||
for (i = 0; i < RGBLIGHT_EFFECT_KNIGHT_LED_NUM; i++) {
|
for (i = 0; i < RGBLIGHT_EFFECT_KNIGHT_LED_NUM; i++) {
|
||||||
cur = (i + RGBLIGHT_EFFECT_KNIGHT_OFFSET) % effect_num_leds + effect_start_pos;
|
cur = (i + RGBLIGHT_EFFECT_KNIGHT_OFFSET) % rgblight_ranges.effect_num_leds + rgblight_ranges.effect_start_pos;
|
||||||
|
|
||||||
if (i >= low_bound && i <= high_bound) {
|
if (i >= low_bound && i <= high_bound) {
|
||||||
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[cur]);
|
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[cur]);
|
||||||
@@ -1107,9 +1105,9 @@ void rgblight_effect_christmas(animation_status_t *anim) {
|
|||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
anim->current_offset = (anim->current_offset + 1) % 2;
|
anim->current_offset = (anim->current_offset + 1) % 2;
|
||||||
for (i = 0; i < effect_num_leds; i++) {
|
for (i = 0; i < rgblight_ranges.effect_num_leds; i++) {
|
||||||
hue = 0 + ((i / RGBLIGHT_EFFECT_CHRISTMAS_STEP + anim->current_offset) % 2) * 85;
|
hue = 0 + ((i / RGBLIGHT_EFFECT_CHRISTMAS_STEP + anim->current_offset) % 2) * 85;
|
||||||
sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i + effect_start_pos]);
|
sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i + rgblight_ranges.effect_start_pos]);
|
||||||
}
|
}
|
||||||
rgblight_set();
|
rgblight_set();
|
||||||
}
|
}
|
||||||
@@ -1148,11 +1146,11 @@ void rgblight_effect_rgbtest(animation_status_t *anim) {
|
|||||||
|
|
||||||
#ifdef RGBLIGHT_EFFECT_ALTERNATING
|
#ifdef RGBLIGHT_EFFECT_ALTERNATING
|
||||||
void rgblight_effect_alternating(animation_status_t *anim) {
|
void rgblight_effect_alternating(animation_status_t *anim) {
|
||||||
for (int i = 0; i < effect_num_leds; i++) {
|
for (int i = 0; i < rgblight_ranges.effect_num_leds; i++) {
|
||||||
LED_TYPE *ledp = led + i + effect_start_pos;
|
LED_TYPE *ledp = led + i + rgblight_ranges.effect_start_pos;
|
||||||
if (i < effect_num_leds / 2 && anim->pos) {
|
if (i < rgblight_ranges.effect_num_leds / 2 && anim->pos) {
|
||||||
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, ledp);
|
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, ledp);
|
||||||
} else if (i >= effect_num_leds / 2 && !anim->pos) {
|
} else if (i >= rgblight_ranges.effect_num_leds / 2 && !anim->pos) {
|
||||||
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, ledp);
|
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, ledp);
|
||||||
} else {
|
} else {
|
||||||
sethsv(rgblight_config.hue, rgblight_config.sat, 0, ledp);
|
sethsv(rgblight_config.hue, rgblight_config.sat, 0, ledp);
|
||||||
|
|||||||
+15
-4
@@ -130,7 +130,7 @@ enum RGBLIGHT_EFFECT_MODE {
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifndef RGBLIGHT_EFFECT_KNIGHT_LED_NUM
|
# ifndef RGBLIGHT_EFFECT_KNIGHT_LED_NUM
|
||||||
# define RGBLIGHT_EFFECT_KNIGHT_LED_NUM (effect_num_leds)
|
# define RGBLIGHT_EFFECT_KNIGHT_LED_NUM (rgblight_ranges.effect_num_leds)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifndef RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL
|
# ifndef RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL
|
||||||
@@ -160,9 +160,7 @@ enum RGBLIGHT_EFFECT_MODE {
|
|||||||
# include <stdint.h>
|
# include <stdint.h>
|
||||||
# include <stdbool.h>
|
# include <stdbool.h>
|
||||||
# include "eeconfig.h"
|
# include "eeconfig.h"
|
||||||
# ifndef RGBLIGHT_CUSTOM_DRIVER
|
# include "ws2812.h"
|
||||||
# include "ws2812.h"
|
|
||||||
# endif
|
|
||||||
# include "color.h"
|
# include "color.h"
|
||||||
# include "rgblight_list.h"
|
# include "rgblight_list.h"
|
||||||
|
|
||||||
@@ -230,6 +228,19 @@ typedef struct _rgblight_status_t {
|
|||||||
# endif
|
# endif
|
||||||
} rgblight_status_t;
|
} rgblight_status_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure for RGB Light clipping ranges
|
||||||
|
*/
|
||||||
|
typedef struct _rgblight_ranges_t {
|
||||||
|
uint8_t clipping_start_pos;
|
||||||
|
uint8_t clipping_num_leds;
|
||||||
|
uint8_t effect_start_pos;
|
||||||
|
uint8_t effect_end_pos;
|
||||||
|
uint8_t effect_num_leds;
|
||||||
|
} rgblight_ranges_t;
|
||||||
|
|
||||||
|
extern rgblight_ranges_t rgblight_ranges;
|
||||||
|
|
||||||
/* === Utility Functions ===*/
|
/* === Utility Functions ===*/
|
||||||
void sethsv(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1);
|
void sethsv(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1);
|
||||||
void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1); // without RGBLIGHT_LIMIT_VAL check
|
void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1); // without RGBLIGHT_LIMIT_VAL check
|
||||||
|
|||||||
@@ -156,7 +156,7 @@
|
|||||||
* @brief Enables the SPI subsystem.
|
* @brief Enables the SPI subsystem.
|
||||||
*/
|
*/
|
||||||
# if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
|
# if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
|
||||||
# define HAL_USE_SPI FALSE
|
# define HAL_USE_SPI TRUE
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -227,7 +227,7 @@
|
|||||||
* SPI driver system settings.
|
* SPI driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_SPI_USE_SPI1 FALSE
|
#define STM32_SPI_USE_SPI1 FALSE
|
||||||
#define STM32_SPI_USE_SPI2 FALSE
|
#define STM32_SPI_USE_SPI2 TRUE
|
||||||
#define STM32_SPI_USE_SPI3 FALSE
|
#define STM32_SPI_USE_SPI3 FALSE
|
||||||
#define STM32_SPI_SPI1_DMA_PRIORITY 1
|
#define STM32_SPI_SPI1_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
||||||
|
|||||||
Reference in new issue
Block a user