优化无线/有线CAN,以及控制指令解析
This commit is contained in:
@@ -8,6 +8,16 @@ import sys
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from generate_can_semantic_protocol import (
|
||||
DEFAULT_CPP as CAN_PROTOCOL_CPP,
|
||||
DEFAULT_PYTHON as CAN_PROTOCOL_PYTHON,
|
||||
DEFAULT_SOURCE as CAN_PROTOCOL_SOURCE,
|
||||
ProtocolError as CanProtocolError,
|
||||
load_and_validate as load_can_protocol,
|
||||
render_cpp as render_can_protocol_cpp,
|
||||
render_python as render_can_protocol_python,
|
||||
)
|
||||
|
||||
try:
|
||||
import yaml
|
||||
from jsonschema import Draft202012Validator, FormatChecker, RefResolver
|
||||
@@ -248,6 +258,27 @@ def validate_platform_resources(errors: list[str], warnings: list[str]) -> int:
|
||||
return count
|
||||
|
||||
|
||||
def validate_generated_can_protocol(errors: list[str]) -> int:
|
||||
try:
|
||||
document = load_can_protocol(CAN_PROTOCOL_SOURCE)
|
||||
expected = {
|
||||
CAN_PROTOCOL_PYTHON: render_can_protocol_python(document),
|
||||
CAN_PROTOCOL_CPP: render_can_protocol_cpp(document),
|
||||
}
|
||||
except CanProtocolError as exc:
|
||||
errors.append(f"{relative(CAN_PROTOCOL_SOURCE)}: {exc}")
|
||||
return 0
|
||||
for path, content in expected.items():
|
||||
if not path.is_file():
|
||||
errors.append(f"{relative(path)}: generated CAN protocol view is missing")
|
||||
elif path.read_text(encoding="utf-8") != content:
|
||||
errors.append(
|
||||
f"{relative(path)}: stale generated CAN protocol view; "
|
||||
"run make can-protocol-generate"
|
||||
)
|
||||
return len(document["rules"])
|
||||
|
||||
|
||||
def main() -> int:
|
||||
errors: list[str] = []
|
||||
warnings: list[str] = []
|
||||
@@ -255,6 +286,7 @@ def main() -> int:
|
||||
document_count = validate_documents(schemas, schema_store, errors)
|
||||
domain_count = validate_domains(errors)
|
||||
platform_count = validate_platform_resources(errors, warnings)
|
||||
protocol_rule_count = validate_generated_can_protocol(errors)
|
||||
|
||||
for warning in warnings:
|
||||
print(f"WARNING: {warning}")
|
||||
@@ -267,7 +299,8 @@ def main() -> int:
|
||||
print(
|
||||
"Repository validation passed: "
|
||||
f"{len(schemas)} schemas, {document_count} documents, "
|
||||
f"{domain_count} domains, {platform_count} platform(s)."
|
||||
f"{domain_count} domains, {platform_count} platform(s), "
|
||||
f"{protocol_rule_count} generated CAN protocol rule(s)."
|
||||
)
|
||||
return 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user