Commit 9f80c4547b32414bb3b0fde1533b14b575f3160b

Authored by Arkadiusz Materek
1 parent 5c13eea3

Prepare for others device types.

src/dali/controller/lamp.cpp
@@ -20,6 +20,7 @@ namespace controller { @@ -20,6 +20,7 @@ namespace controller {
20 Lamp::Lamp(ILamp* lamp, Memory* memoryController) 20 Lamp::Lamp(ILamp* lamp, Memory* memoryController)
21 : mLamp(lamp) 21 : mLamp(lamp)
22 , mMemoryController(memoryController) 22 , mMemoryController(memoryController)
  23 + , mMode(Mode::NORMAL)
23 , mLampState(ILamp::ILampState::OK) 24 , mLampState(ILamp::ILampState::OK)
24 , mListener(nullptr) 25 , mListener(nullptr)
25 , mIsPowerSet(false) 26 , mIsPowerSet(false)
@@ -66,7 +67,7 @@ bool Lamp::isPowerSet() { @@ -66,7 +67,7 @@ bool Lamp::isPowerSet() {
66 } 67 }
67 68
68 uint8_t Lamp::getLevel() { 69 uint8_t Lamp::getLevel() {
69 - if (mLampState == ILamp::ILampState::OK) { 70 + if ((mMode == Mode::NORMAL) && (mLampState == ILamp::ILampState::OK)) {
70 return driver2level(mLamp->getLevel(), mMemoryController->getMinLevel()); 71 return driver2level(mLamp->getLevel(), mMemoryController->getMinLevel());
71 } 72 }
72 return mMemoryController->getActualLevel(); 73 return mMemoryController->getActualLevel();
@@ -89,7 +90,9 @@ Status Lamp::setLevel(uint8_t level, uint32_t fadeTime) { @@ -89,7 +90,9 @@ Status Lamp::setLevel(uint8_t level, uint32_t fadeTime) {
89 level = maxLevel; 90 level = maxLevel;
90 } 91 }
91 92
  93 + if ((mMode == Mode::NORMAL) || (level == 0)) {
92 mLamp->setLevel(level2driver(level), fadeTime); 94 mLamp->setLevel(level2driver(level), fadeTime);
  95 + }
93 status = mMemoryController->setActualLevel(level); 96 status = mMemoryController->setActualLevel(level);
94 } 97 }
95 return status; 98 return status;
@@ -289,5 +292,25 @@ void Lamp::onLampStateChnaged(ILamp::ILampState state) { @@ -289,5 +292,25 @@ void Lamp::onLampStateChnaged(ILamp::ILampState state) {
289 mListener->onLampStateChnaged(state); 292 mListener->onLampStateChnaged(state);
290 } 293 }
291 294
  295 +void Lamp::setMode(Mode mode, uint8_t param, uint32_t fadeTime) {
  296 + switch (mode) {
  297 + case Mode::NORMAL:
  298 + mConstPower = DALI_MASK;
  299 + if (mMode != mode) {
  300 + mMode = mode;
  301 + mLamp->setLevel(level2driver(mMemoryController->getActualLevel()), fadeTime);
  302 + }
  303 + break;
  304 +
  305 + case Mode::CONSTANT_POWER:
  306 + if ((mMode != mode) || (mConstPower != param)) {
  307 + mMode = mode;
  308 + mConstPower = param;
  309 + mLamp->setLevel(level2driver(DALI_LEVEL_MAX), fadeTime);
  310 + }
  311 + break;
  312 + }
  313 +}
  314 +
292 } // namespace controller 315 } // namespace controller
293 } // namespace dali 316 } // namespace dali
src/dali/controller/lamp.hpp
@@ -48,21 +48,36 @@ public: @@ -48,21 +48,36 @@ public:
48 void setListener(Listener* listener); 48 void setListener(Listener* listener);
49 void notifyPowerDown(); 49 void notifyPowerDown();
50 50
51 - Status powerDirect(uint8_t level, uint64_t time);  
52 - Status powerOff();  
53 - Status powerScene(uint8_t scene);  
54 - Status powerUp();  
55 - Status powerDown();  
56 - Status powerStepUp();  
57 - Status powerStepDown();  
58 - Status powerOnAndStepUp();  
59 - Status powerStepDownAndOff();  
60 - Status powerRecallMinLevel();  
61 - Status powerRecallMaxLevel();  
62 - Status powerRecallOnLevel();  
63 - Status powerRecallFaliureLevel(); 51 + virtual Status powerDirect(uint8_t level, uint64_t time);
  52 + virtual Status powerOff();
  53 + virtual Status powerScene(uint8_t scene);
  54 + virtual Status powerUp();
  55 + virtual Status powerDown();
  56 + virtual Status powerStepUp();
  57 + virtual Status powerStepDown();
  58 + virtual Status powerOnAndStepUp();
  59 + virtual Status powerStepDownAndOff();
  60 + virtual Status powerRecallMinLevel();
  61 + virtual Status powerRecallMaxLevel();
  62 + virtual Status powerRecallOnLevel();
  63 + virtual Status powerRecallFaliureLevel();
64 Status enableDapcSequence(uint64_t time); 64 Status enableDapcSequence(uint64_t time);
65 65
  66 +protected:
  67 + ILamp* const getLamp() {
  68 + return mLamp;
  69 + }
  70 +
  71 + Memory* const getMemoryController() {
  72 + return mMemoryController;
  73 + }
  74 + enum class Mode {
  75 + NORMAL,
  76 + CONSTANT_POWER,
  77 + };
  78 +
  79 + void setMode(Mode mode, uint8_t param, uint32_t fadeTime);
  80 +
66 private: 81 private:
67 Lamp(const Lamp& other) = delete; 82 Lamp(const Lamp& other) = delete;
68 Lamp& operator=(const Lamp&) = delete; 83 Lamp& operator=(const Lamp&) = delete;
@@ -76,6 +91,7 @@ private: @@ -76,6 +91,7 @@ private:
76 91
77 ILamp* const mLamp; 92 ILamp* const mLamp;
78 Memory* const mMemoryController; 93 Memory* const mMemoryController;
  94 + Mode mMode;
79 ILamp::ILampState mLampState; 95 ILamp::ILampState mLampState;
80 Listener* mListener; 96 Listener* mListener;
81 bool mIsPowerSet; 97 bool mIsPowerSet;
src/dali/controller/memory.hpp
@@ -89,20 +89,18 @@ public: @@ -89,20 +89,18 @@ public:
89 uint8_t getActualLevel(); 89 uint8_t getActualLevel();
90 Status setActualLevel(uint8_t level); 90 Status setActualLevel(uint8_t level);
91 91
92 - bool isValid() { 92 + virtual bool isValid() {
93 return isDataValid() && isTempValid(); 93 return isDataValid() && isTempValid();
94 } 94 }
95 95
96 - bool isReset();  
97 - Status reset(); 96 + virtual bool isReset();
  97 + virtual Status reset();
98 98
99 uint16_t uint16FromDtrAndDtr1() { 99 uint16_t uint16FromDtrAndDtr1() {
100 return ((uint16_t) mRam.dtr1 << 8) | mRam.dtr; 100 return ((uint16_t) mRam.dtr1 << 8) | mRam.dtr;
101 } 101 }
102 102
103 -private:  
104 - Memory(const Memory& other) = delete;  
105 - Memory& operator=(const Memory&) = delete; 103 +protected:
106 104
107 typedef struct __attribute__((__packed__)) { 105 typedef struct __attribute__((__packed__)) {
108 uint32_t randomAddr; 106 uint32_t randomAddr;
@@ -112,28 +110,6 @@ private: @@ -112,28 +110,6 @@ private:
112 uint8_t reversed3; 110 uint8_t reversed3;
113 } Temp; 111 } Temp;
114 112
115 - typedef struct __attribute__((__packed__)) {  
116 - uint8_t size; // BANK mandatory field  
117 - uint8_t crc; // BANK mandatory field  
118 - uint8_t phisicalMinLevel;  
119 - uint8_t powerOnLevel;  
120 - uint8_t failureLevel;  
121 - uint8_t minLevel;  
122 - uint8_t maxLevel;  
123 - uint8_t fadeRate;  
124 - uint8_t fadeTime;  
125 - uint8_t shortAddr;  
126 - uint16_t groups;  
127 - uint8_t scene[16];  
128 - } Data;  
129 -  
130 - typedef struct {  
131 - uint8_t dtr;  
132 - uint8_t dtr1;  
133 - uint8_t dtr2;  
134 - uint32_t searchAddr;  
135 - } Ram;  
136 -  
137 Status internalBankWrite(uint8_t bank, uint8_t addr, uint8_t* data, uint8_t size); 113 Status internalBankWrite(uint8_t bank, uint8_t addr, uint8_t* data, uint8_t size);
138 114
139 Status writeTemp(uintptr_t addr, uint8_t* data, size_t size) { 115 Status writeTemp(uintptr_t addr, uint8_t* data, size_t size) {
@@ -165,8 +141,34 @@ private: @@ -165,8 +141,34 @@ private:
165 } 141 }
166 142
167 Status writeData(uintptr_t addr, uint8_t* data, size_t size) { 143 Status writeData(uintptr_t addr, uint8_t* data, size_t size) {
168 - return internalBankWrite(2, addr, data, size);  
169 - } 144 + return internalBankWrite(2, addr, data, size);
  145 + }
  146 +
  147 +private:
  148 + Memory(const Memory& other) = delete;
  149 + Memory& operator=(const Memory&) = delete;
  150 +
  151 + typedef struct __attribute__((__packed__)) {
  152 + uint8_t size; // BANK mandatory field
  153 + uint8_t crc; // BANK mandatory field
  154 + uint8_t phisicalMinLevel;
  155 + uint8_t powerOnLevel;
  156 + uint8_t failureLevel;
  157 + uint8_t minLevel;
  158 + uint8_t maxLevel;
  159 + uint8_t fadeRate;
  160 + uint8_t fadeTime;
  161 + uint8_t shortAddr;
  162 + uint16_t groups;
  163 + uint8_t scene[16];
  164 + } Data;
  165 +
  166 + typedef struct {
  167 + uint8_t dtr;
  168 + uint8_t dtr1;
  169 + uint8_t dtr2;
  170 + uint32_t searchAddr;
  171 + } Ram;
170 172
171 Status bankWrite(uint8_t bank, uint8_t addr, uint8_t data, bool force); 173 Status bankWrite(uint8_t bank, uint8_t addr, uint8_t data, bool force);
172 Status bankRead(uint8_t bank, uint8_t addr, uint8_t* data); 174 Status bankRead(uint8_t bank, uint8_t addr, uint8_t* data);
src/dali/controller/query_store.hpp
@@ -24,15 +24,15 @@ public: @@ -24,15 +24,15 @@ public:
24 virtual ~QueryStore() {}; 24 virtual ~QueryStore() {};
25 25
26 Status reset(); 26 Status reset();
27 - Status storeActualLevelInDtr(); 27 + virtual Status storeActualLevelInDtr();
28 Status storeDtrAsMaxLevel(); 28 Status storeDtrAsMaxLevel();
29 Status storeDtrAsMinLevel(); 29 Status storeDtrAsMinLevel();
30 - Status storeDtrAsFailureLevel();  
31 - Status storePowerOnLevel(); 30 + virtual Status storeDtrAsFailureLevel();
  31 + virtual Status storePowerOnLevel();
32 Status storeDtrAsFadeTime(); 32 Status storeDtrAsFadeTime();
33 Status storeDtrAsFadeRate(); 33 Status storeDtrAsFadeRate();
34 - Status storeDtrAsScene(uint8_t scene);  
35 - Status removeFromScene(uint8_t scene); 34 + virtual Status storeDtrAsScene(uint8_t scene);
  35 + virtual Status removeFromScene(uint8_t scene);
36 Status addToGroup(uint8_t group); 36 Status addToGroup(uint8_t group);
37 Status removeFromGroup(uint8_t group); 37 Status removeFromGroup(uint8_t group);
38 Status storeDtrAsShortAddr(); 38 Status storeDtrAsShortAddr();
@@ -40,23 +40,32 @@ public: @@ -40,23 +40,32 @@ public:
40 bool queryLampFailure(); 40 bool queryLampFailure();
41 bool queryLampPowerOn(); 41 bool queryLampPowerOn();
42 bool queryLampLimitError(); 42 bool queryLampLimitError();
43 - bool queryIsFading(); 43 + virtual bool queryIsFading();
44 bool queryResetState(); 44 bool queryResetState();
45 bool queryMissingShortAddr(); 45 bool queryMissingShortAddr();
46 bool queryLampPowerSet(); 46 bool queryLampPowerSet();
47 - uint8_t queryActualLevel(); 47 + virtual uint8_t queryActualLevel();
48 uint8_t queryMaxLevel(); 48 uint8_t queryMaxLevel();
49 uint8_t queryMinLevel(); 49 uint8_t queryMinLevel();
50 - uint8_t queryPowerOnLevel();  
51 - uint8_t queryFaliureLevel(); 50 + virtual uint8_t queryPowerOnLevel();
  51 + virtual uint8_t queryFaliureLevel();
52 uint8_t queryFadeRateOrTime(); 52 uint8_t queryFadeRateOrTime();
53 - uint8_t queryLevelForScene(uint8_t scene); 53 + virtual uint8_t queryLevelForScene(uint8_t scene);
54 uint8_t queryGroupsL(); 54 uint8_t queryGroupsL();
55 uint8_t queryGroupsH(); 55 uint8_t queryGroupsH();
56 uint8_t queryRandomAddrH(); 56 uint8_t queryRandomAddrH();
57 uint8_t queryRandomAddrM(); 57 uint8_t queryRandomAddrM();
58 uint8_t queryRandomAddrL(); 58 uint8_t queryRandomAddrL();
59 59
  60 +protected:
  61 + Memory* const getMemoryController() {
  62 + return mMemoryController;
  63 + }
  64 +
  65 + Lamp* const getLampController() {
  66 + return mLampController;
  67 + }
  68 +
60 private: 69 private:
61 bool isMemoryValid(); 70 bool isMemoryValid();
62 71
src/dali/slave.hpp
@@ -29,6 +29,28 @@ public: @@ -29,6 +29,28 @@ public:
29 void notifyPowerUp(); 29 void notifyPowerUp();
30 void notifyPowerDown(); 30 void notifyPowerDown();
31 31
  32 +protected:
  33 + Slave(controller::Memory* memory, controller::Lamp* lamp, controller::QueryStore* queryStore,
  34 + controller::Bus* busDriver, controller::Initialization* initializationController);
  35 +
  36 + controller::Memory* const getMemoryController() {
  37 + return mMemoryController;
  38 + }
  39 +
  40 + controller::Lamp* const getLampController() {
  41 + return mLampController;
  42 + }
  43 +
  44 + controller::QueryStore* const getQueryStoreController() {
  45 + return mQueryStoreController;
  46 + }
  47 +
  48 + Status sendAck(uint8_t ack) {
  49 + return mBusController->sendAck(ack);
  50 + }
  51 +
  52 + virtual Status handleHandleDaliDeviceTypeCommand(uint16_t repeat, Command cmd, uint8_t param, uint8_t device_type);
  53 +
32 private: 54 private:
33 Slave(const Slave& other) = delete; 55 Slave(const Slave& other) = delete;
34 Slave& operator=(const Slave&) = delete; 56 Slave& operator=(const Slave&) = delete;
@@ -44,15 +66,6 @@ private: @@ -44,15 +66,6 @@ private:
44 Status handleIgnoredCommand(Command cmd, uint8_t param) override; 66 Status handleIgnoredCommand(Command cmd, uint8_t param) override;
45 Status internalHandleDaliDT8Command(uint16_t repeat, Command cmd, uint8_t param); 67 Status internalHandleDaliDT8Command(uint16_t repeat, Command cmd, uint8_t param);
46 68
47 - Status sendAck(uint8_t ack) {  
48 - return mBusController->sendAck(ack);  
49 - }  
50 -  
51 - Status handleHandleDaliDeviceTypeCommand(uint16_t repeat, Command cmd, uint8_t param, uint8_t device_type);  
52 -  
53 - Slave(controller::Memory* memory, controller::Lamp* lamp, controller::QueryStore* queryStore,  
54 - controller::Bus* busDriver, controller::Initialization* initializationController);  
55 -  
56 controller::Memory* const mMemoryController; 69 controller::Memory* const mMemoryController;
57 controller::Lamp* const mLampController; 70 controller::Lamp* const mLampController;
58 controller::QueryStore* const mQueryStoreController; 71 controller::QueryStore* const mQueryStoreController;