firmware/shared/choosers.py

116 lines
2.6 KiB
Python

# (c) Copyright 2018 by Coinkite Inc. This file is covered by license found in COPYING-CC.
#
# choosers.py - various interactive menus for setting config values.
#
from glob import settings
from nvstore import SettingsObject
from version import has_qwerty
def max_fee_chooser():
from psbt import DEFAULT_MAX_FEE_PERCENTAGE
limit = settings.get('fee_limit', DEFAULT_MAX_FEE_PERCENTAGE)
ch = [ '10% (default)', '25%', '50%', 'no limit']
va = [ 10, 25, 50, -1]
try:
which = va.index(limit)
except ValueError:
which = 0
def set(idx, text):
settings.set('fee_limit', va[idx])
return which, ch, set
def idle_timeout_chooser():
from ux import DEFAULT_IDLE_TIMEOUT
timeout = settings.get('idle_to', DEFAULT_IDLE_TIMEOUT) # in seconds
ch = [ ' 2 minutes',
' 5 minutes',
'15 minutes',
' 1 hour',
' 4 hours',
' 8 hours',
' Never' ]
va = [ 2*60, 5*60, 15*60,
3600, 4*3600, 8*3600, 0 ]
try:
which = va.index(timeout)
except ValueError:
which = 0
def set_idle_timeout(idx, text):
settings.set('idle_to', va[idx])
return which, ch, set_idle_timeout
def value_resolution_chooser():
# how to render Bitcoin values
ch = [ 'BTC', 'mBTC', 'bits', 'sats' ]
va = [ 8, 5, 2, 0 ]
rz = settings.get('rz', 8)
try:
which = va.index(rz)
except ValueError:
which = 0
def doit(idx, text):
settings.set('rz', va[idx])
return which, ch, doit
def scramble_keypad_chooser():
# rngk = randomize keypad for PIN entry
s = SettingsObject.prelogin()
which = s.get('rngk', 0)
del s
ch = ['Normal', 'Scramble Keys']
def set(idx, text):
# save it, but "outside" of login PIN
s = SettingsObject.prelogin()
s.set('rngk', idx)
s.save()
del s
return which, ch, set
def kill_key_chooser():
# kbtn = single keypress after anti-phishing words will wipe seed
s = SettingsObject.prelogin()
if not has_qwerty:
ch = ['Disable'] + [str(d) for d in range(10)]
else:
ch = ['Disable'] + [chr(65+i) for i in range(26)] + [i for i in '\',./']
try:
which = ch.index(s.get('kbtn', None))
except ValueError:
which = 0
def set(idx, text):
# save it, but "outside" of login PIN
s = SettingsObject.prelogin()
if idx == 0:
s.remove_key('kbtn')
else:
s.set('kbtn', text)
s.save()
del s
return which, ch, set
# EOF