Commit 9f80c4547b32414bb3b0fde1533b14b575f3160b
1 parent
5c13eea3
Prepare for others device types.
Showing
5 changed files
with
126 additions
and
63 deletions
src/dali/controller/lamp.cpp
| ... | ... | @@ -20,6 +20,7 @@ namespace controller { |
| 20 | 20 | Lamp::Lamp(ILamp* lamp, Memory* memoryController) |
| 21 | 21 | : mLamp(lamp) |
| 22 | 22 | , mMemoryController(memoryController) |
| 23 | + , mMode(Mode::NORMAL) | |
| 23 | 24 | , mLampState(ILamp::ILampState::OK) |
| 24 | 25 | , mListener(nullptr) |
| 25 | 26 | , mIsPowerSet(false) |
| ... | ... | @@ -66,7 +67,7 @@ bool Lamp::isPowerSet() { |
| 66 | 67 | } |
| 67 | 68 | |
| 68 | 69 | uint8_t Lamp::getLevel() { |
| 69 | - if (mLampState == ILamp::ILampState::OK) { | |
| 70 | + if ((mMode == Mode::NORMAL) && (mLampState == ILamp::ILampState::OK)) { | |
| 70 | 71 | return driver2level(mLamp->getLevel(), mMemoryController->getMinLevel()); |
| 71 | 72 | } |
| 72 | 73 | return mMemoryController->getActualLevel(); |
| ... | ... | @@ -89,7 +90,9 @@ Status Lamp::setLevel(uint8_t level, uint32_t fadeTime) { |
| 89 | 90 | level = maxLevel; |
| 90 | 91 | } |
| 91 | 92 | |
| 93 | + if ((mMode == Mode::NORMAL) || (level == 0)) { | |
| 92 | 94 | mLamp->setLevel(level2driver(level), fadeTime); |
| 95 | + } | |
| 93 | 96 | status = mMemoryController->setActualLevel(level); |
| 94 | 97 | } |
| 95 | 98 | return status; |
| ... | ... | @@ -289,5 +292,25 @@ void Lamp::onLampStateChnaged(ILamp::ILampState state) { |
| 289 | 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 | 315 | } // namespace controller |
| 293 | 316 | } // namespace dali | ... | ... |
src/dali/controller/lamp.hpp
| ... | ... | @@ -48,21 +48,36 @@ public: |
| 48 | 48 | void setListener(Listener* listener); |
| 49 | 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 | 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 | 81 | private: |
| 67 | 82 | Lamp(const Lamp& other) = delete; |
| 68 | 83 | Lamp& operator=(const Lamp&) = delete; |
| ... | ... | @@ -76,6 +91,7 @@ private: |
| 76 | 91 | |
| 77 | 92 | ILamp* const mLamp; |
| 78 | 93 | Memory* const mMemoryController; |
| 94 | + Mode mMode; | |
| 79 | 95 | ILamp::ILampState mLampState; |
| 80 | 96 | Listener* mListener; |
| 81 | 97 | bool mIsPowerSet; | ... | ... |
src/dali/controller/memory.hpp
| ... | ... | @@ -89,20 +89,18 @@ public: |
| 89 | 89 | uint8_t getActualLevel(); |
| 90 | 90 | Status setActualLevel(uint8_t level); |
| 91 | 91 | |
| 92 | - bool isValid() { | |
| 92 | + virtual bool isValid() { | |
| 93 | 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 | 99 | uint16_t uint16FromDtrAndDtr1() { |
| 100 | 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 | 105 | typedef struct __attribute__((__packed__)) { |
| 108 | 106 | uint32_t randomAddr; |
| ... | ... | @@ -112,28 +110,6 @@ private: |
| 112 | 110 | uint8_t reversed3; |
| 113 | 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 | 113 | Status internalBankWrite(uint8_t bank, uint8_t addr, uint8_t* data, uint8_t size); |
| 138 | 114 | |
| 139 | 115 | Status writeTemp(uintptr_t addr, uint8_t* data, size_t size) { |
| ... | ... | @@ -165,8 +141,34 @@ private: |
| 165 | 141 | } |
| 166 | 142 | |
| 167 | 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 | 173 | Status bankWrite(uint8_t bank, uint8_t addr, uint8_t data, bool force); |
| 172 | 174 | Status bankRead(uint8_t bank, uint8_t addr, uint8_t* data); | ... | ... |
src/dali/controller/query_store.hpp
| ... | ... | @@ -24,15 +24,15 @@ public: |
| 24 | 24 | virtual ~QueryStore() {}; |
| 25 | 25 | |
| 26 | 26 | Status reset(); |
| 27 | - Status storeActualLevelInDtr(); | |
| 27 | + virtual Status storeActualLevelInDtr(); | |
| 28 | 28 | Status storeDtrAsMaxLevel(); |
| 29 | 29 | Status storeDtrAsMinLevel(); |
| 30 | - Status storeDtrAsFailureLevel(); | |
| 31 | - Status storePowerOnLevel(); | |
| 30 | + virtual Status storeDtrAsFailureLevel(); | |
| 31 | + virtual Status storePowerOnLevel(); | |
| 32 | 32 | Status storeDtrAsFadeTime(); |
| 33 | 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 | 36 | Status addToGroup(uint8_t group); |
| 37 | 37 | Status removeFromGroup(uint8_t group); |
| 38 | 38 | Status storeDtrAsShortAddr(); |
| ... | ... | @@ -40,23 +40,32 @@ public: |
| 40 | 40 | bool queryLampFailure(); |
| 41 | 41 | bool queryLampPowerOn(); |
| 42 | 42 | bool queryLampLimitError(); |
| 43 | - bool queryIsFading(); | |
| 43 | + virtual bool queryIsFading(); | |
| 44 | 44 | bool queryResetState(); |
| 45 | 45 | bool queryMissingShortAddr(); |
| 46 | 46 | bool queryLampPowerSet(); |
| 47 | - uint8_t queryActualLevel(); | |
| 47 | + virtual uint8_t queryActualLevel(); | |
| 48 | 48 | uint8_t queryMaxLevel(); |
| 49 | 49 | uint8_t queryMinLevel(); |
| 50 | - uint8_t queryPowerOnLevel(); | |
| 51 | - uint8_t queryFaliureLevel(); | |
| 50 | + virtual uint8_t queryPowerOnLevel(); | |
| 51 | + virtual uint8_t queryFaliureLevel(); | |
| 52 | 52 | uint8_t queryFadeRateOrTime(); |
| 53 | - uint8_t queryLevelForScene(uint8_t scene); | |
| 53 | + virtual uint8_t queryLevelForScene(uint8_t scene); | |
| 54 | 54 | uint8_t queryGroupsL(); |
| 55 | 55 | uint8_t queryGroupsH(); |
| 56 | 56 | uint8_t queryRandomAddrH(); |
| 57 | 57 | uint8_t queryRandomAddrM(); |
| 58 | 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 | 69 | private: |
| 61 | 70 | bool isMemoryValid(); |
| 62 | 71 | ... | ... |
src/dali/slave.hpp
| ... | ... | @@ -29,6 +29,28 @@ public: |
| 29 | 29 | void notifyPowerUp(); |
| 30 | 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 | 54 | private: |
| 33 | 55 | Slave(const Slave& other) = delete; |
| 34 | 56 | Slave& operator=(const Slave&) = delete; |
| ... | ... | @@ -44,15 +66,6 @@ private: |
| 44 | 66 | Status handleIgnoredCommand(Command cmd, uint8_t param) override; |
| 45 | 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 | 69 | controller::Memory* const mMemoryController; |
| 57 | 70 | controller::Lamp* const mLampController; |
| 58 | 71 | controller::QueryStore* const mQueryStoreController; | ... | ... |