]> git.donarmstrong.com Git - tmk_firmware.git/commitdiff
Add power control of key switch board
authortmk <nobody@nowhere>
Thu, 2 Oct 2014 00:58:47 +0000 (09:58 +0900)
committertmk <nobody@nowhere>
Thu, 2 Oct 2014 00:58:47 +0000 (09:58 +0900)
keyboard/hhkb_rn42/config.h
keyboard/hhkb_rn42/hhkb_avr.h

index a46c7a8bf07ffbf9b760f13ee1b7cd3f26de4773..21e73f1c5319fe76fc299564cb6d36925a824265 100644 (file)
@@ -50,6 +50,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* Boot Magic salt key: Space */
 #define BOOTMAGIC_KEY_SALT      KC_FN6
 
+/* power control of key switch board */
+#define HHKB_POWER_SAVING
 
 /*
  * Hardware Serial(UART)
index b7bd507b5d94e4dba7c5bb9e4d1f72c84980d531..313effedfe5854818db96616a32382e1248a6c1c 100644 (file)
@@ -41,17 +41,31 @@ static inline void KEY_UNABLE(void) { (PORTB |=  (1<<6)); }
 static inline bool KEY_STATE(void) { return (PIND & (1<<7)); }
 static inline void KEY_PREV_ON(void) { (PORTB |=  (1<<7)); }
 static inline void KEY_PREV_OFF(void) { (PORTB &= ~(1<<7)); }
+#ifdef HHKB_POWER_SAVING
+static inline void KEY_POWER_ON(void) {
+    _delay_ms(10);                      // TODO: sleep to save power
+    DDRB = 0xFF; PORTB = 0x40;          // change pins output
+    DDRD |= (1<<4); PORTD |= (1<<4);    // MOS FET switch on
+    /* Without this wait you will miss or get false key events. */
+    _delay_ms(1);                       // wait for powering up
+}
+static inline void KEY_POWER_OFF(void) {
+    /* input with pull-up consumes less than without it when pin is open. */
+    DDRB = 0x00; PORTB = 0xFF;          // change pins input with pull-up
+    DDRD |= (1<<4); PORTD &= ~(1<<4);   // MOS FET switch off
+}
+#else
 static inline void KEY_POWER_ON(void) {}
 static inline void KEY_POWER_OFF(void) {}
+#endif
 static inline void KEY_INIT(void)
 {
+    /* row,col,prev: output */
     DDRB  = 0xFF;
-    PORTB = 0x00;
+    PORTB = 0x40;   // unable
+    /* key: input with pull-up */
     DDRD  &= ~0x80;
-    PORTD |= 0x80;
-    /* keyswitch board power on */
-    DDRD  |=  (1<<4);
-    PORTD |=  (1<<4);
+    PORTD |=  0x80;
 #ifdef HHKB_JP
     /* row extention for HHKB JP */
     DDRC  |= (1<<6|1<<7);
@@ -59,6 +73,8 @@ static inline void KEY_INIT(void)
 #endif
     KEY_UNABLE();
     KEY_PREV_OFF();
+
+    KEY_POWER_OFF();
 }
 static inline void KEY_SELECT(uint8_t ROW, uint8_t COL)
 {