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