summaryrefslogtreecommitdiff
path: root/daemon/kmd/wallet/driver/ledger_hid.go
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/kmd/wallet/driver/ledger_hid.go')
-rw-r--r--daemon/kmd/wallet/driver/ledger_hid.go13
1 files changed, 12 insertions, 1 deletions
diff --git a/daemon/kmd/wallet/driver/ledger_hid.go b/daemon/kmd/wallet/driver/ledger_hid.go
index 22a8e05ac..8094df50b 100644
--- a/daemon/kmd/wallet/driver/ledger_hid.go
+++ b/daemon/kmd/wallet/driver/ledger_hid.go
@@ -25,6 +25,7 @@ import (
)
const ledgerVendorID = 0x2c97
+const ledgerUsagePage = 0xffa0
// LedgerUSB is a wrapper around a Ledger USB HID device, used to implement
// the protocol used for sending messages to the application running on the
@@ -82,7 +83,11 @@ func (l *LedgerUSB) WritePackets(msg []byte) error {
if err != nil {
return err
}
- if cc != len(packet) {
+ // on Windows:
+ // The usb library adds one extra byte to the input passed to the USB device
+ // so the written bytes are larger than what we've send
+ // https://github.com/karalabe/hid/blob/9c14560f9ee858c43f40b5cd01392b167aacf4e8/hid_enabled.go#L167
+ if cc < len(packet) {
return fmt.Errorf("WritePackets: short write: %d != %d", cc, len(packet))
}
@@ -202,7 +207,13 @@ func LedgerEnumerate() ([]hid.DeviceInfo, error) {
}
var infos []hid.DeviceInfo
+ // The enumeration process is based on:
+ // https://github.com/LedgerHQ/blue-loader-python/blob/master/ledgerblue/comm.py#L212
+ // we search for the Ledger Vendor id and igonre devices that don't have specific usagepage or interface
for _, info := range hid.Enumerate(ledgerVendorID, 0) {
+ if info.UsagePage != ledgerUsagePage && info.Interface != 0 {
+ continue
+ }
infos = append(infos, info)
}