aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalf Schmitt <ralf@bunkertor.net>2014-04-08 21:02:46 +0200
committerRalf Schmitt <ralf@bunkertor.net>2014-04-08 21:02:46 +0200
commit589d99b448e6085513799fbb183f6389d4df408d (patch)
tree3d6f83a71ffe03a2855046de58ba7ae9095f0733
parent5c63751790bca2d7e0c6f368bd446db8fe671848 (diff)
downloadqmk_firmware-589d99b448e6085513799fbb183f6389d4df408d.tar.gz
qmk_firmware-589d99b448e6085513799fbb183f6389d4df408d.zip
New macro: ACTION_BACKLIGHT_LEVEL(level)
To have full control of the backlight level.
-rw-r--r--common/action.c5
-rw-r--r--common/action_code.h18
-rw-r--r--common/backlight.c8
-rw-r--r--common/backlight.h7
-rw-r--r--doc/keymap.md4
-rw-r--r--keyboard/lightsaber/backlight.c48
-rw-r--r--keyboard/lightsaber/backlight.h9
-rw-r--r--keyboard/lightsaber/keymap_winkey.h14
8 files changed, 89 insertions, 24 deletions
diff --git a/common/action.c b/common/action.c
index e6938f5a2..fddb97c50 100644
--- a/common/action.c
+++ b/common/action.c
@@ -294,7 +294,7 @@ void process_action(keyrecord_t *record)
294#ifdef BACKLIGHT_ENABLE 294#ifdef BACKLIGHT_ENABLE
295 case ACT_BACKLIGHT: 295 case ACT_BACKLIGHT:
296 if (!event.pressed) { 296 if (!event.pressed) {
297 switch (action.backlight.id) { 297 switch (action.backlight.opt) {
298 case BACKLIGHT_INCREASE: 298 case BACKLIGHT_INCREASE:
299 backlight_increase(); 299 backlight_increase();
300 break; 300 break;
@@ -307,6 +307,9 @@ void process_action(keyrecord_t *record)
307 case BACKLIGHT_STEP: 307 case BACKLIGHT_STEP:
308 backlight_step(); 308 backlight_step();
309 break; 309 break;
310 case BACKLIGHT_LEVEL:
311 backlight_level(action.backlight.level);
312 break;
310 } 313 }
311 } 314 }
312 break; 315 break;
diff --git a/common/action_code.h b/common/action_code.h
index 8df86b119..50112d4d2 100644
--- a/common/action_code.h
+++ b/common/action_code.h
@@ -87,7 +87,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
87 * 1100|1111| id(8) Macro record? 87 * 1100|1111| id(8) Macro record?
88 * 88 *
89 * ACT_BACKLIGHT(1101): 89 * ACT_BACKLIGHT(1101):
90 * 1101|xxxx| id(8) Backlight commands 90 * 1101|opt |level(8) Backlight commands
91 * 91 *
92 * ACT_COMMAND(1110): 92 * ACT_COMMAND(1110):
93 * 1110|opt | id(8) Built-in Command exec 93 * 1110|opt | id(8) Built-in Command exec
@@ -163,7 +163,9 @@ typedef union {
163 uint8_t kind :4; 163 uint8_t kind :4;
164 } usage; 164 } usage;
165 struct action_backlight { 165 struct action_backlight {
166 uint8_t id :8; 166 uint8_t level :8;
167 uint8_t opt :4;
168 uint8_t kind :4;
167 } backlight; 169 } backlight;
168 struct action_command { 170 struct action_command {
169 uint8_t id :8; 171 uint8_t id :8;
@@ -282,21 +284,23 @@ enum layer_pram_tap_op {
282/* 284/*
283 * Extensions 285 * Extensions
284 */ 286 */
285enum backlight_id { 287enum backlight_opt {
286 BACKLIGHT_INCREASE = 0, 288 BACKLIGHT_INCREASE = 0,
287 BACKLIGHT_DECREASE = 1, 289 BACKLIGHT_DECREASE = 1,
288 BACKLIGHT_TOGGLE = 2, 290 BACKLIGHT_TOGGLE = 2,
289 BACKLIGHT_STEP = 3, 291 BACKLIGHT_STEP = 3,
292 BACKLIGHT_LEVEL = 4,
290}; 293};
291/* Macro */ 294/* Macro */
292#define ACTION_MACRO(id) ACTION(ACT_MACRO, (id)) 295#define ACTION_MACRO(id) ACTION(ACT_MACRO, (id))
293#define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP<<8 | (id)) 296#define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP<<8 | (id))
294#define ACTION_MACRO_OPT(id, opt) ACTION(ACT_MACRO, (opt)<<8 | (id)) 297#define ACTION_MACRO_OPT(id, opt) ACTION(ACT_MACRO, (opt)<<8 | (id))
295/* Backlight */ 298/* Backlight */
296#define ACTION_BACKLIGHT_INCREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_INCREASE) 299#define ACTION_BACKLIGHT_INCREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_INCREASE << 8)
297#define ACTION_BACKLIGHT_DECREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_DECREASE) 300#define ACTION_BACKLIGHT_DECREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_DECREASE << 8)
298#define ACTION_BACKLIGHT_TOGGLE() ACTION(ACT_BACKLIGHT, BACKLIGHT_TOGGLE) 301#define ACTION_BACKLIGHT_TOGGLE() ACTION(ACT_BACKLIGHT, BACKLIGHT_TOGGLE << 8)
299#define ACTION_BACKLIGHT_STEP() ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP) 302#define ACTION_BACKLIGHT_STEP() ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP << 8)
303#define ACTION_BACKLIGHT_LEVEL(level) ACTION(ACT_BACKLIGHT, BACKLIGHT_LEVEL << 8 | level)
300/* Command */ 304/* Command */
301#define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) 305#define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (addr))
302/* Function */ 306/* Function */
diff --git a/common/backlight.c b/common/backlight.c
index 00dc04a07..558ad9b01 100644
--- a/common/backlight.c
+++ b/common/backlight.c
@@ -75,3 +75,11 @@ void backlight_step(void)
75 dprintf("backlight step: %u\n", backlight_config.level); 75 dprintf("backlight step: %u\n", backlight_config.level);
76 backlight_set(backlight_config.level); 76 backlight_set(backlight_config.level);
77} 77}
78
79void backlight_level(uint8_t level)
80{
81 backlight_config.level ^= level;
82 backlight_config.enable = !!backlight_config.level;
83 eeconfig_write_backlight(backlight_config.raw);
84 backlight_set(backlight_config.level);
85}
diff --git a/common/backlight.h b/common/backlight.h
index 685c422ae..525ec8bbe 100644
--- a/common/backlight.h
+++ b/common/backlight.h
@@ -24,18 +24,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
24typedef union { 24typedef union {
25 uint8_t raw; 25 uint8_t raw;
26 struct { 26 struct {
27 bool enable:1; 27 bool enable :1;
28 uint8_t level:7; 28 uint8_t level :7;
29 }; 29 };
30} backlight_config_t; 30} backlight_config_t;
31 31
32void backlight_init(void); 32void backlight_init(void);
33
34void backlight_increase(void); 33void backlight_increase(void);
35void backlight_decrease(void); 34void backlight_decrease(void);
36void backlight_toggle(void); 35void backlight_toggle(void);
37void backlight_step(void); 36void backlight_step(void);
38
39void backlight_set(uint8_t level); 37void backlight_set(uint8_t level);
38void backlight_level(uint8_t level);
40 39
41#endif 40#endif
diff --git a/doc/keymap.md b/doc/keymap.md
index 3d78fc9c9..11feeac21 100644
--- a/doc/keymap.md
+++ b/doc/keymap.md
@@ -444,6 +444,10 @@ Step through backlight levels.
444 444
445 ACTION_BACKLIGHT_STEP() 445 ACTION_BACKLIGHT_STEP()
446 446
447Turn a specific backlight level on or off.
448
449 ACTION_BACKLIGHT_LEVEL(1)
450
447#### 2.5.2 Turn on / off backlight 451#### 2.5.2 Turn on / off backlight
448Turn the backlight on and off without changing level. 452Turn the backlight on and off without changing level.
449 453
diff --git a/keyboard/lightsaber/backlight.c b/keyboard/lightsaber/backlight.c
index b28200807..59b8b4a63 100644
--- a/keyboard/lightsaber/backlight.c
+++ b/keyboard/lightsaber/backlight.c
@@ -26,8 +26,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
26 * Backside PD6 (high) 26 * Backside PD6 (high)
27 * TopRight PD7 (low) 27 * TopRight PD7 (low)
28 * F-Row PE6 (high) 28 * F-Row PE6 (high)
29 *
30 */ 29 */
30
31void backlight_set(uint8_t level) 31void backlight_set(uint8_t level)
32{ 32{
33 // Set as output. 33 // Set as output.
@@ -35,22 +35,52 @@ void backlight_set(uint8_t level)
35 DDRD |= (1<<6) | (1<<7); 35 DDRD |= (1<<6) | (1<<7);
36 DDRE |= (1<<6); 36 DDRE |= (1<<6);
37 37
38 if(level & (1<<0)) 38 if (level & BACKLIGHT_ALPHA)
39 { 39 {
40 PORTB &= ~(1<<1); 40 PORTB |= (1<<1);
41 PORTB &= ~(1<<2);
42 PORTB &= ~(1<<3);
43 PORTD &= ~(1<<6);
44 PORTD |= (1<<7);
45 PORTE &= ~(1<<6);
46 } 41 }
47 else 42 else
48 { 43 {
49 PORTB |= (1<<1); 44 PORTB &= ~(1<<1);
45 }
46 if (level & BACKLIGHT_NUMERIC)
47 {
50 PORTB |= (1<<2); 48 PORTB |= (1<<2);
49 }
50 else
51 {
52 PORTB &= ~(1<<2);
53 }
54 if (level & BACKLIGHT_MODNUM)
55 {
51 PORTB |= (1<<3); 56 PORTB |= (1<<3);
57 }
58 else
59 {
60 PORTB &= ~(1<<3);
61 }
62 if (level & BACKLIGHT_BACKSIDE)
63 {
52 PORTD |= (1<<6); 64 PORTD |= (1<<6);
65 }
66 else
67 {
68 PORTD &= ~(1<<6);
69 }
70 if (level & BACKLIGHT_TOPRIGHT)
71 {
53 PORTD &= ~(1<<7); 72 PORTD &= ~(1<<7);
73 }
74 else
75 {
76 PORTD |= (1<<7);
77 }
78 if (level & BACKLIGHT_FROW)
79 {
54 PORTE |= (1<<6); 80 PORTE |= (1<<6);
55 } 81 }
82 else
83 {
84 PORTE &= ~(1<<6);
85 }
56} 86}
diff --git a/keyboard/lightsaber/backlight.h b/keyboard/lightsaber/backlight.h
new file mode 100644
index 000000000..6dc7967a6
--- /dev/null
+++ b/keyboard/lightsaber/backlight.h
@@ -0,0 +1,9 @@
1
2enum backlight_level {
3 BACKLIGHT_ALPHA = 0b0000001,
4 BACKLIGHT_NUMERIC = 0b0000010,
5 BACKLIGHT_MODNUM = 0b0000100,
6 BACKLIGHT_BACKSIDE = 0b0001000,
7 BACKLIGHT_TOPRIGHT = 0b0010000,
8 BACKLIGHT_FROW = 0b0100000,
9};
diff --git a/keyboard/lightsaber/keymap_winkey.h b/keyboard/lightsaber/keymap_winkey.h
index 59ffd4a8f..3e8367083 100644
--- a/keyboard/lightsaber/keymap_winkey.h
+++ b/keyboard/lightsaber/keymap_winkey.h
@@ -1,3 +1,5 @@
1#include "backlight.h"
2
1static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 3static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
2 KEYMAP(\ 4 KEYMAP(\
3 ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, INS, PSCR, SLCK, BRK, \ 5 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] = {
8 LCTL,LGUI,LALT, SPC, NO, RALT,RGUI,RCTL, KP_0, NO, KP_DOT, NO), \ 10 LCTL,LGUI,LALT, SPC, NO, RALT,RGUI,RCTL, KP_0, NO, KP_DOT, NO), \
9 KEYMAP(\ 11 KEYMAP(\
10 CALC,MYCM,WSCH,WHOM,MAIL,MUTE,VOLD,VOLU,MSEL,MSTP,MPLY,MPRV,MNXT,TRNS, TRNS, WAKE, PWR, SLEP, \ 12 CALC,MYCM,WSCH,WHOM,MAIL,MUTE,VOLD,VOLU,MSEL,MSTP,MPLY,MPRV,MNXT,TRNS, TRNS, WAKE, PWR, SLEP, \
11 TRNS,TRNS,TRNS,TRNS,END ,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \ 13 FN1, FN2, FN3, FN4, FN5, FN6, FN7, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \
12 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \ 14 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \
13 TRNS,TRNS,TRNS,TRNS,PGDN,TRNS,LEFT,DOWN,UP ,RGHT,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \ 15 TRNS,TRNS,TRNS,TRNS,PGDN,TRNS,LEFT,DOWN,UP ,RGHT,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \
14 TRNS, TRNS,TRNS,TRNS,TRNS,PGUP,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \ 16 TRNS, TRNS,TRNS,TRNS,TRNS,PGUP,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, \
15 TRNS,TRNS,TRNS, FN1, TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS) 17 TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS)
16}; 18};
17 19
18static const uint16_t PROGMEM fn_actions[] = { 20static const uint16_t PROGMEM fn_actions[] = {
19 [0] = ACTION_LAYER_MOMENTARY(1), 21 [0] = ACTION_LAYER_MOMENTARY(1),
20 [1] = ACTION_BACKLIGHT_STEP() 22 [1] = ACTION_BACKLIGHT_TOGGLE(),
23 [2] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_ALPHA),
24 [3] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_MODNUM),
25 [4] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_NUMERIC),
26 [5] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_FROW),
27 [6] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_BACKSIDE),
28 [7] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_TOPRIGHT)
21}; 29};