From 589d99b448e6085513799fbb183f6389d4df408d Mon Sep 17 00:00:00 2001 From: Ralf Schmitt Date: Tue, 8 Apr 2014 21:02:46 +0200 Subject: [PATCH] New macro: ACTION_BACKLIGHT_LEVEL(level) To have full control of the backlight level. --- common/action.c | 5 ++- common/action_code.h | 18 ++++++----- common/backlight.c | 8 +++++ common/backlight.h | 7 ++--- doc/keymap.md | 4 +++ keyboard/lightsaber/backlight.c | 48 +++++++++++++++++++++++------ keyboard/lightsaber/backlight.h | 9 ++++++ keyboard/lightsaber/keymap_winkey.h | 14 +++++++-- 8 files changed, 89 insertions(+), 24 deletions(-) create mode 100644 keyboard/lightsaber/backlight.h diff --git a/common/action.c b/common/action.c index e6938f5a23..fddb97c508 100644 --- a/common/action.c +++ b/common/action.c @@ -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; diff --git a/common/action_code.h b/common/action_code.h index 8df86b1192..50112d4d20 100644 --- a/common/action_code.h +++ b/common/action_code.h @@ -87,7 +87,7 @@ along with this program. If not, see . * 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 */ diff --git a/common/backlight.c b/common/backlight.c index 00dc04a075..558ad9b014 100644 --- a/common/backlight.c +++ b/common/backlight.c @@ -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); +} diff --git a/common/backlight.h b/common/backlight.h index 685c422ae9..525ec8bbef 100644 --- a/common/backlight.h +++ b/common/backlight.h @@ -24,18 +24,17 @@ along with this program. If not, see . 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 diff --git a/doc/keymap.md b/doc/keymap.md index 3d78fc9c9c..11feeac218 100644 --- a/doc/keymap.md +++ b/doc/keymap.md @@ -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. diff --git a/keyboard/lightsaber/backlight.c b/keyboard/lightsaber/backlight.c index b28200807c..59b8b4a633 100644 --- a/keyboard/lightsaber/backlight.c +++ b/keyboard/lightsaber/backlight.c @@ -26,8 +26,8 @@ along with this program. If not, see . * 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); + } } diff --git a/keyboard/lightsaber/backlight.h b/keyboard/lightsaber/backlight.h new file mode 100644 index 0000000000..6dc7967a62 --- /dev/null +++ b/keyboard/lightsaber/backlight.h @@ -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, +}; diff --git a/keyboard/lightsaber/keymap_winkey.h b/keyboard/lightsaber/keymap_winkey.h index 59ffd4a8fc..3e8367083c 100644 --- a/keyboard/lightsaber/keymap_winkey.h +++ b/keyboard/lightsaber/keymap_winkey.h @@ -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) };