mirror of
https://github.com/qmk/qmk_firmware
synced 2024-11-18 09:55:48 +00:00
mostly working
This commit is contained in:
parent
33e62c080c
commit
e9f7487518
10 changed files with 125 additions and 72 deletions
|
@ -16,10 +16,10 @@ void matrix_init_kb(void) {
|
||||||
// unused pins - C7, D4, D5, D7, E6
|
// unused pins - C7, D4, D5, D7, E6
|
||||||
// set as input with internal pull-ip enabled
|
// set as input with internal pull-ip enabled
|
||||||
DDRC &= ~(1<<7);
|
DDRC &= ~(1<<7);
|
||||||
DDRD &= ~(1<<7 | 1<<5 | 1<<4);
|
DDRD &= ~(1<<5 | 1<<4);
|
||||||
DDRE &= ~(1<<6);
|
DDRE &= ~(1<<6);
|
||||||
PORTC |= (1<<7);
|
PORTC |= (1<<7);
|
||||||
PORTD |= (1<<7 | 1<<5 | 1<<4);
|
PORTD |= (1<<5 | 1<<4);
|
||||||
PORTE |= (1<<6);
|
PORTE |= (1<<6);
|
||||||
|
|
||||||
ergodox_blink_all_leds();
|
ergodox_blink_all_leds();
|
||||||
|
@ -51,6 +51,10 @@ uint8_t init_mcp23018(void) {
|
||||||
mcp23018_status = 0x20;
|
mcp23018_status = 0x20;
|
||||||
|
|
||||||
// I2C subsystem
|
// I2C subsystem
|
||||||
|
|
||||||
|
uint8_t sreg_prev;
|
||||||
|
sreg_prev=SREG;
|
||||||
|
cli();
|
||||||
if (i2c_initialized == 0) {
|
if (i2c_initialized == 0) {
|
||||||
i2c_init(); // on pins D(1,0)
|
i2c_init(); // on pins D(1,0)
|
||||||
i2c_initialized++;
|
i2c_initialized++;
|
||||||
|
@ -79,6 +83,8 @@ uint8_t init_mcp23018(void) {
|
||||||
out:
|
out:
|
||||||
i2c_stop();
|
i2c_stop();
|
||||||
|
|
||||||
|
SREG=sreg_prev;
|
||||||
|
|
||||||
return mcp23018_status;
|
return mcp23018_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,7 @@ void matrix_init(void)
|
||||||
matrix_scan_count = 0;
|
matrix_scan_count = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
matrix_init_kb();
|
matrix_init_quantum();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
RGBLIGHT_ENABLE = yes
|
RGBLIGHT_ENABLE = yes
|
||||||
|
MIDI_ENABLE = yes
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
include ../../../../Makefile
|
include ../../../../Makefile
|
||||||
|
|
|
@ -5,10 +5,12 @@
|
||||||
|
|
||||||
/* ws2812 RGB LED */
|
/* ws2812 RGB LED */
|
||||||
#define RGB_DI_PIN D7
|
#define RGB_DI_PIN D7
|
||||||
// #define RGBLIGHT_TIMER
|
#define RGBLIGHT_TIMER
|
||||||
#define RGBLED_NUM 15 // Number of LEDs
|
#define RGBLED_NUM 15 // Number of LEDs
|
||||||
#define RGBLIGHT_HUE_STEP 12
|
#define RGBLIGHT_HUE_STEP 12
|
||||||
#define RGBLIGHT_SAT_STEP 255
|
#define RGBLIGHT_SAT_STEP 255
|
||||||
#define RGBLIGHT_VAL_STEP 12
|
#define RGBLIGHT_VAL_STEP 12
|
||||||
|
|
||||||
|
#define RGB_MIDI
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -133,13 +133,13 @@ unsigned char I2C_Write(unsigned char c)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Setleds for standard RGB
|
// Setleds for standard RGB
|
||||||
void inline ws2812_setleds(struct cRGB *ledarray, uint16_t leds)
|
void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds)
|
||||||
{
|
{
|
||||||
// ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin));
|
// ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin));
|
||||||
ws2812_setleds_pin(ledarray,leds, _BV(RGB_DI_PIN & 0xF));
|
ws2812_setleds_pin(ledarray,leds, _BV(RGB_DI_PIN & 0xF));
|
||||||
}
|
}
|
||||||
|
|
||||||
void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pinmask)
|
void inline ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t leds, uint8_t pinmask)
|
||||||
{
|
{
|
||||||
// ws2812_DDRREG |= pinmask; // Enable DDR
|
// ws2812_DDRREG |= pinmask; // Enable DDR
|
||||||
// new universal format (DDR)
|
// new universal format (DDR)
|
||||||
|
@ -150,12 +150,15 @@ void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pin
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setleds for SK6812RGBW
|
// Setleds for SK6812RGBW
|
||||||
void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds)
|
void inline ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t leds)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef RGBW_BB_TWI
|
#ifdef RGBW_BB_TWI
|
||||||
|
uint8_t sreg_prev, twcr_prev;
|
||||||
|
sreg_prev=SREG;
|
||||||
|
twcr_prev=TWCR;
|
||||||
cli();
|
cli();
|
||||||
TWCR = 0;
|
TWCR &= ~(1<<TWEN);
|
||||||
I2C_Init();
|
I2C_Init();
|
||||||
I2C_Start();
|
I2C_Start();
|
||||||
I2C_Write(0x84);
|
I2C_Write(0x84);
|
||||||
|
@ -167,9 +170,9 @@ void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds)
|
||||||
I2C_Write(curbyte);
|
I2C_Write(curbyte);
|
||||||
}
|
}
|
||||||
I2C_Stop();
|
I2C_Stop();
|
||||||
sei();
|
SREG=sreg_prev;
|
||||||
#else
|
// TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
|
||||||
_delay_us(80);
|
TWCR=twcr_prev;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -180,7 +183,9 @@ void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds)
|
||||||
ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(RGB_DI_PIN & 0xF));
|
ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(RGB_DI_PIN & 0xF));
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef RGBW_BB_TWI
|
||||||
|
_delay_us(80);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ws2812_sendarray(uint8_t *data,uint16_t datlen)
|
void ws2812_sendarray(uint8_t *data,uint16_t datlen)
|
||||||
|
|
|
@ -23,6 +23,14 @@
|
||||||
#define LIGHT_I2C_ADDR_WRITE ( (LIGHT_I2C_ADDR<<1) | I2C_WRITE )
|
#define LIGHT_I2C_ADDR_WRITE ( (LIGHT_I2C_ADDR<<1) | I2C_WRITE )
|
||||||
#define LIGHT_I2C_ADDR_READ ( (LIGHT_I2C_ADDR<<1) | I2C_READ )
|
#define LIGHT_I2C_ADDR_READ ( (LIGHT_I2C_ADDR<<1) | I2C_READ )
|
||||||
|
|
||||||
|
#define RGBW 1
|
||||||
|
|
||||||
|
#ifdef RGBW
|
||||||
|
#define LED_TYPE struct cRGBW
|
||||||
|
#else
|
||||||
|
#define LED_TYPE struct cRGB
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Structure of the LED array
|
* Structure of the LED array
|
||||||
|
@ -49,9 +57,9 @@ struct cRGBW { uint8_t g; uint8_t r; uint8_t b; uint8_t w;};
|
||||||
* - Wait 50<EFBFBD>s to reset the LEDs
|
* - Wait 50<EFBFBD>s to reset the LEDs
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void ws2812_setleds (struct cRGB *ledarray, uint16_t number_of_leds);
|
void ws2812_setleds (LED_TYPE *ledarray, uint16_t number_of_leds);
|
||||||
void ws2812_setleds_pin (struct cRGB *ledarray, uint16_t number_of_leds,uint8_t pinmask);
|
void ws2812_setleds_pin (LED_TYPE *ledarray, uint16_t number_of_leds,uint8_t pinmask);
|
||||||
void ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t number_of_leds);
|
void ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t number_of_leds);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Old interface / Internal functions
|
* Old interface / Internal functions
|
||||||
|
|
|
@ -131,6 +131,7 @@ bool process_record_quantum(keyrecord_t *record) {
|
||||||
#endif
|
#endif
|
||||||
#ifdef PRINTING_ENABLE
|
#ifdef PRINTING_ENABLE
|
||||||
process_printer(keycode, record) &&
|
process_printer(keycode, record) &&
|
||||||
|
#endif
|
||||||
#ifdef UNICODEMAP_ENABLE
|
#ifdef UNICODEMAP_ENABLE
|
||||||
process_unicode_map(keycode, record) &&
|
process_unicode_map(keycode, record) &&
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -69,15 +69,12 @@ const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {100, 50, 20};
|
||||||
|
|
||||||
rgblight_config_t rgblight_config;
|
rgblight_config_t rgblight_config;
|
||||||
rgblight_config_t inmem_config;
|
rgblight_config_t inmem_config;
|
||||||
#ifdef RGBW
|
|
||||||
struct cRGBW led[RGBLED_NUM];
|
LED_TYPE led[RGBLED_NUM];
|
||||||
#else
|
|
||||||
struct cRGB led[RGBLED_NUM];
|
|
||||||
#endif
|
|
||||||
uint8_t rgblight_inited = 0;
|
uint8_t rgblight_inited = 0;
|
||||||
|
bool rgblight_timer_enabled = false;
|
||||||
|
|
||||||
|
void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
|
||||||
void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1) {
|
|
||||||
uint8_t r = 0, g = 0, b = 0, base, color;
|
uint8_t r = 0, g = 0, b = 0, base, color;
|
||||||
|
|
||||||
if (sat == 0) { // Acromatic color (gray). Hue doesn't mind.
|
if (sat == 0) { // Acromatic color (gray). Hue doesn't mind.
|
||||||
|
@ -128,7 +125,7 @@ void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1) {
|
||||||
setrgb(r, g, b, led1);
|
setrgb(r, g, b, led1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1) {
|
void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) {
|
||||||
(*led1).r = r;
|
(*led1).r = r;
|
||||||
(*led1).g = g;
|
(*led1).g = g;
|
||||||
(*led1).b = b;
|
(*led1).b = b;
|
||||||
|
@ -145,9 +142,9 @@ void eeconfig_update_rgblight_default(void) {
|
||||||
dprintf("eeconfig_update_rgblight_default\n");
|
dprintf("eeconfig_update_rgblight_default\n");
|
||||||
rgblight_config.enable = 1;
|
rgblight_config.enable = 1;
|
||||||
rgblight_config.mode = 1;
|
rgblight_config.mode = 1;
|
||||||
rgblight_config.hue = 200;
|
rgblight_config.hue = 0;
|
||||||
rgblight_config.sat = 204;
|
rgblight_config.sat = 255;
|
||||||
rgblight_config.val = 204;
|
rgblight_config.val = 255;
|
||||||
eeconfig_update_rgblight(rgblight_config.raw);
|
eeconfig_update_rgblight(rgblight_config.raw);
|
||||||
}
|
}
|
||||||
void eeconfig_debug_rgblight(void) {
|
void eeconfig_debug_rgblight(void) {
|
||||||
|
@ -311,7 +308,7 @@ void rgblight_decrease_val(void) {
|
||||||
void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) {
|
void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) {
|
||||||
inmem_config.raw = rgblight_config.raw;
|
inmem_config.raw = rgblight_config.raw;
|
||||||
if (rgblight_config.enable) {
|
if (rgblight_config.enable) {
|
||||||
struct cRGB tmp_led;
|
LED_TYPE tmp_led;
|
||||||
sethsv(hue, sat, val, &tmp_led);
|
sethsv(hue, sat, val, &tmp_led);
|
||||||
inmem_config.hue = hue;
|
inmem_config.hue = hue;
|
||||||
inmem_config.sat = sat;
|
inmem_config.sat = sat;
|
||||||
|
@ -378,35 +375,38 @@ void rgblight_set(void) {
|
||||||
|
|
||||||
// Animation timer -- AVR Timer3
|
// Animation timer -- AVR Timer3
|
||||||
void rgblight_timer_init(void) {
|
void rgblight_timer_init(void) {
|
||||||
static uint8_t rgblight_timer_is_init = 0;
|
// static uint8_t rgblight_timer_is_init = 0;
|
||||||
if (rgblight_timer_is_init) {
|
// if (rgblight_timer_is_init) {
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
rgblight_timer_is_init = 1;
|
// rgblight_timer_is_init = 1;
|
||||||
/* Timer 3 setup */
|
// /* Timer 3 setup */
|
||||||
TCCR3B = _BV(WGM32) //CTC mode OCR3A as TOP
|
// TCCR3B = _BV(WGM32) // CTC mode OCR3A as TOP
|
||||||
| _BV(CS30); //Clock selelct: clk/1
|
// | _BV(CS30); // Clock selelct: clk/1
|
||||||
/* Set TOP value */
|
// /* Set TOP value */
|
||||||
uint8_t sreg = SREG;
|
// uint8_t sreg = SREG;
|
||||||
cli();
|
// cli();
|
||||||
OCR3AH = (RGBLED_TIMER_TOP >> 8) & 0xff;
|
// OCR3AH = (RGBLED_TIMER_TOP >> 8) & 0xff;
|
||||||
OCR3AL = RGBLED_TIMER_TOP & 0xff;
|
// OCR3AL = RGBLED_TIMER_TOP & 0xff;
|
||||||
SREG = sreg;
|
// SREG = sreg;
|
||||||
|
|
||||||
|
rgblight_timer_enabled = true;
|
||||||
}
|
}
|
||||||
void rgblight_timer_enable(void) {
|
void rgblight_timer_enable(void) {
|
||||||
TIMSK3 |= _BV(OCIE3A);
|
rgblight_timer_enabled = true;
|
||||||
dprintf("TIMER3 enabled.\n");
|
dprintf("TIMER3 enabled.\n");
|
||||||
}
|
}
|
||||||
void rgblight_timer_disable(void) {
|
void rgblight_timer_disable(void) {
|
||||||
TIMSK3 &= ~_BV(OCIE3A);
|
rgblight_timer_enabled = false;
|
||||||
dprintf("TIMER3 disabled.\n");
|
dprintf("TIMER3 disabled.\n");
|
||||||
}
|
}
|
||||||
void rgblight_timer_toggle(void) {
|
void rgblight_timer_toggle(void) {
|
||||||
TIMSK3 ^= _BV(OCIE3A);
|
rgblight_timer_enabled ^= rgblight_timer_enabled;
|
||||||
dprintf("TIMER3 toggled.\n");
|
dprintf("TIMER3 toggled.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
ISR(TIMER3_COMPA_vect) {
|
void rgblight_task(void) {
|
||||||
|
if (rgblight_timer_enabled) {
|
||||||
// mode = 1, static light, do nothing here
|
// mode = 1, static light, do nothing here
|
||||||
if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) {
|
if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) {
|
||||||
// mode = 2 to 5, breathing mode
|
// mode = 2 to 5, breathing mode
|
||||||
|
@ -424,6 +424,7 @@ ISR(TIMER3_COMPA_vect) {
|
||||||
// mode = 21 to 23, knight mode
|
// mode = 21 to 23, knight mode
|
||||||
rgblight_effect_knight(rgblight_config.mode - 21);
|
rgblight_effect_knight(rgblight_config.mode - 21);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Effects
|
// Effects
|
||||||
|
@ -461,7 +462,7 @@ void rgblight_effect_rainbow_swirl(uint8_t interval) {
|
||||||
last_timer = timer_read();
|
last_timer = timer_read();
|
||||||
for (i = 0; i < RGBLED_NUM; i++) {
|
for (i = 0; i < RGBLED_NUM; i++) {
|
||||||
hue = (360 / RGBLED_NUM * i + current_hue) % 360;
|
hue = (360 / RGBLED_NUM * i + current_hue) % 360;
|
||||||
sethsv(hue, rgblight_config.sat, rgblight_config.val, &led[i]);
|
sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i]);
|
||||||
}
|
}
|
||||||
rgblight_set();
|
rgblight_set();
|
||||||
|
|
||||||
|
@ -498,7 +499,7 @@ void rgblight_effect_snake(uint8_t interval) {
|
||||||
k = k + RGBLED_NUM;
|
k = k + RGBLED_NUM;
|
||||||
}
|
}
|
||||||
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), &led[i]);
|
sethsv(rgblight_config.hue, rgblight_config.sat, (uint8_t)(rgblight_config.val*(RGBLIGHT_EFFECT_SNAKE_LENGTH-j)/RGBLIGHT_EFFECT_SNAKE_LENGTH), (LED_TYPE *)&led[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -518,7 +519,7 @@ void rgblight_effect_knight(uint8_t interval) {
|
||||||
static uint16_t last_timer = 0;
|
static uint16_t last_timer = 0;
|
||||||
uint8_t i, j, cur;
|
uint8_t i, j, cur;
|
||||||
int8_t k;
|
int8_t k;
|
||||||
struct cRGB preled[RGBLED_NUM];
|
LED_TYPE preled[RGBLED_NUM];
|
||||||
static int8_t increment = -1;
|
static int8_t increment = -1;
|
||||||
if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) {
|
if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) {
|
||||||
return;
|
return;
|
||||||
|
@ -537,7 +538,7 @@ void rgblight_effect_knight(uint8_t interval) {
|
||||||
k = RGBLED_NUM - 1;
|
k = RGBLED_NUM - 1;
|
||||||
}
|
}
|
||||||
if (i == k) {
|
if (i == k) {
|
||||||
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, &preled[i]);
|
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&preled[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
#ifndef RGBLIGHT_H
|
#ifndef RGBLIGHT_H
|
||||||
#define RGBLIGHT_H
|
#define RGBLIGHT_H
|
||||||
|
|
||||||
#define RGBW 1
|
|
||||||
|
|
||||||
#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
|
#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
|
||||||
#define RGBLIGHT_MODES 23
|
#define RGBLIGHT_MODES 23
|
||||||
#else
|
#else
|
||||||
|
@ -35,6 +33,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define RGBLED_TIMER_TOP F_CPU/(256*64)
|
#define RGBLED_TIMER_TOP F_CPU/(256*64)
|
||||||
|
// #define RGBLED_TIMER_TOP 0xFF10
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
@ -79,10 +78,13 @@ void eeconfig_update_rgblight(uint32_t val);
|
||||||
void eeconfig_update_rgblight_default(void);
|
void eeconfig_update_rgblight_default(void);
|
||||||
void eeconfig_debug_rgblight(void);
|
void eeconfig_debug_rgblight(void);
|
||||||
|
|
||||||
void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1);
|
void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1);
|
||||||
void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1);
|
void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1);
|
||||||
void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);
|
void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);
|
||||||
|
|
||||||
|
|
||||||
|
void rgblight_task(void);
|
||||||
|
|
||||||
void rgblight_timer_init(void);
|
void rgblight_timer_init(void);
|
||||||
void rgblight_timer_enable(void);
|
void rgblight_timer_enable(void);
|
||||||
void rgblight_timer_disable(void);
|
void rgblight_timer_disable(void);
|
||||||
|
|
|
@ -71,6 +71,10 @@
|
||||||
#include "virtser.h"
|
#include "virtser.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef RGB_MIDI
|
||||||
|
#include "rgblight.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
uint8_t keyboard_idle = 0;
|
uint8_t keyboard_idle = 0;
|
||||||
/* 0: Boot Protocol, 1: Report Protocol(default) */
|
/* 0: Boot Protocol, 1: Report Protocol(default) */
|
||||||
uint8_t keyboard_protocol = 1;
|
uint8_t keyboard_protocol = 1;
|
||||||
|
@ -1045,6 +1049,10 @@ int main(void)
|
||||||
#endif
|
#endif
|
||||||
keyboard_task();
|
keyboard_task();
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
rgblight_task();
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef VIRTSER_ENABLE
|
#ifdef VIRTSER_ENABLE
|
||||||
virtser_task();
|
virtser_task();
|
||||||
CDC_Device_USBTask(&cdc_device);
|
CDC_Device_USBTask(&cdc_device);
|
||||||
|
@ -1077,15 +1085,34 @@ void fallthrough_callback(MidiDevice * device,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef RGB_MIDI
|
||||||
|
rgblight_config_t rgblight_config;
|
||||||
|
#endif
|
||||||
|
|
||||||
void cc_callback(MidiDevice * device,
|
void cc_callback(MidiDevice * device,
|
||||||
uint8_t chan, uint8_t num, uint8_t val) {
|
uint8_t chan, uint8_t num, uint8_t val) {
|
||||||
//sending it back on the next channel
|
//sending it back on the next channel
|
||||||
midi_send_cc(device, (chan + 1) % 16, num, val);
|
// midi_send_cc(device, (chan + 1) % 16, num, val);
|
||||||
|
#ifdef RGB_MIDI
|
||||||
|
rgblight_config.raw = eeconfig_read_rgblight();
|
||||||
|
switch (num) {
|
||||||
|
case 14:
|
||||||
|
rgblight_config.hue = val * 360 / 127;
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
rgblight_config.sat = val << 1;
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
rgblight_config.val = val << 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void sysex_callback(MidiDevice * device,
|
void sysex_callback(MidiDevice * device,
|
||||||
uint16_t start, uint8_t length, uint8_t * data) {
|
uint16_t start, uint8_t length, uint8_t * data) {
|
||||||
for (int i = 0; i < length; i++)
|
// for (int i = 0; i < length; i++)
|
||||||
midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i));
|
// midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue