# unit-test console output: fprime-community/fprime-samd@main ============================================================================== PASSED fprime-samd_Drv_AdcDriver_ut_exe (0.36s) ============================================================================== [STest::Random] Generated seed 917346 from system time [==========] Running 21 tests from 4 test suites. [----------] Global test environment set-up. [----------] 5 tests from Configure [ RUN ] Configure.Configure *************************************** configure() initializes ADC with all parameters and calls sync waits *************************************** *************************************** (RQ) SAMD21-ADC-001: The AdcDriver shall configure the ADC peripheral with configurable voltage reference, resolution, hardware averaging, sampling time, and gain *************************************** [ OK ] Configure.Configure (0 ms) [ RUN ] Configure.AllReferences *************************************** configure() works with all voltage reference options *************************************** *************************************** (RQ) SAMD21-ADC-001: The AdcDriver shall configure the ADC peripheral with configurable voltage reference *************************************** [ OK ] Configure.AllReferences (0 ms) [ RUN ] Configure.AllResolutions *************************************** configure() works with all resolution options (8/10/12-bit) *************************************** *************************************** (RQ) SAMD21-ADC-001: The AdcDriver shall configure the ADC peripheral with configurable resolution *************************************** [ OK ] Configure.AllResolutions (0 ms) [ RUN ] Configure.AllSampleCounts *************************************** configure() works with all hardware averaging sample counts *************************************** *************************************** (RQ) SAMD21-ADC-001: The AdcDriver shall configure the ADC peripheral with configurable hardware averaging *************************************** [ OK ] Configure.AllSampleCounts (0 ms) [ RUN ] Configure.AllGains *************************************** configure() works with all gain options (1X and DIV2) *************************************** *************************************** (RQ) SAMD21-ADC-001: The AdcDriver shall configure the ADC peripheral with configurable gain *************************************** [ OK ] Configure.AllGains (0 ms) [----------] 5 tests from Configure (1 ms total) [----------] 1 test from ConfigureChannel [ RUN ] ConfigureChannel.Comprehensive *************************************** configureChannel() handles external channels, internal channels (TEMP, BANDGAP), and SCALEDIOVCC *************************************** *************************************** (RQ) SAMD21-ADC-002: The AdcDriver shall bind a readAdc port index to a physical ADC input channel via configureChannel *************************************** [ OK ] ConfigureChannel.Comprehensive (0 ms) [----------] 1 test from ConfigureChannel (0 ms total) [----------] 8 tests from Conversion [ RUN ] Conversion.NotConfigured *************************************** readAdc() before configure() returns NOT_CONFIGURED *************************************** *************************************** (RQ) SAMD21-ADC-004: The AdcDriver shall return ADC_NOT_CONFIGURED from readAdc without touching hardware if the peripheral is not configured *************************************** [ OK ] Conversion.NotConfigured (0 ms) [ RUN ] Conversion.ChannelNotConfigured *************************************** readAdc() on unconfigured channel returns INVALID_CHANNEL *************************************** *************************************** (RQ) SAMD21-ADC-004: The AdcDriver shall return ADC_INVALID_CHANNEL from readAdc without touching hardware if the requested port is not configured *************************************** [ OK ] Conversion.ChannelNotConfigured (0 ms) [ RUN ] Conversion.Busy *************************************** readAdc() while conversion pending returns BUSY *************************************** *************************************** (RQ) SAMD21-ADC-003: The AdcDriver shall return ADC_BUSY if a conversion is already in progress on any port *************************************** [ OK ] Conversion.Busy (0 ms) [ RUN ] Conversion.Completion *************************************** Full conversion flow: readAdc → ISR → activeIn → result delivery *************************************** *************************************** (RQ) SAMD21-ADC-003: The AdcDriver shall start an asynchronous conversion on readAdc *************************************** *************************************** (RQ) SAMD21-ADC-006: The AdcDriver shall deliver every conversion result from the main context (via activeIn), not from interrupt context *************************************** [ OK ] Conversion.Completion (0 ms) [ RUN ] Conversion.MultipleChannels *************************************** Sequential conversions across multiple channels with result delivery *************************************** *************************************** (RQ) SAMD21-ADC-002: The AdcDriver shall bind a readAdc port index to a physical ADC input channel via configureChannel *************************************** *************************************** (RQ) SAMD21-ADC-003: The AdcDriver shall start an asynchronous conversion on readAdc *************************************** [ OK ] Conversion.MultipleChannels (0 ms) [ RUN ] Conversion.ResultBoundaries *************************************** Conversion handling across full ADC range (0, mid, max) *************************************** *************************************** (RQ) SAMD21-ADC-006: The AdcDriver shall deliver every conversion result from the main context (via activeIn), not from interrupt context *************************************** [ OK ] Conversion.ResultBoundaries (0 ms) [ RUN ] Conversion.BeforeComplete *************************************** activeIn() called before ISR completes does not deliver premature result *************************************** *************************************** (RQ) SAMD21-ADC-006: The AdcDriver shall deliver a conversion result via activeIn only once the conversion has completed *************************************** [ OK ] Conversion.BeforeComplete (0 ms) [ RUN ] Conversion.MultipleactiveInIdle *************************************** Multiple activeIn() calls while idle do not produce spurious results *************************************** *************************************** (RQ) SAMD21-ADC-006: The AdcDriver shall deliver every conversion result exactly once from the main context (via activeIn) *************************************** [ OK ] Conversion.MultipleactiveInIdle (0 ms) [----------] 8 tests from Conversion (1 ms total) [----------] 7 tests from Interrupt [ RUN ] Interrupt.ResultReady *************************************** handleInterrupt() processes RESRDY flag and stores result *************************************** *************************************** (RQ) SAMD21-ADC-006: The AdcDriver shall deliver every conversion result from the main context (via activeIn), not from interrupt context *************************************** [ OK ] Interrupt.ResultReady (0 ms) [ RUN ] Interrupt.Overrun *************************************** handleInterrupt() handles OVERRUN flag and still delivers result *************************************** *************************************** (RQ) SAMD21-ADC-005: The AdcDriver shall report an overrun (ADC_OVERRUN) if the result register was not read before the next conversion completed *************************************** [ OK ] Interrupt.Overrun (0 ms) [ RUN ] Interrupt.BothFlags *************************************** handleInterrupt() correctly handles both OVERRUN and RESRDY flags *************************************** *************************************** (RQ) SAMD21-ADC-005: The AdcDriver shall report an overrun (ADC_OVERRUN) if the result register was not read before the next conversion completed *************************************** [ OK ] Interrupt.BothFlags (0 ms) [ RUN ] Interrupt.NoFlags *************************************** handleInterrupt() with no flags set (spurious interrupt) is handled safely *************************************** *************************************** (RQ) SAMD21-ADC-007: The AdcDriver shall ignore spurious interrupts (flags clear with a conversion requested) without corrupting driver state *************************************** [ OK ] Interrupt.NoFlags (0 ms) [ RUN ] Interrupt.MultipleTimes *************************************** handleInterrupt() firing multiple times with same result *************************************** *************************************** (RQ) SAMD21-ADC-007: The AdcDriver shall ignore repeated interrupts for an already-latched result without corrupting driver state *************************************** [ OK ] Interrupt.MultipleTimes (0 ms) [ RUN ] Interrupt.WithoutPendingConversion *************************************** handleInterrupt() without pending conversion (spurious) does not deliver result *************************************** *************************************** (RQ) SAMD21-ADC-007: The AdcDriver shall ignore spurious interrupts (no conversion pending) without corrupting driver state *************************************** [ OK ] Interrupt.WithoutPendingConversion (0 ms) [ RUN ] Interrupt.SpuriousWithOverrun *************************************** handleInterrupt() spurious interrupt with overrun flag clears flags and doesn't corrupt state *************************************** *************************************** (RQ) SAMD21-ADC-007: The AdcDriver shall ignore spurious interrupts (flags set with nothing requested) without corrupting driver state *************************************** [ OK ] Interrupt.SpuriousWithOverrun (0 ms) [----------] 7 tests from Interrupt (1 ms total) [----------] Global test environment tear-down [==========] 21 tests from 4 test suites ran. (3 ms total) [ PASSED ] 21 tests. ============================================================================== PASSED fprime-samd_Drv_RtcDriver_ut_exe (0.87s) ============================================================================== [STest::Random] Generated seed 944771 from system time [==========] Running 15 tests from 2 test suites. [----------] Global test environment set-up. [----------] 9 tests from Nominal [ RUN ] Nominal.testConfigure *************************************** (RQ) SAMD21-RTC-001: The RtcDriver shall configure the RTC peripheral for periodic interrupts *************************************** *************************************** (RQ) SAMD21-RTC-002: The RtcDriver shall support configurable interrupt periods (1-128 Hz) *************************************** *************************************** (RQ) SAMD21-RTC-005: The RtcDriver shall support internal, external, and ULP clock sources *************************************** [ OK ] Nominal.testConfigure (0 ms) [ RUN ] Nominal.testEnable *************************************** (RQ) SAMD21-RTC-001: The RtcDriver shall configure the RTC peripheral for periodic interrupts *************************************** [ OK ] Nominal.testEnable (0 ms) [ RUN ] Nominal.testCycle *************************************** (RQ) SAMD21-RTC-004: The RtcDriver shall detect RTC interrupts via activeIn port *************************************** *************************************** (RQ) SAMD21-RTC-006: The RtcDriver shall emit cycle signals via the CycleOut port *************************************** [ OK ] Nominal.testCycle (0 ms) [ RUN ] Nominal.testCycleNoInterruptPending *************************************** (RQ) SAMD21-RTC-004: The RtcDriver shall detect RTC interrupts via activeIn port *************************************** [ OK ] Nominal.testCycleNoInterruptPending (0 ms) [ RUN ] Nominal.testMultipleCycles *************************************** (RQ) SAMD21-RTC-004: The RtcDriver shall detect RTC interrupts via activeIn port *************************************** *************************************** (RQ) SAMD21-RTC-006: The RtcDriver shall emit cycle signals via the CycleOut port *************************************** [ OK ] Nominal.testMultipleCycles (0 ms) [ RUN ] Nominal.testTimeNow *************************************** (RQ) SAMD21-RTC-007: The RtcDriver shall provide an Os::RawTime implementation *************************************** [ OK ] Nominal.testTimeNow (0 ms) [ RUN ] Nominal.testTimeNowUnconfigured *************************************** (RQ) SAMD21-RTC-007: The RtcDriver shall provide an Os::RawTime implementation (zero time when unconfigured) *************************************** [ OK ] Nominal.testTimeNowUnconfigured (0 ms) [ RUN ] Nominal.testTimeNowFunction *************************************** (RQ) SAMD21-RTC-007: The RtcDriver shall provide an Os::RawTime implementation (timeNow() derives time from the tick counter and hardware counter) *************************************** [ OK ] Nominal.testTimeNowFunction (0 ms) [ RUN ] Nominal.testTimeInterval *************************************** (RQ) SAMD21-RTC-007: The RtcDriver shall provide an Os::RawTime implementation (timeInterval() computes the absolute difference between two times) *************************************** [ OK ] Nominal.testTimeInterval (0 ms) [----------] 9 tests from Nominal (1 ms total) [----------] 6 tests from OffNominal [ RUN ] OffNominal.testConfigureAssertsOnDoubleConfigure *************************************** (RQ) SAMD21-RTC-001: The RtcDriver shall configure the RTC peripheral for periodic interrupts *************************************** [ OK ] OffNominal.testConfigureAssertsOnDoubleConfigure (210 ms) [ RUN ] OffNominal.testConfigureAssertsOnInvalidRate *************************************** (RQ) SAMD21-RTC-002: The RtcDriver shall support configurable interrupt periods (1-128 Hz) *************************************** [ OK ] OffNominal.testConfigureAssertsOnInvalidRate (215 ms) [ RUN ] OffNominal.testConfigureAssertsOnInvalidClockSource *************************************** (RQ) SAMD21-RTC-005: The RtcDriver shall support internal, external, and ULP clock sources *************************************** [ OK ] OffNominal.testConfigureAssertsOnInvalidClockSource (217 ms) [ RUN ] OffNominal.testEnableAssertsWhenNotConfigured *************************************** (RQ) SAMD21-RTC-001: The RtcDriver shall configure the RTC peripheral for periodic interrupts *************************************** [ OK ] OffNominal.testEnableAssertsWhenNotConfigured (204 ms) [ RUN ] OffNominal.testCycleOverrun *************************************** (RQ) SAMD21-RTC-008: The RtcDriver shall detect when processing exceeds the configured period *************************************** [ OK ] OffNominal.testCycleOverrun (0 ms) [ RUN ] OffNominal.testCycleOverrunAccumulates *************************************** (RQ) SAMD21-RTC-008: The RtcDriver shall detect when processing exceeds the configured period *************************************** [ OK ] OffNominal.testCycleOverrunAccumulates (0 ms) [----------] 6 tests from OffNominal (847 ms total) [----------] Global test environment tear-down [==========] 15 tests from 2 test suites ran. (850 ms total) [ PASSED ] 15 tests. ============================================================================== PASSED fprime-samd_Drv_UsartDriver_ut_exe (0.50s) ============================================================================== [STest::Random] Generated seed 825229 from system time [==========] Running 19 tests from 6 test suites. [----------] Global test environment set-up. [----------] 3 tests from Configure [ RUN ] Configure.Nominal *************************************** configure() programs the SERCOM once and announces readiness *************************************** *************************************** (RQ) SAMD21-UART-001: The UsartDriver shall configure SERCOM peripherals for USART operation *************************************** [ OK ] Configure.Nominal (2 ms) [ RUN ] Configure.AllParameters *************************************** configure() forwards every format parameter to the HAL *************************************** *************************************** (RQ) SAMD21-UART-001: The UsartDriver shall configure SERCOM peripherals with configurable baud rates, data formats, parity, stop bits, bit ordering, communication modes, and clock sources *************************************** [ OK ] Configure.AllParameters (0 ms) [ RUN ] Configure.QueuesRxBuffers *************************************** configure() primes both RX buffers into the RX DMA channel *************************************** *************************************** (RQ) SAMD21-UART-002: The UsartDriver shall use DMA for both transmission and reception *************************************** *************************************** (RQ) SAMD21-UART-003: The UsartDriver shall implement double-buffering for continuous RX *************************************** [ OK ] Configure.QueuesRxBuffers (0 ms) [----------] 3 tests from Configure (4 ms total) [----------] 4 tests from Send [ RUN ] Send.Nominal *************************************** send() enqueues a TX DMA transaction with correct descriptors *************************************** *************************************** (RQ) SAMD21-UART-002: The UsartDriver shall use DMA for both transmission and reception *************************************** *************************************** (RQ) SAMD21-UART-005: The UsartDriver shall queue TX requests with asynchronous completion *************************************** [ OK ] Send.Nominal (0 ms) [ RUN ] Send.QueueFull *************************************** send() returns SEND_RETRY once the TX queue is full *************************************** *************************************** (RQ) SAMD21-UART-005: The UsartDriver shall queue TX requests with asynchronous completion (a full queue returns SEND_RETRY) *************************************** [ OK ] Send.QueueFull (0 ms) [ RUN ] Send.Completion *************************************** TX DMA completion returns the buffer OP_OK via activeIn *************************************** *************************************** (RQ) SAMD21-UART-005: The UsartDriver shall queue TX requests with asynchronous completion (the buffer is returned OP_OK from the main context) *************************************** [ OK ] Send.Completion (0 ms) [ RUN ] Send.ChannelError *************************************** TX DMA bus error asserts (invalid buffer pointer handed to DMA) *************************************** *************************************** (RQ) SAMD21-UART-002: The UsartDriver shall use DMA for transmission (an unrecoverable TX DMA bus error asserts) *************************************** [ OK ] Send.ChannelError (238 ms) [----------] 4 tests from Send (240 ms total) [----------] 1 test from SendSync [ RUN ] SendSync.Nominal *************************************** sendSync() transmits synchronously through the HAL with no DMA *************************************** *************************************** (RQ) SAMD21-UART-006: The UsartDriver shall provide synchronous blocking transmission for early boot diagnostics *************************************** [ OK ] SendSync.Nominal (0 ms) [----------] 1 test from SendSync (0 ms total) [----------] 8 tests from Rx [ RUN ] Rx.SchedInNoData *************************************** schedIn with no new bytes forwards nothing downstream *************************************** *************************************** (RQ) SAMD21-UART-004: The UsartDriver shall poll the in-progress RX transfer on each rate group tick (no new bytes yields no signal and no recv) *************************************** [ OK ] Rx.SchedInNoData (0 ms) [ RUN ] Rx.SchedInPartial *************************************** schedIn forwards newly-received bytes and emits RxPartial *************************************** *************************************** (RQ) SAMD21-UART-004: The UsartDriver shall poll the in-progress RX transfer on each rate group tick to extract partial RX frames *************************************** [ OK ] Rx.SchedInPartial (0 ms) [ RUN ] Rx.SchedInRxOverflow *************************************** schedIn detects a SERCOM RX overflow and counts it in telemetry *************************************** *************************************** (RQ) SAMD21-UART-004: The UsartDriver shall detect a SERCOM RX hardware overflow on each rate group tick and count it in the rxOverflows telemetry channel *************************************** [ OK ] Rx.SchedInRxOverflow (0 ms) [ RUN ] Rx.MultiplePartials *************************************** successive partials advance the processed offset *************************************** *************************************** (RQ) SAMD21-UART-004: The UsartDriver shall poll the in-progress RX transfer on each rate group tick (repeated partials advance the buffer offset) *************************************** [ OK ] Rx.MultiplePartials (0 ms) [ RUN ] Rx.BufferDone *************************************** a completed RX buffer forwards the full buffer and emits RxFull *************************************** *************************************** (RQ) SAMD21-UART-003: The UsartDriver shall implement double-buffering for continuous RX (a full buffer drains its remainder) *************************************** [ OK ] Rx.BufferDone (0 ms) [ RUN ] Rx.BufferFlip *************************************** the active RX buffer flips A->B->A on completion *************************************** *************************************** (RQ) SAMD21-UART-003: The UsartDriver shall implement double-buffering for continuous RX (the active buffer flips A->B->A on completion) *************************************** [ OK ] Rx.BufferFlip (0 ms) [ RUN ] Rx.RecvReturnIn *************************************** recvReturnIn is a no-op; buffers remain owned by the DMA *************************************** *************************************** (RQ) SAMD21-UART-003: The UsartDriver shall implement double-buffering for continuous RX (returned buffers stay in the DMA chain) *************************************** [ OK ] Rx.RecvReturnIn (0 ms) [ RUN ] Rx.ChannelError *************************************** RX DMA bus error asserts (invalid buffer pointer handed to DMA) *************************************** *************************************** (RQ) SAMD21-UART-002: The UsartDriver shall use DMA for reception (an unrecoverable RX DMA bus error asserts) *************************************** [ OK ] Rx.ChannelError (212 ms) [----------] 8 tests from Rx (217 ms total) [----------] 2 tests from Unconfigured [ RUN ] Unconfigured.SchedIn *************************************** schedIn before configure() is a safe no-op *************************************** *************************************** (RQ) SAMD21-UART-004: The UsartDriver shall poll the in-progress RX transfer on each rate group tick (a tick before configure() is a no-op) *************************************** [ OK ] Unconfigured.SchedIn (0 ms) [ RUN ] Unconfigured.ActiveIn *************************************** activeIn before configure() is a safe no-op *************************************** *************************************** (RQ) SAMD21-UART-005: The UsartDriver shall queue TX requests with asynchronous completion (an activeIn tick before configure() delivers nothing) *************************************** [ OK ] Unconfigured.ActiveIn (0 ms) [----------] 2 tests from Unconfigured (1 ms total) [----------] 1 test from TriggerSource [ RUN ] TriggerSource.Mapping *************************************** each SERCOM maps to its matching RX DMA trigger source *************************************** *************************************** (RQ) SAMD21-UART-002: The UsartDriver shall use DMA for both transmission and reception (the correct DMA trigger is selected per SERCOM) *************************************** [ OK ] TriggerSource.Mapping (0 ms) [----------] 1 test from TriggerSource (1 ms total) [----------] Global test environment tear-down [==========] 19 tests from 6 test suites ran. (466 ms total) [ PASSED ] 19 tests. ============================================================================== PASSED fprime-samd_Drv_I2cDriver_ut_exe (0.07s) ============================================================================== [STest::Random] Generated seed 323272 from system time [==========] Running 39 tests from 10 test suites. [----------] Global test environment set-up. [----------] 3 tests from Configure [ RUN ] Configure.Nominal *************************************** configure() programs the SERCOM once with the requested parameters *************************************** *************************************** (RQ) SAMD21-I2C-001: The I2cDriver shall configure a SERCOM peripheral for I2C host operation *************************************** [ OK ] Configure.Nominal (3 ms) [ RUN ] Configure.AllParameters *************************************** configure() forwards every parameter to the HAL *************************************** *************************************** (RQ) SAMD21-I2C-001: The I2cDriver shall configure a SERCOM peripheral for I2C host operation with configurable SCL frequency, SDA hold, and pin usage *************************************** [ OK ] Configure.AllParameters (0 ms) [ RUN ] Configure.RegistersIsr *************************************** configure() registers the component's ISR trampoline *************************************** *************************************** (RQ) SAMD21-I2C-001: The I2cDriver shall configure a SERCOM peripheral for I2C host operation (the driver's ISR trampoline is registered for its SERCOM) *************************************** [ OK ] Configure.RegistersIsr (0 ms) [----------] 3 tests from Configure (4 ms total) [----------] 3 tests from Read [ RUN ] Read.Nominal *************************************** read() queues an RX DMA transfer and kicks off the peripheral *************************************** *************************************** (RQ) SAMD21-I2C-002: The I2cDriver shall perform 7-bit-addressed read transactions using DMA for the data payload *************************************** [ OK ] Read.Nominal (0 ms) [ RUN ] Read.Completion *************************************** RX DMA completion returns the buffer OK and frees the driver *************************************** *************************************** (RQ) SAMD21-I2C-002: The I2cDriver shall perform 7-bit-addressed read transactions using DMA for the data payload *************************************** *************************************** (RQ) SAMD21-I2C-006: The I2cDriver shall deliver every completion callback from the main context (via activeIn), not from interrupt context *************************************** [ OK ] Read.Completion (0 ms) [ RUN ] Read.Busy *************************************** read() while busy is rejected with OTHER_ERR *************************************** *************************************** (RQ) SAMD21-I2C-005: The I2cDriver shall reject a new request that arrives while a transaction is in progress, returning I2C_OTHER_ERR on the matching completion callback *************************************** [ OK ] Read.Busy (0 ms) [----------] 3 tests from Read (2 ms total) [----------] 3 tests from Write [ RUN ] Write.Nominal *************************************** write() queues a TX DMA transfer with an automatic STOP *************************************** *************************************** (RQ) SAMD21-I2C-002: The I2cDriver shall perform 7-bit-addressed write transactions using DMA for the data payload *************************************** [ OK ] Write.Nominal (0 ms) [ RUN ] Write.Completion *************************************** TX DMA completion returns the buffer OK and frees the driver *************************************** *************************************** (RQ) SAMD21-I2C-002: The I2cDriver shall perform 7-bit-addressed write transactions using DMA for the data payload *************************************** *************************************** (RQ) SAMD21-I2C-006: The I2cDriver shall deliver every completion callback from the main context (via activeIn), not from interrupt context *************************************** [ OK ] Write.Completion (0 ms) [ RUN ] Write.Busy *************************************** write() while busy is rejected with OTHER_ERR *************************************** *************************************** (RQ) SAMD21-I2C-005: The I2cDriver shall reject a new request that arrives while a transaction is in progress, returning I2C_OTHER_ERR on the matching completion callback *************************************** [ OK ] Write.Busy (0 ms) [----------] 3 tests from Write (2 ms total) [----------] 6 tests from WriteRead [ RUN ] WriteRead.Nominal *************************************** writeRead() queues both DMA transfers and writes without a STOP *************************************** *************************************** (RQ) SAMD21-I2C-002: The I2cDriver shall perform 7-bit-addressed combined write-read transactions using DMA for the data payload *************************************** *************************************** (RQ) SAMD21-I2C-003: The I2cDriver shall implement writeRead as a repeated START with no intervening STOP *************************************** [ OK ] WriteRead.Nominal (0 ms) [ RUN ] WriteRead.FullSequence *************************************** write-read walks write DMA -> master-on-bus -> read DMA -> OK *************************************** *************************************** (RQ) SAMD21-I2C-003: The I2cDriver shall implement writeRead as a repeated START with no intervening STOP *************************************** *************************************** (RQ) SAMD21-I2C-006: The I2cDriver shall deliver every completion callback from the main context (via activeIn), not from interrupt context *************************************** [ OK ] WriteRead.FullSequence (0 ms) [ RUN ] WriteRead.Busy *************************************** writeRead() while busy is rejected with OTHER_ERR *************************************** *************************************** (RQ) SAMD21-I2C-005: The I2cDriver shall reject a new request that arrives while a transaction is in progress, returning I2C_OTHER_ERR on the matching completion callback *************************************** [ OK ] WriteRead.Busy (0 ms) [ RUN ] WriteRead.PointerNack *************************************** a client NACK of the register pointer fails the write-read with WRITE_ERR, no read issued *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall fail the in-flight transaction with the appropriate status (a NACKed register pointer fails the write-read with I2C_WRITE_ERR) *************************************** [ OK ] WriteRead.PointerNack (0 ms) [ RUN ] WriteRead.MbAlreadyLatched *************************************** MB already latched at write-DMA completion services the handoff inline (no lost edge) *************************************** *************************************** (RQ) SAMD21-I2C-003: The I2cDriver shall implement writeRead as a repeated START with no intervening STOP (the read half is kicked off even when MB is already latched) *************************************** [ OK ] WriteRead.MbAlreadyLatched (0 ms) [ RUN ] WriteRead.MbAlreadyLatchedSpuriousIsr *************************************** the stale SERCOM interrupt after an inline handoff is a benign no-op, not an assert *************************************** *************************************** (RQ) SAMD21-I2C-003: The I2cDriver shall implement writeRead as a repeated START with no intervening STOP (a stale SERCOM interrupt after the inline handoff is a benign no-op) *************************************** [ OK ] WriteRead.MbAlreadyLatchedSpuriousIsr (0 ms) [----------] 6 tests from WriteRead (4 ms total) [----------] 8 tests from Isr [ RUN ] Isr.ErrorIdleUnexpected *************************************** an error interrupt while IDLE logs the error and an unexpected warning *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall report bus errors as events (an error with no transaction in flight also raises UnexpectedInterrupt) *************************************** [ OK ] Isr.ErrorIdleUnexpected (0 ms) [ RUN ] Isr.ErrorDuringRead *************************************** an error during a read aborts the DMA and replies READ_ERR *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall report bus errors as events and fail the in-flight transaction with the appropriate status (I2C_READ_ERR during a read) *************************************** [ OK ] Isr.ErrorDuringRead (0 ms) [ RUN ] Isr.ErrorDuringWrite *************************************** an error during a write aborts the DMA and replies WRITE_ERR *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall report bus errors as events and fail the in-flight transaction with the appropriate status (I2C_WRITE_ERR during a write) *************************************** [ OK ] Isr.ErrorDuringWrite (0 ms) [ RUN ] Isr.ErrorDuringWriteReadWriting *************************************** an error while writing a write-read aborts both channels, replies WRITE_ERR *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall report bus errors as events and fail the in-flight transaction with the appropriate status (I2C_WRITE_ERR during the write half of a write-read) *************************************** [ OK ] Isr.ErrorDuringWriteReadWriting (0 ms) [ RUN ] Isr.ErrorDuringWriteReadReading *************************************** an error while reading a write-read aborts the read channel, replies READ_ERR *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall report bus errors as events and fail the in-flight transaction with the appropriate status (I2C_READ_ERR during the read half of a write-read) *************************************** [ OK ] Isr.ErrorDuringWriteReadReading (0 ms) [ RUN ] Isr.AllErrorFlags *************************************** every error STATUS bit maps to its own event and increments the counter *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall report bus errors as events and count them in telemetry *************************************** [ OK ] Isr.AllErrorFlags (0 ms) [ RUN ] Isr.MasterOnBusUnexpected *************************************** a master-on-bus interrupt outside write-read is flagged unexpected *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall report an unexpected master-on-bus interrupt as an event *************************************** [ OK ] Isr.MasterOnBusUnexpected (0 ms) [ RUN ] Isr.ErrorDuringWriteReadWaitDisablesMb *************************************** an error while in WRITE_READ_WRITING_WAIT disables the armed MB interrupt (leak fix) *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall fail the in-flight transaction with the appropriate status and return to service (the error path disables the armed MB interrupt) *************************************** [ OK ] Isr.ErrorDuringWriteReadWaitDisablesMb (0 ms) [----------] 8 tests from Isr (5 ms total) [----------] 7 tests from StallWatchdog [ RUN ] StallWatchdog.NoRecoveryBeforeThreshold *************************************** an in-flight transaction is not recovered until the tick threshold is reached *************************************** *************************************** (RQ) SAMD21-I2C-007: The I2cDriver shall force-recover a transaction whose completion interrupt is lost (only once the stall threshold is reached) *************************************** [ OK ] StallWatchdog.NoRecoveryBeforeThreshold (0 ms) [ RUN ] StallWatchdog.RecoversWriteRead *************************************** a write-read with a lost MB completion is force-recovered after the threshold *************************************** *************************************** (RQ) SAMD21-I2C-007: The I2cDriver shall force-recover a write-read whose completion interrupt is lost, reply to the caller with an error, and return to service *************************************** [ OK ] StallWatchdog.RecoversWriteRead (0 ms) [ RUN ] StallWatchdog.RecoversRead *************************************** a stuck read is force-recovered and the caller gets an error reply *************************************** *************************************** (RQ) SAMD21-I2C-007: The I2cDriver shall force-recover a stalled read, reply to the caller with an error, and return to service *************************************** [ OK ] StallWatchdog.RecoversRead (0 ms) [ RUN ] StallWatchdog.RecoversWrite *************************************** a stuck write is force-recovered and the caller gets an error reply *************************************** *************************************** (RQ) SAMD21-I2C-007: The I2cDriver shall force-recover a stalled write, reply to the caller with an error, and return to service *************************************** [ OK ] StallWatchdog.RecoversWrite (0 ms) [ RUN ] StallWatchdog.ResetsWhenIdle *************************************** ticks while IDLE never trigger a recovery *************************************** *************************************** (RQ) SAMD21-I2C-007: The I2cDriver shall force-recover only stalled transactions (an IDLE driver is never recovered) *************************************** [ OK ] StallWatchdog.ResetsWhenIdle (0 ms) [ RUN ] StallWatchdog.ResetsOnCompletion *************************************** a normal completion resets the stall counter so it does not spuriously recover *************************************** *************************************** (RQ) SAMD21-I2C-007: The I2cDriver shall force-recover only stalled transactions (the stall counter resets when a transaction completes normally) *************************************** [ OK ] StallWatchdog.ResetsOnCompletion (0 ms) [ RUN ] StallWatchdog.RecoveryCountTelemetry *************************************** StallRecoveryCount telemetry tracks the number of recoveries *************************************** *************************************** (RQ) SAMD21-I2C-007: The I2cDriver shall force-recover a stalled transaction and count the recovery in telemetry *************************************** [ OK ] StallWatchdog.RecoveryCountTelemetry (0 ms) [----------] 7 tests from StallWatchdog (5 ms total) [----------] 3 tests from DmaReply [ RUN ] DmaReply.WrongChannelRead *************************************** a WRITE-channel reply during a read is flagged InvalidDmaReply *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall report a DMA reply on an unexpected channel as an event without advancing the in-flight read *************************************** [ OK ] DmaReply.WrongChannelRead (0 ms) [ RUN ] DmaReply.WrongChannelWrite *************************************** a READ-channel reply during a write is flagged InvalidDmaReply *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall report a DMA reply on an unexpected channel as an event without advancing the in-flight write *************************************** [ OK ] DmaReply.WrongChannelWrite (0 ms) [ RUN ] DmaReply.IdleIgnored *************************************** a DMA reply while IDLE is silently ignored *************************************** *************************************** (RQ) SAMD21-I2C-006: The I2cDriver shall deliver completion callbacks only for transactions it has in flight (a DMA reply while IDLE is ignored) *************************************** [ OK ] DmaReply.IdleIgnored (0 ms) [----------] 3 tests from DmaReply (1 ms total) [----------] 3 tests from Boundary [ RUN ] Boundary.WriteMaxPayload *************************************** a 255-byte write (max DMA payload) queues a full-length transfer and completes OK *************************************** *************************************** (RQ) SAMD21-I2C-002: The I2cDriver shall perform write transactions using DMA for the data payload (at the maximum supported payload length) *************************************** [ OK ] Boundary.WriteMaxPayload (0 ms) [ RUN ] Boundary.ReadMinPayload *************************************** a 1-byte read (min payload) queues a single-beat transfer and completes OK *************************************** *************************************** (RQ) SAMD21-I2C-002: The I2cDriver shall perform read transactions using DMA for the data payload (at the minimum payload length of one byte) *************************************** [ OK ] Boundary.ReadMinPayload (0 ms) [ RUN ] Boundary.WriteReadMaxAddress *************************************** both phases of a write-read target the max legal 7-bit address 0x7F *************************************** *************************************** (RQ) SAMD21-I2C-002: The I2cDriver shall perform 7-bit-addressed transactions (at the largest legal address, 0x7F) *************************************** *************************************** (RQ) SAMD21-I2C-003: The I2cDriver shall implement writeRead as a repeated START with no intervening STOP (both halves target the same address) *************************************** [ OK ] Boundary.WriteReadMaxAddress (0 ms) [----------] 3 tests from Boundary (2 ms total) [----------] 2 tests from Telemetry [ RUN ] Telemetry.BusStatus *************************************** reportTelemetryIn maps the bus status registers to channels *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall count bus errors in telemetry *************************************** [ OK ] Telemetry.BusStatus (0 ms) [ RUN ] Telemetry.DeviceOnBus *************************************** both SB and MB set maps to MASTER_AND_SLAVE_ON_BUS *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall report bus state in telemetry *************************************** [ OK ] Telemetry.DeviceOnBus (0 ms) [----------] 2 tests from Telemetry (1 ms total) [----------] 1 test from Command [ RUN ] Command.ClearErrors *************************************** CLEAR_ERRORS resets the error counter and responds OK *************************************** *************************************** (RQ) SAMD21-I2C-004: The I2cDriver shall count bus errors in telemetry (CLEAR_ERRORS resets the counter) *************************************** [ OK ] Command.ClearErrors (0 ms) [----------] 1 test from Command (0 ms total) [----------] Global test environment tear-down [==========] 39 tests from 10 test suites ran. (31 ms total) [ PASSED ] 39 tests. ============================================================================== PASSED fprime-samd_Drv_GpioDriver_ut_exe (0.04s) ============================================================================== [STest::Random] Generated seed 390442 from system time [==========] Running 13 tests from 2 test suites. [----------] Global test environment set-up. [----------] 7 tests from Nominal [ RUN ] Nominal.testConfigureOutput *************************************** (RQ) GPIO-001: configureOutput shall bind the instance to one group/pin and forward the configuration to the PORT peripheral *************************************** [ OK ] Nominal.testConfigureOutput (0 ms) [ RUN ] Nominal.testConfigureInput *************************************** (RQ) GPIO-001: configureInput shall bind the instance to one group/pin and forward the configuration to the PORT peripheral *************************************** *************************************** (RQ) GPIO-002: configureInput shall select a pull-up, pull-down, or no internal resistor via InputPullMode *************************************** [ OK ] Nominal.testConfigureInput (0 ms) [ RUN ] Nominal.testConfigureAllPins *************************************** (RQ) GPIO-001: configureOutput shall bind the instance to any one group/pin combination *************************************** [ OK ] Nominal.testConfigureAllPins (0 ms) [ RUN ] Nominal.testWriteNominal *************************************** (RQ) GPIO-003: gpioWrite shall set the pin logic level and return OP_OK when the pin is configured as an output *************************************** [ OK ] Nominal.testWriteNominal (0 ms) [ RUN ] Nominal.testReadNominal *************************************** (RQ) GPIO-004: gpioRead shall return the pin logic level and OP_OK when the pin is configured as an input *************************************** [ OK ] Nominal.testReadNominal (0 ms) [ RUN ] Nominal.testConfigureInputExternalInterrupt *************************************** (RQ) GPIO-007: configureInput shall, when ExternalInterruptMode is not NONE, configure the EIC to detect the selected edge(s) on the pin's EXTINT line *************************************** [ OK ] Nominal.testConfigureInputExternalInterrupt (0 ms) [ RUN ] Nominal.testInterruptFiresWhenConnected *************************************** (RQ) GPIO-008: On each configured edge, the driver shall emit a cycle on the gpioInterrupt output port when it is connected *************************************** [ OK ] Nominal.testInterruptFiresWhenConnected (0 ms) [----------] 7 tests from Nominal (1 ms total) [----------] 6 tests from OffNominal [ RUN ] OffNominal.testWriteUnconfigured *************************************** (RQ) GPIO-005: gpioWrite shall return NOT_OPENED if invoked before configureOutput *************************************** [ OK ] OffNominal.testWriteUnconfigured (0 ms) [ RUN ] OffNominal.testReadUnconfigured *************************************** (RQ) GPIO-005: gpioRead shall return NOT_OPENED if invoked before configureInput *************************************** [ OK ] OffNominal.testReadUnconfigured (0 ms) [ RUN ] OffNominal.testWriteWrongMode *************************************** (RQ) GPIO-006: gpioWrite on an input pin shall return INVALID_MODE without touching hardware *************************************** [ OK ] OffNominal.testWriteWrongMode (0 ms) [ RUN ] OffNominal.testReadWrongMode *************************************** (RQ) GPIO-006: gpioRead on an output pin shall return INVALID_MODE without touching hardware *************************************** [ OK ] OffNominal.testReadWrongMode (0 ms) [ RUN ] OffNominal.testInterruptIsrNoOpWhenDisconnected *************************************** (RQ) GPIO-008: the driver shall emit a cycle on the gpioInterrupt output port only when it is connected *************************************** [ OK ] OffNominal.testInterruptIsrNoOpWhenDisconnected (0 ms) [ RUN ] OffNominal.testInterruptNoDispatchWithoutRegisteredHandler *************************************** (RQ) GPIO-008: the driver shall emit a cycle on the gpioInterrupt output port only for edges on the pin it configured *************************************** [ OK ] OffNominal.testInterruptNoDispatchWithoutRegisteredHandler (0 ms) [----------] 6 tests from OffNominal (0 ms total) [----------] Global test environment tear-down [==========] 13 tests from 2 test suites ran. (2 ms total) [ PASSED ] 13 tests. ============================================================================== PASSED fprime-samd_Drv_SystemInfo_ut_exe (0.03s) ============================================================================== [STest::Random] Generated seed 426335 from system time [==========] Running 4 tests from 1 test suite. [----------] Global test environment set-up. [----------] 4 tests from Nominal [ RUN ] Nominal.testEmitSystemInfoReportsResetReason *************************************** (RQ) SAMD21-HEALTH-001: SystemInfo shall report the cause of the most recent reset when emit() is called *************************************** [ OK ] Nominal.testEmitSystemInfoReportsResetReason (1 ms) [ RUN ] Nominal.testCommitStampsAreReported *************************************** (RQ) SAMD21-HEALTH-002: SystemInfo shall report the build commits of the project, fprime and fprime-samd *************************************** [ OK ] Nominal.testCommitStampsAreReported (0 ms) [ RUN ] Nominal.testHardwareQueriedOncePerCommand [ OK ] Nominal.testHardwareQueriedOncePerCommand (0 ms) [ RUN ] Nominal.testRepeatedEmit [ OK ] Nominal.testRepeatedEmit (0 ms) [----------] 4 tests from Nominal (2 ms total) [----------] Global test environment tear-down [==========] 4 tests from 1 test suite ran. (2 ms total) [ PASSED ] 4 tests. ============================================================================== PASSED fprime-samd_Svc_ProcTime_ut_exe (0.02s) ============================================================================== [==========] Running 3 tests from 1 test suite. [----------] Global test environment set-up. [----------] 3 tests from Nominal [ RUN ] Nominal.testTimeBase *************************************** (RQ) SAMD21-PROCTIME-001: ProcTime shall report time in the TB_PROC_TIME time base *************************************** [ OK ] Nominal.testTimeBase (0 ms) [ RUN ] Nominal.testTimeTracksRawTime *************************************** (RQ) SAMD21-PROCTIME-002: ProcTime shall report the time elapsed on the Os::RawTime clock *************************************** [ OK ] Nominal.testTimeTracksRawTime (0 ms) [ RUN ] Nominal.testTimeIsMonotonic *************************************** (RQ) SAMD21-PROCTIME-002: ProcTime shall report the time elapsed on the Os::RawTime clock *************************************** [ OK ] Nominal.testTimeIsMonotonic (0 ms) [----------] 3 tests from Nominal (0 ms total) [----------] Global test environment tear-down [==========] 3 tests from 1 test suite ran. (1 ms total) [ PASSED ] 3 tests. ============================================================================== PASSED fprime-samd_Svc_ThinBufferManager_ut_exe (0.03s) ============================================================================== [==========] Running 3 tests from 1 test suite. [----------] Global test environment set-up. [----------] 3 tests from Nominal [ RUN ] Nominal.Setup [ OK ] Nominal.Setup (1 ms) [ RUN ] Nominal.OneSize Returning buffer 3 Returning buffer 1 Returning buffer 0 Returning buffer 2 [ OK ] Nominal.OneSize (0 ms) [ RUN ] Nominal.MultSize [ OK ] Nominal.MultSize (1 ms) [----------] 3 tests from Nominal (3 ms total) [----------] Global test environment tear-down [==========] 3 tests from 1 test suite ran. (4 ms total) [ PASSED ] 3 tests. ============================================================================== PASSED fprime-samd_Svc_Framer_ut_exe (0.03s) ============================================================================== [STest::Random] Generated seed 513007 from system time [==========] Running 6 tests from 2 test suites. [----------] Global test environment set-up. [----------] 5 tests from Nominal [ RUN ] Nominal.SinglePacket [ OK ] Nominal.SinglePacket (2 ms) [ RUN ] Nominal.MultiPacketAccumulation [ OK ] Nominal.MultiPacketAccumulation (0 ms) [ RUN ] Nominal.BufferOverflow [ OK ] Nominal.BufferOverflow (0 ms) [ RUN ] Nominal.DoubleBufferLifecycle [ OK ] Nominal.DoubleBufferLifecycle (0 ms) [ RUN ] Nominal.SchedInFlush [ OK ] Nominal.SchedInFlush (0 ms) [----------] 5 tests from Nominal (3 ms total) [----------] 1 test from OffNominal [ RUN ] OffNominal.Backpressure [ OK ] OffNominal.Backpressure (0 ms) [----------] 1 test from OffNominal (0 ms total) [----------] Global test environment tear-down [==========] 6 tests from 2 test suites ran. (3 ms total) [ PASSED ] 6 tests. ============================================================================== PASSED fprime-samd_Svc_TmFramer_ut_exe (0.24s) ============================================================================== [STest::Random] Generated seed 546504 from system time [==========] Running 11 tests from 2 test suites. [----------] Global test environment set-up. [----------] 8 tests from Nominal [ RUN ] Nominal.NominalFraming [ OK ] Nominal.NominalFraming (1 ms) [ RUN ] Nominal.MultiPacketAccumulation [ OK ] Nominal.MultiPacketAccumulation (0 ms) [ RUN ] Nominal.DeadZoneAvoidance [ OK ] Nominal.DeadZoneAvoidance (0 ms) [ RUN ] Nominal.BufferOverflow [ OK ] Nominal.BufferOverflow (0 ms) [ RUN ] Nominal.DoubleBufferLifecycle [ OK ] Nominal.DoubleBufferLifecycle (0 ms) [ RUN ] Nominal.SchedInFlush [ OK ] Nominal.SchedInFlush (0 ms) [ RUN ] Nominal.PerApidSequenceCounts [ OK ] Nominal.PerApidSequenceCounts (0 ms) [ RUN ] Nominal.FrameCountWrapAround [ OK ] Nominal.FrameCountWrapAround (16 ms) [----------] 8 tests from Nominal (19 ms total) [----------] 3 tests from OffNominal [ RUN ] OffNominal.Backpressure [ OK ] OffNominal.Backpressure (0 ms) [ RUN ] OffNominal.UnexpectedBufferReturn [ OK ] OffNominal.UnexpectedBufferReturn (195 ms) [ RUN ] OffNominal.ApidTrackingOverflow [ OK ] OffNominal.ApidTrackingOverflow (0 ms) [----------] 3 tests from OffNominal (196 ms total) [----------] Global test environment tear-down [==========] 11 tests from 2 test suites ran. (217 ms total) [ PASSED ] 11 tests. ============================================================================== PASSED fprime-samd_Svc_Seq_ut_exe (0.06s) ============================================================================== [STest::Random] Generated seed 790109 from system time [==========] Running 27 tests from 5 test suites. [----------] Global test environment set-up. [----------] 10 tests from SequenceExecution [ RUN ] SequenceExecution.GenericSequence *************************************** Execute the GENERIC action end to end, verifying command order, args, and byte offsets. *************************************** *************************************** (RQ) SAMD21-SEQ-001 *************************************** *************************************** (RQ) SAMD21-SEQ-002 *************************************** [ OK ] SequenceExecution.GenericSequence (1 ms) [ RUN ] SequenceExecution.RunCommandPendsUntilActive *************************************** RUN latches a pending request that only starts on the next idle activeIn tick. *************************************** *************************************** (RQ) SAMD21-SEQ-004 *************************************** [ OK ] SequenceExecution.RunCommandPendsUntilActive (0 ms) [ RUN ] SequenceExecution.ImmediateDispatchOrder *************************************** Back-to-back commands dispatch one per activeIn tick, gated by command responses. *************************************** *************************************** (RQ) SAMD21-SEQ-001 *************************************** *************************************** (RQ) SAMD21-SEQ-002 *************************************** [ OK ] SequenceExecution.ImmediateDispatchOrder (0 ms) [ RUN ] SequenceExecution.CommandFailureAborts *************************************** A failing command response aborts the remainder of the sequence. *************************************** *************************************** (RQ) SAMD21-SEQ-003 *************************************** [ OK ] SequenceExecution.CommandFailureAborts (0 ms) [ RUN ] SequenceExecution.StrayResponseDropped *************************************** A command response received while idle is dropped and logged. *************************************** [ OK ] SequenceExecution.StrayResponseDropped (0 ms) [ RUN ] SequenceExecution.PendingRunAfterCompletion *************************************** A RUN issued mid-sequence is latched and runs after the current sequence completes. *************************************** *************************************** (RQ) SAMD21-SEQ-004 *************************************** [ OK ] SequenceExecution.PendingRunAfterCompletion (0 ms) [ RUN ] SequenceExecution.InvalidCmdSizeFails *************************************** A command whose cmdSize is smaller than a bare opcode emits InvalidSequence. *************************************** *************************************** (RQ) SAMD21-SEQ-008 *************************************** [ OK ] SequenceExecution.InvalidCmdSizeFails (0 ms) [ RUN ] SequenceExecution.CmdSizeOverrunsBufferFails *************************************** A command whose cmdSize runs past the action buffer emits InvalidSequence. *************************************** *************************************** (RQ) SAMD21-SEQ-008 *************************************** [ OK ] SequenceExecution.CmdSizeOverrunsBufferFails (0 ms) [ RUN ] SequenceExecution.EmptyAction *************************************** A zero-length action is a valid empty sequence: it finishes immediately with no warning. *************************************** [ OK ] SequenceExecution.EmptyAction (0 ms) [ RUN ] SequenceExecution.TruncatedCmdSizeFails *************************************** A command truncated within the cmdSize field emits InvalidSequence. *************************************** *************************************** (RQ) SAMD21-SEQ-008 *************************************** [ OK ] SequenceExecution.TruncatedCmdSizeFails (0 ms) [----------] 10 tests from SequenceExecution (7 ms total) [----------] 3 tests from WaitTicks [ RUN ] WaitTicks.ZeroResumesNextTick *************************************** WAIT_TICKS(0) resumes the sequence on the very next rate-group tick. *************************************** *************************************** (RQ) SAMD21-SEQ-006 *************************************** [ OK ] WaitTicks.ZeroResumesNextTick (0 ms) [ RUN ] WaitTicks.BlocksNTicks *************************************** WAIT_TICKS(n) blocks for exactly n rate-group ticks, then resumes. *************************************** *************************************** (RQ) SAMD21-SEQ-006 *************************************** [ OK ] WaitTicks.BlocksNTicks (0 ms) [ RUN ] WaitTicks.AtEndOfSequence *************************************** A WAIT_TICKS at the end of a sequence finishes cleanly without a spurious InvalidSequence. *************************************** *************************************** (RQ) SAMD21-SEQ-006 *************************************** [ OK ] WaitTicks.AtEndOfSequence (0 ms) [----------] 3 tests from WaitTicks (2 ms total) [----------] 4 tests from WaitUntil [ RUN ] WaitUntil.SleepsUntilTime *************************************** WAIT_UNTIL sleeps until the FSW clock reaches the requested time. *************************************** *************************************** (RQ) SAMD21-SEQ-006 *************************************** [ OK ] WaitUntil.SleepsUntilTime (0 ms) [ RUN ] WaitUntil.WakesOnExactTime *************************************** WAIT_UNTIL wakes when the FSW clock exactly equals the requested time. *************************************** *************************************** (RQ) SAMD21-SEQ-006 *************************************** [ OK ] WaitUntil.WakesOnExactTime (0 ms) [ RUN ] WaitUntil.PastResumesImmediately *************************************** WAIT_UNTIL whose requested time is already past resumes on the next schedIn tick. *************************************** *************************************** (RQ) SAMD21-SEQ-006 *************************************** [ OK ] WaitUntil.PastResumesImmediately (1 ms) [ RUN ] WaitUntil.MismatchedBaseNeverWakes *************************************** WAIT_UNTIL on a time base the FSW clock never reports never wakes. *************************************** *************************************** (RQ) SAMD21-SEQ-006 *************************************** [ OK ] WaitUntil.MismatchedBaseNeverWakes (1 ms) [----------] 4 tests from WaitUntil (3 ms total) [----------] 4 tests from RunOnError [ RUN ] RunOnError.StartsRecovery *************************************** RUN_ON_ERROR arms a recovery table that starts after a command failure. *************************************** *************************************** (RQ) SAMD21-SEQ-005 *************************************** [ OK ] RunOnError.StartsRecovery (1 ms) [ RUN ] RunOnError.NotTriggeredOnSuccess *************************************** RUN_ON_ERROR does not trigger when the sequence completes successfully. *************************************** *************************************** (RQ) SAMD21-SEQ-005 *************************************** [ OK ] RunOnError.NotTriggeredOnSuccess (1 ms) [ RUN ] RunOnError.ClearsPendingRun *************************************** Issuing RUN_ON_ERROR clears any pending normal RUN. *************************************** *************************************** (RQ) SAMD21-SEQ-005 *************************************** [ OK ] RunOnError.ClearsPendingRun (0 ms) [ RUN ] RunOnError.IsOneShot *************************************** The armed recovery is one-shot: a second failure does not re-trigger it. *************************************** *************************************** (RQ) SAMD21-SEQ-005 *************************************** [ OK ] RunOnError.IsOneShot (1 ms) [----------] 4 tests from RunOnError (4 ms total) [----------] 6 tests from Cancel [ RUN ] Cancel.WhileSleeping *************************************** CANCEL while a WAIT is sleeping stops the sleep; schedIn no longer dispatches. *************************************** *************************************** (RQ) SAMD21-SEQ-007 *************************************** [ OK ] Cancel.WhileSleeping (1 ms) [ RUN ] Cancel.WhileAwaitingResponse *************************************** CANCEL while awaiting a response stops execution; the late response is dropped as stray. *************************************** *************************************** (RQ) SAMD21-SEQ-007 *************************************** [ OK ] Cancel.WhileAwaitingResponse (1 ms) [ RUN ] Cancel.ClearsPendingRun *************************************** CANCEL clears a pending RUN so it does not start on the next activeIn. *************************************** *************************************** (RQ) SAMD21-SEQ-007 *************************************** [ OK ] Cancel.ClearsPendingRun (0 ms) [ RUN ] Cancel.ResetsToStart *************************************** A RUN after CANCEL re-executes the sequence from the first command. *************************************** *************************************** (RQ) SAMD21-SEQ-007 *************************************** [ OK ] Cancel.ResetsToStart (1 ms) [ RUN ] Cancel.WhileIdleNoOp *************************************** CANCEL while idle with nothing pending is a harmless no-op. *************************************** *************************************** (RQ) SAMD21-SEQ-007 *************************************** [ OK ] Cancel.WhileIdleNoOp (0 ms) [ RUN ] Cancel.ClearsRunOnError *************************************** CANCEL clears an armed RUN_ON_ERROR recovery table. *************************************** *************************************** (RQ) SAMD21-SEQ-007 *************************************** [ OK ] Cancel.ClearsRunOnError (0 ms) [----------] 6 tests from Cancel (6 ms total) [----------] Global test environment tear-down [==========] 27 tests from 5 test suites ran. (24 ms total) [ PASSED ] 27 tests.