]> git.donarmstrong.com Git - tmk_firmware.git/commitdiff
Add files missing for JP support.
authortmk <nobody@nowhere>
Sun, 24 Aug 2014 00:51:21 +0000 (09:51 +0900)
committertmk <nobody@nowhere>
Sun, 24 Aug 2014 00:51:21 +0000 (09:51 +0900)
keyboard/hhkb_rn42/hhkb_avr.h [new file with mode: 0644]
keyboard/hhkb_rn42/keymap_jp.c [new file with mode: 0644]

diff --git a/keyboard/hhkb_rn42/hhkb_avr.h b/keyboard/hhkb_rn42/hhkb_avr.h
new file mode 100644 (file)
index 0000000..b7bd507
--- /dev/null
@@ -0,0 +1,149 @@
+#ifndef HHKB_AVR_H
+#define HHKB_AVR_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+
+
+// Timer resolution check
+#if (1000000/TIMER_RAW_FREQ > 20)
+#   error "Timer resolution(>20us) is not enough for HHKB matrix scan tweak on V-USB."
+#endif
+
+
+/*
+ * HHKB Matrix I/O
+ *
+ * row:     HC4051[A,B,C]  selects scan row0-7
+ * row-ext: [En0,En1] row extention for JP
+ * col:     LS145[A,B,C,D] selects scan col0-7 and enable(D)
+ * key:     on: 0/off: 1
+ * prev:    hysteresis control: assert(1) when previous key state is on
+ */
+
+
+#if defined(__AVR_ATmega32U4__)
+/*
+ * For TMK HHKB alt controller(ATMega32U4)
+ *
+ * row:     PB0-2
+ * col:     PB3-5,6
+ * key:     PD7(pull-uped)
+ * prev:    PB7
+ * power:   PD4(L:off/H:on)
+ * row-ext: PC6,7 for HHKB JP(active low)
+ */
+static inline void KEY_ENABLE(void) { (PORTB &= ~(1<<6)); }
+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)); }
+static inline void KEY_POWER_ON(void) {}
+static inline void KEY_POWER_OFF(void) {}
+static inline void KEY_INIT(void)
+{
+    DDRB  = 0xFF;
+    PORTB = 0x00;
+    DDRD  &= ~0x80;
+    PORTD |= 0x80;
+    /* keyswitch board power on */
+    DDRD  |=  (1<<4);
+    PORTD |=  (1<<4);
+#ifdef HHKB_JP
+    /* row extention for HHKB JP */
+    DDRC  |= (1<<6|1<<7);
+    PORTC |= (1<<6|1<<7);
+#endif
+    KEY_UNABLE();
+    KEY_PREV_OFF();
+}
+static inline void KEY_SELECT(uint8_t ROW, uint8_t COL)
+{
+    PORTB = (PORTB & 0xC0) | (((COL) & 0x07)<<3) | ((ROW) & 0x07);
+#ifdef HHKB_JP
+    if ((ROW) & 0x08) PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<6);
+    else              PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<7);
+#endif
+}
+
+
+#elif defined(__AVR_AT90USB1286__)
+/*
+ * For Teensy++(AT90USB1286)
+ *
+ *                          HHKB pro    HHKB pro2
+ * row:     PB0-2           (6-8)       (5-7)
+ * col:     PB3-5,6         (9-12)      (8-11)
+ * key:     PE6(pull-uped)  (4)         (3)
+ * prev:    PE7             (5)         (4)
+ *
+ * TODO: convert into 'staitc inline' function
+ */
+#define KEY_INIT()              do {    \
+    DDRB |= 0x7F;                       \
+    DDRE |=  (1<<7);                    \
+    DDRE &= ~(1<<6);                    \
+    PORTE |= (1<<6);                    \
+} while (0)
+#define KEY_SELECT(ROW, COL)    (PORTB = (PORTB & 0xC0) |       \
+                                         (((COL) & 0x07)<<3) |  \
+                                         ((ROW) & 0x07))
+#define KEY_ENABLE()            (PORTB &= ~(1<<6))
+#define KEY_UNABLE()            (PORTB |=  (1<<6))
+#define KEY_STATE()             (PINE & (1<<6))
+#define KEY_PREV_ON()           (PORTE |=  (1<<7))
+#define KEY_PREV_OFF()          (PORTE &= ~(1<<7))
+#define KEY_POWER_ON()
+#define KEY_POWER_OFF()
+
+
+#else
+#   error "define code for matrix scan"
+#endif
+
+
+#if 0
+// For ATMega328P with V-USB
+//
+// #elif defined(__AVR_ATmega328P__)
+// Ports for V-USB
+// key:     PB0(pull-uped)
+// prev:    PB1
+// row:     PB2-4
+// col:     PC0-2,3
+// power:   PB5(Low:on/Hi-z:off)
+#define KEY_INIT()              do {    \
+    DDRB  |= 0x3E;                      \
+    DDRB  &= ~(1<<0);                   \
+    PORTB |= 1<<0;                      \
+    DDRC  |= 0x0F;                      \
+    KEY_UNABLE();                       \
+    KEY_PREV_OFF();                     \
+} while (0)
+#define KEY_SELECT(ROW, COL)    do {    \
+    PORTB = (PORTB & 0xE3) | ((ROW) & 0x07)<<2; \
+    PORTC = (PORTC & 0xF8) | ((COL) & 0x07);    \
+} while (0)
+#define KEY_ENABLE()            (PORTC &= ~(1<<3))
+#define KEY_UNABLE()            (PORTC |=  (1<<3))
+#define KEY_STATE()             (PINB & (1<<0))
+#define KEY_PREV_ON()           (PORTB |=  (1<<1))
+#define KEY_PREV_OFF()          (PORTB &= ~(1<<1))
+// Power supply switching
+#define KEY_POWER_ON()          do {    \
+    KEY_INIT();                         \
+    PORTB &= ~(1<<5);                   \
+    _delay_ms(1);                       \
+} while (0)
+#define KEY_POWER_OFF()         do {    \
+    DDRB  &= ~0x3F;                     \
+    PORTB &= ~0x3F;                     \
+    DDRC  &= ~0x0F;                     \
+    PORTC &= ~0x0F;                     \
+} while (0)
+#endif
+
+#endif
diff --git a/keyboard/hhkb_rn42/keymap_jp.c b/keyboard/hhkb_rn42/keymap_jp.c
new file mode 100644 (file)
index 0000000..48d0ee7
--- /dev/null
@@ -0,0 +1,50 @@
+/* 
+ * HHKB JP Layout
+ */
+#include "keymap_common.h"
+
+
+#ifdef KEYMAP_SECTION_ENABLE
+const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
+#else
+const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+#endif
+    /* Layer 0: Default Layer */
+    KEYMAP_JP(ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, JYEN,BSPC, \
+              TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC, \
+              LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,BSLS,ENT, \
+              LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,RO,  UP,  RSFT, \
+              FN0, ZKHK,LGUI,LALT,MHEN,     SPC,      HENK,KANA,RALT,FN0, LEFT,DOWN,RGHT),
+
+    /* Layer 1: HHKB mode (HHKB Fn)
+     * ,-----------------------------------------------------------.
+     * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+     * |-----------------------------------------------------------|
+     * |Caps |   |   |   |   |   |   |   |Psc|Slk|Pus|Up |   |     |
+     * |------------------------------------------------------`    |
+     * |      |VoD|VoU|Mut|   |   |  *|  /|Hom|PgU|Lef|Rig|   |    |
+     * |-----------------------------------------------------------|
+     * |       |   |   |   |   |   |  +|  -|End|PgD|Dow|   |   |   |
+     * |-----------------------------------------------------------|
+     * |   ||   |   |   |   |         |   |   |   |   ||   |   |   |
+     * `-----------------------------------------------------------'
+     */ 
+    KEYMAP_JP(PWR, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
+              CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS, \
+              TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,TRNS,PENT, \
+              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,TRNS,TRNS,TRNS, \
+              TRNS,TRNS,TRNS,TRNS,TRNS,     TRNS,     TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS),
+};
+
+
+
+/*
+ * Fn action definition
+ */
+#ifdef KEYMAP_SECTION_ENABLE
+const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
+#else
+const uint16_t fn_actions[] PROGMEM = {
+#endif
+    [0] = ACTION_LAYER_MOMENTARY(1),
+};