mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-04-18 09:25:06 +00:00
* **New Features** * PI4IOE5V6408 I2C I/O expander driver with public GPIO APIs * CLI tool to list devicetree dependencies * **Device Tree Updates** * M5Stack Tab5 configured with two I2C IO expanders; PI4IOE5V6408 binding added * **Build / Tooling** * Devicetree code generation integrated into build; generated artifacts and dynamic dependency resolution exposed * **Refactor** * Kernel/run APIs updated to accept a null‑terminated devicetree modules array; many module symbols renamed * **Documentation** * Added README and Apache‑2.0 license for new driver module
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
import os
|
|
from pprint import pprint
|
|
|
|
from lark import Lark
|
|
|
|
from source.files import *
|
|
from source.transformer import *
|
|
from source.generator import *
|
|
from source.binding_files import find_all_bindings
|
|
from source.binding_parser import parse_binding
|
|
from source.config import *
|
|
from source.exception import DevicetreeException
|
|
|
|
def main(config_path: str, output_path: str, verbose: bool) -> int:
|
|
print(f"Generating devicetree code\n config: {config_path}\n output: {output_path}")
|
|
if not os.path.isdir(config_path):
|
|
print(f"Directory not found: {config_path}")
|
|
return 1
|
|
|
|
config = parse_config(config_path, os.getcwd())
|
|
if verbose:
|
|
pprint(config)
|
|
|
|
try:
|
|
project_dir = os.path.dirname(os.path.realpath(__file__))
|
|
grammar_path = os.path.join(project_dir, "grammar.lark")
|
|
lark_data = read_file(grammar_path)
|
|
dts_data = read_file(config.dts)
|
|
lark = Lark(lark_data)
|
|
parsed = lark.parse(dts_data)
|
|
if verbose:
|
|
print(parsed.pretty())
|
|
transformed = DtsTransformer().transform(parsed)
|
|
if verbose:
|
|
pprint(transformed)
|
|
binding_files = find_all_bindings(config.bindings)
|
|
if verbose:
|
|
print("Bindings found:")
|
|
for binding_file in binding_files:
|
|
print(f" {binding_file}")
|
|
if verbose:
|
|
print("Parsing bindings")
|
|
bindings = []
|
|
for binding_file in binding_files:
|
|
bindings.append(parse_binding(binding_file, config.bindings))
|
|
if verbose:
|
|
for binding in bindings:
|
|
pprint(binding)
|
|
generate(output_path, transformed, bindings, config, verbose)
|
|
return 0
|
|
except DevicetreeException as caught:
|
|
print("\033[31mError: ", caught, "\033[0m")
|
|
return 1
|