17
17
using namespace modm ::platform;
18
18
19
19
void
20
- FdcanTest::setUp ()
20
+ FdcanTest::testSendReceive ()
21
21
{
22
22
Fdcan1::initialize<Board::SystemClock, 500_kbps, 1_pct>(9 , Fdcan1::Mode::TestInternalLoopback);
23
-
24
23
// receive all extended messages
25
24
Fdcan1::setExtendedFilter (0 , Fdcan1::FilterConfig::Fifo1,
26
25
modm::can::ExtendedIdentifier (0 ),
27
26
modm::can::ExtendedMask (0 ));
28
- }
29
27
30
- void
31
- FdcanTest::testSendReceive ()
32
- {
33
28
modm::can::Message message{0x12345678 , 7 };
34
29
constexpr std::string_view data = " \xDE\xAD\xBE\xEF\x12\x34\x56 " ;
35
30
std::copy (std::begin (data), std::begin (data) + 7 , message.data );
@@ -51,6 +46,12 @@ FdcanTest::testSendReceive()
51
46
void
52
47
FdcanTest::testFilters ()
53
48
{
49
+ Fdcan1::initialize<Board::SystemClock, 500_kbps, 1_pct>(9 , Fdcan1::Mode::TestInternalLoopback);
50
+ // receive all extended messages
51
+ Fdcan1::setExtendedFilter (0 , Fdcan1::FilterConfig::Fifo1,
52
+ modm::can::ExtendedIdentifier (0 ),
53
+ modm::can::ExtendedMask (0 ));
54
+
54
55
Fdcan1::setStandardFilter (27 , Fdcan1::FilterConfig::Fifo0,
55
56
modm::can::StandardIdentifier (0x108 ),
56
57
modm::can::StandardMask (0x1F8 ));
@@ -72,10 +73,20 @@ FdcanTest::testFilters()
72
73
void
73
74
FdcanTest::testBuffers ()
74
75
{
76
+ Fdcan1::initialize<Board::SystemClock, 500_kbps, 1_pct>(9 , Fdcan1::Mode::TestInternalLoopback);
77
+ // receive all extended messages
78
+ Fdcan1::setExtendedFilter (0 , Fdcan1::FilterConfig::Fifo1,
79
+ modm::can::ExtendedIdentifier (0 ),
80
+ modm::can::ExtendedMask (0 ));
81
+
82
+ // send (RxBufferSize + 2) messages, exceeds internal peripheral queue size (3
83
+ // msgs) as well as the software queue size, but not both added together. So
84
+ // no message should get lost.
85
+ const uint_fast16_t numberOfMsgs = Fdcan1::RxBufferSize + 2 ;
86
+
75
87
modm::can::Message message{0x4711 , 0 };
76
- // send 8 messages, exceeds internal peripheral queue size
77
- for (uint_fast8_t i = 0 ; i <= 8 ; ++i) {
78
- message.setLength (i);
88
+ for (uint_fast16_t i = 0 ; i <= numberOfMsgs; ++i) {
89
+ message.setLength (i % 8 );
79
90
for (uint_fast8_t dataIndex = 0 ; dataIndex < i; ++dataIndex) {
80
91
message.data [dataIndex] = i;
81
92
}
@@ -86,11 +97,11 @@ FdcanTest::testBuffers()
86
97
87
98
// try to receive same messages
88
99
modm::can::Message receivedMessage;
89
- for (uint_fast8_t i = 0 ; i <= 8 ; ++i) {
100
+ for (uint_fast16_t i = 0 ; i <= numberOfMsgs ; ++i) {
90
101
TEST_ASSERT_TRUE (Fdcan1::getMessage (receivedMessage));
91
102
92
103
TEST_ASSERT_EQUALS (receivedMessage.getIdentifier (), 0x4711u );
93
- TEST_ASSERT_EQUALS (receivedMessage.getLength (), i );
104
+ TEST_ASSERT_EQUALS (receivedMessage.getLength (), (i % 8 ) );
94
105
95
106
for (uint_fast8_t dataIndex = 0 ; dataIndex < i; ++dataIndex) {
96
107
TEST_ASSERT_EQUALS (receivedMessage.data [dataIndex], i);
0 commit comments