e30: S10F7 broadcast terminal display

Adds the last terminal-services message: a multi-line broadcast push
to all terminals, no reply.  Same TID+lines body as S10F5, W=0.

Generated via the catalog: data/messages.yaml schema entry +
auto-generated s10f7_terminal_display_broadcast / parse_s10f7.

Test round-trips TID and a 3-line broadcast through the builder
and parser, confirms W=0.

COMPLIANCE.md updated: S10F7 row in §5 added; §8 "out of scope"
entry removed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-09 11:47:02 +02:00
parent d0c7fb71b6
commit 2f0a4ba339
3 changed files with 31 additions and 1 deletions
+14
View File
@@ -218,6 +218,20 @@ TEST_CASE("S10F5 carries TID + line list; S10F6 ack round-trip") {
CHECK(*ack_byte(s10f6_terminal_display_multi_ack(TerminalAck::Accepted)) == 0);
}
TEST_CASE("S10F7 broadcast: round-trip TID + lines, W=0") {
auto m = s10f7_terminal_display_broadcast(
5, {"ALERT: pressure", "EVAC NOW", "STATUS UNKNOWN"});
CHECK(m.stream == 10);
CHECK(m.function == 7);
CHECK_FALSE(m.reply_expected); // E5: S10F7 is a one-way broadcast.
auto td = parse_s10f7(m);
REQUIRE(td.has_value());
CHECK(td->tid == 5);
REQUIRE(td->lines.size() == 3);
CHECK(td->lines[0] == "ALERT: pressure");
CHECK(td->lines[2] == "STATUS UNKNOWN");
}
// ---- Spool data ready (S6F25/F26) --------------------------------------
TEST_CASE("S6F25 carries NUM-MSG; S6F26 ack round-trip") {