GCC Code Coverage Report


Directory: lib/fprime-samd/fprime-samd/
File: Drv/UsartDriver/UsartDriverHardwareStub.cpp
Date: 2026-09-26 00:05:09
Exec Total Coverage
Lines: 0 31 0.0%
Functions: 0 6 0.0%
Branches: 0 18 0.0%

Line Branch Exec Source
1 // ======================================================================
2 // \title UsartDriverHardwareStub.cpp
3 // \author tumbar
4 // \brief Stub hardware implementation for USART peripheral (Linux/test builds)
5 //
6 // This file is compiled for Linux/test builds to enable unit testing.
7 // For SAMD21 target builds, UsartDriverHardware.cpp is used instead.
8 //
9 // The stub records the arguments of the last hardware call so unit tests can
10 // verify what the driver asked the peripheral to do without any real MCU.
11 // ======================================================================
12
13 #include <cstring>
14 #include "fprime-samd/Drv/UsartDriver/UsartDriverHardware.hpp"
15
16 namespace Samd21 {
17 namespace UsartHardware {
18
19 static StubState s_state = {};
20
21 ✗ StubState& getStubState() {
22 ✗ return s_state;
23 }
24
25 ✗ void resetStubState() {
26 // Assign a fresh value-initialized instance rather than memset: several
27 // members (e.g. SercomKind) are autocoded classes with vtables that
28 // memset would corrupt.
29 ✗ s_state = StubState{};
30 ✗ }
31
32 ✗ void UsartHal::configure(SercomKind sercom,
33 UsartDriver::RxPinOut rx,
34 UsartDriver::TxPinOut tx,
35 UsartDriver::ClockMode clock,
36 UsartDriver::CommunicationMode mode,
37 UsartDriver::BaudRate baud_rate,
38 UsartDriver::DataOrder data_order,
39 UsartDriver::DataBits data_bits,
40 UsartDriver::StopBits stop_bits,
41 UsartDriver::Parity parity) {
42 ✗ s_state.configured = true;
43 ✗ s_state.configure_count++;
44 ✗ s_state.sercom = sercom;
45 ✗ s_state.rx = rx;
46 ✗ s_state.tx = tx;
47 ✗ s_state.clock = clock;
48 ✗ s_state.mode = mode;
49 ✗ s_state.baud_rate = baud_rate;
50 ✗ s_state.data_order = data_order;
51 ✗ s_state.data_bits = data_bits;
52 ✗ s_state.stop_bits = stop_bits;
53 ✗ s_state.parity = parity;
54 ✗ }
55
56 ✗ void UsartHal::sendSync(SercomKind sercom, const U8* data, U32 size) {
57 ✗ s_state.send_sync_count++;
58 ✗ s_state.send_sync_sercom = sercom;
59 ✗ s_state.send_sync_size = size;
60 ✗ if (data != nullptr && size <= sizeof(s_state.send_sync_data)) {
61 ✗ std::memcpy(s_state.send_sync_data, data, size);
62 }
63 ✗ }
64
65 ✗ U32 UsartHal::getDataRegisterAddress(SercomKind sercom) {
66 ✗ return s_state.data_register_address;
67 }
68
69 ✗ bool UsartHal::checkAndClearRxOverflow(SercomKind sercom) {
70 ✗ s_state.rx_overflow_check_count++;
71 ✗ return s_state.rx_overflow;
72 }
73
74 } // namespace UsartHardware
75 } // namespace Samd21
76