1717using namespace modm ::platform;
1818
1919void
20- FdcanTest::setUp ()
20+ FdcanTest::testSendReceive ()
2121{
2222 Fdcan1::initialize<Board::SystemClock, 500_kbps, 1_pct>(9 , Fdcan1::Mode::TestInternalLoopback);
23-
2423 // receive all extended messages
2524 Fdcan1::setExtendedFilter (0 , Fdcan1::FilterConfig::Fifo1,
2625 modm::can::ExtendedIdentifier (0 ),
2726 modm::can::ExtendedMask (0 ));
28- }
2927
30- void
31- FdcanTest::testSendReceive ()
32- {
3328 modm::can::Message message{0x12345678 , 7 };
3429 constexpr std::string_view data = " \xDE\xAD\xBE\xEF\x12\x34\x56 " ;
3530 std::copy (std::begin (data), std::begin (data) + 7 , message.data );
@@ -51,6 +46,12 @@ FdcanTest::testSendReceive()
5146void
5247FdcanTest::testFilters ()
5348{
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+
5455 Fdcan1::setStandardFilter (27 , Fdcan1::FilterConfig::Fifo0,
5556 modm::can::StandardIdentifier (0x108 ),
5657 modm::can::StandardMask (0x1F8 ));
@@ -72,10 +73,20 @@ FdcanTest::testFilters()
7273void
7374FdcanTest::testBuffers ()
7475{
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+
7587 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 );
7990 for (uint_fast8_t dataIndex = 0 ; dataIndex < i; ++dataIndex) {
8091 message.data [dataIndex] = i;
8192 }
@@ -86,11 +97,11 @@ FdcanTest::testBuffers()
8697
8798 // try to receive same messages
8899 modm::can::Message receivedMessage;
89- for (uint_fast8_t i = 0 ; i <= 8 ; ++i) {
100+ for (uint_fast16_t i = 0 ; i <= numberOfMsgs ; ++i) {
90101 TEST_ASSERT_TRUE (Fdcan1::getMessage (receivedMessage));
91102
92103 TEST_ASSERT_EQUALS (receivedMessage.getIdentifier (), 0x4711u );
93- TEST_ASSERT_EQUALS (receivedMessage.getLength (), i );
104+ TEST_ASSERT_EQUALS (receivedMessage.getLength (), (i % 8 ) );
94105
95106 for (uint_fast8_t dataIndex = 0 ; dataIndex < i; ++dataIndex) {
96107 TEST_ASSERT_EQUALS (receivedMessage.data [dataIndex], i);
0 commit comments