refactor: separate tools from main code
This commit is contained in:
@@ -54,6 +54,12 @@ format: ruff-fix ruff-format ## format project
|
||||
.PHONY: lint
|
||||
lint: ruff ruff-format-check ty ## lint project
|
||||
|
||||
.PHONY: gen-img
|
||||
gen-img: uv-run-invar-mode-gen-img
|
||||
|
||||
.PHONY: debug-img
|
||||
debug-img: uv-run-invar-mode-debug-img
|
||||
|
||||
.PHONY: rasp-init
|
||||
rasp-init: rasp-chmod-opt rasp-rsync rasp-unmount ## init raspberry
|
||||
|
||||
@@ -77,6 +83,10 @@ uv-sync: ## uv sync
|
||||
uv-upgrade: ## uv sync upgrade
|
||||
$(UV) sync --active --upgrade
|
||||
|
||||
.PHONY: uv-run-invar-mode-%
|
||||
uv-run-invar-mode-%: .venv ## uv run forge-invar --mode=(tool)
|
||||
$(UV) run --active forge-invar --mode=$*
|
||||
|
||||
.PHONY: ruff
|
||||
ruff: .venv ## ruff check
|
||||
$(RUFF) check
|
||||
|
||||
+18
-23
@@ -1,33 +1,13 @@
|
||||
import argparse
|
||||
import time
|
||||
|
||||
from .display import (
|
||||
debug_image,
|
||||
generate_background_image,
|
||||
generate_loading_image,
|
||||
get_display,
|
||||
)
|
||||
from .display import get_display
|
||||
from .forge_data import ForgeData
|
||||
from .i2c import I2C
|
||||
from .tools import debug_img, gen_img
|
||||
|
||||
|
||||
def host_generate() -> None:
|
||||
data = ForgeData().mock()
|
||||
generate_loading_image()
|
||||
generate_background_image()
|
||||
image = get_display(data, 0)
|
||||
debug_image(image)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--generate", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.generate:
|
||||
host_generate()
|
||||
return
|
||||
|
||||
def main_loop() -> None:
|
||||
t0 = time.time()
|
||||
with ForgeData() as data, I2C() as device:
|
||||
device.update_display(get_display(data, t0))
|
||||
@@ -38,3 +18,18 @@ def main() -> None:
|
||||
continue
|
||||
|
||||
device.update_display(get_display(data, t0))
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
"--mode", default="default", choices=["default", "gen-img", "debug-img"]
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.mode == "gen-img":
|
||||
gen_img()
|
||||
elif args.mode == "debug-img":
|
||||
debug_img()
|
||||
else:
|
||||
main_loop()
|
||||
|
||||
@@ -157,72 +157,3 @@ def get_display(data: ForgeData, t0: float) -> Image.Image:
|
||||
if data.state == ForgeState.RUNNING:
|
||||
return __get_running_display(data)
|
||||
return __get_loading_display(data, t0)
|
||||
|
||||
|
||||
def generate_loading_image() -> None:
|
||||
global LOADING_IMG
|
||||
|
||||
im = BLANK_IMG.copy()
|
||||
|
||||
draw = ImageDraw.Draw(im)
|
||||
|
||||
draw.text((26, 24), "F.O.R.G.E.", fill="white", font=FONT_2)
|
||||
draw.rectangle((24, 35, 104, 40), outline="white", fill="black")
|
||||
|
||||
im.save(LOADING_IMG_PATH)
|
||||
|
||||
LOADING_IMG = im
|
||||
|
||||
|
||||
def generate_background_image() -> None:
|
||||
global BACKGROUND_IMG
|
||||
|
||||
im = BLANK_IMG.copy()
|
||||
|
||||
draw = ImageDraw.Draw(im)
|
||||
|
||||
# tempo
|
||||
draw.text((7, -2), "TEMPO:", fill="white", font=FONT_1)
|
||||
draw.rectangle((6, 6, 60, 11), outline="white", fill="black")
|
||||
|
||||
# time
|
||||
draw.text((68, -2), "TIME:", fill="white", font=FONT_1)
|
||||
draw.rectangle((67, 6, 121, 11), outline="white", fill="black")
|
||||
|
||||
# pipes
|
||||
draw.rectangle((26, 22, 78, 24), fill="white")
|
||||
draw.rectangle((26, 46, 78, 48), fill="white")
|
||||
draw.rectangle((78, 34, 105, 36), fill="white")
|
||||
draw.rectangle((76, 23, 78, 46), fill="white")
|
||||
|
||||
# squares
|
||||
draw.rectangle((12, 16, 26, 30), outline="white", fill="black")
|
||||
draw.rectangle((41, 16, 55, 30), outline="white", fill="black")
|
||||
|
||||
draw.rectangle((12, 40, 26, 54), outline="white", fill="black")
|
||||
draw.rectangle((41, 40, 55, 54), outline="white", fill="black")
|
||||
|
||||
draw.rectangle((70, 28, 84, 42), outline="white", fill="black")
|
||||
draw.rectangle((99, 28, 113, 42), outline="white", fill="black")
|
||||
|
||||
# page
|
||||
draw.circle((55, 61), 2, outline="white", fill="black")
|
||||
draw.circle((63, 61), 2, outline="white", fill="black")
|
||||
draw.circle((71, 61), 2, outline="white", fill="black")
|
||||
|
||||
im.save(BACKGROUND_IMG_PATH)
|
||||
|
||||
BACKGROUND_IMG = im
|
||||
|
||||
|
||||
def debug_image(im: Image.Image) -> None:
|
||||
im = im.resize((1280, 640)).convert("RGB")
|
||||
|
||||
draw2 = ImageDraw.Draw(im)
|
||||
|
||||
for x in range(1, 128):
|
||||
draw2.line((x * 10, 0, x * 10, 640), fill=(50, 50, 50))
|
||||
for y in range(1, 64):
|
||||
draw2.line((0, y * 10, 1280, y * 10), fill=(50, 50, 50))
|
||||
|
||||
im.resize((1280, 640)).save("debug.png")
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
from .debug_img import main as debug_img
|
||||
from .gen_img import main as gen_img
|
||||
|
||||
__all__ = ["debug_img", "gen_img"]
|
||||
@@ -0,0 +1,27 @@
|
||||
from PIL import Image, ImageDraw
|
||||
|
||||
from ..display import get_display
|
||||
from ..forge_data import ForgeData
|
||||
|
||||
|
||||
def debug_image(im: Image.Image) -> None:
|
||||
im = im.resize((1280, 640)).convert("RGB")
|
||||
|
||||
draw2 = ImageDraw.Draw(im)
|
||||
|
||||
for x in range(1, 128):
|
||||
draw2.line((x * 10, 0, x * 10, 640), fill=(50, 50, 50))
|
||||
for y in range(1, 64):
|
||||
draw2.line((0, y * 10, 1280, y * 10), fill=(50, 50, 50))
|
||||
|
||||
im.resize((1280, 640)).save("debug.png")
|
||||
|
||||
|
||||
def main():
|
||||
data = ForgeData().mock()
|
||||
image = get_display(data, 0)
|
||||
debug_image(image)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,64 @@
|
||||
from PIL import ImageDraw
|
||||
|
||||
from ..constants import (
|
||||
BACKGROUND_IMG_PATH,
|
||||
LOADING_IMG_PATH,
|
||||
)
|
||||
from ..display import BLANK_IMG, FONT_1, FONT_2
|
||||
|
||||
|
||||
def generate_loading_image() -> None:
|
||||
im = BLANK_IMG.copy()
|
||||
|
||||
draw = ImageDraw.Draw(im)
|
||||
|
||||
draw.text((26, 24), "F.O.R.G.E.", fill="white", font=FONT_2)
|
||||
draw.rectangle((24, 35, 104, 40), outline="white", fill="black")
|
||||
|
||||
im.save(LOADING_IMG_PATH)
|
||||
|
||||
|
||||
def generate_background_image() -> None:
|
||||
im = BLANK_IMG.copy()
|
||||
|
||||
draw = ImageDraw.Draw(im)
|
||||
|
||||
# tempo
|
||||
draw.text((7, -2), "TEMPO:", fill="white", font=FONT_1)
|
||||
draw.rectangle((6, 6, 60, 11), outline="white", fill="black")
|
||||
|
||||
# time
|
||||
draw.text((68, -2), "TIME:", fill="white", font=FONT_1)
|
||||
draw.rectangle((67, 6, 121, 11), outline="white", fill="black")
|
||||
|
||||
# pipes
|
||||
draw.rectangle((26, 22, 78, 24), fill="white")
|
||||
draw.rectangle((26, 46, 78, 48), fill="white")
|
||||
draw.rectangle((78, 34, 105, 36), fill="white")
|
||||
draw.rectangle((76, 23, 78, 46), fill="white")
|
||||
|
||||
# squares
|
||||
draw.rectangle((12, 16, 26, 30), outline="white", fill="black")
|
||||
draw.rectangle((41, 16, 55, 30), outline="white", fill="black")
|
||||
|
||||
draw.rectangle((12, 40, 26, 54), outline="white", fill="black")
|
||||
draw.rectangle((41, 40, 55, 54), outline="white", fill="black")
|
||||
|
||||
draw.rectangle((70, 28, 84, 42), outline="white", fill="black")
|
||||
draw.rectangle((99, 28, 113, 42), outline="white", fill="black")
|
||||
|
||||
# page
|
||||
draw.circle((55, 61), 2, outline="white", fill="black")
|
||||
draw.circle((63, 61), 2, outline="white", fill="black")
|
||||
draw.circle((71, 61), 2, outline="white", fill="black")
|
||||
|
||||
im.save(BACKGROUND_IMG_PATH)
|
||||
|
||||
|
||||
def main():
|
||||
generate_loading_image()
|
||||
generate_background_image()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user