From 011fb9e7319f1dbac1e49c4f6ab30b997bcc9bd0 Mon Sep 17 00:00:00 2001 From: tmk Date: Sat, 9 Apr 2022 16:00:42 +0900 Subject: [PATCH] adb_usb: Add Logitech Extended mouse support --- converter/adb_usb/matrix.c | 18 ++++++++++++++++++ tmk_core/protocol/adb.h | 1 + 2 files changed, 19 insertions(+) diff --git a/converter/adb_usb/matrix.c b/converter/adb_usb/matrix.c index 95657c50..1872410d 100644 --- a/converter/adb_usb/matrix.c +++ b/converter/adb_usb/matrix.c @@ -288,6 +288,13 @@ again: adb_host_listen(ADB_ADDR_MOUSE_TMP, ADB_REG_1, 0x03, 0x38); // set pseudo handler for Logitech mouse_handler = ADB_HANDLER_LOGITECH; + } else if (buf[0] == 0x4C && buf[1] == 0x54) { + // Logitech Extended + // MouseMan - FCCID:DZLMAH32 'LT01' + // MouseMan Cordless - FCCID:DZLMRC33T 'LTW1' + xprintf("M:Logitech-Ext\n"); + // set pseudo handler + mouse_handler = ADB_HANDLER_LOGITECH_EXT; } else { dmprintf("Unknown\n"); } @@ -430,6 +437,17 @@ void adb_mouse_task(void) if (yneg) buf[2] |= 0x70; if (xneg) buf[2] |= 0x07; len = 3; + } else if (mouse_handler == ADB_HANDLER_LOGITECH_EXT) { + // Logitech Extended: + // Byte0: b00 y06 y05 y04 y03 y02 y01 y00 + // Byte1: b02 x06 x05 x04 x03 x02 x01 x00 + // Byte2: b01 y09 y08 y07 b03 x09 x08 x07 + // L=b00, R=b01, M=b02 + uint8_t tmp = buf[2]; + if (buf[1] & 0x80) buf[2] |= 0x80; else buf[2] &= 0x7F; + if (tmp & 0x80) buf[1] |= 0x80; else buf[1] &= 0x7F; + if (buf[len - 1] & 0x40) yneg = true; + if (buf[len - 1] & 0x04) xneg = true; } else if (mouse_handler == ADB_HANDLER_MACALLY2_MOUSE && len == 4) { // Macally 2-button mouse: // Byte0: b00 y06 y05 y04 y03 y02 y01 y00 diff --git a/tmk_core/protocol/adb.h b/tmk_core/protocol/adb.h index 58ee8925..1c1ace5d 100644 --- a/tmk_core/protocol/adb.h +++ b/tmk_core/protocol/adb.h @@ -103,6 +103,7 @@ POSSIBILITY OF SUCH DAMAGE. #define ADB_HANDLER_MOUSESYSTEMS_A3 0x03 // pseudo handler #define ADB_HANDLER_LOGITECH 0x4C +#define ADB_HANDLER_LOGITECH_EXT 0x4D // ADB host