]> git.donarmstrong.com Git - tmk_firmware.git/commitdiff
New macro: ACTION_BACKLIGHT_LEVEL(level)
authorRalf Schmitt <ralf@bunkertor.net>
Tue, 8 Apr 2014 19:02:46 +0000 (21:02 +0200)
committerRalf Schmitt <ralf@bunkertor.net>
Tue, 8 Apr 2014 19:02:46 +0000 (21:02 +0200)
To have full control of the backlight level.

common/action.c
common/action_code.h
common/backlight.c
common/backlight.h
doc/keymap.md
keyboard/lightsaber/backlight.c
keyboard/lightsaber/backlight.h [new file with mode: 0644]
keyboard/lightsaber/keymap_winkey.h

index e6938f5a237ad6eec433c08a845b907f8176b8df..fddb97c508dbd96865c73ef08bfd68cc1739b1ac 100644 (file)
@@ -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;
index 8df86b11929e5afa8de07edb839c39d69defa6f3..50112d4d20ebb57e745b021eed335f717abc7abf 100644 (file)
@@ -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 */
index 00dc04a0756681c97c8e5a2c76b58c1ee0e2f213..558ad9b014fc278f485adb7e467a16b69584789c 100644 (file)
@@ -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);
+}
index 685c422ae9c25c8af2d701c11ed83ef7b2cc9f59..525ec8bbef067e8377d4874a66d0de04cc3221c0 100644 (file)
@@ -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
index 3d78fc9c9c2d8255b436ff49339ddeb89d83cbc3..11feeac218c37470095fbc48e00c9df9ee2f312d 100644 (file)
@@ -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.
 
index b28200807cd4ebeb9658b39234429916249b9f9f..59b8b4a633971d3e66d8531bff3f9c141ccf7266 100644 (file)
@@ -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);
+    }
 }
diff --git a/keyboard/lightsaber/backlight.h b/keyboard/lightsaber/backlight.h
new file mode 100644 (file)
index 0000000..6dc7967
--- /dev/null
@@ -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,
+};
index 59ffd4a8fc761a4d2ed64e1aee7daf5f463fcab1..3e8367083c6ddc24c554fce867e59a33e4571e99 100644 (file)
@@ -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)
 };