diff --git a/README.md b/README.md index 948bb7f8..d75b8581 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ Description=Seedsigner [Service] User=pi -WorkingDirectory=/home/pi/seedsigner +WorkingDirectory=/home/pi/seedsigner/src/ ExecStart=/usr/bin/python3 main.py Restart=always @@ -171,4 +171,4 @@ sudo reboot It will take about a minute after the Pi is powered on for the GUI to launch -- be patient! -_Reminder: If you used option #2, [return the guide](babel/README.md) to remove the internet access over USB configuration._ +_Reminder: If you used option #2, [return the guide](docs/usb_relay.md) to remove the internet access over USB configuration._ diff --git a/main.py b/main.py deleted file mode 100644 index 3b1f387d..00000000 --- a/main.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys -sys.path.append('./views') -sys.path.append('./models') -sys.path.append('./helpers') - -from controller import Controller -import time - -DEBUG = True - -controller = Controller() -controller.start(DEBUG) \ No newline at end of file diff --git a/src/main.py b/src/main.py new file mode 100644 index 00000000..1bb2a4b2 --- /dev/null +++ b/src/main.py @@ -0,0 +1,12 @@ +import configparser +import sys +import time + +from seedsigner.controller import Controller + + +config = configparser.ConfigParser() +config.read("settings.ini") + +controller = Controller(config) +controller.start() diff --git a/controller.py b/src/seedsigner/controller.py similarity index 95% rename from controller.py rename to src/seedsigner/controller.py index 07409f8c..3cef2d35 100644 --- a/controller.py +++ b/src/seedsigner/controller.py @@ -4,28 +4,23 @@ from multiprocessing import Process, Queue from subprocess import call # Internal file class dependencies -from view import View -from menu_view import MenuView -from seed_tools_view import SeedToolsView -from signing_tools_view import SigningToolsView -from settings_tools_view import SettingsToolsView -from io_test_view import IOTestView -from buttons import Buttons, B -from camera_process import CameraProcess -from path import Path -from seed_storage import SeedStorage -from specter_desktop_multisig_wallet import SpecterDesktopMultisigWallet -from blue_vault_wallet import BlueVaultWallet -from sparrow_multisig_wallet import SparrowMultiSigWallet -from generic_ur2_wallet import GenericUR2Wallet +from .views import (View, MenuView, SeedToolsView,SigningToolsView, + SettingsToolsView, IOTestView) +from .helpers import Buttons, B, CameraProcess,Path +from .models import (SeedStorage, SpecterDesktopMultisigWallet, BlueVaultWallet, + SparrowMultiSigWallet, GenericUR2Wallet) + class Controller: - VERSION = "0.4.1a1" + VERSION = "0.4.1" - def __init__(self) -> None: + def __init__(self, config) -> None: controller = self + # settings + self.DEBUG = config.getboolean("system", "DEBUG") + # Input Buttons self.buttons = Buttons() @@ -48,14 +43,19 @@ class Controller: p = Process(target=CameraProcess.start, args=(self.from_camera_queue, self.to_camera_queue)) p.start() - return - def start(self, debug = False) -> None: - - if debug == False: - crash_cnt = 0 + def start(self) -> None: + if self.DEBUG: + # Let Exceptions halt execution + try: + self.show_main_menu() + finally: + # Clear the screen when exiting + self.menu_view.display_blank_screen() + else: # Handle Unexpected crashes by restarting up to 3 times + crash_cnt = 0 while True: try: self.show_main_menu() @@ -70,11 +70,6 @@ class Controller: crash_cnt += 1 self.menu_view.draw_modal(["Crashed ..."], "", "requires hard restart") - else: - try: - self.show_main_menu() - finally: - self.menu_view.display_blank_screen() ### Menu diff --git a/helpers/ST7789.py b/src/seedsigner/helpers/ST7789.py similarity index 100% rename from helpers/ST7789.py rename to src/seedsigner/helpers/ST7789.py diff --git a/src/seedsigner/helpers/__init__.py b/src/seedsigner/helpers/__init__.py new file mode 100644 index 00000000..242c25db --- /dev/null +++ b/src/seedsigner/helpers/__init__.py @@ -0,0 +1,5 @@ +from .buttons import * +from .camera_process import * +from .path import * +from .qr import * +from .ST7789 import * \ No newline at end of file diff --git a/helpers/bcur.py b/src/seedsigner/helpers/bcur.py similarity index 100% rename from helpers/bcur.py rename to src/seedsigner/helpers/bcur.py diff --git a/helpers/buttons.py b/src/seedsigner/helpers/buttons.py similarity index 100% rename from helpers/buttons.py rename to src/seedsigner/helpers/buttons.py diff --git a/helpers/camera_process.py b/src/seedsigner/helpers/camera_process.py similarity index 100% rename from helpers/camera_process.py rename to src/seedsigner/helpers/camera_process.py diff --git a/helpers/path.py b/src/seedsigner/helpers/path.py similarity index 100% rename from helpers/path.py rename to src/seedsigner/helpers/path.py diff --git a/helpers/qr.py b/src/seedsigner/helpers/qr.py similarity index 100% rename from helpers/qr.py rename to src/seedsigner/helpers/qr.py diff --git a/helpers/ur2/LICENSE b/src/seedsigner/helpers/ur2/LICENSE similarity index 100% rename from helpers/ur2/LICENSE rename to src/seedsigner/helpers/ur2/LICENSE diff --git a/helpers/ur2/__init__.py b/src/seedsigner/helpers/ur2/__init__.py similarity index 100% rename from helpers/ur2/__init__.py rename to src/seedsigner/helpers/ur2/__init__.py diff --git a/helpers/ur2/bytewords.py b/src/seedsigner/helpers/ur2/bytewords.py similarity index 100% rename from helpers/ur2/bytewords.py rename to src/seedsigner/helpers/ur2/bytewords.py diff --git a/helpers/ur2/cbor_lite.py b/src/seedsigner/helpers/ur2/cbor_lite.py similarity index 100% rename from helpers/ur2/cbor_lite.py rename to src/seedsigner/helpers/ur2/cbor_lite.py diff --git a/helpers/ur2/constants.py b/src/seedsigner/helpers/ur2/constants.py similarity index 100% rename from helpers/ur2/constants.py rename to src/seedsigner/helpers/ur2/constants.py diff --git a/helpers/ur2/crc32.py b/src/seedsigner/helpers/ur2/crc32.py similarity index 100% rename from helpers/ur2/crc32.py rename to src/seedsigner/helpers/ur2/crc32.py diff --git a/helpers/ur2/fountain_decoder.py b/src/seedsigner/helpers/ur2/fountain_decoder.py similarity index 100% rename from helpers/ur2/fountain_decoder.py rename to src/seedsigner/helpers/ur2/fountain_decoder.py diff --git a/helpers/ur2/fountain_encoder.py b/src/seedsigner/helpers/ur2/fountain_encoder.py similarity index 100% rename from helpers/ur2/fountain_encoder.py rename to src/seedsigner/helpers/ur2/fountain_encoder.py diff --git a/helpers/ur2/fountain_utils.py b/src/seedsigner/helpers/ur2/fountain_utils.py similarity index 100% rename from helpers/ur2/fountain_utils.py rename to src/seedsigner/helpers/ur2/fountain_utils.py diff --git a/helpers/ur2/random_sampler.py b/src/seedsigner/helpers/ur2/random_sampler.py similarity index 100% rename from helpers/ur2/random_sampler.py rename to src/seedsigner/helpers/ur2/random_sampler.py diff --git a/helpers/ur2/ur.py b/src/seedsigner/helpers/ur2/ur.py similarity index 100% rename from helpers/ur2/ur.py rename to src/seedsigner/helpers/ur2/ur.py diff --git a/helpers/ur2/ur_decoder.py b/src/seedsigner/helpers/ur2/ur_decoder.py similarity index 100% rename from helpers/ur2/ur_decoder.py rename to src/seedsigner/helpers/ur2/ur_decoder.py diff --git a/helpers/ur2/ur_encoder.py b/src/seedsigner/helpers/ur2/ur_encoder.py similarity index 100% rename from helpers/ur2/ur_encoder.py rename to src/seedsigner/helpers/ur2/ur_encoder.py diff --git a/helpers/ur2/utils.py b/src/seedsigner/helpers/ur2/utils.py similarity index 100% rename from helpers/ur2/utils.py rename to src/seedsigner/helpers/ur2/utils.py diff --git a/helpers/ur2/xoshiro256.py b/src/seedsigner/helpers/ur2/xoshiro256.py similarity index 100% rename from helpers/ur2/xoshiro256.py rename to src/seedsigner/helpers/ur2/xoshiro256.py diff --git a/src/seedsigner/models/__init__.py b/src/seedsigner/models/__init__.py new file mode 100644 index 00000000..9a39404b --- /dev/null +++ b/src/seedsigner/models/__init__.py @@ -0,0 +1,7 @@ +from .wallet import * # base class has to be first +from .blue_vault_wallet import * +from .generic_ur2_wallet import * +from .seed_storage import * +from .sparrow_multisig_wallet import * +from .specter_desktop_multisig_wallet import * +from .specter_desktop_single_sig_wallet import * diff --git a/models/blue_vault_wallet.py b/src/seedsigner/models/blue_vault_wallet.py similarity index 95% rename from models/blue_vault_wallet.py rename to src/seedsigner/models/blue_vault_wallet.py index 09c6ac71..daf2ae9c 100644 --- a/models/blue_vault_wallet.py +++ b/src/seedsigner/models/blue_vault_wallet.py @@ -1,5 +1,7 @@ -from wallet import Wallet -from qr import QR +from . import Wallet +from seedsigner.helpers import QR +from seedsigner.helpers.bcur import (bcur_decode, cbor_decode, bc32decode, + bc32encode, cbor_encode, bcur_encode) # External Dependencies from embit.bip39 import mnemonic_to_bytes @@ -12,7 +14,6 @@ from embit.networks import NETWORKS from embit import ec from io import BytesIO from binascii import unhexlify, hexlify, a2b_base64, b2a_base64 -from bcur import bcur_decode, cbor_decode, bc32decode, bc32encode, cbor_encode, bcur_encode import re class BlueVaultWallet(Wallet): @@ -114,7 +115,7 @@ class BlueVaultWallet(Wallet): images = [] start = 0 stop = self.qrsize - qr_cnt = (len(qrdata) // self.qrsize) + 1 + qr_cnt = ((len(data)-1) // self.qrsize) + 1 while cnt < qr_cnt: part = "UR:BYTES/" + str(cnt+1) + "OF" + str(qr_cnt) + "/" + qrhash + "/" + qrdata[start:stop] diff --git a/models/generic_ur2_wallet.py b/src/seedsigner/models/generic_ur2_wallet.py similarity index 93% rename from models/generic_ur2_wallet.py rename to src/seedsigner/models/generic_ur2_wallet.py index 7dab9ecf..9896e9d3 100644 --- a/models/generic_ur2_wallet.py +++ b/src/seedsigner/models/generic_ur2_wallet.py @@ -1,9 +1,12 @@ -from wallet import Wallet -from buttons import Buttons, B -from camera_process import CameraProcess -from camera_process import CameraPoll -from view import View -from qr import QR +from . import Wallet + +from seedsigner.helpers import Buttons, B, CameraProcess, CameraPoll, QR +from seedsigner.helpers.bcur import bcur_decode, cbor_decode, bc32decode, bc32encode, cbor_encode, bcur_encode +from seedsigner.helpers.ur2.ur_decoder import URDecoder +from seedsigner.helpers.ur2.ur_encoder import UREncoder +from seedsigner.helpers.ur2.cbor_lite import CBOREncoder +from seedsigner.helpers.ur2.ur import UR +from seedsigner.views import View # External Dependencies import time @@ -17,11 +20,6 @@ from embit.networks import NETWORKS from embit import ec from io import BytesIO from binascii import unhexlify, hexlify, a2b_base64, b2a_base64 -from bcur import bcur_decode, cbor_decode, bc32decode, bc32encode, cbor_encode, bcur_encode -from ur2.ur_decoder import URDecoder -from ur2.ur_encoder import UREncoder -from ur2.cbor_lite import CBOREncoder -from ur2.ur import UR import re import textwrap diff --git a/models/seed_storage.py b/src/seedsigner/models/seed_storage.py similarity index 97% rename from models/seed_storage.py rename to src/seedsigner/models/seed_storage.py index 1a9a865a..ebb08eac 100644 --- a/models/seed_storage.py +++ b/src/seedsigner/models/seed_storage.py @@ -1,6 +1,5 @@ # External Dependencies -from embit.bip39 import mnemonic_to_bytes -from embit.bip39 import mnemonic_from_bytes +from embit.bip39 import mnemonic_to_bytes, mnemonic_from_bytes from embit import bip39 class SeedStorage: diff --git a/models/sparrow_multisig_wallet.py b/src/seedsigner/models/sparrow_multisig_wallet.py similarity index 89% rename from models/sparrow_multisig_wallet.py rename to src/seedsigner/models/sparrow_multisig_wallet.py index f5faaf65..a735b552 100644 --- a/models/sparrow_multisig_wallet.py +++ b/src/seedsigner/models/sparrow_multisig_wallet.py @@ -1,27 +1,21 @@ -from wallet import Wallet -from buttons import Buttons, B -from camera_process import CameraProcess -from camera_process import CameraPoll -from view import View -from qr import QR +from . import Wallet + +from seedsigner.helpers import Buttons, B, CameraProcess, CameraPoll, QR +from seedsigner.helpers.bcur import (bcur_decode, cbor_decode, bc32decode, + bc32encode, cbor_encode, bcur_encode) +from seedsigner.helpers.ur2.ur_decoder import URDecoder +from seedsigner.helpers.ur2.ur_encoder import UREncoder +from seedsigner.helpers.ur2.cbor_lite import CBOREncoder +from seedsigner.helpers.ur2.ur import UR +from seedsigner.views import View # External Dependencies import time -from embit.bip39 import mnemonic_to_bytes -from embit.bip39 import mnemonic_from_bytes -from embit import bip39 -from embit import script -from embit import bip32 -from embit import psbt +from embit import bip32, bip39, ec, script, psbt +from embit.bip39 import mnemonic_to_bytes, mnemonic_from_bytes from embit.networks import NETWORKS -from embit import ec from io import BytesIO from binascii import unhexlify, hexlify, a2b_base64, b2a_base64 -from bcur import bcur_decode, cbor_decode, bc32decode, bc32encode, cbor_encode, bcur_encode -from ur2.ur_decoder import URDecoder -from ur2.ur_encoder import UREncoder -from ur2.cbor_lite import CBOREncoder -from ur2.ur import UR import re import textwrap @@ -137,13 +131,15 @@ class SparrowMultiSigWallet(Wallet): self.buttons.trigger_override() # if all frames have not all been captured, display progress to screen/display - if not self.capture_complete(): + if not self.capture_complete() and self.scan_display_working == 0: + self.scan_display_working = 1 View.draw.rectangle((0, 0, View.canvas_width, View.canvas_height), outline=0, fill=0) tw, th = View.draw.textsize("Collecting QR Codes:", font=View.IMPACT25) View.draw.text(((240 - tw) / 2, 15), "Collecting QR Codes:", fill="ORANGE", font=View.IMPACT25) tw, th = View.draw.textsize(str(round(self.percentage_complete * 100)) + "% Complete", font=View.IMPACT22) View.draw.text(((240 - tw) / 2, 125), str(round(self.percentage_complete * 100)) + "% Complete", fill="ORANGE", font=View.IMPACT22) View.DispShowImage() + self.scan_display_working = 0 elif self.scan_started_ind == 0: self.scan_started_ind = 1 @@ -186,7 +182,7 @@ class SparrowMultiSigWallet(Wallet): images = [] start = 0 stop = self.qrsize - qr_cnt = (len(data) // self.qrsize) + 1 + qr_cnt = ((len(data)-1) // self.qrsize) + 1 while cnt < qr_cnt: part = "p" + str(cnt+1) + "of" + str(qr_cnt) + " " + data[start:stop] diff --git a/models/specter_desktop_multisig_wallet.py b/src/seedsigner/models/specter_desktop_multisig_wallet.py similarity index 92% rename from models/specter_desktop_multisig_wallet.py rename to src/seedsigner/models/specter_desktop_multisig_wallet.py index 79be1743..4ef19d43 100644 --- a/models/specter_desktop_multisig_wallet.py +++ b/src/seedsigner/models/specter_desktop_multisig_wallet.py @@ -1,15 +1,10 @@ -from wallet import Wallet -from qr import QR +from . import Wallet +from seedsigner.helpers import QR # External Dependencies -from embit.bip39 import mnemonic_to_bytes -from embit.bip39 import mnemonic_from_bytes -from embit import bip39 -from embit import script -from embit import bip32 -from embit import psbt +from embit import bip32, bip39, ec, psbt, script +from embit.bip39 import mnemonic_to_bytes, mnemonic_from_bytes from embit.networks import NETWORKS -from embit import ec from io import BytesIO from binascii import unhexlify, hexlify, a2b_base64, b2a_base64 import re @@ -112,7 +107,7 @@ class SpecterDesktopMultisigWallet(Wallet): images = [] start = 0 stop = self.qrsize - qr_cnt = (len(data) // self.qrsize) + 1 + qr_cnt = ((len(data)-1) // self.qrsize) + 1 while cnt < qr_cnt: part = "p" + str(cnt+1) + "of" + str(qr_cnt) + " " + data[start:stop] diff --git a/models/specter_desktop_single_sig_wallet.py b/src/seedsigner/models/specter_desktop_single_sig_wallet.py similarity index 77% rename from models/specter_desktop_single_sig_wallet.py rename to src/seedsigner/models/specter_desktop_single_sig_wallet.py index b7feddcd..725ac9ec 100644 --- a/models/specter_desktop_single_sig_wallet.py +++ b/src/seedsigner/models/specter_desktop_single_sig_wallet.py @@ -1,15 +1,10 @@ -from specter_desktop_multisig_wallet import SpecterDesktopMultisigWallet -from wallet import Wallet +from . import SpecterDesktopMultisigWallet +from . import Wallet # External Dependencies -from embit.bip39 import mnemonic_to_bytes -from embit.bip39 import mnemonic_from_bytes -from embit import bip39 -from embit import script -from embit import bip32 -from embit import psbt +from embit import bip32, bip39, ec, psbt, script +from embit.bip39 import mnemonic_to_bytes, mnemonic_from_bytes from embit.networks import NETWORKS -from embit import ec from io import BytesIO from binascii import unhexlify, hexlify, a2b_base64, b2a_base64 import re diff --git a/models/wallet.py b/src/seedsigner/models/wallet.py similarity index 96% rename from models/wallet.py rename to src/seedsigner/models/wallet.py index acc24186..3ace2df4 100644 --- a/models/wallet.py +++ b/src/seedsigner/models/wallet.py @@ -1,19 +1,12 @@ # Internal Dependencies -from buttons import Buttons, B -from camera_process import CameraProcess -from camera_process import CameraPoll -from view import View +from seedsigner.helpers import Buttons, B, CameraProcess, CameraPoll +from seedsigner.views import View # External Dependencies import time -from embit.bip39 import mnemonic_to_bytes -from embit.bip39 import mnemonic_from_bytes -from embit import bip39 -from embit import script -from embit import bip32 -from embit import psbt +from embit import bip32, bip39, ec, psbt, script +from embit.bip39 import mnemonic_to_bytes, mnemonic_from_bytes from embit.networks import NETWORKS -from embit import ec from io import BytesIO from binascii import unhexlify, hexlify, a2b_base64, b2a_base64 import textwrap @@ -56,6 +49,7 @@ class Wallet: self.percentage_complete = 0 self.scan_started_ind = 0 + self.scan_display_working = 0 ### ### Required Methods to implement for Child Wallet Class @@ -115,6 +109,7 @@ class Wallet: self.controller.to_camera_queue.put(["stop"]) if self.qr_data[0] == "invalid": return "invalid" + time.sleep(0.5) # give time for camera loop to complete before returning data return "".join(self.qr_data) def process_camera_data(self): @@ -155,7 +150,8 @@ class Wallet: self.buttons.trigger_override() # if all frames have not all been captured, display progress to screen/display - if not self.capture_complete(): + if not self.capture_complete() and self.scan_display_working == 0: + self.scan_display_working = 1 View.draw.rectangle((0, 0, View.canvas_width, View.canvas_height), outline=0, fill=0) tw, th = View.draw.textsize("Collecting QR Codes:", font=View.IMPACT22) View.draw.text(((240 - tw) / 2, 15), "Collecting QR Codes:", fill="ORANGE", font=View.IMPACT22) @@ -168,6 +164,7 @@ class Wallet: tw, th = View.draw.textsize("Right to Exit", font=View.IMPACT18) View.draw.text(((240 - tw) / 2, 215), "Right to Exit", fill="ORANGE", font=View.IMPACT18) View.DispShowImage() + self.scan_display_working = 0 elif self.scan_started_ind == 0: self.scan_started_ind = 1 diff --git a/src/seedsigner/views/__init__.py b/src/seedsigner/views/__init__.py new file mode 100644 index 00000000..47932cd0 --- /dev/null +++ b/src/seedsigner/views/__init__.py @@ -0,0 +1,6 @@ +from .view import * # base class has to be first +from .io_test_view import * +from .menu_view import * +from .seed_tools_view import * +from .settings_tools_view import * +from .signing_tools_view import * diff --git a/views/io_test_view.py b/src/seedsigner/views/io_test_view.py similarity index 98% rename from views/io_test_view.py rename to src/seedsigner/views/io_test_view.py index 887792d1..c69f6a47 100644 --- a/views/io_test_view.py +++ b/src/seedsigner/views/io_test_view.py @@ -3,9 +3,9 @@ import threading from threading import Timer # Internal file class dependencies -from view import View -from buttons import B -from camera_process import CameraPoll +from . import View +from seedsigner.helpers import B, CameraPoll + class IOTestView(View): diff --git a/views/menu_view.py b/src/seedsigner/views/menu_view.py similarity index 99% rename from views/menu_view.py rename to src/seedsigner/views/menu_view.py index 9667cbe6..da210a22 100644 --- a/views/menu_view.py +++ b/src/seedsigner/views/menu_view.py @@ -1,8 +1,7 @@ # Internal file class dependencies -from view import View -from buttons import B -from path import Path -from seed_storage import SeedStorage +from . import View +from seedsigner.helpers import B, Path +from seedsigner.models import SeedStorage # External Dependencies import time diff --git a/views/seed_tools_view.py b/src/seedsigner/views/seed_tools_view.py similarity index 99% rename from views/seed_tools_view.py rename to src/seedsigner/views/seed_tools_view.py index 36f265a5..e6551090 100644 --- a/views/seed_tools_view.py +++ b/src/seedsigner/views/seed_tools_view.py @@ -1,12 +1,12 @@ # External Dependencies -from embit.bip39 import mnemonic_to_bytes -from embit.bip39 import mnemonic_from_bytes from embit import bip39 +from embit.bip39 import mnemonic_to_bytes, mnemonic_from_bytes import time # Internal file class dependencies -from view import View -from buttons import B +from . import View +from seedsigner.helpers import B + class SeedToolsView(View): diff --git a/views/settings_tools_view.py b/src/seedsigner/views/settings_tools_view.py similarity index 97% rename from views/settings_tools_view.py rename to src/seedsigner/views/settings_tools_view.py index 6d0f545a..110f798e 100644 --- a/views/settings_tools_view.py +++ b/src/seedsigner/views/settings_tools_view.py @@ -1,7 +1,7 @@ # SeedSigner file class dependencies -from view import View -from qr import QR -from buttons import B +from . import View +from seedsigner.helpers import B, QR + class SettingsToolsView(View): diff --git a/views/signing_tools_view.py b/src/seedsigner/views/signing_tools_view.py similarity index 98% rename from views/signing_tools_view.py rename to src/seedsigner/views/signing_tools_view.py index 5b925af3..61954d83 100644 --- a/views/signing_tools_view.py +++ b/src/seedsigner/views/signing_tools_view.py @@ -1,10 +1,11 @@ # Internal file class dependencies -from view import View -from buttons import Buttons, B +from . import View +from seedsigner.helpers import Buttons, B # External Dependencies import time + class SigningToolsView(View): def __init__(self, controller, seed_storage) -> None: diff --git a/views/view.py b/src/seedsigner/views/view.py similarity index 98% rename from views/view.py rename to src/seedsigner/views/view.py index 5bb65b62..25ae35a2 100644 --- a/views/view.py +++ b/src/seedsigner/views/view.py @@ -1,11 +1,10 @@ # External Dependencies -from PIL import Image -from PIL import ImageDraw -from PIL import ImageFont -import ST7789 +from PIL import Image, ImageDraw, ImageFont import spidev as SPI from multiprocessing import Queue +from seedsigner.helpers import ST7789 + ### Generic View Class to Instatiate Display ### Static Class variables are used for display ### Designed to be inherited for other view classes, but not required @@ -58,7 +57,7 @@ class View: # 240x240 display with hardware SPI: View.bus = 0 View.device = 0 - View.disp = ST7789.ST7789(SPI.SpiDev(View.bus, View.device),View.RST, View.DC, View.BL) + View.disp = ST7789(SPI.SpiDev(View.bus, View.device),View.RST, View.DC, View.BL) View.disp.Init() self.queue = Queue() diff --git a/src/settings.ini b/src/settings.ini new file mode 100644 index 00000000..d1da9ba6 --- /dev/null +++ b/src/settings.ini @@ -0,0 +1,7 @@ +[system] +DEBUG = True +DEFAULT_LANGUAGE = en + +[display] +BACKGROUND_COLOR = #000 +TEXT_COLOR = orange