From 9f80c4547b32414bb3b0fde1533b14b575f3160b Mon Sep 17 00:00:00 2001 From: Arkadiusz Materek Date: Tue, 8 Mar 2016 01:04:52 +0100 Subject: [PATCH] Prepare for others device types. --- src/dali/controller/lamp.cpp | 25 ++++++++++++++++++++++++- src/dali/controller/lamp.hpp | 42 +++++++++++++++++++++++++++++------------- src/dali/controller/memory.hpp | 62 ++++++++++++++++++++++++++++++++------------------------------ src/dali/controller/query_store.hpp | 29 +++++++++++++++++++---------- src/dali/slave.hpp | 31 ++++++++++++++++++++++--------- 5 files changed, 126 insertions(+), 63 deletions(-) diff --git a/src/dali/controller/lamp.cpp b/src/dali/controller/lamp.cpp index 4b5bd3f..2524b89 100644 --- a/src/dali/controller/lamp.cpp +++ b/src/dali/controller/lamp.cpp @@ -20,6 +20,7 @@ namespace controller { Lamp::Lamp(ILamp* lamp, Memory* memoryController) : mLamp(lamp) , mMemoryController(memoryController) + , mMode(Mode::NORMAL) , mLampState(ILamp::ILampState::OK) , mListener(nullptr) , mIsPowerSet(false) @@ -66,7 +67,7 @@ bool Lamp::isPowerSet() { } uint8_t Lamp::getLevel() { - if (mLampState == ILamp::ILampState::OK) { + if ((mMode == Mode::NORMAL) && (mLampState == ILamp::ILampState::OK)) { return driver2level(mLamp->getLevel(), mMemoryController->getMinLevel()); } return mMemoryController->getActualLevel(); @@ -89,7 +90,9 @@ Status Lamp::setLevel(uint8_t level, uint32_t fadeTime) { level = maxLevel; } + if ((mMode == Mode::NORMAL) || (level == 0)) { mLamp->setLevel(level2driver(level), fadeTime); + } status = mMemoryController->setActualLevel(level); } return status; @@ -289,5 +292,25 @@ void Lamp::onLampStateChnaged(ILamp::ILampState state) { mListener->onLampStateChnaged(state); } +void Lamp::setMode(Mode mode, uint8_t param, uint32_t fadeTime) { + switch (mode) { + case Mode::NORMAL: + mConstPower = DALI_MASK; + if (mMode != mode) { + mMode = mode; + mLamp->setLevel(level2driver(mMemoryController->getActualLevel()), fadeTime); + } + break; + + case Mode::CONSTANT_POWER: + if ((mMode != mode) || (mConstPower != param)) { + mMode = mode; + mConstPower = param; + mLamp->setLevel(level2driver(DALI_LEVEL_MAX), fadeTime); + } + break; + } +} + } // namespace controller } // namespace dali diff --git a/src/dali/controller/lamp.hpp b/src/dali/controller/lamp.hpp index acb8986..2a0a3ef 100644 --- a/src/dali/controller/lamp.hpp +++ b/src/dali/controller/lamp.hpp @@ -48,21 +48,36 @@ public: void setListener(Listener* listener); void notifyPowerDown(); - Status powerDirect(uint8_t level, uint64_t time); - Status powerOff(); - Status powerScene(uint8_t scene); - Status powerUp(); - Status powerDown(); - Status powerStepUp(); - Status powerStepDown(); - Status powerOnAndStepUp(); - Status powerStepDownAndOff(); - Status powerRecallMinLevel(); - Status powerRecallMaxLevel(); - Status powerRecallOnLevel(); - Status powerRecallFaliureLevel(); + virtual Status powerDirect(uint8_t level, uint64_t time); + virtual Status powerOff(); + virtual Status powerScene(uint8_t scene); + virtual Status powerUp(); + virtual Status powerDown(); + virtual Status powerStepUp(); + virtual Status powerStepDown(); + virtual Status powerOnAndStepUp(); + virtual Status powerStepDownAndOff(); + virtual Status powerRecallMinLevel(); + virtual Status powerRecallMaxLevel(); + virtual Status powerRecallOnLevel(); + virtual Status powerRecallFaliureLevel(); Status enableDapcSequence(uint64_t time); +protected: + ILamp* const getLamp() { + return mLamp; + } + + Memory* const getMemoryController() { + return mMemoryController; + } + enum class Mode { + NORMAL, + CONSTANT_POWER, + }; + + void setMode(Mode mode, uint8_t param, uint32_t fadeTime); + private: Lamp(const Lamp& other) = delete; Lamp& operator=(const Lamp&) = delete; @@ -76,6 +91,7 @@ private: ILamp* const mLamp; Memory* const mMemoryController; + Mode mMode; ILamp::ILampState mLampState; Listener* mListener; bool mIsPowerSet; diff --git a/src/dali/controller/memory.hpp b/src/dali/controller/memory.hpp index 80db93f..1bcff1c 100644 --- a/src/dali/controller/memory.hpp +++ b/src/dali/controller/memory.hpp @@ -89,20 +89,18 @@ public: uint8_t getActualLevel(); Status setActualLevel(uint8_t level); - bool isValid() { + virtual bool isValid() { return isDataValid() && isTempValid(); } - bool isReset(); - Status reset(); + virtual bool isReset(); + virtual Status reset(); uint16_t uint16FromDtrAndDtr1() { return ((uint16_t) mRam.dtr1 << 8) | mRam.dtr; } -private: - Memory(const Memory& other) = delete; - Memory& operator=(const Memory&) = delete; +protected: typedef struct __attribute__((__packed__)) { uint32_t randomAddr; @@ -112,28 +110,6 @@ private: uint8_t reversed3; } Temp; - typedef struct __attribute__((__packed__)) { - uint8_t size; // BANK mandatory field - uint8_t crc; // BANK mandatory field - uint8_t phisicalMinLevel; - uint8_t powerOnLevel; - uint8_t failureLevel; - uint8_t minLevel; - uint8_t maxLevel; - uint8_t fadeRate; - uint8_t fadeTime; - uint8_t shortAddr; - uint16_t groups; - uint8_t scene[16]; - } Data; - - typedef struct { - uint8_t dtr; - uint8_t dtr1; - uint8_t dtr2; - uint32_t searchAddr; - } Ram; - Status internalBankWrite(uint8_t bank, uint8_t addr, uint8_t* data, uint8_t size); Status writeTemp(uintptr_t addr, uint8_t* data, size_t size) { @@ -165,8 +141,34 @@ private: } Status writeData(uintptr_t addr, uint8_t* data, size_t size) { - return internalBankWrite(2, addr, data, size); - } + return internalBankWrite(2, addr, data, size); + } + +private: + Memory(const Memory& other) = delete; + Memory& operator=(const Memory&) = delete; + + typedef struct __attribute__((__packed__)) { + uint8_t size; // BANK mandatory field + uint8_t crc; // BANK mandatory field + uint8_t phisicalMinLevel; + uint8_t powerOnLevel; + uint8_t failureLevel; + uint8_t minLevel; + uint8_t maxLevel; + uint8_t fadeRate; + uint8_t fadeTime; + uint8_t shortAddr; + uint16_t groups; + uint8_t scene[16]; + } Data; + + typedef struct { + uint8_t dtr; + uint8_t dtr1; + uint8_t dtr2; + uint32_t searchAddr; + } Ram; Status bankWrite(uint8_t bank, uint8_t addr, uint8_t data, bool force); Status bankRead(uint8_t bank, uint8_t addr, uint8_t* data); diff --git a/src/dali/controller/query_store.hpp b/src/dali/controller/query_store.hpp index 4c9d680..444020c 100644 --- a/src/dali/controller/query_store.hpp +++ b/src/dali/controller/query_store.hpp @@ -24,15 +24,15 @@ public: virtual ~QueryStore() {}; Status reset(); - Status storeActualLevelInDtr(); + virtual Status storeActualLevelInDtr(); Status storeDtrAsMaxLevel(); Status storeDtrAsMinLevel(); - Status storeDtrAsFailureLevel(); - Status storePowerOnLevel(); + virtual Status storeDtrAsFailureLevel(); + virtual Status storePowerOnLevel(); Status storeDtrAsFadeTime(); Status storeDtrAsFadeRate(); - Status storeDtrAsScene(uint8_t scene); - Status removeFromScene(uint8_t scene); + virtual Status storeDtrAsScene(uint8_t scene); + virtual Status removeFromScene(uint8_t scene); Status addToGroup(uint8_t group); Status removeFromGroup(uint8_t group); Status storeDtrAsShortAddr(); @@ -40,23 +40,32 @@ public: bool queryLampFailure(); bool queryLampPowerOn(); bool queryLampLimitError(); - bool queryIsFading(); + virtual bool queryIsFading(); bool queryResetState(); bool queryMissingShortAddr(); bool queryLampPowerSet(); - uint8_t queryActualLevel(); + virtual uint8_t queryActualLevel(); uint8_t queryMaxLevel(); uint8_t queryMinLevel(); - uint8_t queryPowerOnLevel(); - uint8_t queryFaliureLevel(); + virtual uint8_t queryPowerOnLevel(); + virtual uint8_t queryFaliureLevel(); uint8_t queryFadeRateOrTime(); - uint8_t queryLevelForScene(uint8_t scene); + virtual uint8_t queryLevelForScene(uint8_t scene); uint8_t queryGroupsL(); uint8_t queryGroupsH(); uint8_t queryRandomAddrH(); uint8_t queryRandomAddrM(); uint8_t queryRandomAddrL(); +protected: + Memory* const getMemoryController() { + return mMemoryController; + } + + Lamp* const getLampController() { + return mLampController; + } + private: bool isMemoryValid(); diff --git a/src/dali/slave.hpp b/src/dali/slave.hpp index 398049b..fe75090 100644 --- a/src/dali/slave.hpp +++ b/src/dali/slave.hpp @@ -29,6 +29,28 @@ public: void notifyPowerUp(); void notifyPowerDown(); +protected: + Slave(controller::Memory* memory, controller::Lamp* lamp, controller::QueryStore* queryStore, + controller::Bus* busDriver, controller::Initialization* initializationController); + + controller::Memory* const getMemoryController() { + return mMemoryController; + } + + controller::Lamp* const getLampController() { + return mLampController; + } + + controller::QueryStore* const getQueryStoreController() { + return mQueryStoreController; + } + + Status sendAck(uint8_t ack) { + return mBusController->sendAck(ack); + } + + virtual Status handleHandleDaliDeviceTypeCommand(uint16_t repeat, Command cmd, uint8_t param, uint8_t device_type); + private: Slave(const Slave& other) = delete; Slave& operator=(const Slave&) = delete; @@ -44,15 +66,6 @@ private: Status handleIgnoredCommand(Command cmd, uint8_t param) override; Status internalHandleDaliDT8Command(uint16_t repeat, Command cmd, uint8_t param); - Status sendAck(uint8_t ack) { - return mBusController->sendAck(ack); - } - - Status handleHandleDaliDeviceTypeCommand(uint16_t repeat, Command cmd, uint8_t param, uint8_t device_type); - - Slave(controller::Memory* memory, controller::Lamp* lamp, controller::QueryStore* queryStore, - controller::Bus* busDriver, controller::Initialization* initializationController); - controller::Memory* const mMemoryController; controller::Lamp* const mLampController; controller::QueryStore* const mQueryStoreController; -- libgit2 0.21.4