Add authenticated WebSocket serial terminal - dirty commit with front-
and backend issues
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
"""Generate deterministic C arrays for PlatformIO-compatible asset embedding."""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
ASSETS = (
|
||||
("xterm.js.gz", "web_asset_xterm_js_gz"),
|
||||
("xterm.css.gz", "web_asset_xterm_css_gz"),
|
||||
("addon-fit.js.gz", "web_asset_addon_fit_js_gz"),
|
||||
)
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
ASSET_DIR = ROOT / "web_assets"
|
||||
HEADER_PATH = ROOT / "src" / "web_assets_data.h"
|
||||
SOURCE_PATH = ROOT / "src" / "web_assets_data.c"
|
||||
|
||||
|
||||
def format_array(data: bytes) -> str:
|
||||
lines = []
|
||||
for offset in range(0, len(data), 12):
|
||||
chunk = data[offset : offset + 12]
|
||||
lines.append(" " + ", ".join(f"0x{value:02x}" for value in chunk) + ",")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
header = """/* SPDX-License-Identifier: GPL-3.0-only */
|
||||
/* Generated web-asset data declarations. */
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
"""
|
||||
source = """/* SPDX-License-Identifier: MIT */
|
||||
/*
|
||||
* Deterministically generated from the vendored MIT-licensed gzip files in
|
||||
* web_assets/. See web_assets/SOURCES.md and the accompanying license files.
|
||||
* Regenerate with: python3 web_assets/generate_embedded_assets.py
|
||||
*/
|
||||
|
||||
#include "web_assets_data.h"
|
||||
|
||||
"""
|
||||
|
||||
for filename, symbol in ASSETS:
|
||||
data = (ASSET_DIR / filename).read_bytes()
|
||||
header += f"extern const uint8_t {symbol}[];\n"
|
||||
header += f"extern const size_t {symbol}_size;\n\n"
|
||||
source += (
|
||||
f"const uint8_t {symbol}[] __attribute__((aligned(4))) = {{\n"
|
||||
f"{format_array(data)}\n"
|
||||
"};\n"
|
||||
f"const size_t {symbol}_size = sizeof({symbol});\n\n"
|
||||
)
|
||||
|
||||
HEADER_PATH.write_text(header, encoding="utf-8", newline="\n")
|
||||
SOURCE_PATH.write_text(source, encoding="utf-8", newline="\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user