Browse Source
Merge pull request #3842 from SomberNight/ledger_3508
attempt at fixing ledger 'read error'
3.1
ThomasV
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
22 additions and
4 deletions
-
lib/base_wizard.py
-
lib/plugins.py
-
plugins/ledger/ledger.py
|
|
@ -234,6 +234,15 @@ class BaseWizard(object): |
|
|
|
self.plugin = self.plugins.get_plugin(name) |
|
|
|
try: |
|
|
|
self.plugin.setup_device(device_info, self, purpose) |
|
|
|
except OSError as e: |
|
|
|
self.show_error(_('We encountered an error while connecting to your device:') |
|
|
|
+ '\n' + str(e) + '\n' |
|
|
|
+ _('To try to fix this, we will now re-pair with your device.') + '\n' |
|
|
|
+ _('Please try again.')) |
|
|
|
devmgr = self.plugins.device_manager |
|
|
|
devmgr.unpair_id(device_info.device.id_) |
|
|
|
self.choose_hw_device(purpose) |
|
|
|
return |
|
|
|
except BaseException as e: |
|
|
|
self.show_error(str(e)) |
|
|
|
self.choose_hw_device(purpose) |
|
|
|
|
|
@ -362,15 +362,20 @@ class DeviceMgr(ThreadJob, PrintError): |
|
|
|
if not xpub in self.xpub_ids: |
|
|
|
return |
|
|
|
_id = self.xpub_ids.pop(xpub) |
|
|
|
client = self.client_lookup(_id) |
|
|
|
self.clients.pop(client, None) |
|
|
|
if client: |
|
|
|
client.close() |
|
|
|
self._close_client(_id) |
|
|
|
|
|
|
|
def unpair_id(self, id_): |
|
|
|
xpub = self.xpub_by_id(id_) |
|
|
|
if xpub: |
|
|
|
self.unpair_xpub(xpub) |
|
|
|
else: |
|
|
|
self._close_client(id_) |
|
|
|
|
|
|
|
def _close_client(self, id_): |
|
|
|
client = self.client_lookup(id_) |
|
|
|
self.clients.pop(client, None) |
|
|
|
if client: |
|
|
|
client.close() |
|
|
|
|
|
|
|
def pair_xpub(self, xpub, id_): |
|
|
|
with self.lock: |
|
|
|
|
|
@ -172,6 +172,10 @@ class Ledger_Client(): |
|
|
|
raise Exception("Dongle is temporarily locked - please unplug it and replug it again") |
|
|
|
if ((e.sw & 0xFFF0) == 0x63c0): |
|
|
|
raise Exception("Invalid PIN - please unplug the dongle and plug it again before retrying") |
|
|
|
if e.sw == 0x6f00 and e.message == 'Invalid channel': |
|
|
|
# based on docs 0x6f00 might be a more general error, hence we also compare message to be sure |
|
|
|
raise Exception("Invalid channel.\n" |
|
|
|
"Please make sure that 'Browser support' is disabled on your device.") |
|
|
|
raise e |
|
|
|
|
|
|
|
def checkDevice(self): |
|
|
|