From d99a45bdd69e7a8e4b9240de6cd918a67cdd95bc Mon Sep 17 00:00:00 2001 From: Michael de Hoog Date: Tue, 7 Jan 2025 13:16:03 -1000 Subject: [PATCH] Also support ledger flex --- accounts/usbwallet/hub.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/accounts/usbwallet/hub.go b/accounts/usbwallet/hub.go index d080624cba..81457b7da2 100644 --- a/accounts/usbwallet/hub.go +++ b/accounts/usbwallet/hub.go @@ -73,7 +73,7 @@ func NewLedgerHub() (*Hub, error) { return newHub(LedgerScheme, 0x2c97, []uint16{ // Device definitions taken from - // https://github.com/LedgerHQ/ledger-live/blob/38012bc8899e0f07149ea9cfe7e64b2c146bc92b/libs/ledgerjs/packages/devices/src/index.ts + // https://github.com/LedgerHQ/ledger-live/blob/595cb73b7e6622dbbcfc11867082ddc886f1bf01/libs/ledgerjs/packages/devices/src/index.ts // Original product IDs 0x0000, /* Ledger Blue */ @@ -81,12 +81,14 @@ func NewLedgerHub() (*Hub, error) { 0x0004, /* Ledger Nano X */ 0x0005, /* Ledger Nano S Plus */ 0x0006, /* Ledger Nano FTS */ + 0x0007, /* Ledger Flex */ 0x0000, /* WebUSB Ledger Blue */ 0x1000, /* WebUSB Ledger Nano S */ 0x4000, /* WebUSB Ledger Nano X */ 0x5000, /* WebUSB Ledger Nano S Plus */ 0x6000, /* WebUSB Ledger Nano FTS */ + 0x7000, /* WebUSB Ledger Flex */ }, 0xffa0, 0, newLedgerDriver) } @@ -179,9 +181,11 @@ func (hub *Hub) refreshWallets() { for _, info := range infos { for _, id := range hub.productIDs { + // We check both the raw ProductID (legacy) and just the upper byte, as Ledger + // uses `MMII`, encoding a model (MM) and an interface bitfield (II) + mmOnly := info.ProductID & 0xff00 // Windows and Macos use UsageID matching, Linux uses Interface matching - upperId := info.ProductID & 0xff00 - if (info.ProductID == id || upperId == id) && (info.UsagePage == hub.usageID || info.Interface == hub.endpointID) { + if (info.ProductID == id || mmOnly == id) && (info.UsagePage == hub.usageID || info.Interface == hub.endpointID) { devices = append(devices, info) break }