mirror of
https://github.com/firewalkwithm3/qmk_firmware.git
synced 2024-11-22 11:30:30 +08:00
quantum: led: split out led_update_ports() for customization of led behaviour (#14452)
This commit is contained in:
parent
c255174cf3
commit
cbe1c22d46
|
@ -101,6 +101,13 @@ The `host_keyboard_led_state()` function will report the LED state returned from
|
||||||
bool caps = host_keyboard_led_state().caps_lock;
|
bool caps = host_keyboard_led_state().caps_lock;
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## `led_update_ports()`
|
||||||
|
|
||||||
|
This function writes the LED state to the actual hardware. Call it manually
|
||||||
|
from your `led_update_*()` callbacks to modify the handling of the standard
|
||||||
|
keyboard LEDs.
|
||||||
|
For example when repurposing a standard LED indicator as layer indicator.
|
||||||
|
|
||||||
## Setting Physical LED State
|
## Setting Physical LED State
|
||||||
|
|
||||||
Some keyboard implementations provide convenient methods for setting the state of the physical LEDs.
|
Some keyboard implementations provide convenient methods for setting the state of the physical LEDs.
|
||||||
|
|
|
@ -92,32 +92,36 @@ __attribute__((weak)) bool led_update_user(led_t led_state) {
|
||||||
__attribute__((weak)) bool led_update_kb(led_t led_state) {
|
__attribute__((weak)) bool led_update_kb(led_t led_state) {
|
||||||
bool res = led_update_user(led_state);
|
bool res = led_update_user(led_state);
|
||||||
if (res) {
|
if (res) {
|
||||||
#if defined(LED_NUM_LOCK_PIN) || defined(LED_CAPS_LOCK_PIN) || defined(LED_SCROLL_LOCK_PIN) || defined(LED_COMPOSE_PIN) || defined(LED_KANA_PIN)
|
led_update_ports(led_state);
|
||||||
# if LED_PIN_ON_STATE == 0
|
|
||||||
// invert the whole thing to avoid having to conditionally !led_state.x later
|
|
||||||
led_state.raw = ~led_state.raw;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef LED_NUM_LOCK_PIN
|
|
||||||
writePin(LED_NUM_LOCK_PIN, led_state.num_lock);
|
|
||||||
# endif
|
|
||||||
# ifdef LED_CAPS_LOCK_PIN
|
|
||||||
writePin(LED_CAPS_LOCK_PIN, led_state.caps_lock);
|
|
||||||
# endif
|
|
||||||
# ifdef LED_SCROLL_LOCK_PIN
|
|
||||||
writePin(LED_SCROLL_LOCK_PIN, led_state.scroll_lock);
|
|
||||||
# endif
|
|
||||||
# ifdef LED_COMPOSE_PIN
|
|
||||||
writePin(LED_COMPOSE_PIN, led_state.compose);
|
|
||||||
# endif
|
|
||||||
# ifdef LED_KANA_PIN
|
|
||||||
writePin(LED_KANA_PIN, led_state.kana);
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** \brief Write LED state to hardware
|
||||||
|
*/
|
||||||
|
__attribute__((weak)) void led_update_ports(led_t led_state) {
|
||||||
|
#if LED_PIN_ON_STATE == 0
|
||||||
|
// invert the whole thing to avoid having to conditionally !led_state.x later
|
||||||
|
led_state.raw = ~led_state.raw;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef LED_NUM_LOCK_PIN
|
||||||
|
writePin(LED_NUM_LOCK_PIN, led_state.num_lock);
|
||||||
|
#endif
|
||||||
|
#ifdef LED_CAPS_LOCK_PIN
|
||||||
|
writePin(LED_CAPS_LOCK_PIN, led_state.caps_lock);
|
||||||
|
#endif
|
||||||
|
#ifdef LED_SCROLL_LOCK_PIN
|
||||||
|
writePin(LED_SCROLL_LOCK_PIN, led_state.scroll_lock);
|
||||||
|
#endif
|
||||||
|
#ifdef LED_COMPOSE_PIN
|
||||||
|
writePin(LED_COMPOSE_PIN, led_state.compose);
|
||||||
|
#endif
|
||||||
|
#ifdef LED_KANA_PIN
|
||||||
|
writePin(LED_KANA_PIN, led_state.kana);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/** \brief Initialise any LED related hardware and/or state
|
/** \brief Initialise any LED related hardware and/or state
|
||||||
*/
|
*/
|
||||||
__attribute__((weak)) void led_init_ports(void) {
|
__attribute__((weak)) void led_init_ports(void) {
|
||||||
|
|
|
@ -60,6 +60,7 @@ void led_set_user(uint8_t usb_led);
|
||||||
void led_set_kb(uint8_t usb_led);
|
void led_set_kb(uint8_t usb_led);
|
||||||
bool led_update_user(led_t led_state);
|
bool led_update_user(led_t led_state);
|
||||||
bool led_update_kb(led_t led_state);
|
bool led_update_kb(led_t led_state);
|
||||||
|
void led_update_ports(led_t led_state);
|
||||||
|
|
||||||
uint32_t last_led_activity_time(void); // Timestamp of the LED activity
|
uint32_t last_led_activity_time(void); // Timestamp of the LED activity
|
||||||
uint32_t last_led_activity_elapsed(void); // Number of milliseconds since the last LED activity
|
uint32_t last_led_activity_elapsed(void); // Number of milliseconds since the last LED activity
|
||||||
|
|
Loading…
Reference in a new issue