memory_dt8.hpp
5.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/*
* Copyright (c) 2015-2016, Arkadiusz Materek (arekmat@poczta.fm)
*
* Licensed under GNU General Public License 3.0 or later.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef DALI_MEMORY_DT8_CONTROLLER_HPP_
#define DALI_MEMORY_DT8_CONTROLLER_HPP_
#include <dali/config_dt8.hpp>
#ifdef DALI_DT8
#include "color_dt8.hpp"
#include "memory.hpp"
namespace dali {
namespace controller {
class MemoryDT8: public Memory {
public:
explicit MemoryDT8(IMemory* memory, const DefaultsDT8* defaults);
Status setPowerOnColor(const ColorDT8& color);
const ColorDT8& getPowerOnColor();
Status setFaliureColor(const ColorDT8& color);
const ColorDT8& getFaliureColor();
Status setColorForScene(uint8_t scene, const ColorDT8& color);
const ColorDT8& getColorForScene(uint8_t scene);
uint8_t getFeaturesStatus();
Status setFeaturesStatus(uint8_t value);
Status setTemporaryColor(const ColorDT8& color);
const ColorDT8& getTemporaryColor();
Status resetTemporaryColor();
Status setReportColor(const ColorDT8& color);
const ColorDT8& getReportColor();
Status resetReportColor();
Status copyReportToTemporary();
const ColorDT8& getActualColor();
Status setActualColor(const ColorDT8& color);
bool isValid() override {
return Memory::isValid() && isValidDataDT8() && isValidTempDT8();
}
bool isReset() override;
Status reset() override;
const Primary* getPrimaries() {
return mConfigDT8->primary;
}
#if defined(DALI_DT8_SUPPORT_XY) || defined(DALI_DT8_SUPPORT_PRIMARY_N)
Status setTemporaryCoordinateX(uint16_t value);
Status setTemporaryCoordinateY(uint16_t value);
#if !defined(DALI_DT8_SUPPORT_XY)
uint16_t getTemporaryCooridanateX();
uint16_t getTemporaryCooridanateY();
#endif // !defined(DALI_DT8_SUPPORT_XY)
#endif // defined(DALI_DT8_SUPPORT_XY) || defined(DALI_DT8_SUPPORT_PRIMARY_N)
#ifdef DALI_DT8_SUPPORT_TC
Status setTemporaryColorTemperature(uint16_t temperature);
Status setColorTemperatureCoolest(uint16_t temperature);
uint16_t getColorTemperatureCoolest();
Status setColorTemperatureWarmest(uint16_t temperature);
uint16_t getColorTemperatureWarmest();
Status setColorTemperaturePhisicalCoolest(uint16_t temperature);
uint16_t getColorTemperaturePhisicalCoolest();
Status setColorTemperaturePhisicalWarmest(uint16_t temperature);
uint16_t getColorTemperaturePhisicalWarmest();
#endif // DALI_DT8_SUPPORT_TC
Status storePrimaryTy(uint8_t n, uint16_t ty);
Status storePrimaryCoordinate(uint8_t n, uint16_t x, uint16_t y);
#ifdef DALI_DT8_SUPPORT_PRIMARY_N
Status setTemporaryPrimaryLevel(uint8_t n, uint16_t level);
uint16_t getPrimaryTy(uint8_t n);
uint16_t getPrimaryCoordinateX(uint8_t n);
uint16_t getPrimaryCoordinateY(uint8_t n);
#endif // DALI_DT8_SUPPORT_PRIMARY_N
const DefaultsDT8* getDefaults() {
return mDefaults;
}
private:
MemoryDT8(const MemoryDT8& other) = delete;
MemoryDT8& operator=(const MemoryDT8&) = delete;
bool isColorValid(const ColorDT8& color, bool canTypeBeMask);
bool isValidConfigDT8();
bool isValidDataDT8();
bool isValidTempDT8();
void resetRamDT8(bool initialize);
void resetConfigDT8();
void resetDataDT8(bool initialize);
void resetTempDT8(bool initialize);
Status writeConfig8(uintptr_t addr, uint8_t data) {
return internalBankWrite(3, addr, &data, sizeof(uint8_t));
}
Status writeConfig16(uintptr_t addr, uint16_t data) {
return internalBankWrite(3, addr, (uint8_t*)&data, sizeof(uint16_t));
}
Status writeData8(uintptr_t addr, uint8_t data) {
return internalBankWrite(4, addr, &data, sizeof(uint8_t));
}
Status writeData16(uintptr_t addr, uint16_t data) {
return internalBankWrite(4, addr, (uint8_t*)&data, sizeof(uint16_t));
}
Status writeData32(uintptr_t addr, uint32_t data) {
return internalBankWrite(4, addr, (uint8_t*)&data, sizeof(uint16_t));
}
Status writeDataColor(uintptr_t addr, const ColorDT8* color) {
return internalBankWrite(4, addr, (uint8_t*) color, sizeof(ColorDT8));
}
Status writeTempColor(uintptr_t addr, const ColorDT8* color) {
return writeTemp(addr, (uint8_t*) color, sizeof(ColorDT8));
}
typedef struct __attribute__((__packed__)) {
uint8_t size; // BANK mandatory field
uint8_t crc; // BANK mandatory field
uint8_t protection;
uint8_t version;
uint16_t colorTemperaturePhisicalCoolest;
uint16_t colorTemperaturePhisicalWarmest;
Primary primary[6];
} ConfigDT8;
typedef struct __attribute__((__packed__)) {
uint8_t size; // BANK mandatory field
uint8_t crc; // BANK mandatory field
ColorDT8 powerOnColor;
ColorDT8 failureColor;
ColorDT8 sceneColor[16];
#ifdef DALI_DT8_SUPPORT_TC
uint16_t colorTemperatureCoolest;
uint16_t colorTemperatureWarmest;
#endif
} DataDT8;
typedef struct {
ColorDT8 actualColor;
} TempDT8;
typedef struct {
ColorDT8 temporaryColor;
#if !defined(DALI_DT8_SUPPORT_XY) && defined(DALI_DT8_SUPPORT_PRIMARY_N)
uint16_t temporaryX;
uint16_t temporaryY;
#endif
ColorDT8 reportColor;
uint8_t featuresStatus;
} RamDT8;
RamDT8 mRamDT8;
const DefaultsDT8* mDefaults;
const ConfigDT8* mConfigDT8;
const DataDT8* mDataDT8;
const TempDT8* mTempDT8;
};
} // namespace controller
} // namespace dali
#endif // DALI_DT8
#endif // DALI_MEMORY_DT8_CONTROLLER_HPP_