]> git.donarmstrong.com Git - tmk_firmware.git/commitdiff
Merge remote-tracking branch 'tmk/master' into cub_layout
authorOleg Kostyuk <cub.uanic@gmail.com>
Tue, 22 Apr 2014 22:47:47 +0000 (01:47 +0300)
committerOleg Kostyuk <cub.uanic@gmail.com>
Tue, 22 Apr 2014 22:47:47 +0000 (01:47 +0300)
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
protocol/lufa/descriptor.c
protocol/lufa/lufa.c

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)
 };
index a46ba3ec6aab744b4d1309bc5dfe61a9ebf88363..d97f5d86a84ce095a300ca9f33cdab7f7cbc8e7f 100644 (file)
@@ -306,7 +306,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .EndpointAddress        = (ENDPOINT_DIR_IN | KEYBOARD_IN_EPNUM),
             .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
             .EndpointSize           = KEYBOARD_EPSIZE,
-            .PollingIntervalMS      = 0x01
+            .PollingIntervalMS      = 0x0A
         },
 
     /*
@@ -347,7 +347,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .EndpointAddress        = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM),
             .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
             .EndpointSize           = MOUSE_EPSIZE,
-            .PollingIntervalMS      = 0x01
+            .PollingIntervalMS      = 0x0A
         },
 #endif
 
@@ -389,7 +389,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .EndpointAddress        = (ENDPOINT_DIR_IN | EXTRAKEY_IN_EPNUM),
             .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
             .EndpointSize           = EXTRAKEY_EPSIZE,
-            .PollingIntervalMS      = 0x01
+            .PollingIntervalMS      = 0x0A
         },
 #endif
 
index eca51c8784f2f37dd54301ee3c4822a42abd8e08..68119d5e7a11d2af82efa4e607bf56b9fbae1b67 100644 (file)
@@ -351,7 +351,7 @@ static uint8_t keyboard_leds(void)
 
 static void send_keyboard(report_keyboard_t *report)
 {
-    uint8_t timeout = 0;
+    uint8_t timeout = 255;
 
     if (USB_DeviceState != DEVICE_STATE_Configured)
         return;
@@ -360,15 +360,20 @@ static void send_keyboard(report_keyboard_t *report)
 #ifdef NKRO_ENABLE
     if (keyboard_nkro) {
         Endpoint_SelectEndpoint(NKRO_IN_EPNUM);
+
+        /* Check if write ready for a polling interval around 1ms */
+        while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(4);
+        if (!Endpoint_IsReadWriteAllowed()) return;
     }
     else
 #endif
     {
         Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM);
-    }
 
-    /* Check if Keyboard Endpoint Ready for Read/Write */
-    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;
+        /* Check if write ready for a polling interval around 10ms */
+        while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+        if (!Endpoint_IsReadWriteAllowed()) return;
+    }
 
     /* Write Keyboard Report Data */
 #ifdef NKRO_ENABLE
@@ -391,7 +396,7 @@ static void send_keyboard(report_keyboard_t *report)
 static void send_mouse(report_mouse_t *report)
 {
 #ifdef MOUSE_ENABLE
-    uint8_t timeout = 0;
+    uint8_t timeout = 255;
 
     if (USB_DeviceState != DEVICE_STATE_Configured)
         return;
@@ -399,8 +404,9 @@ static void send_mouse(report_mouse_t *report)
     /* Select the Mouse Report Endpoint */
     Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);
 
-    /* Check if Mouse Endpoint Ready for Read/Write */
-    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;
+    /* Check if write ready for a polling interval around 10ms */
+    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+    if (!Endpoint_IsReadWriteAllowed()) return;
 
     /* Write Mouse Report Data */
     Endpoint_Write_Stream_LE(report, sizeof(report_mouse_t), NULL);
@@ -412,7 +418,7 @@ static void send_mouse(report_mouse_t *report)
 
 static void send_system(uint16_t data)
 {
-    uint8_t timeout = 0;
+    uint8_t timeout = 255;
 
     if (USB_DeviceState != DEVICE_STATE_Configured)
         return;
@@ -422,14 +428,18 @@ static void send_system(uint16_t data)
         .usage = data
     };
     Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
-    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;
+
+    /* Check if write ready for a polling interval around 10ms */
+    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+    if (!Endpoint_IsReadWriteAllowed()) return;
+
     Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
     Endpoint_ClearIN();
 }
 
 static void send_consumer(uint16_t data)
 {
-    uint8_t timeout = 0;
+    uint8_t timeout = 255;
 
     if (USB_DeviceState != DEVICE_STATE_Configured)
         return;
@@ -439,7 +449,11 @@ static void send_consumer(uint16_t data)
         .usage = data
     };
     Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
-    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;
+
+    /* Check if write ready for a polling interval around 10ms */
+    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+    if (!Endpoint_IsReadWriteAllowed()) return;
+
     Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
     Endpoint_ClearIN();
 }