Merge pull request #15232 from karalabe/macos-usbhw-fixes
accounts/usbwallet: handle bad interface number on macOS
This commit is contained in:
commit
c2d93ded35
@ -47,6 +47,8 @@ type Hub struct {
|
|||||||
scheme string // Protocol scheme prefixing account and wallet URLs.
|
scheme string // Protocol scheme prefixing account and wallet URLs.
|
||||||
vendorID uint16 // USB vendor identifier used for device discovery
|
vendorID uint16 // USB vendor identifier used for device discovery
|
||||||
productIDs []uint16 // USB product identifiers 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
|
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
|
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.
|
// NewLedgerHub creates a new hardware wallet manager for Ledger devices.
|
||||||
func NewLedgerHub() (*Hub, error) {
|
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.
|
// NewTrezorHub creates a new hardware wallet manager for Trezor devices.
|
||||||
func NewTrezorHub() (*Hub, error) {
|
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.
|
// 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() {
|
if !hid.Supported() {
|
||||||
return nil, errors.New("unsupported platform")
|
return nil, errors.New("unsupported platform")
|
||||||
}
|
}
|
||||||
@ -83,6 +85,8 @@ func newHub(scheme string, vendorID uint16, productIDs []uint16, makeDriver func
|
|||||||
scheme: scheme,
|
scheme: scheme,
|
||||||
vendorID: vendorID,
|
vendorID: vendorID,
|
||||||
productIDs: productIDs,
|
productIDs: productIDs,
|
||||||
|
usageID: usageID,
|
||||||
|
endpointID: endpointID,
|
||||||
makeDriver: makeDriver,
|
makeDriver: makeDriver,
|
||||||
quit: make(chan chan error),
|
quit: make(chan chan error),
|
||||||
}
|
}
|
||||||
@ -133,7 +137,7 @@ func (hub *Hub) refreshWallets() {
|
|||||||
}
|
}
|
||||||
for _, info := range hid.Enumerate(hub.vendorID, 0) {
|
for _, info := range hid.Enumerate(hub.vendorID, 0) {
|
||||||
for _, id := range hub.productIDs {
|
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)
|
devices = append(devices, info)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user