mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-04 07:12:33 +01:00 
			
		
		
		
	mostly working
This commit is contained in:
		
							parent
							
								
									33e62c080c
								
							
						
					
					
						commit
						e9f7487518
					
				@ -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
 | 
				
			||||||
@ -425,6 +425,7 @@ ISR(TIMER3_COMPA_vect) {
 | 
				
			|||||||
      rgblight_effect_knight(rgblight_config.mode - 21);
 | 
					      rgblight_effect_knight(rgblight_config.mode - 21);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Effects
 | 
					// Effects
 | 
				
			||||||
void rgblight_effect_breathing(uint8_t interval) {
 | 
					void rgblight_effect_breathing(uint8_t interval) {
 | 
				
			||||||
@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user