Skip to content

Commit 59a6777

Browse files
committed
More corrections
1 parent d1f9127 commit 59a6777

3 files changed

Lines changed: 50 additions & 40 deletions

File tree

src/coreLib/TransmissionScheduler.cpp

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
#include "TransmissionScheduler.hpp"
22
#include "utils.h"
33

4-
TransmittionScheduler::TransmittionScheduler(): mNextId(0), mSchedule() {}
4+
// STL
5+
#include <algorithm>
56

6-
TransmittionScheduler::~TransmittionScheduler() {}
7+
TransmissionScheduler::TransmissionScheduler(): mNextId(0), mSchedule() {}
78

8-
uint32_t TransmittionScheduler::add(std::shared_ptr<Transmission> tx)
9+
TransmissionScheduler::~TransmissionScheduler() {}
10+
11+
uint32_t TransmissionScheduler::add(std::shared_ptr<Transmission> tx)
912
{
1013
// Keep iterating until correct position is found
1114
// For this to be the right position, it either needs to start and end before the next
@@ -40,7 +43,7 @@ uint32_t TransmittionScheduler::add(std::shared_ptr<Transmission> tx)
4043
return tx->transmissionId;
4144
}
4245

43-
uint32_t TransmittionScheduler::add(uint8_t priority,
46+
uint32_t TransmissionScheduler::add(uint8_t priority,
4447
uint64_t txTime,
4548
MaplePacket& packet,
4649
bool expectResponse,
@@ -66,7 +69,7 @@ uint32_t TransmittionScheduler::add(uint8_t priority,
6669
return add(tx);
6770
}
6871

69-
std::shared_ptr<const TransmittionScheduler::Transmission> TransmittionScheduler::popNext(uint64_t time)
72+
std::shared_ptr<const TransmissionScheduler::Transmission> TransmissionScheduler::popNext(uint64_t time)
7073
{
7174
std::shared_ptr<Transmission> item = nullptr;
7275
if (!mSchedule.empty())
@@ -94,24 +97,31 @@ std::shared_ptr<const TransmittionScheduler::Transmission> TransmittionScheduler
9497
// It's easier to check here than to rearrange schedule every time a higher priority
9598
// transmission preempts a lower priority one.
9699
std::list<std::shared_ptr<Transmission>>::iterator iter = mSchedule.begin();
100+
std::list<uint8_t> recipientAddrs;
101+
recipientAddrs.push_back((*iter)->packet->getFrameRecipientAddr());
97102
++iter;
98103
while(iter != mSchedule.end())
99104
{
100105
if (time >= (*iter)->nextTxTimeUs
101-
&& (*iter)->getNextCompletionTime() < (*mSchedule.begin())->nextTxTimeUs)
106+
&& (*iter)->getNextCompletionTime() < (*mSchedule.begin())->nextTxTimeUs
107+
// Ensure the order is preserved for each recipient address
108+
&& std::find(recipientAddrs.begin(),
109+
recipientAddrs.end(),
110+
(*iter)->packet->getFrameRecipientAddr()) == recipientAddrs.end())
102111
{
103112
item = (*iter);
104113
mSchedule.erase(iter);
105114
break;
106115
}
116+
recipientAddrs.push_back((*iter)->packet->getFrameRecipientAddr());
107117
++iter;
108118
}
109119
}
110120
}
111121
return item;
112122
}
113123

114-
uint32_t TransmittionScheduler::cancelById(uint32_t transmissionId)
124+
uint32_t TransmissionScheduler::cancelById(uint32_t transmissionId)
115125
{
116126
uint32_t n = 0;
117127
std::list<std::shared_ptr<Transmission>>::iterator iter = mSchedule.begin();
@@ -130,7 +140,7 @@ uint32_t TransmittionScheduler::cancelById(uint32_t transmissionId)
130140
return n;
131141
}
132142

133-
uint32_t TransmittionScheduler::cancelByRecipient(uint8_t recipientAddr)
143+
uint32_t TransmissionScheduler::cancelByRecipient(uint8_t recipientAddr)
134144
{
135145
uint32_t n = 0;
136146
std::list<std::shared_ptr<Transmission>>::iterator iter = mSchedule.begin();
@@ -149,7 +159,7 @@ uint32_t TransmittionScheduler::cancelByRecipient(uint8_t recipientAddr)
149159
return n;
150160
}
151161

152-
uint32_t TransmittionScheduler::cancelAll()
162+
uint32_t TransmissionScheduler::cancelAll()
153163
{
154164
uint32_t n = mSchedule.size();
155165
mSchedule.clear();

src/coreLib/TransmissionScheduler.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include <list>
66
#include <memory>
77

8-
class TransmittionScheduler
8+
class TransmissionScheduler
99
{
1010
public:
1111
//! Transmission definition
@@ -46,10 +46,10 @@ class TransmittionScheduler
4646

4747
public:
4848
//! Default constructor
49-
TransmittionScheduler();
49+
TransmissionScheduler();
5050

5151
//! Virtual destructor
52-
virtual ~TransmittionScheduler();
52+
virtual ~TransmissionScheduler();
5353

5454
//! Add a transmission to the schedule
5555
//! @param[in] priority priority of this transmission (0 is highest priority)

src/test/TransmissionSchedulerTests.cpp

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ using ::testing::Return;
1616
using ::testing::SetArgReferee;
1717
using ::testing::DoAll;
1818

19-
class TransmittionSchedulerUnitTest : public TransmittionScheduler
19+
class TransmissionSchedulerUnitTest : public TransmissionScheduler
2020
{
2121
public:
2222
std::list<std::shared_ptr<Transmission>>& getSchedule()
@@ -31,7 +31,7 @@ class TransmissionScheduleTest : public ::testing::Test
3131
TransmissionScheduleTest() {}
3232

3333
protected:
34-
TransmittionSchedulerUnitTest scheduler;
34+
TransmissionSchedulerUnitTest scheduler;
3535
};
3636

3737
TEST_F(TransmissionScheduleTest, multiAdd)
@@ -93,10 +93,10 @@ TEST_F(TransmissionScheduleTest, multiAdd)
9393
readTimeoutUs);
9494
EXPECT_EQ(id4, 3);
9595

96-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
96+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
9797

9898
ASSERT_EQ(schedule.size(), 4);
99-
std::list<std::shared_ptr<TransmittionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
99+
std::list<std::shared_ptr<TransmissionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
100100
EXPECT_EQ((*iter++)->transmissionId, 2);
101101
EXPECT_EQ((*iter++)->transmissionId, 3);
102102
EXPECT_EQ((*iter++)->transmissionId, 0);
@@ -144,10 +144,10 @@ TEST_F(TransmissionScheduleTest, multiAddBoundary1)
144144
readTimeoutUs);
145145
EXPECT_EQ(id3, 2);
146146

147-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
147+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
148148

149149
ASSERT_EQ(schedule.size(), 3);
150-
std::list<std::shared_ptr<TransmittionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
150+
std::list<std::shared_ptr<TransmissionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
151151
EXPECT_EQ((*iter++)->transmissionId, 0);
152152
EXPECT_EQ((*iter++)->transmissionId, 2);
153153
EXPECT_EQ((*iter++)->transmissionId, 1);
@@ -194,10 +194,10 @@ TEST_F(TransmissionScheduleTest, multiAddBoundary2)
194194
readTimeoutUs);
195195
EXPECT_EQ(id3, 2);
196196

197-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
197+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
198198

199199
ASSERT_EQ(schedule.size(), 3);
200-
std::list<std::shared_ptr<TransmittionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
200+
std::list<std::shared_ptr<TransmissionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
201201
EXPECT_EQ((*iter++)->transmissionId, 1);
202202
EXPECT_EQ((*iter++)->transmissionId, 0);
203203
EXPECT_EQ((*iter++)->transmissionId, 2);
@@ -246,10 +246,10 @@ TEST_F(TransmissionScheduleTest, multiAddBoundary3)
246246
readTimeoutUs);
247247
EXPECT_EQ(id3, 2);
248248

249-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
249+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
250250

251251
ASSERT_EQ(schedule.size(), 3);
252-
std::list<std::shared_ptr<TransmittionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
252+
std::list<std::shared_ptr<TransmissionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
253253
EXPECT_EQ((*iter++)->transmissionId, 2);
254254
EXPECT_EQ((*iter++)->transmissionId, 0);
255255
EXPECT_EQ((*iter++)->transmissionId, 1);
@@ -303,28 +303,28 @@ TEST_F(TransmissionSchedulePopTestA, popTestNull)
303303
{
304304
EXPECT_EQ(scheduler.popNext(0), nullptr);
305305

306-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
306+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
307307

308308
ASSERT_EQ(schedule.size(), 3);
309-
std::list<std::shared_ptr<TransmittionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
309+
std::list<std::shared_ptr<TransmissionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
310310
EXPECT_EQ((*iter++)->transmissionId, 0);
311311
EXPECT_EQ((*iter++)->transmissionId, 1);
312312
EXPECT_EQ((*iter++)->transmissionId, 2);
313313
}
314314

315315
TEST_F(TransmissionSchedulePopTestA, popTestAutoReload1)
316316
{
317-
std::shared_ptr<const TransmittionScheduler::Transmission> item = scheduler.popNext(1);
317+
std::shared_ptr<const TransmissionScheduler::Transmission> item = scheduler.popNext(1);
318318
ASSERT_NE(item, nullptr);
319319
EXPECT_EQ(item->packet->getFrameCommand(), 0x11);
320320
item = scheduler.popNext(2);
321321
ASSERT_NE(item, nullptr);
322322
EXPECT_EQ(item->packet->getFrameCommand(), 0x22);
323323

324-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
324+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
325325

326326
ASSERT_EQ(schedule.size(), 2);
327-
std::list<std::shared_ptr<TransmittionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
327+
std::list<std::shared_ptr<TransmissionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
328328
EXPECT_EQ((*iter++)->transmissionId, 2);
329329
// This one should auto reload
330330
EXPECT_EQ((*iter)->transmissionId, 1);
@@ -333,17 +333,17 @@ TEST_F(TransmissionSchedulePopTestA, popTestAutoReload1)
333333

334334
TEST_F(TransmissionSchedulePopTestA, popTestAutoReload2)
335335
{
336-
std::shared_ptr<const TransmittionScheduler::Transmission> item = scheduler.popNext(1);
336+
std::shared_ptr<const TransmissionScheduler::Transmission> item = scheduler.popNext(1);
337337
ASSERT_NE(item, nullptr);
338338
EXPECT_EQ(item->packet->getFrameCommand(), 0x11);
339339
item = scheduler.popNext(16003);
340340
ASSERT_NE(item, nullptr);
341341
EXPECT_EQ(item->packet->getFrameCommand(), 0x22);
342342

343-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
343+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
344344

345345
ASSERT_EQ(schedule.size(), 2);
346-
std::list<std::shared_ptr<TransmittionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
346+
std::list<std::shared_ptr<TransmissionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
347347
EXPECT_EQ((*iter++)->transmissionId, 2);
348348
// This one should auto reload
349349
EXPECT_EQ((*iter)->transmissionId, 1);
@@ -401,7 +401,7 @@ class TransmissionSchedulePopTestB : public TransmissionScheduleTest
401401
TEST_F(TransmissionSchedulePopTestB, popTestAutoReload2)
402402
{
403403
// Transmission 2 should be bumped up to be executed before 0 because 0 yeileded to 1
404-
std::shared_ptr<const TransmittionScheduler::Transmission> item = scheduler.popNext(2);
404+
std::shared_ptr<const TransmissionScheduler::Transmission> item = scheduler.popNext(2);
405405
ASSERT_NE(item, nullptr);
406406
EXPECT_EQ(item->transmissionId, 2);
407407
}
@@ -416,10 +416,10 @@ TEST_F(TransmissionScheduleCancelTest, cancelByIdNotFound)
416416
{
417417
EXPECT_EQ(scheduler.cancelById(100), 0);
418418

419-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
419+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
420420

421421
ASSERT_EQ(schedule.size(), 3);
422-
std::list<std::shared_ptr<TransmittionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
422+
std::list<std::shared_ptr<TransmissionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
423423
EXPECT_EQ((*iter++)->transmissionId, 0);
424424
EXPECT_EQ((*iter++)->transmissionId, 1);
425425
EXPECT_EQ((*iter++)->transmissionId, 2);
@@ -429,10 +429,10 @@ TEST_F(TransmissionScheduleCancelTest, cancelByIdFound)
429429
{
430430
EXPECT_EQ(scheduler.cancelById(1), 1);
431431

432-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
432+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
433433

434434
ASSERT_EQ(schedule.size(), 2);
435-
std::list<std::shared_ptr<TransmittionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
435+
std::list<std::shared_ptr<TransmissionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
436436
EXPECT_EQ((*iter++)->transmissionId, 0);
437437
EXPECT_EQ((*iter++)->transmissionId, 2);
438438
}
@@ -441,10 +441,10 @@ TEST_F(TransmissionScheduleCancelTest, cancelByRecipientNotFound)
441441
{
442442
EXPECT_EQ(scheduler.cancelByRecipient(100), 0);
443443

444-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
444+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
445445

446446
ASSERT_EQ(schedule.size(), 3);
447-
std::list<std::shared_ptr<TransmittionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
447+
std::list<std::shared_ptr<TransmissionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
448448
EXPECT_EQ((*iter++)->transmissionId, 0);
449449
EXPECT_EQ((*iter++)->transmissionId, 1);
450450
EXPECT_EQ((*iter++)->transmissionId, 2);
@@ -454,18 +454,18 @@ TEST_F(TransmissionScheduleCancelTest, cancelByRecipientFound)
454454
{
455455
EXPECT_EQ(scheduler.cancelByRecipient(0x02), 2);
456456

457-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
457+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
458458

459459
ASSERT_EQ(schedule.size(), 1);
460-
std::list<std::shared_ptr<TransmittionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
460+
std::list<std::shared_ptr<TransmissionScheduler::Transmission>>::const_iterator iter = schedule.cbegin();
461461
EXPECT_EQ((*iter++)->transmissionId, 0);
462462
}
463463

464464
TEST_F(TransmissionScheduleCancelTest, cancelAll)
465465
{
466466
EXPECT_EQ(scheduler.cancelAll(), 3);
467467

468-
const std::list<std::shared_ptr<TransmittionScheduler::Transmission>> schedule = scheduler.getSchedule();
468+
const std::list<std::shared_ptr<TransmissionScheduler::Transmission>> schedule = scheduler.getSchedule();
469469

470470
ASSERT_EQ(schedule.size(), 0);
471471
}

0 commit comments

Comments
 (0)