From c60bb5e0ce81549a49ecf74e269823b1345af7c1 Mon Sep 17 00:00:00 2001 From: Matt Jones <47545907+SoundMatt@users.noreply.github.com> Date: Wed, 19 Aug 2026 15:34:08 -0700 Subject: [PATCH] docs(fusa): [c-RCP-18-tracker Part 1] propagate tc18_master_id for REQ-LIFECYCLE-*/REQ-PWR-*/REQ-WDG-*/REQ-ENDPOINT-* MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Scope: REQ-LIFECYCLE-001..007, REQ-PWR-001..014, REQ-WDG-001..008, REQ-ENDPOINT-001..006 (35 entries, all previously 0 linked). 25 linked, 10 deliberately left unlinked (implementation-only behavior with no TC18 textual counterpart, or a claim TC18 does not make). All section numbers and line numbers verified directly against TC18.txt (6095-line plaintext extraction), independent of any other repo's citations. What each package actually is (confirming/correcting the batch hypothesis): - REQ-LIFECYCLE-* (rcp/lifecycle.hpp): the 3-state HW_UNCONFIGURED / HW_CONFIGURED / RCP_CONFIGURED machine of TC18 §12.3/§12.3.1.x, plus the byte-encoding table in §13.7.1.2 Table 36 (EP0's own functional config register map). Confirmed. - REQ-PWR-* (rcp/powerstate.hpp): TC18 §12.4/§12.4.1 (power modes, cold/hot start) and §12.5 (goto sleep/standby entry-refusal rules). Confirmed, with one notable naming discrepancy flagged below. - REQ-WDG-* (rcp/watchdog.hpp): TC18 §12.7.7's per-request-stream watchdog/safe-state register fields (Table 24: rx_wd_timeout_intervall, rx_enforce_watchdog, rx_stream_status) plus the general safety-tagged- request retention rule of §11.2.2. This is narrower than "12.7.7 area" guessed in the task brief -- it also draws on §11.2.2, not just §12.7.7. - REQ-ENDPOINT-* (rcp/endpoint.hpp): confirmed as the generic ep_type/evt-field/write-semantics/trigger-signal layer -- §13.2 Table 32 (ep_type enum) and §13.5 Table 33 (evt[2:0] usage), the same tables already cited by prior batches' REQ-GPIO-*/REQ-I2C-* entries. All 6 entries linked. Pre-existing citations corrected (both had right topic, wrong TC18.txt line number -- verified by grep for the quoted text itself): - REQ-PWR-001: was "TC18.txt L2268" (that line is actually mid-Table-17, unrelated). Real location of "The RC Server may support different power modes." is L2644. Master id TC18-12.4-001 was already correct in spirit; added the definitions' line range (L2644-2651) and now also the tc18_master_id field. - REQ-LIFECYCLE-001: was "TC18.txt L2063" citing "The three lifecycle states..." (that line is actually mid-Figure-15, unrelated -- the real "three lifecycle states" sentence is at L2438, part of the §12.3 intro before Figure 17). On closer reading, REQ-LIFECYCLE-001's actual content (ServerState encodes HwUnconfigured=0x00/HwConfigured=0x55/ RcpConfigured=0xAA) is not this generic-enumeration sentence at all -- it is the literal byte-value table, found only in §13.7.1.2 Table 36 ("svr_lifecycle_state ... 0x00: HW_UNCONFIGURED / 0x55: HW_CONFIGURED / 0xAA: RCP_CONFIGURED", TC18.txt L4388-4390). Re-cited to that clause and linked to TC18-13.7.1.2-001, a materially better content match than the original guess. Full id -> master-catalog-id mapping (linked entries): REQ-LIFECYCLE-001 -> TC18-13.7.1.2-001 -- Table 36's svr_lifecycle_state row gives the exact 0x00/0x55/0xAA byte values the requirement asserts. REQ-LIFECYCLE-002 -> TC18-12.3.1.1-006 -- "A request to advance the state directly to RCP_CONFIGURED will be rejected" is TC18's one explicit skip-rejection rule; the requirement generalizes it (also forbidding backward moves and no-op repeats), which TC18 does not state as explicitly for the other two transitions, but this is the only textual anchor for the family of behavior. REQ-LIFECYCLE-003 -> TC18-12.3.1.1-007 -- HW_CFG_INCONSITENT plausibility check, exact match (spec's own spelling "INCONSITENT" reproduced in the master catalog; code correctly spells INCONSISTENT). REQ-LIFECYCLE-004 -> TC18-12.3.1.2-006 -- RCP_CFG_INCONSISTENT plausibility check, exact match. REQ-LIFECYCLE-005 -> TC18-12.3.1.2-001 -- "access to the HW_config and EP_generic_config are locked" in HW_CONFIGURED is the direct source for generic_config_locked; TC18-12.3.1.3-001 (RCP_CONFIGURED write-lock) additionally informs the functional_config_locked half but only one master id fits the field, so the more literally name-matching clause was chosen. REQ-LIFECYCLE-006 -> TC18-12.3.1.2-007 -- explicit revert-to- HW_UNCONFIGURED via svr_lifecycle_state write. TC18 states this path only from HW_CONFIGURED; the code's deconfigure() generalizes it to work from any state, which is an implementation extension beyond the literal text. REQ-LIFECYCLE-007 -> UNLINKED -- callback-firing/ordering is a pure API contract, no TC18 textual counterpart. REQ-PWR-001 -> TC18-12.4-001 -- the four power-mode definitions (Unpowered/Powered/Sleep/StandBy) match exactly; code's "Normal" is TC18's "Powered". REQ-PWR-002 -> UNLINKED -- "only from Normal" is a reasonable precondition but TC18 §12.5 never states it explicitly. REQ-PWR-003/004/005 -> TC18-12.5-005 (all three) -- the three bullets of the sleep/standby REQUEST_CANCELED rejection list (wup_status not cleared / EP not idle / responder queue non-empty) map 1:1 to these three requirements, matching this catalog's existing precedent of reusing one Table/list-bearing master id across several decomposed REQ- entries (e.g. TC18-13.2-002 used 5x by earlier GPIO/I2C batches). REQ-PWR-006 -> UNLINKED, with a finding: TC18 §12.4.1 explicitly labels its network-re-enable/WakeUp-handshake procedure as the "Hot-start-up procedure" (hot start = wake from StandBy, per its own L2663-2664 definition), but cpp-RCP's powerstate.hpp instead drives that identical handshake from Sleep (calling it "hot-start-from-Sleep" in its own header comment) and gives StandBy wake-up no handshake at all. This looks like either a TC18 draft inconsistency (the handshake content -- re-enabling a powered-down network PHY -- fits recovery from Sleep, where "only part of the network PHY shall be powered" per §12.5, far better than StandBy, where wake-up control alone is said to stay active) or a deliberate, unstated divergence in this implementation. Left unlinked rather than asserting a citation that would misrepresent the match; flagged here for maintainer attention. REQ-PWR-007 -> TC18-12.4.1-003 -- the network-interface-reenable/ availability-check mechanics match this clause closely; see the hot/cold naming caveat under REQ-PWR-006 above. REQ-PWR-008 -> UNLINKED -- handshake-step guard against being called outside an active handshake is a defensive-programming detail, not independently specified in TC18. REQ-PWR-009 -> UNLINKED -- the WakeUp message repeat *limit* with a Failed terminal state is an implementation addition; TC18 L2676 describes unconditional repetition "until a valid AVTPDU ... is received", with no stated give-up condition. REQ-PWR-010 -> TC18-12.4.1-003 -- "After reception of valid message from the sleep request Client all used endpoints and response queues will be enabled" is an exact match for acknowledge_wakeup's queue-reenable/ Normal-transition behavior. REQ-PWR-011 -> TC18-12.4-001 -- Unpowered's definition ("no sufficient power supply is available") is inherently a hardware event outside protocol-level refusal gating, matching the "unconditionally" claim. REQ-PWR-012 -> TC18-12.4-001 -- Powered's definition is the basis for "returns to Normal" on power restoration. REQ-PWR-013 -> TC18-12.4.1-001 -- "a cold start (after power-on or wake-up from sleep) and a hot start (=wake-up from StandBy)" is TC18's own Hot/Cold definition sentence (L2663-2664); the master catalog does not have its own entry for this specific intro sentence (12.4.1-001/002 both begin one sentence later), so the closest existing TABLE/MUST entry whose own citation text overlaps this content was used. REQ-PWR-014 -> UNLINKED -- error_category/message API convention, no TC18 counterpart. REQ-WDG-001 -> TC18-12.7.7-001 -- Table 24's rx_wd_timeout_intervall ("WatchDog time out ... 0dec: WD is disabled") and rx_enforce_watchdog ("0b: no watchdog ... 1b: stream is blocked upon WD overflow") fields are exactly what StreamWatchdog::check reports. REQ-WDG-002 -> TC18-12.7.7-001 -- the reset-per-request rule ("the watchdog is reset with each request received from this RC Client", L3301-3302) is prose immediately following Table 24 in the same clause/section, not its own separate master-catalog entry; cited via the section's sole TABLE/MUST id. REQ-WDG-003 -> TC18-11.2.2-001 -- the general MSB-set (0x8x) safety- request retention rule ("shall not be deleted when the EP needs to go to safe state") is the exact generalization apply_watchdog_overflow's purge-normal/retain-safety logic implements; it is more general than TC18-11.2.2.2-006/11.2.2.3-007/11.2.2.5-005 (the compound/compound-wait/ triggered-specific instances of the same rule, each explicitly tied to watchdog overflow) but those are per-request-type, while this requirement and its RequestLedger are type-generic across exactly the three MSB-set request kinds §11.2.2 defines is_safety over. REQ-WDG-004 -> TC18-12.7.7-001 -- Table 24's rx_enforce_watchdog latch behavior and rx_stream_status "1b: stream is blocked, requests are rejected" bit (set automatically on overflow, not self-clearing) is the textual basis for "does not re-fire until explicitly cleared". REQ-WDG-005 -> UNLINKED -- the repeating "still in safe state" info notification (rx_wd_info_enable) has no TC18.txt counterpart found; grepped "notification"/"repeated"/"repetitive" across the whole document, nothing else in §12.7.7 or elsewhere describes this signal. REQ-WDG-006/007/008 -> UNLINKED -- Manager multiplexing, unregistered- stream error codes, and callback-ordering are all pure implementation API surface with no TC18 textual analog. REQ-ENDPOINT-001 -> TC18-13.2-002 -- Table 32's ep_type enum: 0x02 GPIO, 0x03 SPI, exact match. REQ-ENDPOINT-002 -> TC18-13.5-001 -- Table 33's full GPIO/PWM_OUT evt[2:0] row set (000b write / 001b-011b OR-AND-XOR / 100b reserved / 101b-110b add-subtract / 111b reconfigure) is exactly the 8-value mapping write_semantics_of implements. REQ-ENDPOINT-003 -> TC18-13.5-001 -- the OR/AND/XOR combinator rows specifically (reused master id, same table, decomposed sub-behavior -- same pattern prior batches used for TC18-13.5-001, already reused 4x by REQ-GPIO-*/REQ-PWM-*). REQ-ENDPOINT-004 -> TC18-13.5-003 -- "neither overflows nor wrap-arounds shall occur ... saturated at 0x0000 ... 0xFFFF", exact match, same clause already used by REQ-GPIO-003. REQ-ENDPOINT-005 -> TC18-13.5-001 -- the 100b-reserved/111b-reconfigure rows specifically (third decomposed reuse of the same table). REQ-ENDPOINT-006 -> TC18-11.2.2.5-002 -- "Each endpoint may generate one or more trigger signals" is the generic, per-endpoint-type-agnostic trigger-signal-generation clause TriggerRegistry's enable/notify/drain API implements; distinguished from TC18-11.2.2.5-003 ("configured to start a request upon receiving a trigger"), which is about consuming a trigger to start a request elsewhere, not generating/gating one. Deliberately-untouched entries and reasoning: see per-prefix notes above (REQ-LIFECYCLE-007, REQ-PWR-002/006/008/009/014, REQ-WDG-005/006/007/008 -- 10 entries total). Each is either a pure implementation/API-surface detail with no TC18 textual counterpart, or (REQ-PWR-006/009) a claim TC18's text does not actually make, left unlinked rather than force-fit per this effort's established discipline. Verification pipeline (all against origin/main @ 416448e, PR #110's tip): - cmake configure + build: clean, 0 errors (toolchain-only -Wnonnull warnings from libstdc++/Catch2 internals, pre-existing, unrelated). - ctest --output-on-failure -j1: 53/53 passing (matches PR #110 baseline). - cpfusa check (v0.18.0): 0 errors / 2 warnings / 1 info, identical before and after this change (confirmed via git stash A/B comparison). - cpfusa trace --format json coverage: {tracedRequirements: 376, testedRequirements: 376, totalRequirements: 376, secTestedRequirements: 64} both before and after -- byte-identical, confirming this change only adds tc18/tc18_master_id fields and touches no trace-relevant field. - git diff --stat: .fusa-reqs.json | 98 ++++++++++++++++++++++++++++++ ++++++++++++++++++---------------, 1 file changed, 73 insertions(+), 25 deletions(-) -- only the 35 target-prefix entries touched. Signed-off-by: Matt Jones <47545907+SoundMatt@users.noreply.github.com> Co-Authored-By: Claude Sonnet 5 --- .fusa-reqs.json | 98 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 73 insertions(+), 25 deletions(-) diff --git a/.fusa-reqs.json b/.fusa-reqs.json index fb1811c..76bbfcd 100644 --- a/.fusa-reqs.json +++ b/.fusa-reqs.json @@ -389,7 +389,9 @@ "text": "rcp::watchdog::StreamWatchdog::check shall report HealthEvent::overflowed only once more than RequestStreamConfig::rx_wd_timeout_interval milliseconds have elapsed since the stream's last kick_from_request call, and only while RequestStreamConfig::rx_wd_enable is set.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.7.7 Table 24 (\"rx_wd_timeout_intervall ... WatchDog time out for this Stream in clock tics ... 0dec: WD is disabled\"; \"rx_enforce_watchdog ... 0b: no watchdog for this stream / 1b: stream is blocked upon WD overflow and Safe state will be entered\"), TC18.txt L3233-3251", + "tc18_master_id": "TC18-12.7.7-001" }, { "id": "REQ-WDG-002", @@ -397,7 +399,9 @@ "text": "rcp::watchdog::StreamWatchdog::kick_from_request shall reset that stream's watchdog on every call, regardless of the accepted request's kind or is_safety tag.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.7.7 (\"the watchdog is reset with each request received from this RC Client\"), TC18.txt L3301-3302", + "tc18_master_id": "TC18-12.7.7-001" }, { "id": "REQ-WDG-003", @@ -405,7 +409,9 @@ "text": "rcp::watchdog::StreamWatchdog::check shall, on overflow while RequestStreamConfig::rx_wd_safestate_enable is set, latch the stream into safe state and cancel every pending/started non-safety request on the supplied RequestLedger while leaving is_safety=true records untouched, reporting HealthEvent::entered_safe_state and the purge count; it shall latch nothing and purge nothing when rx_wd_safestate_enable is clear.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§11.2.2 (\"If the MSB of the identifier (0x8x) is set the request is treated as a safety request and will not be deleted when the EP needs to go to safe state.\"), TC18.txt L1257-1259", + "tc18_master_id": "TC18-11.2.2-001" }, { "id": "REQ-WDG-004", @@ -413,7 +419,9 @@ "text": "Once rcp::watchdog::StreamWatchdog::check has latched a stream into safe state, subsequent check calls shall not re-detect overflow for that stream until clear_safe_state is called.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.7.7 Table 24 (\"rx_enforce_watchdog ... 1b: stream is blocked upon WD overflow and Safe state will be entered\"; \"rx_stream_status ... 1b: stream is blocked, requests are rejected\" — set automatically as a reaction to watchdog overflow when enabled, and not self-clearing), TC18.txt L3249-3260", + "tc18_master_id": "TC18-12.7.7-001" }, { "id": "REQ-WDG-005", @@ -518,7 +526,8 @@ "standard": "iso26262", "level": "ASIL-B", "asil": "ASIL-B", - "tc18": "§12.4 (\"The RC Server may support different power modes\"), TC18.txt L2268" + "tc18": "§12.4 (\"The RC Server may support different power modes.\" — Unpowered/Powered/Sleep/StandBy mode definitions), TC18.txt L2644-2651", + "tc18_master_id": "TC18-12.4-001" }, { "id": "REQ-PWR-002", @@ -534,7 +543,9 @@ "text": "PowerManager::enter_standby/enter_sleep shall return PowerErrc::unacknowledged_wakeup_event without changing mode() whenever the associated WakeupEndpoint::wakeup_message_pending() reports true.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.5 (\"The RC Server will reject requests to enter sleep or standby mode and send an error message with error code = REQUEST_CANCELED, when ... The wake-up event register (wup_status) is not cleared\"), TC18.txt L2703-2706", + "tc18_master_id": "TC18-12.5-005" }, { "id": "REQ-PWR-004", @@ -542,7 +553,9 @@ "text": "PowerManager::enter_standby/enter_sleep shall return PowerErrc::endpoint_not_idle without changing mode() whenever the configured Hooks::endpoints_idle predicate returns false.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.5 (\"At least one EP is not idle\"), TC18.txt L2707", + "tc18_master_id": "TC18-12.5-005" }, { "id": "REQ-PWR-005", @@ -550,7 +563,9 @@ "text": "PowerManager::enter_standby/enter_sleep shall return PowerErrc::response_ack_queue_not_empty without changing mode() whenever the configured Hooks::response_ack_queues_empty predicate returns false.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.5 (\"In at least one responder queue there is a message pending for transmission.\"), TC18.txt L2708", + "tc18_master_id": "TC18-12.5-005" }, { "id": "REQ-PWR-006", @@ -566,7 +581,9 @@ "text": "PowerManager::begin_wake_from_sleep shall, when mode() is Sleep, invoke the configured Hooks::reenable_network_interface hook exactly once and set wake_stage() to HandshakeActive while leaving mode() at Sleep, and shall return PowerErrc::not_asleep without side effects when mode() is not Sleep.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.4.1 (\"it will first enable the network interface, check if the network is available and if not initiate a WakeUp to be sent via the network\" — TC18 labels this the \"Hot-start-up procedure\"; this implementation instead drives it from Sleep, see commit notes), TC18.txt L2671-2673", + "tc18_master_id": "TC18-12.4.1-003" }, { "id": "REQ-PWR-008", @@ -590,7 +607,9 @@ "text": "PowerManager::acknowledge_wakeup shall, while wake_stage() is HandshakeActive, call the associated WakeupEndpoint::acknowledge_wakeup, invoke the configured Hooks::reenable_response_ack_queues hook exactly once, set wake_stage() to Complete, and transition mode() to Normal.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.4.1 (\"After reception of valid message from the sleep request Client all used endpoints and response queues will be enabled.\"), TC18.txt L2677-2678", + "tc18_master_id": "TC18-12.4.1-003" }, { "id": "REQ-PWR-011", @@ -598,7 +617,9 @@ "text": "PowerManager::notify_power_removed shall set mode() to Unpowered regardless of the current mode() or any entry-refusal condition that would otherwise apply to enter_standby/enter_sleep.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.4 (\"Unpowered is the mode in which no sufficient power supply is available.\"), TC18.txt L2645", + "tc18_master_id": "TC18-12.4-001" }, { "id": "REQ-PWR-012", @@ -606,7 +627,9 @@ "text": "PowerManager::notify_power_restored shall set mode() to Normal and wake_stage() to Idle.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.4 (\"Powered is the mode in which sufficient power supply is available to run all functions.\"), TC18.txt L2646-2647", + "tc18_master_id": "TC18-12.4-001" }, { "id": "REQ-PWR-013", @@ -614,7 +637,9 @@ "text": "rcp::powerstate::start_kind_on_exit shall return StartKind::Hot for PowerMode::StandBy and StartKind::Cold for PowerMode::Sleep, and PowerManager::pending_start_kind shall report start_kind_on_exit(mode()).", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.4.1 (\"There are two types of start-up: a cold start (after power-on or wake-up from sleep) and a hot start (=wake-up from StandBy).\"), TC18.txt L2663-2664", + "tc18_master_id": "TC18-12.4.1-001" }, { "id": "REQ-PWR-014", @@ -2073,7 +2098,8 @@ "standard": "iso26262", "level": "ASIL-B", "asil": "ASIL-B", - "tc18": "§12.3 (\"The three lifecycle states the device may be in are...\"), TC18.txt L2063" + "tc18": "§13.7.1.2 Table 36 (\"svr_lifecycle_state\" register: \"0x00: HW_UNCONFIGURED\" / \"0x55: HW_CONFIGURED\" / \"0xAA: RCP_CONFIGURED\"), TC18.txt L4388-4390", + "tc18_master_id": "TC18-13.7.1.2-001" }, { "id": "REQ-LIFECYCLE-002", @@ -2081,7 +2107,9 @@ "text": "ServerLifecycle::advance shall accept only a request for the single next state in the HwUnconfigured -> HwConfigured -> RcpConfigured sequence, and shall return LifecycleErrc::invalid_transition without changing state for any request to skip a state, move backward, or repeat the current state.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.3.1.1 (\"A request to advance the state directly to RCP_CONFIGURED will be rejected with an error response.\"), TC18.txt L2544", + "tc18_master_id": "TC18-12.3.1.1-006" }, { "id": "REQ-LIFECYCLE-003", @@ -2089,7 +2117,9 @@ "text": "ServerLifecycle::advance to HwConfigured shall invoke the configured HW plausibility check and return LifecycleErrc::hw_cfg_inconsistent without advancing state when that check returns false.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.3.1.1 (\"If not plausible the request will be rejected and an error response sent with HW_CFG_INCONSITENT.\"), TC18.txt L2545-2550", + "tc18_master_id": "TC18-12.3.1.1-007" }, { "id": "REQ-LIFECYCLE-004", @@ -2097,7 +2127,9 @@ "text": "ServerLifecycle::advance to RcpConfigured shall invoke the configured RCP plausibility check and return LifecycleErrc::rcp_cfg_inconsistent without advancing state when that check returns false.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.3.1.2 (\"If not plausible the request will be rejected and an error response sent with RCP_CFG_INCONSISTENT\"), TC18.txt L2566-2572", + "tc18_master_id": "TC18-12.3.1.2-006" }, { "id": "REQ-LIFECYCLE-005", @@ -2105,7 +2137,9 @@ "text": "ServerLifecycle::generic_config_locked shall report true from HwConfigured onward, and ServerLifecycle::functional_config_locked shall report true only at RcpConfigured, with both reporting false at HwUnconfigured.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.3.1.2 (\"access to the HW configuration of the RC Server shall have been concluded and as such all access to the HW_config and EP_generic_config are locked\"), TC18.txt L2553-2554", + "tc18_master_id": "TC18-12.3.1.2-001" }, { "id": "REQ-LIFECYCLE-006", @@ -2113,7 +2147,9 @@ "text": "ServerLifecycle::deconfigure shall reset state to HwUnconfigured and clear both generic_config_locked and functional_config_locked regardless of the state deconfigure was called from, after which advance shall again accept the normal forward sequence.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§12.3.1.2 (\"it is also possible to go back to state HW_UNCONFIGURED via a write request to the server functional configuration entry svr_lifecycle_state\"), TC18.txt L2574-2575", + "tc18_master_id": "TC18-12.3.1.2-007" }, { "id": "REQ-LIFECYCLE-007", @@ -2345,7 +2381,9 @@ "text": "rcp::endpoint::kEndpointTypeGpio shall equal 0x02 and rcp::endpoint::kEndpointTypeSpi shall equal 0x03, matching the ep_type ids this milestone assigns for the GPIO and SPI endpoint types.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§13.2 Table 32 (\"0x02 GPIO\" / \"0x03 SPI\"), TC18.txt L4000-4017", + "tc18_master_id": "TC18-13.2-002" }, { "id": "REQ-ENDPOINT-002", @@ -2353,7 +2391,9 @@ "text": "rcp::endpoint::write_semantics_of shall map evt_op values 0-7 to Replace/Or/And/Xor/Reserved/Add/Subtract/Reconfigure respectively, masking its argument to the low 3 bits before conversion.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§13.5 Table 33 (GPIO/PWM_OUT row: \"000b The byte_msg_payload is presented at the interface\" / \"001b\"-\"011b\" OR/AND/XOR / \"100b reserved\" / \"101b\"/\"110b\" add/subtract / \"111b\" reconfigure), TC18.txt L4093-4116", + "tc18_master_id": "TC18-13.5-001" }, { "id": "REQ-ENDPOINT-003", @@ -2361,7 +2401,9 @@ "text": "rcp::endpoint::apply_bitmask_write shall compute Replace/Or/And/Xor of `current` and `operand` correctly for WriteSemantics::Replace/Or/And/Xor respectively.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§13.5 Table 33 (\"The \\u201cbyte_msg_payload\\u201d bitwise OR/AND/XOR \\u201ccurrent interface status\\u201d is written to the interface\"), TC18.txt L4093-4105", + "tc18_master_id": "TC18-13.5-001" }, { "id": "REQ-ENDPOINT-004", @@ -2369,7 +2411,9 @@ "text": "rcp::endpoint::apply_bitmask_write's Add and Subtract semantics, and the underlying rcp::endpoint::saturating_add/saturating_subtract helpers, shall clamp at the representable range's max/0 respectively rather than wrapping on overflow/underflow.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§13.5 (\"While doing additions and subtractions neither overflows nor wrap-arounds shall occur. The values are saturated at 0x0000 on the low side and 0xFFFF at the high side.\"), TC18.txt L4118-4119", + "tc18_master_id": "TC18-13.5-003" }, { "id": "REQ-ENDPOINT-005", @@ -2377,7 +2421,9 @@ "text": "rcp::endpoint::apply_bitmask_write shall return EndpointErrc::reserved_write_semantics for WriteSemantics::Reserved and EndpointErrc::non_combinable_write_semantics for WriteSemantics::Reconfigure, and EndpointErrc shall report a non-empty diagnostic message in its own error_category.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§13.5 Table 33 (\"100b reserved \\u2013request shall be ignored and an err-response with error code = UNSUPPORTED_CMD shall be sent\"; \"111b The byte_msg_payload is not presented to the interface but used to change the configuration of the endpoint\"), TC18.txt L4106-4115", + "tc18_master_id": "TC18-13.5-001" }, { "id": "REQ-ENDPOINT-006", @@ -2385,7 +2431,9 @@ "text": "rcp::endpoint::TriggerRegistry::notify shall queue a signal for drain() only when that signal id is currently enabled, disable() shall stop further notifications for that id from queuing, and drain() shall return queued signal ids in occurrence order and clear the queue.", "standard": "iso26262", "level": "ASIL-B", - "asil": "ASIL-B" + "asil": "ASIL-B", + "tc18": "§11.2.2.5 (\"Each endpoint may generate one or more trigger signals.\"), TC18.txt L1689", + "tc18_master_id": "TC18-11.2.2.5-002" }, { "id": "REQ-GPIO-001",