Browse Source

feat(backlight): add command to cycle brightness

xmkb
Alessandro Bortolin 3 years ago committed by Pete Johanson
parent
commit
13a4515300
  1. 4
      app/include/dt-bindings/zmk/backlight.h
  2. 1
      app/include/zmk/backlight.h
  3. 8
      app/src/backlight.c
  4. 8
      app/src/behaviors/behavior_backlight.c
  5. 1
      app/tests/backlight/cycle/events.patterns
  6. 14
      app/tests/backlight/cycle/keycode_events.snapshot
  7. 14
      app/tests/backlight/cycle/native_posix.conf
  8. 78
      app/tests/backlight/cycle/native_posix.keymap
  9. 19
      docs/docs/behaviors/backlight.md

4
app/include/dt-bindings/zmk/backlight.h

@ -9,11 +9,13 @@
#define BL_TOG_CMD 2 #define BL_TOG_CMD 2
#define BL_INC_CMD 3 #define BL_INC_CMD 3
#define BL_DEC_CMD 4 #define BL_DEC_CMD 4
#define BL_SET_CMD 5 #define BL_CYCLE_CMD 5
#define BL_SET_CMD 6
#define BL_ON BL_ON_CMD 0 #define BL_ON BL_ON_CMD 0
#define BL_OFF BL_OFF_CMD 0 #define BL_OFF BL_OFF_CMD 0
#define BL_TOG BL_TOG_CMD 0 #define BL_TOG BL_TOG_CMD 0
#define BL_INC BL_INC_CMD 0 #define BL_INC BL_INC_CMD 0
#define BL_DEC BL_DEC_CMD 0 #define BL_DEC BL_DEC_CMD 0
#define BL_CYCLE BL_CYCLE_CMD 0
#define BL_SET BL_SET_CMD #define BL_SET BL_SET_CMD

1
app/include/zmk/backlight.h

@ -14,3 +14,4 @@ bool zmk_backlight_is_on();
int zmk_backlight_set_brt(uint8_t brightness); int zmk_backlight_set_brt(uint8_t brightness);
uint8_t zmk_backlight_get_brt(); uint8_t zmk_backlight_get_brt();
uint8_t zmk_backlight_calc_brt(int direction); uint8_t zmk_backlight_calc_brt(int direction);
uint8_t zmk_backlight_calc_brt_cycle();

8
app/src/backlight.c

@ -137,6 +137,14 @@ uint8_t zmk_backlight_calc_brt(int direction) {
return CLAMP(brt, 0, BRT_MAX); return CLAMP(brt, 0, BRT_MAX);
} }
uint8_t zmk_backlight_calc_brt_cycle() {
if (state.brightness == BRT_MAX) {
return 0;
} else {
return zmk_backlight_calc_brt(1);
}
}
#if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) || IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB) #if IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_IDLE) || IS_ENABLED(CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB)
static int backlight_auto_state(bool *prev_state, bool new_state) { static int backlight_auto_state(bool *prev_state, bool new_state) {
if (state.on == new_state) { if (state.on == new_state) {

8
app/src/behaviors/behavior_backlight.c

@ -35,6 +35,10 @@ on_keymap_binding_convert_central_state_dependent_params(struct zmk_behavior_bin
binding->param1 = BL_SET_CMD; binding->param1 = BL_SET_CMD;
binding->param2 = zmk_backlight_calc_brt(-1); binding->param2 = zmk_backlight_calc_brt(-1);
break; break;
case BL_CYCLE_CMD:
binding->param1 = BL_SET_CMD;
binding->param2 = zmk_backlight_calc_brt_cycle();
break;
default: default:
return 0; return 0;
} }
@ -61,6 +65,10 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding,
uint8_t brt = zmk_backlight_calc_brt(-1); uint8_t brt = zmk_backlight_calc_brt(-1);
return zmk_backlight_set_brt(brt); return zmk_backlight_set_brt(brt);
} }
case BL_CYCLE_CMD: {
uint8_t brt = zmk_backlight_calc_brt_cycle();
return zmk_backlight_set_brt(brt);
}
case BL_SET_CMD: case BL_SET_CMD:
return zmk_backlight_set_brt(binding->param2); return zmk_backlight_set_brt(binding->param2);
default: default:

1
app/tests/backlight/cycle/events.patterns

@ -0,0 +1 @@
s/.*zmk_backlight_update: //p

14
app/tests/backlight/cycle/keycode_events.snapshot

@ -0,0 +1,14 @@
Update backlight brightness: 40%
Update backlight brightness: 60%
Update backlight brightness: 80%
Update backlight brightness: 100%
Update backlight brightness: 0%
Update backlight brightness: 20%
Update backlight brightness: 40%
Update backlight brightness: 60%
Update backlight brightness: 80%
Update backlight brightness: 100%
Update backlight brightness: 0%
Update backlight brightness: 20%
Update backlight brightness: 40%
Update backlight brightness: 60%

14
app/tests/backlight/cycle/native_posix.conf

@ -0,0 +1,14 @@
CONFIG_KSCAN=n
CONFIG_ZMK_KSCAN_MOCK_DRIVER=y
CONFIG_ZMK_KSCAN_GPIO_DRIVER=n
CONFIG_GPIO=y
CONFIG_GPIO_EMUL=y
CONFIG_ZMK_BLE=n
CONFIG_LOG=y
CONFIG_LOG_BACKEND_SHOW_COLOR=n
CONFIG_ZMK_LOG_LEVEL_DBG=y
CONFIG_DEBUG=y
CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000
CONFIG_LED_GPIO=y
CONFIG_ZMK_BACKLIGHT=y

78
app/tests/backlight/cycle/native_posix.keymap

@ -0,0 +1,78 @@
#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/kscan_mock.h>
#include <dt-bindings/zmk/backlight.h>
/ {
chosen {
zmk,backlight = &backlight;
};
backlight: leds {
compatible = "gpio-leds";
led_0 {
gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>;
label = "Backlight LED 0";
};
led_1 {
gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
label = "Backlight LED 1";
};
};
keymap {
compatible = "zmk,keymap";
label ="Default keymap";
default_layer {
bindings = <
&bl BL_CYCLE &none
&none &none
>;
};
};
};
&kscan {
events = <
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
/* BL_CYCLE */
ZMK_MOCK_PRESS(0,0,10)
ZMK_MOCK_RELEASE(0,0,10)
>;
};

19
docs/docs/behaviors/backlight.md

@ -21,17 +21,20 @@ This will allow you to reference the actions defined in this header such as `BL_
Here is a table describing the action for each define: Here is a table describing the action for each define:
| Define | Action | | Define | Action |
| -------- | ---------------------------------------- | | ---------- | --------------------------- |
| `BL_TOG` | Toggles the backlight on and off | | `BL_ON` | Turn on backlight |
| `BL_ON` | Turn on backlight on and off | | `BL_OFF` | Turn off backlight |
| `BL_OFF` | Toggles the backlight feature on and off | | `BL_TOG` | Toggle backlight on and off |
| `BL_INC` | Increase backlight brightness | | `BL_INC` | Increase brightness |
| `BL_DEC` | Decrease backlight brightness | | `BL_DEC` | Decrease brightness |
| `BL_CYCLE` | Cycle brightness |
| `BL_SET` | Set a specific brightness |
## Behavior Binding ## Behavior Binding
- Reference: `&bl` - Reference: `&bl`
- Parameter #1: The backlight action define, e.g. `BL_TOG` or `BL_INC` - Parameter #1: The backlight action define, e.g. `BL_TOG` or `BL_INC`
- Parameter #2: Only applies to `BL_SET`and is the brightness value
### Examples ### Examples
@ -41,8 +44,8 @@ Here is a table describing the action for each define:
&bl BL_TOG &bl BL_TOG
``` ```
1. Increase backlight brightness 1. Sets a specific brightness
``` ```
&bl BL_INC &bl BL_SET 50
``` ```

Loading…
Cancel
Save