108 lines
No EOL
2.7 KiB
C++
108 lines
No EOL
2.7 KiB
C++
#include <MiLightRemoteConfig.h>
|
|
#include <MiLightRemoteType.h>
|
|
|
|
/**
|
|
* IMPORTANT NOTE: These should be in the same order as MiLightRemoteType.
|
|
*/
|
|
const MiLightRemoteConfig* MiLightRemoteConfig::ALL_REMOTES[] = {
|
|
&FUT096Config, // rgbw
|
|
&FUT007Config, // cct
|
|
&FUT092Config, // rgb+cct
|
|
&FUT098Config, // rgb
|
|
&FUT089Config, // 8-group rgb+cct (b8, fut089)
|
|
&FUT091Config,
|
|
&FUT020Config
|
|
};
|
|
|
|
const size_t MiLightRemoteConfig::NUM_REMOTES = size(ALL_REMOTES);
|
|
|
|
const MiLightRemoteConfig* MiLightRemoteConfig::fromType(const String& type) {
|
|
return fromType(MiLightRemoteTypeHelpers::remoteTypeFromString(type));
|
|
}
|
|
|
|
const MiLightRemoteConfig* MiLightRemoteConfig::fromType(MiLightRemoteType type) {
|
|
if (type == REMOTE_TYPE_UNKNOWN || type >= size(ALL_REMOTES)) {
|
|
Serial.print(F("MiLightRemoteConfig::fromType: ERROR - tried to fetch remote config for unknown type: "));
|
|
Serial.println(type);
|
|
return NULL;
|
|
}
|
|
|
|
return ALL_REMOTES[type];
|
|
}
|
|
|
|
const MiLightRemoteConfig* MiLightRemoteConfig::fromReceivedPacket(
|
|
const MiLightRadioConfig& radioConfig,
|
|
const uint8_t* packet,
|
|
const size_t len
|
|
) {
|
|
for (size_t i = 0; i < MiLightRemoteConfig::NUM_REMOTES; i++) {
|
|
const MiLightRemoteConfig* config = MiLightRemoteConfig::ALL_REMOTES[i];
|
|
if (&config->radioConfig == &radioConfig
|
|
&& config->packetFormatter->canHandle(packet, len)) {
|
|
return config;
|
|
}
|
|
}
|
|
|
|
// This can happen under normal circumstances, so not an error condition
|
|
#ifdef DEBUG_PRINTF
|
|
Serial.println(F("MiLightRemoteConfig::fromReceivedPacket: ERROR - tried to fetch remote config for unknown packet"));
|
|
#endif
|
|
|
|
return NULL;
|
|
}
|
|
|
|
const MiLightRemoteConfig FUT096Config( //rgbw
|
|
new RgbwPacketFormatter(),
|
|
MiLightRadioConfig::ALL_CONFIGS[0],
|
|
REMOTE_TYPE_RGBW,
|
|
"rgbw",
|
|
4
|
|
);
|
|
|
|
const MiLightRemoteConfig FUT007Config( //cct
|
|
new CctPacketFormatter(),
|
|
MiLightRadioConfig::ALL_CONFIGS[1],
|
|
REMOTE_TYPE_CCT,
|
|
"cct",
|
|
4
|
|
);
|
|
|
|
const MiLightRemoteConfig FUT091Config( //v2 cct
|
|
new FUT091PacketFormatter(),
|
|
MiLightRadioConfig::ALL_CONFIGS[2],
|
|
REMOTE_TYPE_FUT091,
|
|
"fut091",
|
|
4
|
|
);
|
|
|
|
const MiLightRemoteConfig FUT092Config( //rgb+cct
|
|
new RgbCctPacketFormatter(),
|
|
MiLightRadioConfig::ALL_CONFIGS[2],
|
|
REMOTE_TYPE_RGB_CCT,
|
|
"rgb_cct",
|
|
4
|
|
);
|
|
|
|
const MiLightRemoteConfig FUT089Config( //rgb+cct B8 / FUT089
|
|
new FUT089PacketFormatter(),
|
|
MiLightRadioConfig::ALL_CONFIGS[2],
|
|
REMOTE_TYPE_FUT089,
|
|
"fut089",
|
|
8
|
|
);
|
|
|
|
const MiLightRemoteConfig FUT098Config( //rgb
|
|
new RgbPacketFormatter(),
|
|
MiLightRadioConfig::ALL_CONFIGS[3],
|
|
REMOTE_TYPE_RGB,
|
|
"rgb",
|
|
0
|
|
);
|
|
|
|
const MiLightRemoteConfig FUT020Config(
|
|
new FUT020PacketFormatter(),
|
|
MiLightRadioConfig::ALL_CONFIGS[4],
|
|
REMOTE_TYPE_FUT020,
|
|
"fut020",
|
|
0
|
|
); |