qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

starlight_dual_hue_anim.h (1472B)


      1 #ifdef ENABLE_RGB_MATRIX_STARLIGHT_DUAL_HUE
      2 RGB_MATRIX_EFFECT(STARLIGHT_DUAL_HUE)
      3 #    ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
      4 
      5 static void set_starlight_dual_hue_color(uint8_t i, effect_params_t* params) {
      6     if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) return;
      7 
      8     uint16_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 8);
      9     hsv_t    hsv  = rgb_matrix_config.hsv;
     10     hsv.v         = scale8(abs8(sin8(time) - 128) * 2, hsv.v);
     11     hsv.h         = hsv.h + random8_max(31);
     12     rgb_t rgb     = rgb_matrix_hsv_to_rgb(hsv);
     13     rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
     14 }
     15 
     16 bool STARLIGHT_DUAL_HUE(effect_params_t* params) {
     17     static uint16_t index = RGB_MATRIX_LED_COUNT + 1;
     18 
     19     // Periodic trigger for LED change
     20     if ((params->iter == 0) && (scale16by8(g_rgb_timer, qadd8(rgb_matrix_config.speed, 5)) % 5 == 0)) {
     21         index = random8_max(RGB_MATRIX_LED_COUNT);
     22     }
     23 
     24     RGB_MATRIX_USE_LIMITS(led_min, led_max);
     25     if (params->init) {
     26         for (uint8_t i = led_min; i < led_max; i++) {
     27             set_starlight_dual_hue_color(i, params);
     28         }
     29     }
     30     // Change LED once and set index out of range till next trigger
     31     else if (led_min <= index && index < led_max) {
     32         set_starlight_dual_hue_color(index, params);
     33         index = RGB_MATRIX_LED_COUNT + 1;
     34     }
     35     return rgb_matrix_check_finished_leds(led_max);
     36 }
     37 
     38 #    endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
     39 #endif     // ENABLE_RGB_MATRIX_STARLIGHT_DUAL_HUE