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,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; |