slave_dt8.cpp
5.02 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
/*
* 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.
*/
#include "slave_dt8.hpp"
#ifdef DALI_DT8
namespace dali {
// static
Slave* SlaveDT8::create(IMemory* memoryDriver, ILamp* lampDriver, IBus* busDriver, ITimer* timer) {
controller::MemoryDT8* memory = new controller::MemoryDT8(memoryDriver, &kDefaultsDT8);
controller::LampDT8* lamp = new controller::LampDT8(lampDriver, memory);
controller::QueryStoreDT8* queryStore = new controller::QueryStoreDT8(memory, lamp);
controller::Bus* bus = new controller::Bus(busDriver);
controller::Initialization* initialization = new controller::Initialization(timer, memory);
return new SlaveDT8(memory, lamp, queryStore, bus, initialization);
}
SlaveDT8::SlaveDT8(controller::Memory* memory, controller::Lamp* lamp, controller::QueryStore* queryStore,
controller::Bus* bus, controller::Initialization* initialization) :
Slave(memory, lamp, queryStore, bus, initialization) {
}
Status SlaveDT8::handleHandleDaliDeviceTypeCommand(uint16_t repeatCount, Command cmd, uint8_t param,
uint8_t device_type) {
if (device_type != 8) {
return Status::INVALID;
}
CommandDT8 cmdDT8 = (CommandDT8)cmd;
switch (cmdDT8) {
case CommandDT8::SET_TEMPORARY_X_COORDINATE_WORD:
return getQueryStoreControllerDT8()->setTemporaryCoordinateX();
case CommandDT8::SET_TEMPORARY_Y_COORDINATE_WORD:
return getQueryStoreControllerDT8()->setTemporaryCoordinateY();
case CommandDT8::ACTIVATE:
return getLampControllerDT8()->activate();
#ifdef DALI_DT8_SUPPORT_XY
case CommandDT8::X_COORDINATE_STEP_UP:
return getLampControllerDT8()->coordinateStepUpX();
case CommandDT8::X_COORDINATE_STEP_DOWN:
return getLampControllerDT8()->coordinateStepDownX();
case CommandDT8::Y_COORDINATE_STEP_UP:
return getLampControllerDT8()->coordinateStepUpY();
case CommandDT8::Y_COORDINATE_STEP_DOWN:
return getLampControllerDT8()->coordinateStepDownY();
#endif // DALI_DT8_SUPPORT_XY
case CommandDT8::SET_TEMPORARY_COLOUR_TEMPERATURE:
return getQueryStoreControllerDT8()->setTemporaryColorTemperature();
#ifdef DALI_DT8_SUPPORT_TC
case CommandDT8::COLOUR_TEMPERATURE_STEP_COOLER:
return getLampControllerDT8()->colorTemperatureStepCooler();
case CommandDT8::COLOUR_TEMPERATURE_STEP_WARMER:
return getLampControllerDT8()->colorTemperatureStepWarmer();
#endif // DALI_DT8_SUPPORT_TC
case CommandDT8::SET_TEMPORARY_PRIMARY_N_DIMLEVEL:
return getQueryStoreControllerDT8()->setTemporaryPrimaryLevel();
case CommandDT8::SET_TEMPORARY_RGB_DIMLEVEL:
return getQueryStoreControllerDT8()->setTemporaryRGB();
case CommandDT8::SET_TEMPORARY_WAF_DIMLEVEL:
return getQueryStoreControllerDT8()->setTemporaryWAF();
case CommandDT8::SET_TEMPORARY_RGBWAF_CONTROL:
return getQueryStoreControllerDT8()->setTemporaryRGBWAFControl();
case CommandDT8::COPY_REPORT_TO_TEMPORARY:
return getMemoryControllerDT8()->copyReportToTemporary();
#ifdef DALI_DT8_SUPPORT_PRIMARY_N
case CommandDT8::STORE_TY_PRIMARY_N:
if (repeatCount == 0) {
return Status::REPEAT_REQUIRED;
}
return getQueryStoreControllerDT8()->storePrimaryTY();
case CommandDT8::STORE_XY_COORDINATE_PRIMARY_N:
if (repeatCount == 0) {
return Status::REPEAT_REQUIRED;
}
return getQueryStoreControllerDT8()->storePrimaryCoordinate();
#endif // DALI_DT8_SUPPORT_PRIMARY_N
#ifdef DALI_DT8_SUPPORT_TC
case CommandDT8::STORE_COLOUR_TEMPERATURE_LIMIT:
if (repeatCount == 0) {
return Status::REPEAT_REQUIRED;
}
return getQueryStoreControllerDT8()->storeColourTemperatureLimit();
#endif // DALI_DT8_SUPPORT_TC
case CommandDT8::STORE_GEAR_FEATURES_STATUS:
if (repeatCount == 0) {
return Status::REPEAT_REQUIRED;
}
return getQueryStoreControllerDT8()->storeGearFeatures();
case CommandDT8::START_AUTO_CALIBRATION:
if (repeatCount == 0) {
return Status::REPEAT_REQUIRED;
}
// TODO Implement in the future
return Status::INVALID;
case CommandDT8::QUERY_GEAR_FEATURES_STATUS:
return sendAck(getQueryStoreControllerDT8()->queryGearFeatures());
case CommandDT8::QUERY_COLOUR_STATUS:
return sendAck(getQueryStoreControllerDT8()->queryColorStatus());
case CommandDT8::QUERY_COLOUR_TYPE_FEATURES:
return sendAck(getQueryStoreControllerDT8()->queryColorTypes());
case CommandDT8::QUERY_COLOUR_VALUE: {
if (getQueryStoreControllerDT8()->queryColorValue() == Status::OK) {
return sendAck(getMemoryController()->getDTR1());
}
return Status::INVALID;
}
case CommandDT8::QUERY_EXTENDED_VERSION_NUMBER:
return sendAck(2);
default:
return Status::INVALID;
}
}
} // namespace dali
#endif // DALI_DT8