Compare commits

...
11 Commits
Author SHA1 Message Date
QMK Bot 812d80efbd format code according to conventions [skip ci] 2020-04-29 08:57:41 +00:00
Drashna Jaelre 86c4c4e91d Convert clipping variables in rgblight.c to a structure (#7720) 2020-04-29 10:22:28 +02:00
yd-null 5f5c2a219c [Keyboard] Add via support for cypher rev5 PCB (#8898) 2020-04-28 21:42:50 -07:00
Drashna JaelreandJoel Challis e415198235 A few final edits to the keymap and readme. (#8845)
* A few final edits to the keymap and readme.

* Update keyboards/xd75/keymaps/buzzlighter1/readme.md

Co-Authored-By: Joel Challis <[email protected]>

* Update keyboards/xd75/keymaps/buzzlighter1/readme.md

Co-Authored-By: Joel Challis <[email protected]>

* Update keyboards/xd75/keymaps/buzzlighter1/readme.md

Co-Authored-By: Joel Challis <[email protected]>

* Update keyboards/xd75/keymaps/buzzlighter1/readme.md

Co-Authored-By: Joel Challis <[email protected]>

Co-authored-by: Joel Challis <[email protected]>
2020-04-28 21:01:52 -07:00
Nick Brassel b17482c3fd Add SPI master for ChibiOS/ARM. (#8779) 2020-04-29 14:01:20 +10:00
Umberto BaldiandJoel Challis 5b4870c046 fix sick68 space key handwiring location (#8962)
* fix space key handwiring location

* fix mechmerlin layout

* Revert changes from mechmerlin layout

Co-Authored-By: Joel Challis <[email protected]>

* Update layouts/community/65_ansi/mechmerlin/keymap.c

* revert

Co-authored-by: Joel Challis <[email protected]>
2020-04-29 00:45:51 +01:00
buzzlighter1andJoel Challis 47fc2f8855 Update keyboards/xd75/keymaps/buzzlighter1/readme.md
Co-Authored-By: Joel Challis <[email protected]>
2020-04-25 15:22:05 +03:00
buzzlighter1andJoel Challis ee29b515ec Update keyboards/xd75/keymaps/buzzlighter1/readme.md
Co-Authored-By: Joel Challis <[email protected]>
2020-04-25 15:21:57 +03:00
buzzlighter1andJoel Challis c031e13982 Update keyboards/xd75/keymaps/buzzlighter1/readme.md
Co-Authored-By: Joel Challis <[email protected]>
2020-04-25 15:21:34 +03:00
buzzlighter1andJoel Challis a6bd8fe67b Update keyboards/xd75/keymaps/buzzlighter1/readme.md
Co-Authored-By: Joel Challis <[email protected]>
2020-04-18 20:32:24 +03:00
buzzlighter1 db4b11f866 A few final edits to the keymap and readme. 2020-04-18 18:16:11 +03:00
15 changed files with 365 additions and 100 deletions

No files matched your search

+18 -1
View File
@@ -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
+137
View File
@@ -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;
}
}
+78
View File
@@ -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
+4 -24
View File
@@ -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);
} }
-1
View File
@@ -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
+4 -4
View File
@@ -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} \
} }
+1 -1
View File
@@ -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
+13 -11
View File
@@ -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
) )
}; };
+22 -16
View File
@@ -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
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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
/** /**
+1 -1
View File
@@ -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