aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2017-10-03 17:18:50 +0800
committerPéter Szilágyi <peterke@gmail.com>2017-10-03 17:45:45 +0800
commit8d126a49818810e274e946357bbbccc76fa09cd0 (patch)
tree96c239ec68de46dff27e688fbdab25903efde7d6
parentf4c49bc0f03910f0caa16c4a067c0f201de293b7 (diff)
downloaddexon-8d126a49818810e274e946357bbbccc76fa09cd0.tar
dexon-8d126a49818810e274e946357bbbccc76fa09cd0.tar.gz
dexon-8d126a49818810e274e946357bbbccc76fa09cd0.tar.bz2
dexon-8d126a49818810e274e946357bbbccc76fa09cd0.tar.lz
dexon-8d126a49818810e274e946357bbbccc76fa09cd0.tar.xz
dexon-8d126a49818810e274e946357bbbccc76fa09cd0.tar.zst
dexon-8d126a49818810e274e946357bbbccc76fa09cd0.zip
accounts/usbwallet: handle bad interface number on macOS
-rw-r--r--accounts/usbwallet/hub.go12
1 files changed, 8 insertions, 4 deletions
diff --git a/accounts/usbwallet/hub.go b/accounts/usbwallet/hub.go
index 7069d2531..61fc98ccc 100644
--- a/accounts/usbwallet/hub.go
+++ b/accounts/usbwallet/hub.go
@@ -47,6 +47,8 @@ type Hub struct {
scheme string // Protocol scheme prefixing account and wallet URLs.
vendorID uint16 // USB vendor identifier used for device discovery
productIDs []uint16 // USB product identifiers used for device discovery
+ usageID uint16 // USB usage page identifier used for macOS device discovery
+ endpointID int // USB endpoint identifier used for non-macOS device discovery
makeDriver func(log.Logger) driver // Factory method to construct a vendor specific driver
refreshed time.Time // Time instance when the list of wallets was last refreshed
@@ -66,16 +68,16 @@ type Hub struct {
// NewLedgerHub creates a new hardware wallet manager for Ledger devices.
func NewLedgerHub() (*Hub, error) {
- return newHub(LedgerScheme, 0x2c97, []uint16{0x0000 /* Ledger Blue */, 0x0001 /* Ledger Nano S */}, newLedgerDriver)
+ return newHub(LedgerScheme, 0x2c97, []uint16{0x0000 /* Ledger Blue */, 0x0001 /* Ledger Nano S */}, 0xffa0, 0, newLedgerDriver)
}
// NewTrezorHub creates a new hardware wallet manager for Trezor devices.
func NewTrezorHub() (*Hub, error) {
- return newHub(TrezorScheme, 0x534c, []uint16{0x0001 /* Trezor 1 */}, newTrezorDriver)
+ return newHub(TrezorScheme, 0x534c, []uint16{0x0001 /* Trezor 1 */}, 0xff00, 0, newTrezorDriver)
}
// newHub creates a new hardware wallet manager for generic USB devices.
-func newHub(scheme string, vendorID uint16, productIDs []uint16, makeDriver func(log.Logger) driver) (*Hub, error) {
+func newHub(scheme string, vendorID uint16, productIDs []uint16, usageID uint16, endpointID int, makeDriver func(log.Logger) driver) (*Hub, error) {
if !hid.Supported() {
return nil, errors.New("unsupported platform")
}
@@ -83,6 +85,8 @@ func newHub(scheme string, vendorID uint16, productIDs []uint16, makeDriver func
scheme: scheme,
vendorID: vendorID,
productIDs: productIDs,
+ usageID: usageID,
+ endpointID: endpointID,
makeDriver: makeDriver,
quit: make(chan chan error),
}
@@ -133,7 +137,7 @@ func (hub *Hub) refreshWallets() {
}
for _, info := range hid.Enumerate(hub.vendorID, 0) {
for _, id := range hub.productIDs {
- if info.ProductID == id && info.Interface == 0 {
+ if info.ProductID == id && (info.UsagePage == hub.usageID || info.Interface == hub.endpointID) {
devices = append(devices, info)
break
}