Commit 4eb18d499dfcb7bdc0a50fa9ff8378a19e0d0a11

Authored by Arkadiusz Materek
1 parent f2151106

Optimize, Clean up, Refactor

src/dali/controller/bus.cpp
@@ -16,17 +16,17 @@ namespace dali { @@ -16,17 +16,17 @@ namespace dali {
16 namespace controller { 16 namespace controller {
17 namespace { 17 namespace {
18 18
19 -const uint64_t kCommandRepeatTimeout = 100; 19 +const Time kCommandRepeatTimeout = 100;
20 20
21 } 21 }
22 22
23 -Bus::Bus(IBus* bus) : 23 +Bus::Bus(IBusDriver* bus, Client* client) :
24 mBus(bus), 24 mBus(bus),
25 - mState(IBus::IBusState::UNKNOWN),  
26 - mListener(nullptr), 25 + mClient(client),
  26 + mState(IBusDriver::IBusState::UNKNOWN),
27 mLastCommand(Command::INVALID), 27 mLastCommand(Command::INVALID),
28 mCommandRepeatCount(0), 28 mCommandRepeatCount(0),
29 - mLastCommandTimeMs(0) { 29 + mLastCommandTime(0) {
30 mBus->registerClient(this); 30 mBus->registerClient(this);
31 } 31 }
32 32
@@ -34,138 +34,128 @@ Bus::~Bus() { @@ -34,138 +34,128 @@ Bus::~Bus() {
34 mBus->unregisterClient(this); 34 mBus->unregisterClient(this);
35 } 35 }
36 36
37 -void Bus::setListener(Listener* listener) {  
38 - mListener = listener;  
39 -} 37 +void Bus::onDataReceived(Time time, uint16_t data) {
40 38
41 -void Bus::onDataReceived(uint64_t timeMs, uint16_t data) {  
42 - Command command;  
43 uint8_t param; 39 uint8_t param;
44 - if (filterAddress(data, &command, &param) != Status::OK) {  
45 - return; // Status::INVALID; 40 + Command command = extractCommand(data, &param);
  41 + if (command == Command::INVALID) {
  42 + return;
46 } 43 }
47 - if (command != Command::INVALID) { // should be always true  
48 - if (mLastCommand == Command::INVALID) { 44 + if (mLastCommand == Command::INVALID) {
  45 + mCommandRepeatCount = 0;
  46 + mLastCommandTime = time;
  47 + Status status = mClient->handleCommand(mCommandRepeatCount, command, param);
  48 + if (status == Status::REPEAT_REQUIRED) {
  49 + mLastCommand = command;
  50 + return;
  51 + } else {
  52 + mLastCommand = Command::INVALID;
  53 + return;
  54 + }
  55 + } else if (mLastCommand == command) {
  56 + if (time - mLastCommandTime < kCommandRepeatTimeout) {
  57 + mCommandRepeatCount++;
  58 + } else {
  59 + mLastCommand = Command::INVALID;
49 mCommandRepeatCount = 0; 60 mCommandRepeatCount = 0;
50 - mLastCommandTimeMs = timeMs;  
51 - Status status = mListener->handleCommand(mCommandRepeatCount, command, param);  
52 - if (status == Status::REPEAT_REQUIRED) {  
53 - mLastCommand = command;  
54 - return; // Status::OK;  
55 - } else {  
56 - mLastCommand = Command::INVALID;  
57 - return; // status;  
58 - }  
59 - } else if (mLastCommand == command) {  
60 - if (timeMs - mLastCommandTimeMs < kCommandRepeatTimeout) {  
61 - mCommandRepeatCount++;  
62 - } else {  
63 - mLastCommand = Command::INVALID;  
64 - mCommandRepeatCount = 0;  
65 - }  
66 - mLastCommandTimeMs = timeMs;  
67 - Status status = mListener->handleCommand(mCommandRepeatCount, command, param); 61 + }
  62 + mLastCommandTime = time;
  63 + Status status = mClient->handleCommand(mCommandRepeatCount, command, param);
  64 + if (status == Status::REPEAT_REQUIRED) {
  65 + mLastCommand = command;
  66 + return;
  67 + } else {
  68 + mLastCommand = Command::INVALID;
  69 + return;
  70 + }
  71 + } else { // (mLastCommand != Command::INVALID) || (mLastCommand != cmd)
  72 + mLastCommand = Command::INVALID;
  73 + mCommandRepeatCount = 0;
  74 + mLastCommandTime = time;
  75 + if (time - mLastCommandTime < kCommandRepeatTimeout) {
  76 + mClient->handleIgnoredCommand(command, param);
  77 + } else {
  78 + Status status = mClient->handleCommand(mCommandRepeatCount, command, param);
68 if (status == Status::REPEAT_REQUIRED) { 79 if (status == Status::REPEAT_REQUIRED) {
69 mLastCommand = command; 80 mLastCommand = command;
70 - return; // Status::OK;  
71 - } else {  
72 - mLastCommand = Command::INVALID;  
73 - return; // status;  
74 - }  
75 - } else { // (mLastCommand != Command::INVALID) || (mLastCommand != cmd)  
76 - mLastCommand = Command::INVALID;  
77 - mCommandRepeatCount = 0;  
78 - if (timeMs - mLastCommandTimeMs < kCommandRepeatTimeout) {  
79 - mLastCommandTimeMs = timeMs;  
80 - mListener->handleIgnoredCommand(command, param); 81 + return;
81 } else { 82 } else {
82 - mLastCommandTimeMs = timeMs;  
83 - Status status = mListener->handleCommand(mCommandRepeatCount, command, param);  
84 - if (status == Status::REPEAT_REQUIRED) {  
85 - mLastCommand = command;  
86 - return; // Status::OK;  
87 - } else {  
88 - return; // status;  
89 - } 83 + return;
90 } 84 }
91 } 85 }
92 } 86 }
93 - return; // Status::INVALID;  
94 } 87 }
95 88
96 -void Bus::onBusStateChanged(IBus::IBusState state) { 89 +void Bus::onBusStateChanged(IBusDriver::IBusState state) {
97 if (mState != state) { 90 if (mState != state) {
98 mState = state; 91 mState = state;
99 - if (state == IBus::IBusState::DISCONNECTED) {  
100 - mListener->onBusDisconnected(); 92 + if (state == IBusDriver::IBusState::DISCONNECTED) {
  93 + mClient->onBusDisconnected();
101 } 94 }
102 } 95 }
103 } 96 }
104 97
105 -Status Bus::sendAck(uint8_t ack) {  
106 - return mBus->sendAck(ack);  
107 -}  
108 -  
109 -Status Bus::filterAddress(uint16_t data, Command* command, uint8_t* param) {  
110 - *param = (uint8_t) (data & 0xff);  
111 - *command = Command::INVALID; 98 +Command Bus::extractCommand(uint16_t data, uint8_t* commandParam) {
  99 + Command command = Command::INVALID;
  100 + uint8_t param = (uint8_t) (data & 0xff);
112 uint8_t addr = (uint8_t) (data >> 8); 101 uint8_t addr = (uint8_t) (data >> 8);
113 bool cmdBitSet = ((addr & 0x01) != 0); 102 bool cmdBitSet = ((addr & 0x01) != 0);
114 if ((addr & 0xfe) == 0xfe) { 103 if ((addr & 0xfe) == 0xfe) {
115 // Broadcast 104 // Broadcast
116 if (cmdBitSet) { 105 if (cmdBitSet) {
117 - *command = (Command) *param;  
118 - *param = 0xff; 106 + command = (Command) param;
  107 + param = 0xff;
119 } else { 108 } else {
120 - *command = Command::DIRECT_POWER_CONTROL; 109 + command = Command::DIRECT_POWER_CONTROL;
121 } 110 }
122 } else if ((addr & 0x80) == 0) { 111 } else if ((addr & 0x80) == 0) {
123 // Short address 112 // Short address
124 addr >>= 1; 113 addr >>= 1;
125 - uint8_t myAddr = mListener->getShortAddr() >> 1; 114 + uint8_t myAddr = mClient->getShortAddr() >> 1;
126 if (cmdBitSet) { 115 if (cmdBitSet) {
127 - *command = (Command) *param;  
128 - *param = 0xff; 116 + command = (Command) param;
  117 + param = 0xff;
129 } else { 118 } else {
130 - *command = Command::DIRECT_POWER_CONTROL; 119 + command = Command::DIRECT_POWER_CONTROL;
131 } 120 }
132 if (addr != myAddr) { 121 if (addr != myAddr) {
133 - return Status::INVALID; 122 + return Command::INVALID;
134 } 123 }
135 } else if ((addr & 0x60) == 0) { 124 } else if ((addr & 0x60) == 0) {
136 // Group address 125 // Group address
137 uint8_t group = (addr >> 1) & 0x0f; 126 uint8_t group = (addr >> 1) & 0x0f;
138 - uint16_t groups = mListener->getGroups(); 127 + uint16_t groups = mClient->getGroups();
139 if (cmdBitSet) { 128 if (cmdBitSet) {
140 - *command = (Command) *param;  
141 - *param = 0xff; 129 + command = (Command) param;
  130 + param = 0xff;
142 } else { 131 } else {
143 - *command = Command::DIRECT_POWER_CONTROL; 132 + command = Command::DIRECT_POWER_CONTROL;
144 } 133 }
145 if ((groups & (1 << group)) == 0) { 134 if ((groups & (1 << group)) == 0) {
146 - return Status::INVALID; 135 + return Command::INVALID;
147 } 136 }
148 } else { 137 } else {
149 - *command = (Command) ((uint16_t) Command::_SPECIAL_COMMAND + addr);  
150 - if (*command == Command::INITIALISE) {  
151 - uint8_t myAddr = mListener->getShortAddr() >> 1;  
152 - switch (*param) { 138 + command = (Command) ((uint16_t) Command::_SPECIAL_COMMAND + addr);
  139 + if (command == Command::INITIALISE) {
  140 + uint8_t myAddr = mClient->getShortAddr() >> 1;
  141 + switch (param) {
153 case 0x00: // All control gear shall react 142 case 0x00: // All control gear shall react
154 break; 143 break;
155 case 0xff: // Control gear without short address shall react 144 case 0xff: // Control gear without short address shall react
156 if (myAddr <= DALI_ADDR_MAX) { 145 if (myAddr <= DALI_ADDR_MAX) {
157 - return Status::INVALID; 146 + return Command::INVALID;
158 } 147 }
159 break; 148 break;
160 default: // Control gear with the address AAAAAAb shall react 149 default: // Control gear with the address AAAAAAb shall react
161 - if (myAddr != (*param >> 1)) {  
162 - return Status::INVALID; 150 + if (myAddr != (param >> 1)) {
  151 + return Command::INVALID;
163 } 152 }
164 break; 153 break;
165 } 154 }
166 } 155 }
167 } 156 }
168 - return Status::OK; 157 + *commandParam = param;
  158 + return command;
169 } 159 }
170 160
171 } // namespace controller 161 } // namespace controller
src/dali/controller/bus.hpp
@@ -16,10 +16,10 @@ @@ -16,10 +16,10 @@
16 namespace dali { 16 namespace dali {
17 namespace controller { 17 namespace controller {
18 18
19 -class Bus: public IBus::IBusClient { 19 +class Bus: public IBusDriver::IBusClient {
20 public: 20 public:
21 21
22 - class Listener { 22 + class Client {
23 public: 23 public:
24 virtual uint8_t getShortAddr() = 0; 24 virtual uint8_t getShortAddr() = 0;
25 virtual uint16_t getGroups() = 0; 25 virtual uint16_t getGroups() = 0;
@@ -28,31 +28,27 @@ public: @@ -28,31 +28,27 @@ public:
28 virtual void onBusDisconnected() = 0; 28 virtual void onBusDisconnected() = 0;
29 }; 29 };
30 30
31 - explicit Bus(IBus* bus); 31 + explicit Bus(IBusDriver* bus, Client* client);
32 virtual ~Bus(); 32 virtual ~Bus();
33 33
34 - void setListener(Listener* listener); 34 + Status sendAck(uint8_t ack) { return mBus->sendAck(ack); }
  35 + Time getLastCommandTime() { return mLastCommandTime; }
35 36
36 - void onDataReceived(uint64_t timeMs, uint16_t data) override;  
37 - void onBusStateChanged(IBus::IBusState state) override;  
38 -  
39 - Status sendAck(uint8_t ack);  
40 - uint64_t getLastCommandTimeMs() {  
41 - return mLastCommandTimeMs;  
42 - } 37 + void onDataReceived(Time time, uint16_t data) override;
  38 + void onBusStateChanged(IBusDriver::IBusState state) override;
43 39
44 private: 40 private:
45 Bus(const Bus& other) = delete; 41 Bus(const Bus& other) = delete;
46 Bus& operator=(const Bus&) = delete; 42 Bus& operator=(const Bus&) = delete;
47 43
48 - Status filterAddress(uint16_t data, Command* command, uint8_t* param); 44 + Command extractCommand(uint16_t data, uint8_t* param);
49 45
50 - IBus* const mBus;  
51 - IBus::IBusState mState;  
52 - Listener* mListener; 46 + IBusDriver* const mBus;
  47 + Client* mClient;
  48 + IBusDriver::IBusState mState;
53 Command mLastCommand; 49 Command mLastCommand;
54 uint16_t mCommandRepeatCount; 50 uint16_t mCommandRepeatCount;
55 - uint64_t mLastCommandTimeMs; 51 + Time mLastCommandTime;
56 }; 52 };
57 53
58 } // namespace controller 54 } // namespace controller
src/dali/controller/initialization.hpp
@@ -56,7 +56,7 @@ private: @@ -56,7 +56,7 @@ private:
56 56
57 ITimer* const mTimer; 57 ITimer* const mTimer;
58 Memory* const mMemoryController; 58 Memory* const mMemoryController;
59 - uint64_t mInitializeTime; 59 + Time mInitializeTime;
60 bool mInitialized; 60 bool mInitialized;
61 bool mWithdraw; 61 bool mWithdraw;
62 Selection mSelected; 62 Selection mSelected;
src/dali/controller/lamp.cpp
@@ -40,10 +40,6 @@ void Lamp::onReset() { @@ -40,10 +40,6 @@ void Lamp::onReset() {
40 mIsPowerSet = true; 40 mIsPowerSet = true;
41 } 41 }
42 42
43 -bool Lamp::isPowerOn() {  
44 - return (mLamp->getLevel() > 0);  
45 -}  
46 -  
47 bool Lamp::isFailure() { 43 bool Lamp::isFailure() {
48 switch (mLampState) { 44 switch (mLampState) {
49 case ILamp::ILampState::DISCONNECTED: 45 case ILamp::ILampState::DISCONNECTED:
@@ -54,18 +50,6 @@ bool Lamp::isFailure() { @@ -54,18 +50,6 @@ bool Lamp::isFailure() {
54 } 50 }
55 } 51 }
56 52
57 -bool Lamp::isFading() {  
58 - return mLamp->isFading();  
59 -}  
60 -  
61 -bool Lamp::isLimitError() {  
62 - return mLimitError;  
63 -}  
64 -  
65 -bool Lamp::isPowerSet() {  
66 - return mIsPowerSet;  
67 -}  
68 -  
69 uint8_t Lamp::getLevel() { 53 uint8_t Lamp::getLevel() {
70 if ((mMode == Mode::NORMAL) && (mLampState == ILamp::ILampState::OK)) { 54 if ((mMode == Mode::NORMAL) && (mLampState == ILamp::ILampState::OK)) {
71 return driver2level(mLamp->getLevel(), mMemoryController->getMinLevel()); 55 return driver2level(mLamp->getLevel(), mMemoryController->getMinLevel());
@@ -115,15 +99,7 @@ Status Lamp::abortFading() { @@ -115,15 +99,7 @@ Status Lamp::abortFading() {
115 return Status::OK; 99 return Status::OK;
116 } 100 }
117 101
118 -void Lamp::setListener(Listener* listener) {  
119 - mListener = listener;  
120 -}  
121 -  
122 -void Lamp::notifyPowerDown() {  
123 - mLamp->setLevel(0, 0);  
124 -}  
125 -  
126 -Status Lamp::powerDirect(uint8_t level, uint64_t time) { 102 +Status Lamp::powerDirect(uint8_t level, Time time) {
127 if (level == DALI_MASK) { 103 if (level == DALI_MASK) {
128 mLamp->abortFading(); 104 mLamp->abortFading();
129 return Status::OK; 105 return Status::OK;
@@ -259,12 +235,12 @@ Status Lamp::powerRecallFaliureLevel() { @@ -259,12 +235,12 @@ Status Lamp::powerRecallFaliureLevel() {
259 return setLevel(level, 0); 235 return setLevel(level, 0);
260 } 236 }
261 237
262 -Status Lamp::enableDapcSequence(uint64_t time) { 238 +Status Lamp::enableDapcSequence(Time time) {
263 mDapcTime = time; 239 mDapcTime = time;
264 return Status::OK; 240 return Status::OK;
265 } 241 }
266 242
267 -Status Lamp::dapcSequence(uint8_t level, uint64_t time) { 243 +Status Lamp::dapcSequence(uint8_t level, Time time) {
268 onPowerCommand(); 244 onPowerCommand();
269 mDapcTime = time; 245 mDapcTime = time;
270 uint8_t actualLevel = getLevel(); 246 uint8_t actualLevel = getLevel();
src/dali/controller/lamp.hpp
@@ -31,24 +31,26 @@ public: @@ -31,24 +31,26 @@ public:
31 31
32 // >>> used only in controller namespace 32 // >>> used only in controller namespace
33 void onReset(); 33 void onReset();
34 - bool isPowerOn(); 34 + bool isPowerOn() { return (mLamp->getLevel() > 0); }
35 bool isFailure(); 35 bool isFailure();
36 - bool isFading();  
37 - bool isLimitError();  
38 - bool isPowerSet(); 36 + bool isFading() { return mLamp->isFading(); }
  37 + bool isLimitError() { return mLimitError; }
  38 + bool isPowerSet() { return mIsPowerSet; }
39 39
40 uint8_t getLevel(); 40 uint8_t getLevel();
41 Status setLevel(uint8_t level, uint32_t fadeTime); 41 Status setLevel(uint8_t level, uint32_t fadeTime);
  42 +
42 uint32_t getFadeTime(); 43 uint32_t getFadeTime();
43 uint32_t getFadeRate(); 44 uint32_t getFadeRate();
44 45
45 Status abortFading(); 46 Status abortFading();
46 // <<< used only in controller namespace 47 // <<< used only in controller namespace
47 48
48 - void setListener(Listener* listener);  
49 - void notifyPowerDown(); 49 + void setListener(Listener* listener) { mListener = listener; }
  50 +
  51 + void notifyPowerDown() { mLamp->setLevel(0, 0); }
50 52
51 - virtual Status powerDirect(uint8_t level, uint64_t time); 53 + virtual Status powerDirect(uint8_t level, Time time);
52 virtual Status powerOff(); 54 virtual Status powerOff();
53 virtual Status powerScene(uint8_t scene); 55 virtual Status powerScene(uint8_t scene);
54 virtual Status powerUp(); 56 virtual Status powerUp();
@@ -61,16 +63,12 @@ public: @@ -61,16 +63,12 @@ public:
61 virtual Status powerRecallMaxLevel(); 63 virtual Status powerRecallMaxLevel();
62 virtual Status powerRecallOnLevel(); 64 virtual Status powerRecallOnLevel();
63 virtual Status powerRecallFaliureLevel(); 65 virtual Status powerRecallFaliureLevel();
64 - Status enableDapcSequence(uint64_t time); 66 + Status enableDapcSequence(Time time);
65 67
66 protected: 68 protected:
67 - ILamp* const getLamp() {  
68 - return mLamp;  
69 - } 69 + ILamp* const getLamp() { return mLamp; }
  70 + Memory* const getMemoryController() { return mMemoryController; }
70 71
71 - Memory* const getMemoryController() {  
72 - return mMemoryController;  
73 - }  
74 enum class Mode { 72 enum class Mode {
75 NORMAL, 73 NORMAL,
76 CONSTANT_POWER, 74 CONSTANT_POWER,
@@ -82,7 +80,7 @@ private: @@ -82,7 +80,7 @@ private:
82 Lamp(const Lamp& other) = delete; 80 Lamp(const Lamp& other) = delete;
83 Lamp& operator=(const Lamp&) = delete; 81 Lamp& operator=(const Lamp&) = delete;
84 82
85 - Status dapcSequence(uint8_t level, uint64_t time); 83 + Status dapcSequence(uint8_t level, Time time);
86 84
87 void onPowerCommand(); 85 void onPowerCommand();
88 86
@@ -96,7 +94,7 @@ private: @@ -96,7 +94,7 @@ private:
96 Listener* mListener; 94 Listener* mListener;
97 bool mIsPowerSet; 95 bool mIsPowerSet;
98 bool mLimitError; 96 bool mLimitError;
99 - uint64_t mDapcTime; 97 + Time mDapcTime;
100 uint8_t mConstPower; 98 uint8_t mConstPower;
101 }; 99 };
102 100
src/dali/controller/lamp_helper.cpp
@@ -295,7 +295,24 @@ const uint32_t kFadeTime[16] = { // fade times from 0 to 254 in milliseconds @@ -295,7 +295,24 @@ const uint32_t kFadeTime[16] = { // fade times from 0 to 254 in milliseconds
295 90510, // 15 295 90510, // 15
296 }; 296 };
297 297
298 -const uint8_t kStepsFor200FadeRate[16] = { 1, 72, 51, 36, 25, 18, 13, 9, 6, 4, 3, 2, 2, 1, 1, 1 }; 298 +const uint8_t kStepsFor200FadeRate[16] = {
  299 + 1, // 0
  300 + 72, // 1
  301 + 51, // 2
  302 + 36, // 3
  303 + 25, // 4
  304 + 18, // 5
  305 + 13, // 6
  306 + 9, // 7
  307 + 6, // 8
  308 + 4, // 9
  309 + 3, // 10
  310 + 2, // 11
  311 + 2, // 12
  312 + 1, // 13
  313 + 1, // 14
  314 + 1 // 15
  315 +};
299 316
300 uint16_t level2driver(uint8_t level) { 317 uint16_t level2driver(uint8_t level) {
301 return kLevel2driver[level]; 318 return kLevel2driver[level];
src/dali/controller/memory.cpp
@@ -77,67 +77,35 @@ Status Memory::writeMemory(uint8_t data) { @@ -77,67 +77,35 @@ Status Memory::writeMemory(uint8_t data) {
77 return status; 77 return status;
78 } 78 }
79 79
80 -uint8_t Memory::getPhisicalMinLevel() {  
81 - return mData->phisicalMinLevel;  
82 -}  
83 -  
84 Status Memory::setPhisicalMinLevel(uint8_t level) { 80 Status Memory::setPhisicalMinLevel(uint8_t level) {
85 return writeData8(DATA_FIELD_OFFSET(Data, phisicalMinLevel), level); 81 return writeData8(DATA_FIELD_OFFSET(Data, phisicalMinLevel), level);
86 } 82 }
87 83
88 -uint8_t Memory::getShortAddr() {  
89 - return mData->shortAddr;  
90 -}  
91 -  
92 Status Memory::setShortAddr(uint8_t addr) { 84 Status Memory::setShortAddr(uint8_t addr) {
93 addr |= 0x01; // normalize address 85 addr |= 0x01; // normalize address
94 return writeData8(DATA_FIELD_OFFSET(Data, shortAddr), addr); 86 return writeData8(DATA_FIELD_OFFSET(Data, shortAddr), addr);
95 } 87 }
96 88
97 -uint8_t Memory::getMinLevel() {  
98 - return mData->minLevel;  
99 -}  
100 -  
101 Status Memory::setMinLevel(uint8_t level) { 89 Status Memory::setMinLevel(uint8_t level) {
102 return writeData8(DATA_FIELD_OFFSET(Data, minLevel), level); 90 return writeData8(DATA_FIELD_OFFSET(Data, minLevel), level);
103 } 91 }
104 92
105 -uint8_t Memory::getMaxLevel() {  
106 - return mData->maxLevel;  
107 -}  
108 -  
109 Status Memory::setMaxLevel(uint8_t level) { 93 Status Memory::setMaxLevel(uint8_t level) {
110 return writeData8(DATA_FIELD_OFFSET(Data, maxLevel), level); 94 return writeData8(DATA_FIELD_OFFSET(Data, maxLevel), level);
111 } 95 }
112 96
113 -uint8_t Memory::getPowerOnLevel() {  
114 - return mData->powerOnLevel;  
115 -}  
116 -  
117 Status Memory::setPowerOnLevel(uint8_t level) { 97 Status Memory::setPowerOnLevel(uint8_t level) {
118 return writeData8(DATA_FIELD_OFFSET(Data, powerOnLevel), level); 98 return writeData8(DATA_FIELD_OFFSET(Data, powerOnLevel), level);
119 } 99 }
120 100
121 -uint8_t Memory::getFaliureLevel() {  
122 - return mData->failureLevel;  
123 -}  
124 -  
125 Status Memory::setFaliureLevel(uint8_t level) { 101 Status Memory::setFaliureLevel(uint8_t level) {
126 return writeData8(DATA_FIELD_OFFSET(Data, failureLevel), level); 102 return writeData8(DATA_FIELD_OFFSET(Data, failureLevel), level);
127 } 103 }
128 104
129 -uint8_t Memory::getFadeTime() {  
130 - return mData->fadeTime;  
131 -}  
132 -  
133 Status Memory::setFadeTime(uint8_t fadeTime) { 105 Status Memory::setFadeTime(uint8_t fadeTime) {
134 return writeData8(DATA_FIELD_OFFSET(Data, fadeTime), fadeTime); 106 return writeData8(DATA_FIELD_OFFSET(Data, fadeTime), fadeTime);
135 } 107 }
136 108
137 -uint8_t Memory::getFadeRate() {  
138 - return mData->fadeRate;  
139 -}  
140 -  
141 Status Memory::setFadeRate(uint8_t fadeRate) { 109 Status Memory::setFadeRate(uint8_t fadeRate) {
142 return writeData8(DATA_FIELD_OFFSET(Data, fadeRate), fadeRate); 110 return writeData8(DATA_FIELD_OFFSET(Data, fadeRate), fadeRate);
143 } 111 }
@@ -156,45 +124,20 @@ Status Memory::setLevelForScene(uint8_t scene, uint8_t level) { @@ -156,45 +124,20 @@ Status Memory::setLevelForScene(uint8_t scene, uint8_t level) {
156 return writeData8(DATA_FIELD_OFFSET(Data, scene[scene]), level); 124 return writeData8(DATA_FIELD_OFFSET(Data, scene[scene]), level);
157 } 125 }
158 126
159 -uint16_t Memory::getGroups() {  
160 - return mData->groups;  
161 -}  
162 -  
163 -uint8_t Memory::getGroupsL() {  
164 - return mData->groups;  
165 -}  
166 -  
167 -uint8_t Memory::getGroupsH() {  
168 - return mData->groups >> 8;  
169 -}  
170 -  
171 Status Memory::setGroups(uint16_t groups) { 127 Status Memory::setGroups(uint16_t groups) {
172 return writeData16(DATA_FIELD_OFFSET(Data, groups), groups); 128 return writeData16(DATA_FIELD_OFFSET(Data, groups), groups);
173 } 129 }
174 130
175 -  
176 -uint32_t Memory::getSearchAddr() {  
177 - return mRam.searchAddr;  
178 -}  
179 -  
180 Status Memory::setSearchAddr(uint32_t searchAddr) { 131 Status Memory::setSearchAddr(uint32_t searchAddr) {
181 mRam.searchAddr = searchAddr & LONG_ADDR_MASK; 132 mRam.searchAddr = searchAddr & LONG_ADDR_MASK;
182 return Status::OK; 133 return Status::OK;
183 } 134 }
184 135
185 -uint32_t Memory::getRandomAddr() {  
186 - return mTemp->randomAddr;  
187 -}  
188 -  
189 Status Memory::setRandomAddr(uint32_t randomAddr) { 136 Status Memory::setRandomAddr(uint32_t randomAddr) {
190 randomAddr &= LONG_ADDR_MASK; 137 randomAddr &= LONG_ADDR_MASK;
191 return writeTemp32(TEMP_FIELD_OFFSET(Temp, randomAddr), randomAddr); 138 return writeTemp32(TEMP_FIELD_OFFSET(Temp, randomAddr), randomAddr);
192 } 139 }
193 140
194 -uint8_t Memory::getActualLevel() {  
195 - return mTemp->actualLevel;  
196 -}  
197 -  
198 Status Memory::setActualLevel(uint8_t level) { 141 Status Memory::setActualLevel(uint8_t level) {
199 return writeTemp8(TEMP_FIELD_OFFSET(Temp, actualLevel), level); 142 return writeTemp8(TEMP_FIELD_OFFSET(Temp, actualLevel), level);
200 } 143 }
src/dali/controller/memory.hpp
@@ -21,84 +21,61 @@ public: @@ -21,84 +21,61 @@ public:
21 explicit Memory(IMemory* memory); 21 explicit Memory(IMemory* memory);
22 virtual ~Memory() {}; 22 virtual ~Memory() {};
23 23
24 - uint8_t getDTR() {  
25 - return mRam.dtr;  
26 - }  
27 -  
28 - void setDTR(uint8_t value) {  
29 - mRam.dtr = value;  
30 - }  
31 -  
32 - uint8_t getDTR1() {  
33 - return mRam.dtr1;  
34 - }  
35 -  
36 - void setDTR1(uint8_t value) {  
37 - mRam.dtr1 = value;  
38 - }  
39 -  
40 - uint8_t getDTR2() {  
41 - return mRam.dtr2;  
42 - }  
43 -  
44 - void setDTR2(uint8_t value) {  
45 - mRam.dtr2 = value;  
46 - } 24 + uint8_t getDTR() { return mRam.dtr; }
  25 + void setDTR(uint8_t value) { mRam.dtr = value; }
  26 + uint8_t getDTR1() { return mRam.dtr1; }
  27 + void setDTR1(uint8_t value) { mRam.dtr1 = value; }
  28 + uint8_t getDTR2() { return mRam.dtr2; }
  29 + void setDTR2(uint8_t value) { mRam.dtr2 = value; }
47 30
48 Status readMemory(uint8_t* data); 31 Status readMemory(uint8_t* data);
49 Status writeMemory(uint8_t data); 32 Status writeMemory(uint8_t data);
50 33
51 - uint8_t getPhisicalMinLevel(); 34 + uint8_t getPhisicalMinLevel() { return mData->phisicalMinLevel; }
52 Status setPhisicalMinLevel(uint8_t level); 35 Status setPhisicalMinLevel(uint8_t level);
53 36
54 - uint8_t getShortAddr(); 37 + uint8_t getShortAddr() { return mData->shortAddr; }
55 Status setShortAddr(uint8_t addr); 38 Status setShortAddr(uint8_t addr);
56 39
57 - uint8_t getMinLevel(); 40 + uint8_t getMinLevel() { return mData->minLevel; }
58 Status setMinLevel(uint8_t level); 41 Status setMinLevel(uint8_t level);
59 42
60 - uint8_t getMaxLevel(); 43 + uint8_t getMaxLevel() { return mData->maxLevel; }
61 Status setMaxLevel(uint8_t level); 44 Status setMaxLevel(uint8_t level);
62 45
63 - uint8_t getPowerOnLevel(); 46 + uint8_t getPowerOnLevel() { return mData->powerOnLevel; }
64 Status setPowerOnLevel(uint8_t level); 47 Status setPowerOnLevel(uint8_t level);
65 48
66 - uint8_t getFaliureLevel(); 49 + uint8_t getFaliureLevel() { return mData->failureLevel; }
67 Status setFaliureLevel(uint8_t level); 50 Status setFaliureLevel(uint8_t level);
68 51
69 - uint8_t getFadeTime(); 52 + uint8_t getFadeTime() { return mData->fadeTime; }
70 Status setFadeTime(uint8_t fadeTime); 53 Status setFadeTime(uint8_t fadeTime);
71 54
72 - uint8_t getFadeRate(); 55 + uint8_t getFadeRate() { return mData->fadeRate; }
73 Status setFadeRate(uint8_t fadeRate); 56 Status setFadeRate(uint8_t fadeRate);
74 57
75 uint8_t getLevelForScene(uint8_t scene); 58 uint8_t getLevelForScene(uint8_t scene);
76 Status setLevelForScene(uint8_t scene, uint8_t level); 59 Status setLevelForScene(uint8_t scene, uint8_t level);
77 60
78 - uint16_t getGroups();  
79 - uint8_t getGroupsL();  
80 - uint8_t getGroupsH(); 61 + uint16_t getGroups() { return mData->groups; }
81 Status setGroups(uint16_t groups); 62 Status setGroups(uint16_t groups);
82 63
83 - uint32_t getSearchAddr(); 64 + uint32_t getSearchAddr() { return mRam.searchAddr; }
84 Status setSearchAddr(uint32_t searchAddr); 65 Status setSearchAddr(uint32_t searchAddr);
85 66
86 - uint32_t getRandomAddr(); 67 + uint32_t getRandomAddr() { return mTemp->randomAddr; }
87 Status setRandomAddr(uint32_t randomAddr); 68 Status setRandomAddr(uint32_t randomAddr);
88 69
89 - uint8_t getActualLevel(); 70 + uint8_t getActualLevel() { return mTemp->actualLevel; }
90 Status setActualLevel(uint8_t level); 71 Status setActualLevel(uint8_t level);
91 72
92 - virtual bool isValid() {  
93 - return isDataValid() && isTempValid();  
94 - } 73 + virtual bool isValid() { return isDataValid() && isTempValid(); }
95 74
96 virtual bool isReset(); 75 virtual bool isReset();
97 virtual Status reset(); 76 virtual Status reset();
98 77
99 - uint16_t uint16FromDtrAndDtr1() {  
100 - return ((uint16_t) mRam.dtr1 << 8) | mRam.dtr;  
101 - } 78 + uint16_t uint16FromDtrAndDtr1() { return ((uint16_t) mRam.dtr1 << 8) | mRam.dtr; }
102 79
103 protected: 80 protected:
104 81
src/dali/controller/query_store.cpp
@@ -159,46 +159,10 @@ uint8_t QueryStore::queryStatus() { @@ -159,46 +159,10 @@ uint8_t QueryStore::queryStatus() {
159 return status; 159 return status;
160 } 160 }
161 161
162 -bool QueryStore::queryLampFailure() {  
163 - return mLampController->isFailure();  
164 -}  
165 -  
166 -bool QueryStore::queryLampPowerOn() {  
167 - return mLampController->isPowerOn();  
168 -}  
169 -  
170 -bool QueryStore::queryLampLimitError() {  
171 - return mLampController->isLimitError();  
172 -}  
173 -  
174 bool QueryStore::queryIsFading() { 162 bool QueryStore::queryIsFading() {
175 return mLampController->isFading(); 163 return mLampController->isFading();
176 } 164 }
177 165
178 -bool QueryStore::queryResetState() {  
179 - return mMemoryController->isReset();  
180 -}  
181 -  
182 -bool QueryStore::queryMissingShortAddr() {  
183 - return mMemoryController->getShortAddr() == DALI_MASK;  
184 -}  
185 -  
186 -bool QueryStore::queryLampPowerSet() {  
187 - return mLampController->isPowerSet();  
188 -}  
189 -  
190 -uint8_t QueryStore::queryActualLevel() {  
191 - return mLampController->getLevel();  
192 -}  
193 -  
194 -uint8_t QueryStore::queryMaxLevel() {  
195 - return mMemoryController->getMaxLevel();  
196 -}  
197 -  
198 -uint8_t QueryStore::queryMinLevel() {  
199 - return mMemoryController->getMinLevel();  
200 -}  
201 -  
202 uint8_t QueryStore::queryPowerOnLevel() { 166 uint8_t QueryStore::queryPowerOnLevel() {
203 return mMemoryController->getPowerOnLevel(); 167 return mMemoryController->getPowerOnLevel();
204 } 168 }
@@ -218,11 +182,11 @@ uint8_t QueryStore::queryLevelForScene(uint8_t scene) { @@ -218,11 +182,11 @@ uint8_t QueryStore::queryLevelForScene(uint8_t scene) {
218 } 182 }
219 183
220 uint8_t QueryStore::queryGroupsL() { 184 uint8_t QueryStore::queryGroupsL() {
221 - return mMemoryController->getGroupsL(); 185 + return mMemoryController->getGroups() & 0xff;
222 } 186 }
223 187
224 uint8_t QueryStore::queryGroupsH() { 188 uint8_t QueryStore::queryGroupsH() {
225 - return mMemoryController->getGroupsH(); 189 + return mMemoryController->getGroups() >> 8;
226 } 190 }
227 191
228 uint8_t QueryStore::queryRandomAddrH() { 192 uint8_t QueryStore::queryRandomAddrH() {
@@ -237,9 +201,5 @@ uint8_t QueryStore::queryRandomAddrL() { @@ -237,9 +201,5 @@ uint8_t QueryStore::queryRandomAddrL() {
237 return (uint8_t) ((mMemoryController->getRandomAddr() >> 0) & 0xff); 201 return (uint8_t) ((mMemoryController->getRandomAddr() >> 0) & 0xff);
238 } 202 }
239 203
240 -bool QueryStore::isMemoryValid() {  
241 - return mMemoryController->isValid();  
242 -}  
243 -  
244 } // namespace controller 204 } // namespace controller
245 } // namespace dali 205 } // namespace dali
src/dali/controller/query_store.hpp
@@ -37,16 +37,16 @@ public: @@ -37,16 +37,16 @@ public:
37 Status removeFromGroup(uint8_t group); 37 Status removeFromGroup(uint8_t group);
38 Status storeDtrAsShortAddr(); 38 Status storeDtrAsShortAddr();
39 uint8_t queryStatus(); 39 uint8_t queryStatus();
40 - bool queryLampFailure();  
41 - bool queryLampPowerOn();  
42 - bool queryLampLimitError(); 40 + bool queryLampFailure() { return mLampController->isFailure(); }
  41 + bool queryLampPowerOn() { return mLampController->isPowerOn(); }
  42 + bool queryLampLimitError() { return mLampController->isLimitError(); }
43 virtual bool queryIsFading(); 43 virtual bool queryIsFading();
44 - bool queryResetState();  
45 - bool queryMissingShortAddr();  
46 - bool queryLampPowerSet();  
47 - virtual uint8_t queryActualLevel();  
48 - uint8_t queryMaxLevel();  
49 - uint8_t queryMinLevel(); 44 + bool queryResetState() { return mMemoryController->isReset(); }
  45 + bool queryMissingShortAddr() { return mMemoryController->getShortAddr() == DALI_MASK; }
  46 + bool queryLampPowerSet() { return mLampController->isPowerSet(); }
  47 + virtual uint8_t queryActualLevel() { return mLampController->getLevel(); }
  48 + uint8_t queryMaxLevel() { return mMemoryController->getMaxLevel(); }
  49 + uint8_t queryMinLevel() { return mMemoryController->getMinLevel(); }
50 virtual uint8_t queryPowerOnLevel(); 50 virtual uint8_t queryPowerOnLevel();
51 virtual uint8_t queryFaliureLevel(); 51 virtual uint8_t queryFaliureLevel();
52 uint8_t queryFadeRateOrTime(); 52 uint8_t queryFadeRateOrTime();
@@ -58,16 +58,11 @@ public: @@ -58,16 +58,11 @@ public:
58 uint8_t queryRandomAddrL(); 58 uint8_t queryRandomAddrL();
59 59
60 protected: 60 protected:
61 - Memory* const getMemoryController() {  
62 - return mMemoryController;  
63 - }  
64 -  
65 - Lamp* const getLampController() {  
66 - return mLampController;  
67 - } 61 + Memory* const getMemoryController() { return mMemoryController; }
  62 + Lamp* const getLampController() { return mLampController; }
68 63
69 private: 64 private:
70 - bool isMemoryValid(); 65 + bool isMemoryValid() { return mMemoryController->isValid(); }
71 66
72 QueryStore(const QueryStore& other) = delete; 67 QueryStore(const QueryStore& other) = delete;
73 QueryStore& operator=(const QueryStore&) = delete; 68 QueryStore& operator=(const QueryStore&) = delete;
src/dali/dali.hpp
@@ -39,6 +39,9 @@ @@ -39,6 +39,9 @@
39 39
40 namespace dali { 40 namespace dali {
41 41
  42 +typedef uint64_t Time;
  43 +const Time kTimeInvalid = 0xffffffffffffffffUL;
  44 +
42 enum class Status { 45 enum class Status {
43 OK, ERROR, INVALID, INVALID_STATE, REPEAT_REQUIRED 46 OK, ERROR, INVALID, INVALID_STATE, REPEAT_REQUIRED
44 }; 47 };
@@ -73,7 +76,7 @@ public: @@ -73,7 +76,7 @@ public:
73 virtual void abortFading() = 0; 76 virtual void abortFading() = 0;
74 }; 77 };
75 78
76 -class IBus { 79 +class IBusDriver {
77 public: 80 public:
78 enum class IBusState { 81 enum class IBusState {
79 UNKNOWN, DISCONNECTED, CONNECTED 82 UNKNOWN, DISCONNECTED, CONNECTED
@@ -81,7 +84,7 @@ public: @@ -81,7 +84,7 @@ public:
81 84
82 class IBusClient { 85 class IBusClient {
83 public: 86 public:
84 - virtual void onDataReceived(uint64_t timeMs, uint16_t data) = 0; 87 + virtual void onDataReceived(Time time, uint16_t data) = 0;
85 virtual void onBusStateChanged(IBusState state); 88 virtual void onBusStateChanged(IBusState state);
86 }; 89 };
87 90
@@ -97,7 +100,7 @@ public: @@ -97,7 +100,7 @@ public:
97 virtual void timerTaskRun() = 0; 100 virtual void timerTaskRun() = 0;
98 }; 101 };
99 102
100 - virtual uint64_t getTime() = 0; 103 + virtual Time getTime() = 0;
101 virtual Status schedule(ITimerTask* task, uint32_t delay, uint32_t period) = 0; 104 virtual Status schedule(ITimerTask* task, uint32_t delay, uint32_t period) = 0;
102 virtual void cancel(ITimerTask* task) = 0; 105 virtual void cancel(ITimerTask* task) = 0;
103 virtual uint32_t randomize() = 0; 106 virtual uint32_t randomize() = 0;
src/dali/slave.cpp
@@ -13,30 +13,28 @@ @@ -13,30 +13,28 @@
13 namespace dali { 13 namespace dali {
14 14
15 // static 15 // static
16 -Slave* Slave::create(IMemory* memoryDriver, ILamp* lampDriver, IBus* busDriver, ITimer* timer) { 16 +Slave* Slave::create(IBusDriver* busDriver, ITimer* timer, IMemory* memoryDriver, ILamp* lampDriver) {
17 controller::Memory* memory = new controller::Memory(memoryDriver); 17 controller::Memory* memory = new controller::Memory(memoryDriver);
18 controller::Lamp* lamp = new controller::Lamp(lampDriver, memory); 18 controller::Lamp* lamp = new controller::Lamp(lampDriver, memory);
19 controller::QueryStore* queryStore = new controller::QueryStore(memory, lamp); 19 controller::QueryStore* queryStore = new controller::QueryStore(memory, lamp);
20 - controller::Bus* bus = new controller::Bus(busDriver);  
21 - controller::Initialization* initialization = new controller::Initialization(timer, memory);  
22 20
23 - return new Slave(memory, lamp, queryStore, bus, initialization); 21 + return new Slave(busDriver, timer, memory, lamp, queryStore);
24 } 22 }
25 23
26 -Slave::Slave(controller::Memory* memory, controller::Lamp* lamp, controller::QueryStore* queryStore,  
27 - controller::Bus* bus, controller::Initialization* initialization) :  
28 - mMemoryController(memory), mLampController(lamp), mQueryStoreController(queryStore),  
29 - mBusController(bus), mInitializationController(initialization),  
30 - mMemoryWriteEnabled(false), mDeviceType(0xff) { 24 +Slave::Slave(IBusDriver* busDriver, ITimer* timer, controller::Memory* memory, controller::Lamp* lamp,
  25 + controller::QueryStore* queryStore) :
  26 + mBusController(busDriver, this),
  27 + mInitializationController(timer, memory),
  28 + mMemoryController(memory),
  29 + mLampController(lamp),
  30 + mQueryStoreController(queryStore),
  31 + mMemoryWriteEnabled(false),
  32 + mDeviceType(0xff) {
31 mLampController->setListener(this); 33 mLampController->setListener(this);
32 - mBusController->setListener(this);  
33 } 34 }
34 35
35 Slave::~Slave() { 36 Slave::~Slave() {
36 - mBusController->setListener(nullptr);  
37 mLampController->setListener(nullptr); 37 mLampController->setListener(nullptr);
38 - delete mInitializationController;  
39 - delete mBusController;  
40 delete mQueryStoreController; 38 delete mQueryStoreController;
41 delete mLampController; 39 delete mLampController;
42 delete mMemoryController; 40 delete mMemoryController;
@@ -51,7 +49,7 @@ void Slave::notifyPowerDown() { @@ -51,7 +49,7 @@ void Slave::notifyPowerDown() {
51 } 49 }
52 50
53 void Slave::onLampStateChnaged(ILamp::ILampState state) { 51 void Slave::onLampStateChnaged(ILamp::ILampState state) {
54 - mInitializationController->onLampStateChnaged(state); 52 + mInitializationController.onLampStateChnaged(state);
55 } 53 }
56 54
57 uint8_t Slave::getShortAddr() { 55 uint8_t Slave::getShortAddr() {
@@ -130,7 +128,7 @@ Status Slave::internalHandleDaliDT8Command(uint16_t repeatCount, Command cmd, ui @@ -130,7 +128,7 @@ Status Slave::internalHandleDaliDT8Command(uint16_t repeatCount, Command cmd, ui
130 return mLampController->powerOnAndStepUp(); 128 return mLampController->powerOnAndStepUp();
131 129
132 case Command::ENABLE_DAPC_SEQUENCE: 130 case Command::ENABLE_DAPC_SEQUENCE:
133 - return mLampController->enableDapcSequence(mBusController->getLastCommandTimeMs()); 131 + return mLampController->enableDapcSequence(mBusController.getLastCommandTime());
134 132
135 case Command::GO_TO_SCENE_0: 133 case Command::GO_TO_SCENE_0:
136 case Command::GO_TO_SCENE_1: 134 case Command::GO_TO_SCENE_1:
@@ -154,7 +152,7 @@ Status Slave::internalHandleDaliDT8Command(uint16_t repeatCount, Command cmd, ui @@ -154,7 +152,7 @@ Status Slave::internalHandleDaliDT8Command(uint16_t repeatCount, Command cmd, ui
154 if (repeatCount == 0) { 152 if (repeatCount == 0) {
155 return Status::REPEAT_REQUIRED; 153 return Status::REPEAT_REQUIRED;
156 } 154 }
157 - mInitializationController->reset(); 155 + mInitializationController.reset();
158 mQueryStoreController->reset(); 156 mQueryStoreController->reset();
159 return Status::OK; 157 return Status::OK;
160 158
@@ -420,10 +418,10 @@ Status Slave::internalHandleDaliDT8Command(uint16_t repeatCount, Command cmd, ui @@ -420,10 +418,10 @@ Status Slave::internalHandleDaliDT8Command(uint16_t repeatCount, Command cmd, ui
420 // extended commands 418 // extended commands
421 419
422 case Command::DIRECT_POWER_CONTROL: 420 case Command::DIRECT_POWER_CONTROL:
423 - return mLampController->powerDirect(param, mBusController->getLastCommandTimeMs()); 421 + return mLampController->powerDirect(param, mBusController.getLastCommandTime());
424 422
425 case Command::TERMINATE: 423 case Command::TERMINATE:
426 - return mInitializationController->terminate(); 424 + return mInitializationController.terminate();
427 425
428 case Command::DATA_TRANSFER_REGISTER: 426 case Command::DATA_TRANSFER_REGISTER:
429 mMemoryController->setDTR(param); 427 mMemoryController->setDTR(param);
@@ -433,53 +431,53 @@ Status Slave::internalHandleDaliDT8Command(uint16_t repeatCount, Command cmd, ui @@ -433,53 +431,53 @@ Status Slave::internalHandleDaliDT8Command(uint16_t repeatCount, Command cmd, ui
433 if (repeatCount == 0) { 431 if (repeatCount == 0) {
434 return Status::REPEAT_REQUIRED; 432 return Status::REPEAT_REQUIRED;
435 } 433 }
436 - return mInitializationController->initialize(param); 434 + return mInitializationController.initialize(param);
437 435
438 case Command::RANDOMISE: 436 case Command::RANDOMISE:
439 if (repeatCount == 0) { 437 if (repeatCount == 0) {
440 return Status::REPEAT_REQUIRED; 438 return Status::REPEAT_REQUIRED;
441 } 439 }
442 - return mInitializationController->randomize(); 440 + return mInitializationController.randomize();
443 441
444 case Command::COMPARE: { 442 case Command::COMPARE: {
445 - Status status = mInitializationController->compare(); 443 + Status status = mInitializationController.compare();
446 if (status == Status::OK) { 444 if (status == Status::OK) {
447 - return mBusController->sendAck(DALI_ACK_YES); 445 + return mBusController.sendAck(DALI_ACK_YES);
448 } 446 }
449 return status; 447 return status;
450 } 448 }
451 case Command::WITHDRAW: 449 case Command::WITHDRAW:
452 - return mInitializationController->withdraw(); 450 + return mInitializationController.withdraw();
453 451
454 case Command::SEARCHADDRH: 452 case Command::SEARCHADDRH:
455 - return mInitializationController->searchAddrH(param); 453 + return mInitializationController.searchAddrH(param);
456 454
457 case Command::SEARCHADDRM: 455 case Command::SEARCHADDRM:
458 - return mInitializationController->searchAddrM(param); 456 + return mInitializationController.searchAddrM(param);
459 457
460 case Command::SEARCHADDRL: 458 case Command::SEARCHADDRL:
461 - return mInitializationController->searchAddrL(param); 459 + return mInitializationController.searchAddrL(param);
462 460
463 case Command::PROGRAM_SHORT_ADDRESS: 461 case Command::PROGRAM_SHORT_ADDRESS:
464 - return mInitializationController->programShortAddr(param); 462 + return mInitializationController.programShortAddr(param);
465 463
466 case Command::VERIFY_SHORT_ADDRESS: { 464 case Command::VERIFY_SHORT_ADDRESS: {
467 - Status status = mInitializationController->verifySortAddr(param); 465 + Status status = mInitializationController.verifySortAddr(param);
468 if (status == Status::OK) { 466 if (status == Status::OK) {
469 - return mBusController->sendAck(DALI_ACK_YES); 467 + return mBusController.sendAck(DALI_ACK_YES);
470 } 468 }
471 return status; 469 return status;
472 } 470 }
473 case Command::QUERY_SHORT_ADDRESS: { 471 case Command::QUERY_SHORT_ADDRESS: {
474 uint8_t shortAddr; 472 uint8_t shortAddr;
475 - Status status = mInitializationController->queryShortAddr(&shortAddr); 473 + Status status = mInitializationController.queryShortAddr(&shortAddr);
476 if (status == Status::OK) { 474 if (status == Status::OK) {
477 - return mBusController->sendAck(shortAddr); 475 + return mBusController.sendAck(shortAddr);
478 } 476 }
479 return status; 477 return status;
480 } 478 }
481 case Command::PHYSICAL_SELECTION: 479 case Command::PHYSICAL_SELECTION:
482 - return mInitializationController->physicalSelection(); 480 + return mInitializationController.physicalSelection();
483 481
484 case Command::DATA_TRANSFER_REGISTER_1: 482 case Command::DATA_TRANSFER_REGISTER_1:
485 mMemoryController->setDTR1(param); 483 mMemoryController->setDTR1(param);
src/dali/slave.hpp
@@ -20,9 +20,10 @@ @@ -20,9 +20,10 @@
20 20
21 namespace dali { 21 namespace dali {
22 22
23 -class Slave: public controller::Bus::Listener, controller::Lamp::Listener { 23 +class Slave: public controller::Bus::Client, controller::Lamp::Listener
  24 +{
24 public: 25 public:
25 - static Slave* create(IMemory* memoryDriver, ILamp* lampDriver, IBus* busDriver, ITimer* timer); 26 + static Slave* create(IBusDriver* busDriver, ITimer* timer, IMemory* memoryDriver, ILamp* lampDriver);
26 27
27 virtual ~Slave(); 28 virtual ~Slave();
28 29
@@ -30,8 +31,8 @@ public: @@ -30,8 +31,8 @@ public:
30 void notifyPowerDown(); 31 void notifyPowerDown();
31 32
32 protected: 33 protected:
33 - Slave(controller::Memory* memory, controller::Lamp* lamp, controller::QueryStore* queryStore,  
34 - controller::Bus* busDriver, controller::Initialization* initializationController); 34 + Slave(IBusDriver* busDriver, ITimer* timer, controller::Memory* memory, controller::Lamp* lamp,
  35 + controller::QueryStore* queryStore);
35 36
36 controller::Memory* const getMemoryController() { 37 controller::Memory* const getMemoryController() {
37 return mMemoryController; 38 return mMemoryController;
@@ -46,10 +47,10 @@ protected: @@ -46,10 +47,10 @@ protected:
46 } 47 }
47 48
48 Status sendAck(uint8_t ack) { 49 Status sendAck(uint8_t ack) {
49 - return mBusController->sendAck(ack);  
50 - } 50 + return mBusController.sendAck(ack);
  51 + }
51 52
52 - virtual Status handleHandleDaliDeviceTypeCommand(uint16_t repeat, Command cmd, uint8_t param, uint8_t device_type); 53 + virtual Status handleHandleDaliDeviceTypeCommand(uint16_t repeat, Command cmd, uint8_t param, uint8_t device_type);
53 54
54 private: 55 private:
55 Slave(const Slave& other) = delete; 56 Slave(const Slave& other) = delete;
@@ -66,11 +67,11 @@ private: @@ -66,11 +67,11 @@ private:
66 Status handleIgnoredCommand(Command cmd, uint8_t param) override; 67 Status handleIgnoredCommand(Command cmd, uint8_t param) override;
67 Status internalHandleDaliDT8Command(uint16_t repeat, Command cmd, uint8_t param); 68 Status internalHandleDaliDT8Command(uint16_t repeat, Command cmd, uint8_t param);
68 69
  70 + controller::Bus mBusController;
  71 + controller::Initialization mInitializationController;
69 controller::Memory* const mMemoryController; 72 controller::Memory* const mMemoryController;
70 controller::Lamp* const mLampController; 73 controller::Lamp* const mLampController;
71 controller::QueryStore* const mQueryStoreController; 74 controller::QueryStore* const mQueryStoreController;
72 - controller::Bus* const mBusController;  
73 - controller::Initialization* const mInitializationController;  
74 bool mMemoryWriteEnabled; 75 bool mMemoryWriteEnabled;
75 uint8_t mDeviceType; 76 uint8_t mDeviceType;
76 }; 77 };
src/xmc1200/bccu.cpp
@@ -213,16 +213,4 @@ void BccuLampRGB::setColor(uint16_t r, uint16_t g, uint16_t b, uint32_t changeTi @@ -213,16 +213,4 @@ void BccuLampRGB::setColor(uint16_t r, uint16_t g, uint16_t b, uint32_t changeTi
213 XMC_BCCU_ConcurrentStartLinearWalk(BCCU, mChannelsMask); 213 XMC_BCCU_ConcurrentStartLinearWalk(BCCU, mChannelsMask);
214 } 214 }
215 215
216 -uint16_t BccuLampRGB::getColorR() {  
217 - return XMC_BCCU_CH_ReadIntensity(BCCU_CH_R);  
218 -}  
219 -  
220 -uint16_t BccuLampRGB::getColorG() {  
221 - return XMC_BCCU_CH_ReadIntensity(BCCU_CH_G);  
222 -}  
223 -  
224 -uint16_t BccuLampRGB::getColorB() {  
225 - return XMC_BCCU_CH_ReadIntensity(BCCU_CH_B);  
226 -}  
227 -  
228 } // namespace xmc 216 } // namespace xmc
src/xmc1200/bccu.hpp
@@ -68,9 +68,19 @@ public: @@ -68,9 +68,19 @@ public:
68 } 68 }
69 69
70 void setColor(uint16_t R, uint16_t G, uint16_t B, uint32_t changeTime); 70 void setColor(uint16_t R, uint16_t G, uint16_t B, uint32_t changeTime);
71 - uint16_t getColorR();  
72 - uint16_t getColorG();  
73 - uint16_t getColorB(); 71 +
  72 + uint16_t getColorR() {
  73 + return XMC_BCCU_CH_ReadIntensity(BCCU_CH_R);
  74 + }
  75 +
  76 + uint16_t getColorG() {
  77 + return XMC_BCCU_CH_ReadIntensity(BCCU_CH_G);
  78 + }
  79 +
  80 + uint16_t getColorB() {
  81 + return XMC_BCCU_CH_ReadIntensity(BCCU_CH_B);
  82 + }
  83 +
74 84
75 private: 85 private:
76 BCCU_CH_Type* BCCU_CH_R; 86 BCCU_CH_Type* BCCU_CH_R;
src/xmc1200/clock.hpp
@@ -23,8 +23,6 @@ public: @@ -23,8 +23,6 @@ public:
23 FREQ_16MHZ = 0x02, 23 FREQ_16MHZ = 0x02,
24 FREQ_10_67MHZ = 0x03, 24 FREQ_10_67MHZ = 0x03,
25 FREQ_8MHZ = 0x04, 25 FREQ_8MHZ = 0x04,
26 - FREQ_126KHZ = 0xFE,  
27 - FREQ_125_5KHZ = 0xFF,  
28 } Frequency; 26 } Frequency;
29 27
30 // Initializes SCU Clock registers based on user configuration 28 // Initializes SCU Clock registers based on user configuration
src/xmc1200/dali/bus.cpp
@@ -45,17 +45,15 @@ volatile RxState gRxState; @@ -45,17 +45,15 @@ volatile RxState gRxState;
45 volatile uint32_t gRxData32 = INVALID32; 45 volatile uint32_t gRxData32 = INVALID32;
46 volatile uint32_t gRxDataTmp; 46 volatile uint32_t gRxDataTmp;
47 uint16_t gTxData = INVALID16; 47 uint16_t gTxData = INVALID16;
48 -volatile uint64_t gBusLowTime = 0;  
49 -  
50 -#define BUS_TIME_CONNECTED 0xffffffffffffffffUL 48 +volatile Time gBusLowTime = 0;
51 49
52 #define MAX_CLIENTS 1 50 #define MAX_CLIENTS 1
53 51
54 -IBus::IBusState gBusState = IBus::IBusState::UNKNOWN;  
55 -IBus::IBusClient* gClients[MAX_CLIENTS]; 52 +IBusDriver::IBusState gBusState = IBusDriver::IBusState::UNKNOWN;
  53 +IBusDriver::IBusClient* gClients[MAX_CLIENTS];
56 54
57 void onRisingEdge(uint16_t timer) { 55 void onRisingEdge(uint16_t timer) {
58 - gBusLowTime = BUS_TIME_CONNECTED; 56 + gBusLowTime = kTimeInvalid;
59 57
60 if (timer == 0) { 58 if (timer == 0) {
61 return; 59 return;
@@ -218,20 +216,20 @@ Status Bus::sendAck(uint8_t ack) { @@ -218,20 +216,20 @@ Status Bus::sendAck(uint8_t ack) {
218 216
219 void Bus::runSlice() { 217 void Bus::runSlice() {
220 uint16_t data; 218 uint16_t data;
221 - uint64_t time = Timer::getTimeMs(); 219 + Time time = Timer::getTimeMs();
222 220
223 __disable_irq(); 221 __disable_irq();
224 - uint64_t busLowTime = gBusLowTime; 222 + Time busLowTime = gBusLowTime;
225 __enable_irq(); 223 __enable_irq();
226 224
227 - if (busLowTime == BUS_TIME_CONNECTED) {  
228 - if (gBusState != IBus::IBusState::CONNECTED) {  
229 - onBusStateChanged(IBus::IBusState::CONNECTED); 225 + if (busLowTime == kTimeInvalid) {
  226 + if (gBusState != IBusDriver::IBusState::CONNECTED) {
  227 + onBusStateChanged(IBusDriver::IBusState::CONNECTED);
230 } 228 }
231 } else { 229 } else {
232 if (time - busLowTime >= 500) { 230 if (time - busLowTime >= 500) {
233 - if (gBusState != IBus::IBusState::DISCONNECTED) {  
234 - onBusStateChanged(IBus::IBusState::DISCONNECTED); 231 + if (gBusState != IBusDriver::IBusState::DISCONNECTED) {
  232 + onBusStateChanged(IBusDriver::IBusState::DISCONNECTED);
235 } 233 }
236 } 234 }
237 } 235 }
@@ -242,7 +240,7 @@ void Bus::runSlice() { @@ -242,7 +240,7 @@ void Bus::runSlice() {
242 } 240 }
243 241
244 // static 242 // static
245 -void Bus::onDataReceived(uint64_t time, uint16_t data) { 243 +void Bus::onDataReceived(Time time, uint16_t data) {
246 for (uint8_t i = 0; i < MAX_CLIENTS; ++i) { 244 for (uint8_t i = 0; i < MAX_CLIENTS; ++i) {
247 if (gClients[i] != nullptr) { 245 if (gClients[i] != nullptr) {
248 gClients[i]->onDataReceived(time, data); 246 gClients[i]->onDataReceived(time, data);
@@ -298,8 +296,8 @@ void Bus::initRx() { @@ -298,8 +296,8 @@ void Bus::initRx() {
298 } 296 }
299 297
300 //static 298 //static
301 -bool Bus::checkRxTx(uint64_t time, uint16_t* data) {  
302 - static uint64_t gLastDataTime = 0; 299 +bool Bus::checkRxTx(Time time, uint16_t* data) {
  300 + static Time gLastDataTime = 0;
303 bool rxResult = false; 301 bool rxResult = false;
304 __disable_irq(); 302 __disable_irq();
305 uint32_t rxData32 = gRxData32; 303 uint32_t rxData32 = gRxData32;
@@ -313,7 +311,7 @@ bool Bus::checkRxTx(uint64_t time, uint16_t* data) { @@ -313,7 +311,7 @@ bool Bus::checkRxTx(uint64_t time, uint16_t* data) {
313 } 311 }
314 312
315 if (gTxData != INVALID16) { 313 if (gTxData != INVALID16) {
316 - uint64_t dTime = time - gLastDataTime; 314 + Time dTime = time - gLastDataTime;
317 if (dTime > 3) { 315 if (dTime > 3) {
318 if (gRxState == RxState::IDLE) { 316 if (gRxState == RxState::IDLE) {
319 uint16_t tmpTxData = gTxData; 317 uint16_t tmpTxData = gTxData;
src/xmc1200/dali/bus.hpp
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 namespace dali { 16 namespace dali {
17 namespace xmc { 17 namespace xmc {
18 18
19 -class Bus: public dali::IBus { 19 +class Bus: public dali::IBusDriver {
20 public: 20 public:
21 static Bus* getInstance(); 21 static Bus* getInstance();
22 22
@@ -33,11 +33,11 @@ private: @@ -33,11 +33,11 @@ private:
33 33
34 ~Bus(); 34 ~Bus();
35 35
36 - static void onDataReceived(uint64_t timeMs, uint16_t data); 36 + static void onDataReceived(Time timeMs, uint16_t data);
37 static void onBusStateChanged(IBusState state); 37 static void onBusStateChanged(IBusState state);
38 38
39 static void initRx(); 39 static void initRx();
40 - static bool checkRxTx(uint64_t time, uint16_t* data); 40 + static bool checkRxTx(Time time, uint16_t* data);
41 41
42 static void initTx(); 42 static void initTx();
43 static void tx(uint8_t data); 43 static void tx(uint8_t data);
src/xmc1200/dali/lamp.cpp
@@ -112,12 +112,6 @@ void LampRGB::abortFading() { @@ -112,12 +112,6 @@ void LampRGB::abortFading() {
112 } 112 }
113 } 113 }
114 114
115 -void LampRGB::waitForFade() {  
116 - while (mLamp.isFading()) {  
117 - }  
118 -}  
119 -  
120 -  
121 void LampRGB::setPrimary(const uint16_t primary[], uint8_t size, uint32_t changeTime) { 115 void LampRGB::setPrimary(const uint16_t primary[], uint8_t size, uint32_t changeTime) {
122 for (uint8_t i = 0; i < 3; ++i) { 116 for (uint8_t i = 0; i < 3; ++i) {
123 mPrimary[i] = primary[i]; 117 mPrimary[i] = primary[i];
@@ -150,10 +144,6 @@ void LampRGB::abortColorChanging() { @@ -150,10 +144,6 @@ void LampRGB::abortColorChanging() {
150 } 144 }
151 } 145 }
152 146
153 -void LampRGB::waitForColorChange() {  
154 - while (mLamp.isColorChanging()) {  
155 - }  
156 -}  
157 147
158 void LampRGB::onLampStateChnaged(ILampState state) { 148 void LampRGB::onLampStateChnaged(ILampState state) {
159 for (uint16_t i = 0; i < kMaxClients; ++i) { 149 for (uint16_t i = 0; i < kMaxClients; ++i) {
src/xmc1200/dali/lamp.hpp
@@ -28,13 +28,13 @@ public: @@ -28,13 +28,13 @@ public:
28 uint16_t getLevel() override; 28 uint16_t getLevel() override;
29 bool isFading() override; 29 bool isFading() override;
30 void abortFading() override; 30 void abortFading() override;
31 - void waitForFade(); 31 + void waitForFade() { while (mLamp.isFading()); }
32 32
33 void setPrimary(const uint16_t primary[], uint8_t size, uint32_t changeTime) override; 33 void setPrimary(const uint16_t primary[], uint8_t size, uint32_t changeTime) override;
34 void getPrimary(uint16_t primary[], uint8_t size) override; 34 void getPrimary(uint16_t primary[], uint8_t size) override;
35 bool isColorChanging() override; 35 bool isColorChanging() override;
36 void abortColorChanging() override; 36 void abortColorChanging() override;
37 - void waitForColorChange(); 37 + void waitForColorChange() { while (mLamp.isColorChanging()); };
38 38
39 bool isOff() { 39 bool isOff() {
40 return getLevel() == 0; 40 return getLevel() == 0;
src/xmc1200/dali/timer.cpp
@@ -24,12 +24,12 @@ const uint16_t* kUniqeChipId = (uint16_t*) 0x10000FF0; // 8 elements @@ -24,12 +24,12 @@ const uint16_t* kUniqeChipId = (uint16_t*) 0x10000FF0; // 8 elements
24 24
25 typedef struct { 25 typedef struct {
26 dali::ITimer::ITimerTask* task; 26 dali::ITimer::ITimerTask* task;
27 - uint64_t time; 27 + Time time;
28 uint32_t period; 28 uint32_t period;
29 } TaskInfo; 29 } TaskInfo;
30 30
31 TaskInfo gTasks[MAX_TASKS]; 31 TaskInfo gTasks[MAX_TASKS];
32 -volatile uint64_t gSystemTimeMs; 32 +volatile Time gSystemTimeMs;
33 33
34 } 34 }
35 35
@@ -85,7 +85,7 @@ uint32_t Timer::randomize() { @@ -85,7 +85,7 @@ uint32_t Timer::randomize() {
85 } 85 }
86 86
87 // static 87 // static
88 -uint64_t Timer::getTimeMs() { 88 +Time Timer::getTimeMs() {
89 return gSystemTimeMs; 89 return gSystemTimeMs;
90 } 90 }
91 91
@@ -110,7 +110,7 @@ void Timer::runSlice() { @@ -110,7 +110,7 @@ void Timer::runSlice() {
110 extern "C" { 110 extern "C" {
111 111
112 void SysTick_Handler(void) { 112 void SysTick_Handler(void) {
113 - gSystemTimeMs += 1000 / TICKS_PER_SECOND; 113 + gSystemTimeMs += (uint32_t)1000 / TICKS_PER_SECOND;
114 } 114 }
115 115
116 } // extern "C" 116 } // extern "C"
src/xmc1200/dali/timer.hpp
@@ -20,14 +20,14 @@ class Timer: public dali::ITimer { @@ -20,14 +20,14 @@ class Timer: public dali::ITimer {
20 public: 20 public:
21 static Timer* getInstance(); 21 static Timer* getInstance();
22 22
23 - uint64_t getTime() override { 23 + Time getTime() override {
24 return getTimeMs(); 24 return getTimeMs();
25 } 25 }
26 dali::Status schedule(ITimerTask* task, uint32_t delay, uint32_t period) override; 26 dali::Status schedule(ITimerTask* task, uint32_t delay, uint32_t period) override;
27 void cancel(ITimerTask* task) override; 27 void cancel(ITimerTask* task) override;
28 uint32_t randomize() override; 28 uint32_t randomize() override;
29 29
30 - static uint64_t getTimeMs(); 30 + static Time getTimeMs();
31 static void runSlice(); 31 static void runSlice();
32 32
33 private: 33 private:
src/xmc1200/main.cpp
@@ -76,7 +76,7 @@ int main(void) { @@ -76,7 +76,7 @@ int main(void) {
76 76
77 dali::xmc::Memory* daliMemory1 = dali::xmc::Memory::getInstance(); 77 dali::xmc::Memory* daliMemory1 = dali::xmc::Memory::getInstance();
78 dali::xmc::LampRGB* daliLamp1 = dali::xmc::LampRGB::getInstance(); 78 dali::xmc::LampRGB* daliLamp1 = dali::xmc::LampRGB::getInstance();
79 - gSlave = dali::SlaveDT8::create(daliMemory1, daliLamp1, daliBus, daliTimer); 79 + gSlave = dali::SlaveDT8::create(daliBus, daliTimer, daliMemory1, daliLamp1);
80 80
81 daliTimer->schedule(&gPowerOnTimerTask, 600, 0); 81 daliTimer->schedule(&gPowerOnTimerTask, 600, 0);
82 82