from pathlib import Path
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
|
def read_text(path: str) -> str:
|
return (ROOT / path).read_text(encoding="utf-8")
|
|
|
def require(condition: bool, message: str) -> None:
|
if not condition:
|
raise SystemExit(message)
|
|
|
def main() -> None:
|
app = read_text("main/application.cc")
|
board = read_text("main/boards/sening-xiaozhi-s3/sening_xiaozhi_s3.cc")
|
|
require(
|
"void Application::LoadLocalAssetsForWakeWord()" in app,
|
"Application must load local assets/srmodels before starting Wi-Fi",
|
)
|
require(
|
"bool local_assets_applied_ = false;" in read_text("main/application.h"),
|
"Application must track whether local assets were applied before network startup",
|
)
|
initialize_body = app.split("void Application::Initialize()", 1)[1].split("void Application::Run()", 1)[0]
|
require(
|
initialize_body.find("LoadLocalAssetsForWakeWord();") != -1 and initialize_body.find("LoadLocalAssetsForWakeWord();") < initialize_body.find("board.StartNetwork();"),
|
"Application must load local srmodels before board.StartNetwork() can enter Wi-Fi config mode",
|
)
|
require(
|
"case kDeviceStateWifiConfiguring:\n audio_service_.EnableVoiceProcessing(false);\n audio_service_.EnableWakeWordDetection(audio_service_.IsAfeWakeWord());" in app,
|
"Wi-Fi config mode must keep AFE wake/offline command detection running",
|
)
|
connection_failed_branch = board.split("event == NetworkEvent::ConnectionFailed", 1)[1].split("event == NetworkEvent::WifiConfigModeEnter", 1)[0]
|
require(
|
"BoardMqtt_ResumePlaylistIfUnfinished();" not in connection_failed_branch,
|
"ConnectionFailed callback must not resume playlist before config-mode prompt",
|
)
|
require(
|
"event == NetworkEvent::WifiConfigModeEnter" in board,
|
"board network callback must handle Wi-Fi config mode entry",
|
)
|
require(
|
"xTaskCreate([](void *arg)" in board and "mqtt_resume_after_config" in board,
|
"playlist resume after config mode must be deferred in a task",
|
)
|
require(
|
"vTaskDelay(pdMS_TO_TICKS(" in board and "BoardMqtt_ResumePlaylistIfUnfinished();" in board,
|
"deferred config-mode resume task must wait before resuming playlist",
|
)
|
|
|
if __name__ == "__main__":
|
main()
|