Tidy up IS_{,HOST_}LED_{ON,OFF} macros (#4894)

* Tidy up IS_{,HOST_}LED_{ON,OFF} macros

* Tweak LED control docs
This commit is contained in:
Konstantin Đorđević 2019-01-21 05:16:36 +01:00 committed by Drashna Jaelre
parent 58993d3cde
commit 0f8431a57f
2 changed files with 15 additions and 29 deletions

View file

@ -106,10 +106,8 @@ There are two ways to get the host LED state:
## `led_set_user()` ## `led_set_user()`
This function will be called when the state of one of those 5 LEDs changes. This function will be called when the state of one of those 5 LEDs changes. It receives the LED state as a parameter.
It receives the LED state as parameter. Use the `IS_LED_ON(usb_led, led_name)` and `IS_LED_OFF(usb_led, led_name)` macros to check the LED status.
Use the `IS_LED_ON(USB_LED, LED_NAME)` and `IS_LED_OFF(USB_LED, LED_NAME)`
macros to check the LED status.
!> `host_keyboard_leds()` may already reflect a new value before `led_set_user()` is called. !> `host_keyboard_leds()` may already reflect a new value before `led_set_user()` is called.
@ -152,27 +150,20 @@ void led_set_user(uint8_t usb_led) {
## `host_keyboard_leds()` ## `host_keyboard_leds()`
Call this function to get the last received LED state. Call this function to get the last received LED state. This is useful for reading the LED state outside `led_set_*`, e.g. in [`matrix_scan_user()`](#matrix-scanning-code).
This is useful for reading the LED state outside `led_set_*`, e.g. in [`matrix_scan_user()`](#matrix-scanning-code). For convenience, you can use the `IS_HOST_LED_ON(led_name)` and `IS_HOST_LED_OFF(led_name)` macros instead of calling and checking `host_keyboard_leds()` directly.
For convenience, you can use the `IS_HOST_LED_ON(LED_NAME)` and `IS_HOST_LED_OFF(LED_NAME)` macros instead of calling `host_keyboard_leds()` directly. ## Setting Physical LED State
## Setting physical LED state
Some keyboard implementations provide convenience methods for setting the state of the physical LEDs. Some keyboard implementations provide convenience methods for setting the state of the physical LEDs.
### Ergodox and Ergodox EZ ### Ergodox Boards
The Ergodox EZ implementation provides `ergodox_right_led_``1`/`2`/`3_on`/`off()` The Ergodox implementations provide `ergodox_right_led_1`/`2`/`3_on`/`off()` to turn individual LEDs on or off, as well as `ergodox_right_led_on`/`off(uint8_t led)` to turn them on or off by their index.
to turn individual LEDs on and off, as well as
`ergodox_right_led_on`/`off(uint8_t led)`
to turn them on and off by their number.
In addition, it is possible to specify the brightness level with `ergodox_led_all_set(uint8_t n)`, In addition, it is possible to specify the brightness level of all LEDs with `ergodox_led_all_set(uint8_t n)`; of individual LEDs with `ergodox_right_led_1`/`2`/`3_set(uint8_t n)`; or by index with `ergodox_right_led_set(uint8_t led, uint8_t n)`.
for individual LEDs with `ergodox_right_led_1`/`2`/`3_set(uint8_t n)`
or by their number using `ergodox_right_led_set(uint8_t led, uint8_t n)`.
It defines `LED_BRIGHTNESS_LO` for the lowest brightness and `LED_BRIGHTNESS_HI` for the highest brightness, which is also the default. Ergodox boards also define `LED_BRIGHTNESS_LO` for the lowest brightness and `LED_BRIGHTNESS_HI` for the highest brightness (which is the default).
# Matrix Initialization Code # Matrix Initialization Code

View file

@ -15,14 +15,18 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef HOST_H #pragma once
#define HOST_H
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>
#include "report.h" #include "report.h"
#include "host_driver.h" #include "host_driver.h"
#define IS_LED_ON(leds, led_name) ( (leds) & (1 << (led_name)))
#define IS_LED_OFF(leds, led_name) (~(leds) & (1 << (led_name)))
#define IS_HOST_LED_ON(led_name) IS_LED_ON(host_keyboard_leds(), led_name)
#define IS_HOST_LED_OFF(led_name) IS_LED_OFF(host_keyboard_leds(), led_name)
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -31,7 +35,6 @@ extern "C" {
extern uint8_t keyboard_idle; extern uint8_t keyboard_idle;
extern uint8_t keyboard_protocol; extern uint8_t keyboard_protocol;
/* host driver */ /* host driver */
void host_set_driver(host_driver_t *driver); void host_set_driver(host_driver_t *driver);
host_driver_t *host_get_driver(void); host_driver_t *host_get_driver(void);
@ -46,14 +49,6 @@ void host_consumer_send(uint16_t data);
uint16_t host_last_system_report(void); uint16_t host_last_system_report(void);
uint16_t host_last_consumer_report(void); uint16_t host_last_consumer_report(void);
#define IS_LED_ON(USB_LED, LED_NAME) ((USB_LED) & (1 << (LED_NAME)))
#define IS_LED_OFF(USB_LED, LED_NAME) (~(USB_LED) & (1 << (LED_NAME)))
#define IS_HOST_LED_ON(LED_NAME) IS_LED_ON(host_keyboard_leds(), (LED_NAME))
#define IS_HOST_LED_OFF(LED_NAME) IS_LED_OFF(host_keyboard_leds(), (LED_NAME))
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif