]> git.donarmstrong.com Git - tmk_firmware.git/commitdiff
Add ADB extended keyboard support by blargg@GH.
authortmk <nobody@nowhere>
Wed, 12 Dec 2012 00:45:00 +0000 (09:45 +0900)
committertmk <nobody@nowhere>
Wed, 12 Dec 2012 00:49:59 +0000 (09:49 +0900)
This offers distinction between left/right modifiers.

converter/adb_usb/keymap.c
protocol/adb.c
protocol/adb.h

index c622dc62385fe58a32d12c5b44900abf53bcaa7a..25f851859f51c601d7dd3272d7df5ce1556590ba 100644 (file)
@@ -40,7 +40,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
     K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79,  K59,K5B,K5C,K4E, \
     K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27,    K24,               K56,K57,K58,K45, \
     K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C,        K7B,     K3E,      K53,K54,K55,     \
-    K36,K3A,K37,        K31,                                 K3B,K3D,K3C,  K52,    K41,K4C  \
+    K36,K3A,K37,        K31,                    K7C,K7D,     K3B,K3D,K3C,  K52,    K41,K4C  \
 ) { \
     { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
     { KC_##K08, KC_##K09, KC_NO,    KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
@@ -57,7 +57,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
     { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_NO,    KC_##K67 }, \
     { KC_NO,    KC_##K69, KC_NO,    KC_##K6B, KC_NO,    KC_##K6D, KC_NO,    KC_##K6F }, \
     { KC_NO,    KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
-    { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_NO,    KC_NO,    KC_NO,    KC_##K7F }  \
+    { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_NO,    KC_##K7F }  \
 }
 
 
@@ -109,7 +109,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS,     DEL, END, PGDN,    P7,  P8,  P9,  PMNS,
     CAPS,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     ENT,                         P4,  P5,  P6,  PPLS,
     LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,          RSFT,          UP,           P1,  P2,  P3,
-    LCTL,LGUI,LALT,          SPC,                                              LEFT,DOWN,RGHT,    P0,       PDOT,PENT
+    LCTL,LGUI,LALT,          SPC,                               RGUI,RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
     ),
 };
 
index d7105b3a9ae5b44564088f2923ea290da7c67113..9f52f6ce77f2eea01e288b51d59efd59afc86917 100644 (file)
@@ -67,6 +67,12 @@ void adb_host_init(void)
 #ifdef ADB_PSW_BIT
     psw_hi();
 #endif
+
+    // Enable keyboard left/right modifier distinction
+    // Addr:Keyboard(0010), Cmd:Listen(10), Register3(11)
+    // upper byte: reserved bits 0000, device address 0010
+    // lower byte: device handler 00000011
+    adb_host_listen(0x2B,0x02,0x03);
 }
 
 #ifdef ADB_PSW_BIT
@@ -98,19 +104,27 @@ uint16_t adb_host_kbd_recv(void)
     return data;
 }
 
-// send state of LEDs
-void adb_host_kbd_led(uint8_t led)
+void adb_host_listen(uint8_t cmd, uint8_t data_h, uint8_t data_l)
 {
     attention();
-    send_byte(0x2A);            // Addr:Keyboard(0010), Cmd:Listen(10), Register2(10)
+    send_byte(cmd);
     place_bit0();               // Stopbit(0)
     _delay_us(200);             // Tlt/Stop to Start
     place_bit1();               // Startbit(1)
-    send_byte(0);               // send upper byte (not used)
-    send_byte(led&0x07);        // send lower byte (bit2: ScrollLock, bit1: CapsLock, bit0: NumLock)
+    send_byte(data_h); 
+    send_byte(data_l);
     place_bit0();               // Stopbit(0);
 }
 
+// send state of LEDs
+void adb_host_kbd_led(uint8_t led)
+{
+    // Addr:Keyboard(0010), Cmd:Listen(10), Register2(10)
+    // send upper byte (not used)
+    // send lower byte (bit2: ScrollLock, bit1: CapsLock, bit0:
+    adb_host_listen(0x2A,0,led&0x07);
+}
+
 
 static inline void data_lo()
 {
index 1e4ca40132d4c2e4355ea1d6d79bdd9ab0ff4167..bfe598bbf1a1bba7f470d03f5b553b40086d7613 100644 (file)
@@ -56,6 +56,7 @@ POSSIBILITY OF SUCH DAMAGE.
 void     adb_host_init(void);
 bool     adb_host_psw(void);
 uint16_t adb_host_kbd_recv(void);
+void     adb_host_listen(uint8_t cmd, uint8_t data_h, uint8_t data_l);
 void     adb_host_kbd_led(uint8_t led);
 
 #endif