diff options
| -rw-r--r-- | converter/adb_usb/keymap.c | 6 | ||||
| -rw-r--r-- | protocol/adb.c | 24 | ||||
| -rw-r--r-- | protocol/adb.h | 1 | 
3 files changed, 23 insertions, 8 deletions
diff --git a/converter/adb_usb/keymap.c b/converter/adb_usb/keymap.c index c622dc623..25f851859 100644 --- a/converter/adb_usb/keymap.c +++ b/converter/adb_usb/keymap.c @@ -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      ),  }; diff --git a/protocol/adb.c b/protocol/adb.c index d7105b3a9..9f52f6ce7 100644 --- a/protocol/adb.c +++ b/protocol/adb.c @@ -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()  { diff --git a/protocol/adb.h b/protocol/adb.h index 1e4ca4013..bfe598bbf 100644 --- a/protocol/adb.h +++ b/protocol/adb.h @@ -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  | 
