generated from saji/ecp5-template
make basic config module
This commit is contained in:
parent
7e41e6e2f3
commit
bcac3d0dcd
52
example-config.toml
Normal file
52
example-config.toml
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# Groovylight configuration base file.
|
||||||
|
# make your edits using this, at the moment the defaults are not stored
|
||||||
|
# in the program so every value must be specified.
|
||||||
|
|
||||||
|
|
||||||
|
[hardware]
|
||||||
|
# The target platform.
|
||||||
|
# Valid options: "cxxrtl", "colorlight"
|
||||||
|
type = "cxxrtl"
|
||||||
|
|
||||||
|
# hardware-specific options, these are gently parsed i.e extra options are ignored.
|
||||||
|
# colorlight options
|
||||||
|
|
||||||
|
# Maps the strings array onto the colorlight connectors.
|
||||||
|
# it's fine (but will raise a warning) if the list is longer than the number of strings.
|
||||||
|
stringmapping = [ "J1", "J2", "J3", "J4", "J5", "J6", "J7", "J8" ]
|
||||||
|
|
||||||
|
# cxxrtl options
|
||||||
|
|
||||||
|
|
||||||
|
[network]
|
||||||
|
# Network port to listen on for UDP datagrams.
|
||||||
|
port = 9999
|
||||||
|
|
||||||
|
# IPv4 address to use for the Ethernet port.
|
||||||
|
# This setting is ignored for CXXRTL.
|
||||||
|
# 'dhcp' will get the IP at runtime.
|
||||||
|
ip = "dhcp" # Can also be e.g. "192.168.0.123"
|
||||||
|
|
||||||
|
[display]
|
||||||
|
strict = true # allows some wacky configurations, like panels that overlap.
|
||||||
|
|
||||||
|
[[display.strings]]
|
||||||
|
position = { x = 31, y = 0 }
|
||||||
|
dimensions = { width = 256, height = 64 }
|
||||||
|
rotation = "UPDOWN"
|
||||||
|
[[display.strings]]
|
||||||
|
position = { x = 32, y = 0 }
|
||||||
|
dimensions = { width = 256, height = 64 }
|
||||||
|
rotation = "LEFTRIGHT"
|
||||||
|
[[display.strings]]
|
||||||
|
position = { x = 32, y = 64 }
|
||||||
|
dimensions = { width = 256, height = 64 }
|
||||||
|
rotation = "LEFTRIGHT"
|
||||||
|
[[display.strings]]
|
||||||
|
position = { x = 32, y = 128 }
|
||||||
|
dimensions = { width = 256, height = 64 }
|
||||||
|
rotation = "LEFTRIGHT"
|
||||||
|
[[display.strings]]
|
||||||
|
position = { x = 32, y = 192 }
|
||||||
|
dimensions = { width = 256, height = 64 }
|
||||||
|
rotation = "LEFTRIGHT"
|
25
src/groovylight/config.py
Normal file
25
src/groovylight/config.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import tomllib
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from groovylight.geom import (
|
||||||
|
Coord,
|
||||||
|
DisplayDimensions,
|
||||||
|
DisplayGeometry,
|
||||||
|
DisplayRotation,
|
||||||
|
DisplayString,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
def __init__(self, file: Path) -> None:
|
||||||
|
with file.open("rb") as f:
|
||||||
|
self.conf = tomllib.load(f)
|
||||||
|
|
||||||
|
self.geom = DisplayGeometry(self.conf.display.strict)
|
||||||
|
for string in self.conf.display.strings:
|
||||||
|
pos = Coord(**string.position)
|
||||||
|
dims = DisplayDimensions(**string.dimensions)
|
||||||
|
rot = DisplayRotation[string.rotation]
|
||||||
|
disp = DisplayString(pos, dims, rot)
|
||||||
|
self.geom.add_string(disp)
|
||||||
|
self.network = self.conf.network # FIXME: parse this properly.
|
|
@ -173,7 +173,8 @@ class DisplayGeometry:
|
||||||
will overlap with an existing string.
|
will overlap with an existing string.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for e in self._strings:
|
if self.strict:
|
||||||
if e.intersects(s):
|
for e in self._strings:
|
||||||
pass
|
if e.intersects(s):
|
||||||
|
raise RuntimeError(f"node {e} intersects with {s}")
|
||||||
|
self._strings.append(s)
|
||||||
|
|
Loading…
Reference in a new issue