Removed old perl from flake. cleaned up library just a little bit. added some message parsing
This commit is contained in:
parent
4e2aeffa8b
commit
b3b19df77c
4 changed files with 84 additions and 91 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
.direnv
|
.direnv
|
||||||
|
__pycache__/
|
||||||
|
|
6
flake.lock
generated
6
flake.lock
generated
|
@ -2,11 +2,11 @@
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1754381359,
|
"lastModified": 1755553648,
|
||||||
"narHash": "sha256-fXmfK4eoA8hUqmEBWFlndH90Zc7vPjqDct+sjLXtCM8=",
|
"narHash": "sha256-btiu4PUGLjoUgyHO5QoyxtMqd6WEkeLjgnI0XH16ea4=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "98b601302da9859b201bd858a8949aafec80ead1",
|
"rev": "f0ceb982688f1d75c0859ad43009bdb0eb22420d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
25
flake.nix
25
flake.nix
|
@ -9,35 +9,12 @@
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
in {
|
in {
|
||||||
packages.${system}.default = let
|
|
||||||
pP = pkgs.perlPackages;
|
|
||||||
in
|
|
||||||
pkgs.perlPackages.buildPerlPackage rec {
|
|
||||||
pname = "SignControl";
|
|
||||||
version = "0.1";
|
|
||||||
|
|
||||||
src = ./.;
|
|
||||||
|
|
||||||
propagatedBuildInputs = [pP.DigestCRC pP.ModuleBuild];
|
|
||||||
nativeBuildInputs = [pkgs.shortenPerlShebang];
|
|
||||||
|
|
||||||
postInstall = ''
|
|
||||||
shortenPerlShebang $out/bin/signcontrol
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
devShells.${system}.default =
|
devShells.${system}.default =
|
||||||
pkgs.mkShell
|
pkgs.mkShell
|
||||||
{
|
{
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
(pkgs.perl.withPackages
|
|
||||||
(x: [
|
|
||||||
x.DigestCRC
|
|
||||||
x.ModuleBuild
|
|
||||||
]))
|
|
||||||
|
|
||||||
pkgs.entr
|
pkgs.entr
|
||||||
|
(pkgs.python3.withPackages (x: [x.crc x.fastapi]))
|
||||||
(pkgs.python3.withPackages (x: [x.crc]))
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
125
netbrite.py
125
netbrite.py
|
@ -55,6 +55,10 @@ def pkt_escape(pkt: bytes) -> bytes:
|
||||||
return bytes(buf)
|
return bytes(buf)
|
||||||
|
|
||||||
|
|
||||||
|
COLORS = [i.name.lower() for i in Colors]
|
||||||
|
COLORS_PATTERH = rb"\{(" + "|".join(COLORS).encode("ascii") + rb")\}"
|
||||||
|
|
||||||
|
|
||||||
class Message:
|
class Message:
|
||||||
activation_delay: int = 0 # Message activation delay
|
activation_delay: int = 0 # Message activation delay
|
||||||
display_delay: int = 0 # Message display delay
|
display_delay: int = 0 # Message display delay
|
||||||
|
@ -99,27 +103,27 @@ class Message:
|
||||||
(rb"\{erase\}", b"\x10\x03"),
|
(rb"\{erase\}", b"\x10\x03"),
|
||||||
(rb"\{serial\}", b"\x10\x09"),
|
(rb"\{serial\}", b"\x10\x09"),
|
||||||
(rb"\{bell\}", b"\x10\x05"),
|
(rb"\{bell\}", b"\x10\x05"),
|
||||||
(rb"\{red\}", b"\x10\x05" + pack("B", Colors.RED.value)),
|
(rb"\{red\}", b"\x10\x0c" + pack("B", Colors.RED.value)),
|
||||||
(rb"\{green\}", b"\x10\x05" + pack("B", Colors.GREEN.value)),
|
(rb"\{green\}", b"\x10\x0c" + pack("B", Colors.GREEN.value)),
|
||||||
(rb"\{yellow\}", b"\x10\x05" + pack("B", Colors.YELLOW.value)),
|
(rb"\{yellow\}", b"\x10\x0c" + pack("B", Colors.YELLOW.value)),
|
||||||
# (
|
(
|
||||||
# rb"\{(red|green|yellow)\}",
|
COLORS_PATTERH,
|
||||||
# lambda m: b"\x10\x0c" + pack("B", Colors[m[1].decode("ascii")].value),
|
lambda m: b"\x10\x0c" + pack("B", Colors[m[1].decode("ascii")].value),
|
||||||
# ),
|
),
|
||||||
# (
|
(
|
||||||
# rb"\{note\s+(\d+)\s+(\d+)\}",
|
rb"\{note\s+(\d+)\s+(\d+)\}",
|
||||||
# lambda m: b"\x10\x11" + pack("<HH", int(m[1]), int(m[2])),
|
lambda m: b"\x10\x11" + pack("<HH", int(m[1]), int(m[2])),
|
||||||
# ),
|
),
|
||||||
# (
|
(
|
||||||
# rb"\{tune\s+([1-9])(\s+repeat)?\}",
|
rb"\{tune\s+([1-9])(\s+repeat)?\}",
|
||||||
# lambda m: bytes([0x10, 0x0A if m[2] else 0x0B, int(m[1])]),
|
lambda m: bytes([0x10, 0x0A if m[2] else 0x0B, int(m[1])]),
|
||||||
# ),
|
),
|
||||||
# (
|
(
|
||||||
# rb"\{font\s+(\S+)\}",
|
rb"\{font\s+(\S+)\}",
|
||||||
# lambda m: bytes(
|
lambda m: bytes(
|
||||||
# [0x10, 0x0D, Fonts[m[1].decode("ascii").upper()].value]
|
[0x10, 0x0D, Fonts[m[1].decode("ascii").upper()].value]
|
||||||
# ),
|
),
|
||||||
# ),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
for pat, repl in replacements:
|
for pat, repl in replacements:
|
||||||
|
@ -179,6 +183,7 @@ class NetBrite:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
self.sock.settimeout(5000)
|
||||||
self.connect()
|
self.connect()
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
raise ConnectionError(f"Error while opening network socket. {e}")
|
raise ConnectionError(f"Error while opening network socket. {e}")
|
||||||
|
@ -245,6 +250,7 @@ class NetBrite:
|
||||||
|
|
||||||
footer = pack("<HB", checksum(header + body), 0x04)
|
footer = pack("<HB", checksum(header + body), 0x04)
|
||||||
self.tx(pkt_escape(header + body + footer))
|
self.tx(pkt_escape(header + body + footer))
|
||||||
|
# print(f"Sent message to zone {zoneName}")
|
||||||
|
|
||||||
def zones(self, zones: dict[str, Zone] | None = None):
|
def zones(self, zones: dict[str, Zone] | None = None):
|
||||||
if zones != None:
|
if zones != None:
|
||||||
|
@ -255,10 +261,9 @@ class NetBrite:
|
||||||
self.zones_list[zname].id = zid
|
self.zones_list[zname].id = zid
|
||||||
z = self.zones_list[zname]
|
z = self.zones_list[zname]
|
||||||
|
|
||||||
ztext = z.initial_text.parse_msg() # FIXME: parse_msg once implemented
|
ztext = z.initial_text.parse_msg()
|
||||||
zlen = len(ztext)
|
zlen = len(ztext)
|
||||||
|
|
||||||
print(z.scroll_speed.value)
|
|
||||||
body = pack(
|
body = pack(
|
||||||
f"<4B B4B 3B BH 8B B 4B 4B H5B 10B 3B 20BH3B11B{zlen}s B",
|
f"<4B B4B 3B BH 8B B 4B 4B H5B 10B 3B 20BH3B11B{zlen}s B",
|
||||||
0x0F, # Body start
|
0x0F, # Body start
|
||||||
|
@ -380,44 +385,54 @@ class NetBrite:
|
||||||
self.sessno += 1
|
self.sessno += 1
|
||||||
|
|
||||||
|
|
||||||
_ = None
|
# _ = None
|
||||||
netbrt = NetBrite("10.65.37.244")
|
# netbrt = NetBrite("10.65.37.244")
|
||||||
zones = [
|
# zones = [
|
||||||
# Zone(
|
# Zone(
|
||||||
# 1,
|
# 1,
|
||||||
# 0,
|
# 0,
|
||||||
# 59,
|
# 50,
|
||||||
# 7,
|
# 7,
|
||||||
# initial_text=Message("{erase}{scrolloff}{left}Welcome to:"),
|
# initial_text=Message("{erase}{scrollon}{left}ING R&D"),
|
||||||
# default_color=Colors.RED,
|
|
||||||
# ),
|
|
||||||
# Zone(
|
|
||||||
# 73,
|
|
||||||
# 1,
|
|
||||||
# 35,
|
|
||||||
# 7,
|
|
||||||
# initial_text=Message("{erase}{scrolloff}ING R&D"),
|
|
||||||
# default_color=Colors.YELLOW,
|
# default_color=Colors.YELLOW,
|
||||||
|
# default_font=Fonts.BOLD_7,
|
||||||
|
# scroll_speed=ScrollSpeeds.SLOW,
|
||||||
# ),
|
# ),
|
||||||
|
# # Zone(
|
||||||
|
# # 47,
|
||||||
|
# # 0,
|
||||||
|
# # 15,
|
||||||
|
# # 7,
|
||||||
|
# # initial_text=Message("{erase}{scrolloff}HQ"),
|
||||||
|
# # default_color=Colors.GREEN,
|
||||||
|
# # default_font=Fonts.BOLD_7,
|
||||||
|
# # ),
|
||||||
# Zone(
|
# Zone(
|
||||||
# 110,
|
# 80,
|
||||||
# 1,
|
# 1,
|
||||||
# 10,
|
# 59,
|
||||||
# 7,
|
# 6,
|
||||||
# initial_text=Message("{erase}{scrolloff}HQ"),
|
# initial_text=Message("{erase}{scrolloff}{left}Loading..."),
|
||||||
# default_color=Colors.GREEN,
|
# default_color=Colors.RED,
|
||||||
|
# default_font=Fonts.NORMAL_5,
|
||||||
# ),
|
# ),
|
||||||
Zone(0, 0, 150, 7, initial_text=Message("{scrolloff}."))
|
# ]
|
||||||
]
|
# netbrt.zones({str(k): v for k, v in enumerate(zones)})
|
||||||
netbrt.zones({str(k): v for k, v in enumerate(zones)})
|
#
|
||||||
|
# from time import sleep, time
|
||||||
from time import sleep, time
|
# from datetime import datetime
|
||||||
from datetime import datetime
|
#
|
||||||
|
#
|
||||||
while True:
|
# def z(num: int) -> str:
|
||||||
now = datetime.now()
|
# return str(num).rjust(2, "0")
|
||||||
netbrt.message(
|
#
|
||||||
Message("{scrolloff}" + f"{now.hour}:{now.minute}:{now.second}"),
|
#
|
||||||
"0",
|
# while True:
|
||||||
)
|
# now = datetime.now()
|
||||||
sleep(1)
|
# netbrt.message(
|
||||||
|
# Message("{scrolloff}{left}" + f"{z(now.hour)}:{z(now.minute)}:{z(now.second)}"),
|
||||||
|
# "1",
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# t = time()
|
||||||
|
# sleep(1 - (t - int(t)))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue