~ruther/qmk_firmware

583cde398a28e429485b440de38a2ed9ec528830 — Ryan 1 year, 1 month ago c038292
Un-`extern` RGBLight `led[]` array (#23322)

M docs/feature_rgblight.md => docs/feature_rgblight.md +0 -15
@@ 356,27 356,12 @@ Usually lighting layers apply their configured brightness once activated. If you

If you need to change your RGB lighting in code, for example in a macro to change the color whenever you switch layers, QMK provides a set of functions to assist you. See [`rgblight.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight/rgblight.h) for the full list, but the most commonly used functions include:

### Utility Functions
|Function                                    |Description                                                        |
|--------------------------------------------|-------------------------------------------------------------------|
|`sethsv(hue, sat, val, ledbuf)`             |Set ledbuf to the given HSV value                                  |
|`sethsv_raw(hue, sat, val, ledbuf)`         |Set ledbuf to the given HSV value without RGBLIGHT_LIMIT_VAL check |
|`setrgb(r, g, b, ledbuf)`                   |Set ledbuf to the given RGB value where `r`/`g`/`b`                |

### Low level Functions
|Function                                    |Description                                |
|--------------------------------------------|-------------------------------------------|
|`rgblight_set()`                            |Flush out led buffers to LEDs              |
|`rgblight_set_clipping_range(pos, num)`     |Set clipping Range. see [Clipping Range](#clipping-range) |

Example:
```c
sethsv(HSV_WHITE, (rgb_led_t *)&led[0]); // led 0
sethsv(HSV_RED,   (rgb_led_t *)&led[1]); // led 1
sethsv(HSV_GREEN, (rgb_led_t *)&led[2]); // led 2
rgblight_set(); // Utility functions do not call rgblight_set() automatically, so they need to be called explicitly.
```

### Effects and Animations Functions
#### effect range setting
|Function                                    |Description       |

M keyboards/hineybush/hbcp/hbcp.c => keyboards/hineybush/hbcp/hbcp.c +1 -4
@@ 82,12 82,9 @@ void keyboard_post_init_user(void) {

__attribute__ ((weak))
void hbcp_sethsv_range(uint8_t hue, uint8_t sat, uint8_t val, uint8_t start, uint8_t end) {
  rgb_led_t tmp_led;
  sethsv_raw(hue, sat, val, &tmp_led);
  for (uint8_t i = start; i < end; i++) {
      led[i] = tmp_led;
      rgblight_sethsv_at(hue, sat, val, i);
  }
  rgblight_set();
}

#endif

M keyboards/hineybush/hbcp/keymaps/hiney/keymap.c => keyboards/hineybush/hbcp/keymaps/hiney/keymap.c +6 -44
@@ 15,13 15,6 @@
 */
#include QMK_KEYBOARD_H

// Defines the keycodes used by our macros in process_record_user
enum custom_keycodes {
  QMKBEST = SAFE_RANGE,
  ALTCUT,
  QMKURL
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [0] = LAYOUT_wkl( /* Base */


@@ 45,55 38,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    ),
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case ALTCUT:
      if (record->event.pressed) {
        // when keycode QMKBEST is pressed
        send_string_with_delay_P(PSTR(SS_TAP(X_TAB)SS_TAP(X_T)SS_TAP(X_V)SS_TAP(X_B)), 20); // altium macro
      } else {
        // when keycode QMKBEST is released
      }
      break;
    case QMKURL:
      if (record->event.pressed) {
        // when keycode QMKURL is pressed
        SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
      } else {
        // when keycode QMKURL is released
      }
      break;
  }
  return true;
}

void matrix_init_user(void) {

}

void matrix_scan_user(void) {

}

#ifdef RGBLIGHT_ENABLE
// The first three LEDs are used as indicators for CAPS_LOCK, NUM_LOCK and SCROLL_LOCK.
bool led_update_user(led_t led_state) {
    if (led_state.caps_lock) {
        sethsv_raw(HSV_SOFT_RED, (rgb_led_t *)&led[0]);
        rgblight_sethsv_at(HSV_SOFT_RED, 0);
    } else {
        sethsv(HSV_BLACK, (rgb_led_t *)&led[0]);
        rgblight_sethsv_at(HSV_BLACK, 0);
    }
    if (led_state.num_lock) {
        sethsv_raw(HSV_WARM_WHITE, (rgb_led_t *)&led[1]);
        rgblight_sethsv_at(HSV_WARM_WHITE, 1);
    } else {
        sethsv(HSV_BLACK, (rgb_led_t *)&led[1]);
        rgblight_sethsv_at(HSV_BLACK, 1);
    }
    if (led_state.scroll_lock) {
        sethsv_raw(HSV_SOFT_BLUE, (rgb_led_t *)&led[2]);
        rgblight_sethsv_at(HSV_SOFT_BLUE, 2);
    } else {
        sethsv(HSV_BLACK, (rgb_led_t *)&led[2]);
        rgblight_sethsv_at(HSV_BLACK, 2);
    }
    rgblight_set();
    return false;
}


M keyboards/neson_design/nico/info.json => keyboards/neson_design/nico/info.json +1 -2
@@ 25,8 25,7 @@
        "pin": "B0"
    },
    "rgblight": {
        "led_count": 5,
        "driver": "custom"
        "led_count": 5
    },
    "url": "",
    "usb": {

D keyboards/neson_design/nico/nico.c => keyboards/neson_design/nico/nico.c +0 -90
@@ 1,90 0,0 @@
/**
 * @file nico.c
 *
    Copyright 2023 astro

    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 2 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 <http://www.gnu.org/licenses/>.
 */

#include "quantum.h"
#include "ws2812.h"
#ifdef RGBLIGHT_ENABLE

static bool alert = false;
static bool backup = false;
static rgb_led_t caps_led;
static uint16_t last_ticks = 0;

#define ALERT_INTERVAL      500
#define ALERM_LED_R     0xFF
#define ALERM_LED_G     0xA5
#define ALERM_LED_B     0x00
//golden 0xFF, 0xD9, 0x00

void housekeeping_task_kb(void)
{
    if (host_keyboard_led_state().caps_lock) {
        if (!backup) {
            caps_led.r = led[4].r;
            caps_led.g = led[4].g;
            caps_led.b = led[4].b;
            backup = true;
        }
        if(alert) {
            led[4].r = ALERM_LED_G;
            led[4].g = ALERM_LED_R;
            led[4].b = ALERM_LED_B;
        } else {
            led[4].r = 0;
            led[4].g = 0;
            led[4].b = 0;
        }
        if (timer_elapsed(last_ticks) > ALERT_INTERVAL) {
            alert = !alert;
            last_ticks = timer_read();
        }
        ws2812_setleds(led, RGBLIGHT_LED_COUNT);
    } else {
        if (backup) {
            led[4].r = caps_led.r;
            led[4].g = caps_led.g;
            led[4].b = caps_led.b;
            backup = false;
            ws2812_setleds(led, RGBLIGHT_LED_COUNT);
        }
    }
    housekeeping_task_user();
}

void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
    start_led[2].r = start_led[0].r;
    start_led[2].g = start_led[0].g;
    start_led[2].b = start_led[0].b;

    start_led[3].r = start_led[1].r;
    start_led[3].g = start_led[1].g;
    start_led[3].b = start_led[1].b;

    uint8_t tmp = start_led[4].g;
    start_led[4].g = start_led[4].r;
    start_led[4].r = tmp;
    ws2812_setleds(start_led, RGBLIGHT_LED_COUNT);
}

const rgblight_driver_t rgblight_driver = {
    .init    = ws2812_init,
    .setleds = setleds_custom,
};
#endif
\ No newline at end of file

M keyboards/neson_design/nico/rules.mk => keyboards/neson_design/nico/rules.mk +0 -1
@@ 1,1 0,0 @@
WS2812_DRIVER_REQUIRED = yes

M keyboards/snes_macropad/snes_macropad.c => keyboards/snes_macropad/snes_macropad.c +0 -16
@@ 86,22 86,6 @@ static void setupForFlashing(void) {

    // Force data to be rendered
    oled_render_dirty(true);

    // Set alternating backlight colors
    const uint8_t max = 20;
    rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
    for (size_t i = 0; i < RGBLIGHT_LED_COUNT; ++i) {
        rgb_led_t *led_ = (rgb_led_t *)&led[i];
        switch (i % 2) {
            case 0:
                setrgb(max, 0, max, led_);
                break;
            case 1:
                setrgb(0, max, max, led_);
                break;
        }
    }
    rgblight_set();
}

bool process_record_kb(uint16_t keycode, keyrecord_t *record) {

M quantum/rgblight/rgblight.c => quantum/rgblight/rgblight.c +9 -9
@@ 145,6 145,15 @@ __attribute__((weak)) RGB rgblight_hsv_to_rgb(HSV hsv) {
    return hsv_to_rgb(hsv);
}

void setrgb(uint8_t r, uint8_t g, uint8_t b, rgb_led_t *led1) {
    led1->r = r;
    led1->g = g;
    led1->b = b;
#ifdef RGBW
    led1->w = 0;
#endif
}

void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, rgb_led_t *led1) {
    HSV hsv = {hue, sat, val};
    RGB rgb = rgblight_hsv_to_rgb(hsv);


@@ 155,15 164,6 @@ void sethsv(uint8_t hue, uint8_t sat, uint8_t val, rgb_led_t *led1) {
    sethsv_raw(hue, sat, val > RGBLIGHT_LIMIT_VAL ? RGBLIGHT_LIMIT_VAL : val, led1);
}

void setrgb(uint8_t r, uint8_t g, uint8_t b, rgb_led_t *led1) {
    led1->r = r;
    led1->g = g;
    led1->b = b;
#ifdef RGBW
    led1->w = 0;
#endif
}

void rgblight_check_config(void) {
    /* Add some out of bound checks for RGB light config */


M quantum/rgblight/rgblight.h => quantum/rgblight/rgblight.h +0 -7
@@ 240,8 240,6 @@ void rgblight_unblink_all_but_layer(uint8_t layer);

#endif

extern rgb_led_t led[RGBLIGHT_LED_COUNT];

extern const uint8_t  RGBLED_BREATHING_INTERVALS[4] PROGMEM;
extern const uint8_t  RGBLED_RAINBOW_MOOD_INTERVALS[3] PROGMEM;
extern const uint8_t  RGBLED_RAINBOW_SWIRL_INTERVALS[3] PROGMEM;


@@ 290,11 288,6 @@ typedef struct _rgblight_ranges_t {

extern rgblight_ranges_t rgblight_ranges;

/* === Utility Functions ===*/
void sethsv(uint8_t hue, uint8_t sat, uint8_t val, rgb_led_t *led1);
void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, rgb_led_t *led1); // without RGBLIGHT_LIMIT_VAL check
void setrgb(uint8_t r, uint8_t g, uint8_t b, rgb_led_t *led1);

/* === Low level Functions === */
void rgblight_set(void);
void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds);

Do not follow this link