New macro: ACTION_BACKLIGHT_LEVEL(level) To have full control of the backlight level.
8 files changed, 89 insertions(+), 24 deletions(-) M common/action.c M common/action_code.h M common/backlight.c M common/backlight.h M doc/keymap.md M keyboard/lightsaber/backlight.c A keyboard/lightsaber/backlight.h M keyboard/lightsaber/keymap_winkey.h
M common/action.c => common/action.c +4 -1
@@ 294,7 294,7 @@ void process_action(keyrecord_t *record) #ifdef BACKLIGHT_ENABLE case ACT_BACKLIGHT: if (!event.pressed) { switch (action.backlight.id) { switch (action.backlight.opt) { case BACKLIGHT_INCREASE: backlight_increase(); @@ break; 307,6 307,9 @@ void process_action(keyrecord_t *record) case BACKLIGHT_STEP: backlight_step(); break; case BACKLIGHT_LEVEL: backlight_level(action.backlight.level); break; } } break;
M common/action_code.h => common/action_code.h +11 -7
@@ 87,7 87,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. * 1100|1111| id(8) Macro record? * * ACT_BACKLIGHT(1101): * 1101|xxxx| id(8) Backlight commands * 1101|opt |level(8) Backlight commands * * ACT_COMMAND(1110): @@ * 1110|opt | id(8) Built-in Command exec 163,7 163,9 @@ typedef union { uint8_t kind :4; } usage; struct action_backlight { uint8_t id :8; uint8_t level :8; uint8_t opt :4; uint8_t kind :4; } backlight; struct action_command { @@ uint8_t id :8; 282,21 284,23 @@ enum layer_pram_tap_op { /* * Extensions */ enum backlight_id { enum backlight_opt { BACKLIGHT_INCREASE = 0, BACKLIGHT_DECREASE = 1, BACKLIGHT_TOGGLE = 2, BACKLIGHT_STEP = 3, BACKLIGHT_LEVEL = 4, }; /* Macro */ #define ACTION_MACRO(id) ACTION(ACT_MACRO, (id)) #define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP<<8 | (id)) #define ACTION_MACRO_OPT(id, opt) ACTION(ACT_MACRO, (opt)<<8 | (id)) /* Backlight */ #define ACTION_BACKLIGHT_INCREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_INCREASE) #define ACTION_BACKLIGHT_DECREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_DECREASE) #define ACTION_BACKLIGHT_TOGGLE() ACTION(ACT_BACKLIGHT, BACKLIGHT_TOGGLE) #define ACTION_BACKLIGHT_STEP() ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP) #define ACTION_BACKLIGHT_INCREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_INCREASE << 8) #define ACTION_BACKLIGHT_DECREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_DECREASE << 8) #define ACTION_BACKLIGHT_TOGGLE() ACTION(ACT_BACKLIGHT, BACKLIGHT_TOGGLE << 8) #define ACTION_BACKLIGHT_STEP() ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP << 8) #define ACTION_BACKLIGHT_LEVEL(level) ACTION(ACT_BACKLIGHT, BACKLIGHT_LEVEL << 8 | level) /* Command */ #define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) /* Function */
M common/backlight.c => common/backlight.c +8 -0
@@ 75,3 75,11 @@ void backlight_step(void) dprintf("backlight step: %u\n", backlight_config.level); backlight_set(backlight_config.level); } void backlight_level(uint8_t level) { backlight_config.level ^= level; backlight_config.enable = !!backlight_config.level; eeconfig_write_backlight(backlight_config.raw); backlight_set(backlight_config.level); }
M common/backlight.h => common/backlight.h +3 -4
@@ 24,18 24,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. typedef union { uint8_t raw; struct { bool enable:1; uint8_t level:7; bool enable :1; uint8_t level :7; }; } backlight_config_t; void backlight_init(void); void backlight_increase(void); void backlight_decrease(void); void backlight_toggle(void); void backlight_step(void); void backlight_set(uint8_t level); void backlight_level(uint8_t level); #endif
M doc/keymap.md => doc/keymap.md +4 -0
@@ 444,6 444,10 @@ Step through backlight levels. ACTION_BACKLIGHT_STEP() Turn a specific backlight level on or off. ACTION_BACKLIGHT_LEVEL(1) #### 2.5.2 Turn on / off backlight Turn the backlight on and off without changing level.
M keyboard/lightsaber/backlight.c => keyboard/lightsaber/backlight.c +39 -9
@@ 26,8 26,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. * Backside PD6 (high) * TopRight PD7 (low) * F-Row PE6 (high) * */ void backlight_set(uint8_t level) { @@ // Set as output. 35,22 35,52 @@ void backlight_set(uint8_t level) DDRD |= (1<<6) | (1<<7); DDRE |= (1<<6); if(level & (1<<0)) if (level & BACKLIGHT_ALPHA) { PORTB &= ~(1<<1); PORTB &= ~(1<<2); PORTB &= ~(1<<3); PORTD &= ~(1<<6); PORTD |= (1<<7); PORTE &= ~(1<<6); PORTB |= (1<<1); } else { PORTB |= (1<<1); PORTB &= ~(1<<1); } if (level & BACKLIGHT_NUMERIC) { PORTB |= (1<<2); } else { PORTB &= ~(1<<2); } if (level & BACKLIGHT_MODNUM) { PORTB |= (1<<3); } else { PORTB &= ~(1<<3); } if (level & BACKLIGHT_BACKSIDE) { PORTD |= (1<<6); } else { PORTD &= ~(1<<6); } if (level & BACKLIGHT_TOPRIGHT) { PORTD &= ~(1<<7); } else { PORTD |= (1<<7); } if (level & BACKLIGHT_FROW) { PORTE |= (1<<6); } else { PORTE &= ~(1<<6); } }
A keyboard/lightsaber/backlight.h => keyboard/lightsaber/backlight.h +9 -0
@@ 0,0 1,9 @@ enum backlight_level { BACKLIGHT_ALPHA = 0b0000001, BACKLIGHT_NUMERIC = 0b0000010, BACKLIGHT_MODNUM = 0b0000100, BACKLIGHT_BACKSIDE = 0b0001000, BACKLIGHT_TOPRIGHT = 0b0010000, BACKLIGHT_FROW = 0b0100000, };
M keyboard/lightsaber/keymap_winkey.h => keyboard/lightsaber/keymap_winkey.h +11 -3
@@ 1,3 1,5 @@ #include "backlight.h" static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KEYMAP(\ @@ ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, INS, PSCR, SLCK, BRK, \ 8,14 10,20 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LCTL,LGUI,LALT, SPC, NO, RALT,RGUI,RCTL, KP_0, NO, KP_DOT, NO), \ KEYMAP(\ CALC,MYCM,WSCH,WHOM,MAIL,MUTE,VOLD,VOLU,MSEL,MSTP,MPLY,MPRV,MNXT,TRNS, TRNS, WAKE, PWR, SLEP, \ TRNS,TRNS,TRNS,TRNS,END ,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \ FN1, FN2, FN3, FN4, FN5, FN6, FN7, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS,TRNS,TRNS,TRNS,PGDN,TRNS,LEFT,DOWN,UP ,RGHT,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS,TRNS,TRNS,TRNS,PGUP,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS,TRNS,TRNS, FN1, TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS) TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS) }; static const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_LAYER_MOMENTARY(1), [1] = ACTION_BACKLIGHT_STEP() [1] = ACTION_BACKLIGHT_TOGGLE(), [2] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_ALPHA), [3] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_MODNUM), [4] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_NUMERIC), [5] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_FROW), [6] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_BACKSIDE), [7] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_TOPRIGHT) };