async def try_login(self, retry=True): from main import pa, numpad while retry: self.reset() pin = await self.interact() if pin is None: # Perhaps they are having trouble with touch pad? numpad.sensitivity = 2 continue pa.setup(pin, self.is_secondary) if pa.is_delay_needed() or pa.num_fails: await self.do_delay(pa) # do the actual login attempt now dis.fullscreen("Wait...") try: ok = pa.login() if ok: break except RuntimeError as e: # I'm a brick and other stuff can happen here print("pa.login: %r" % e) await ux_show_story('''\ That's not the right PIN!\n Please check all digits carefully, and that prefix verus suffix break point is correct. Your next attempt will take even longer, so please keep that in mind. ''', title='Wrong PIN')
def set_genuine(): # PIN must be blank for this to work # - or logged in already as main from main import pa if pa.is_secondary: return if not pa.is_successful(): # assume blank pin during factory selftest pa.setup(b'') assert not pa.is_delay_needed() # "PIN failures?" if not pa.is_successful(): pa.login() assert pa.is_successful() # "PIN not blank?" # do verify step pa.greenlight_firmware() dis.show()
async def try_login(self, retry=True): from main import pa while retry: if version.has_608 and not pa.attempts_left: # tell them it's futile await self.we_are_ewaste(pa.num_fails) self.reset() if pa.num_fails: self.footer = '%d failures' % pa.num_fails if version.has_608: self.footer += ', %d tries left' % pa.attempts_left pin = await self.interact() if pin is None: # pressed X on empty screen ... RFU continue dis.fullscreen("Wait...") pa.setup(pin, self.is_secondary) if version.has_608 and pa.num_fails > 3: # they are approaching brickage, so warn them each attempt await self.confirm_attempt(pa.attempts_left, pa.num_fails, pin) elif pa.is_delay_needed(): # mark 1/2 might come here, never mark3 await self.do_delay(pa) # do the actual login attempt now try: dis.busy_bar(True) ok = pa.login() if ok: break # success, leave except RuntimeError as exc: # I'm a brick and other stuff can happen here # - especially AUTH_FAIL when pin is just wrong. ok = False if exc.args[0] == pincodes.EPIN_I_AM_BRICK: await self.we_are_ewaste(pa.num_fails) continue finally: dis.busy_bar(False) pa.num_fails += 1 if version.has_608: pa.attempts_left -= 1 msg = "" nf = '1 failure' if pa.num_fails <= 1 else ('%d failures' % pa.num_fails) if version.has_608: if not pa.attempts_left: await self.we_are_ewaste(pa.num_fails) continue msg += '%d attempts left' % (pa.attempts_left) else: msg += '%s' % nf msg += '''\n\nPlease check all digits carefully, and that prefix versus \ suffix break point is correct.''' if version.has_608: msg += '\n\n' + nf await ux_show_story(msg, title='WRONG PIN')