~ruther/qmk_firmware

afacd42368e0dc7627a695508f15598b38429c63 — yiancar 7 years ago 23df5fb
Add effect speed support for RGB Matrix *No EEPROM yet*  (#2922)

* Added Modular keyboards L,R and NUM

Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split

* Remove modular from master

This is to fix incorrect branching

* Add effect speed support for RGB Matrix *No eeprom yet*

Keycodes RGB_SPI and RGB_SPD have been added to increase and decrease effect speed.

Speed is not saved in EEPROM yet as per Jack's request.

* Update rgb_matrix.c

* RGB Matrix speed fix rgblight.h

* More fixes for rgb speed. Speed functions declared but not used in rgblight

* More travis fixes..

* Another one for travis..
M docs/feature_rgb_matrix.md => docs/feature_rgb_matrix.md +2 -0
@@ 69,6 69,8 @@ All RGB keycodes are currently shared with the RGBLIGHT system:
	* `RGB_SAD` - decrease saturation
	* `RGB_VAI` - increase value
	* `RGB_VAD` - decrease value
	* `RGB_SPI` - increase speed effect (no EEPROM support)
	* `RGB_SPD` - decrease speed effect (no EEPROM support)


	* `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system

M quantum/quantum.c => quantum/quantum.c +10 -0
@@ 368,6 368,16 @@ bool process_record_quantum(keyrecord_t *record) {
      rgblight_decrease_val();
    }
    return false;
  case RGB_SPI:
    if (record->event.pressed) {
      rgblight_increase_speed();
    }
    return false;
  case RGB_SPD:
    if (record->event.pressed) {
      rgblight_decrease_speed();
    }
    return false;
  case RGB_MODE_PLAIN:
    if (record->event.pressed) {
      rgblight_mode(1);

M quantum/quantum_keycodes.h => quantum/quantum_keycodes.h +2 -0
@@ 413,6 413,8 @@ enum quantum_keycodes {
    RGB_SAD,
    RGB_VAI,
    RGB_VAD,
    RGB_SPI,
    RGB_SPD,
    RGB_MODE_PLAIN,
    RGB_MODE_BREATHE,
    RGB_MODE_RAINBOW,

M quantum/rgb.h => quantum/rgb.h +6 -0
@@ 44,4 44,10 @@ void rgblight_increase_val(void) {};
__attribute__((weak))
void rgblight_decrease_val(void) {};

__attribute__((weak))
void rgblight_increase_speed(void) {};

__attribute__((weak))
void rgblight_decrease_speed(void) {};

#endif
\ No newline at end of file

M quantum/rgb_matrix.c => quantum/rgb_matrix.c +15 -3
@@ 69,6 69,7 @@ void eeconfig_update_rgb_matrix_default(void) {
  rgb_matrix_config.hue = 0;
  rgb_matrix_config.sat = 255;
  rgb_matrix_config.val = 255;
  rgb_matrix_config.speed = 0;
  eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
}
void eeconfig_debug_rgb_matrix(void) {


@@ 78,6 79,7 @@ void eeconfig_debug_rgb_matrix(void) {
  dprintf("rgb_matrix_config.hue = %d\n", rgb_matrix_config.hue);
  dprintf("rgb_matrix_config.sat = %d\n", rgb_matrix_config.sat);
  dprintf("rgb_matrix_config.val = %d\n", rgb_matrix_config.val);
  dprintf("rgb_matrix_config.speed = %d\n", rgb_matrix_config.speed);
}

// Last led hit


@@ 343,7 345,7 @@ void rgb_matrix_raindrops(bool initialize) {
}

void rgb_matrix_cycle_all(void) {
    uint8_t offset = g_tick & 0xFF;
    uint8_t offset = ( g_tick << rgb_matrix_config.speed ) & 0xFF;

    rgb_led led;



@@ 364,7 366,7 @@ void rgb_matrix_cycle_all(void) {
}

void rgb_matrix_cycle_left_right(void) {
    uint8_t offset = g_tick & 0xFF;
    uint8_t offset = ( g_tick << rgb_matrix_config.speed ) & 0xFF;
    HSV hsv = { .h = 0, .s = 255, .v = rgb_matrix_config.val };
    RGB rgb;
    Point point;


@@ 388,7 390,7 @@ void rgb_matrix_cycle_left_right(void) {
}

void rgb_matrix_cycle_up_down(void) {
    uint8_t offset = g_tick & 0xFF;
    uint8_t offset = ( g_tick << rgb_matrix_config.speed ) & 0xFF;
    HSV hsv = { .h = 0, .s = 255, .v = rgb_matrix_config.val };
    RGB rgb;
    Point point;


@@ 863,6 865,16 @@ void rgblight_decrease_val(void) {
    eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
}

void rgblight_increase_speed(void) {
    rgb_matrix_config.speed = increment( rgb_matrix_config.speed, 1, 0, 3 );
    eeconfig_update_rgb_matrix(rgb_matrix_config.raw);//EECONFIG needs to be increased to support this
}

void rgblight_decrease_speed(void) {
    rgb_matrix_config.speed = decrement( rgb_matrix_config.speed, 1, 0, 3 );
    eeconfig_update_rgb_matrix(rgb_matrix_config.raw);//EECONFIG needs to be increased to support this
}

void rgblight_mode(uint8_t mode) {
    rgb_matrix_config.mode = mode;
    eeconfig_update_rgb_matrix(rgb_matrix_config.raw);

M quantum/rgb_matrix.h => quantum/rgb_matrix.h +3 -0
@@ 58,6 58,7 @@ typedef union {
    uint16_t hue     :9;
    uint8_t  sat     :8;
    uint8_t  val     :8;
    uint8_t  speed   :8;//EECONFIG needs to be increased to support this
  };
} rgb_config_t;



@@ 129,6 130,8 @@ void rgblight_increase_sat(void);
void rgblight_decrease_sat(void);
void rgblight_increase_val(void);
void rgblight_decrease_val(void);
void rgblight_increase_speed(void);
void rgblight_decrease_speed(void);
void rgblight_mode(uint8_t mode);
uint32_t rgblight_get_mode(void);


M quantum/rgblight.c => quantum/rgblight.c +26 -0
@@ 27,6 27,9 @@
#define RGBLIGHT_LIMIT_VAL 255
#endif

#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))

__attribute__ ((weak))
const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5};
__attribute__ ((weak))


@@ 122,6 125,7 @@ void eeconfig_update_rgblight_default(void) {
  rgblight_config.hue = 0;
  rgblight_config.sat = 255;
  rgblight_config.val = RGBLIGHT_LIMIT_VAL;
  rgblight_config.speed = 0;
  eeconfig_update_rgblight(rgblight_config.raw);
}
void eeconfig_debug_rgblight(void) {


@@ 131,6 135,7 @@ void eeconfig_debug_rgblight(void) {
  dprintf("rgblight_config.hue = %d\n", rgblight_config.hue);
  dprintf("rgblight_config.sat = %d\n", rgblight_config.sat);
  dprintf("rgblight_config.val = %d\n", rgblight_config.val);
  dprintf("rgblight_config.speed = %d\n", rgblight_config.speed);
}

void rgblight_init(void) {


@@ 280,6 285,18 @@ void rgblight_disable(void) {
  rgblight_set();
}

// Deals with the messy details of incrementing an integer
uint8_t increment( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) {
    int16_t new_value = value;
    new_value += step;
    return MIN( MAX( new_value, min ), max );
}

uint8_t decrement( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) {
    int16_t new_value = value;
    new_value -= step;
    return MIN( MAX( new_value, min ), max );
}

void rgblight_increase_hue(void) {
  uint16_t hue;


@@ 331,6 348,15 @@ void rgblight_decrease_val(void) {
  }
  rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val);
}
void rgblight_increase_speed(void) {
    rgblight_config.speed = increment( rgblight_config.speed, 1, 0, 3 );
    eeconfig_update_rgblight(rgblight_config.raw);//EECONFIG needs to be increased to support this
}

void rgblight_decrease_speed(void) {
    rgblight_config.speed = decrement( rgblight_config.speed, 1, 0, 3 );
    eeconfig_update_rgblight(rgblight_config.raw);//EECONFIG needs to be increased to support this
}

void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) {
  inmem_config.raw = rgblight_config.raw;

M quantum/rgblight.h => quantum/rgblight.h +6 -0
@@ 92,6 92,7 @@ typedef union {
    uint16_t hue     :9;
    uint8_t  sat     :8;
    uint8_t  val     :8;
    uint8_t  speed   :8;//EECONFIG needs to be increased to support this
  };
} rgblight_config_t;



@@ 113,6 114,8 @@ void rgblight_increase_sat(void);
void rgblight_decrease_sat(void);
void rgblight_increase_val(void);
void rgblight_decrease_val(void);
void rgblight_increase_speed(void);
void rgblight_decrease_speed(void);
void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val);
uint16_t rgblight_get_hue(void);
uint8_t rgblight_get_sat(void);


@@ 126,6 129,9 @@ void eeconfig_update_rgblight(uint32_t val);
void eeconfig_update_rgblight_default(void);
void eeconfig_debug_rgblight(void);

void rgb_matrix_increase(void);
void rgb_matrix_decrease(void);

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, LED_TYPE *led1);
void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);