mirror of
https://github.com/crankyoldgit/IRremoteESP8266.git
synced 2026-01-12 00:05:10 +08:00
[HAIER_AC176/HAIER_AC_YRW02] Add support A/B unit setting (#1672)
* [HAIER_AC176/HAIER_AC_YRW02] Add support A/B unit setting * Add `model` parameter in `IRac::haier176()` * Add `Model` parameter in `IRHaierAC176` state * Add `getModel()` and `setModel()` methods * Bump heap size for `toString()` method * Update `toString()` and `modelToStr()` methods * Rename `Button` from `kHaierAcYrw02ButtonCF` to `kHaierAcYrw02ButtonCFAB` * Add new and update related tests
This commit is contained in:
committed by
GitHub
parent
42ebfd3e43
commit
3f82ade941
16
src/IRac.cpp
16
src/IRac.cpp
@@ -1114,6 +1114,7 @@ void IRac::haier(IRHaierAC *ac,
|
|||||||
#if SEND_HAIER_AC176
|
#if SEND_HAIER_AC176
|
||||||
/// Send a Haier 176 bit A/C message with the supplied settings.
|
/// Send a Haier 176 bit A/C message with the supplied settings.
|
||||||
/// @param[in, out] ac A Ptr to an IRHaierAC176 object to use.
|
/// @param[in, out] ac A Ptr to an IRHaierAC176 object to use.
|
||||||
|
/// @param[in] model The A/C model to use.
|
||||||
/// @param[in] on The power setting.
|
/// @param[in] on The power setting.
|
||||||
/// @param[in] mode The operation mode setting.
|
/// @param[in] mode The operation mode setting.
|
||||||
/// @param[in] celsius Temperature units. True is Celsius, False is Fahrenheit.
|
/// @param[in] celsius Temperature units. True is Celsius, False is Fahrenheit.
|
||||||
@@ -1125,7 +1126,7 @@ void IRac::haier(IRHaierAC *ac,
|
|||||||
/// @param[in] quiet Run the device in quiet mode.
|
/// @param[in] quiet Run the device in quiet mode.
|
||||||
/// @param[in] filter Turn on the (ion/pollen/etc) filter mode.
|
/// @param[in] filter Turn on the (ion/pollen/etc) filter mode.
|
||||||
/// @param[in] sleep Nr. of minutes for sleep mode. -1 is Off, >= 0 is on.
|
/// @param[in] sleep Nr. of minutes for sleep mode. -1 is Off, >= 0 is on.
|
||||||
void IRac::haier176(IRHaierAC176 *ac,
|
void IRac::haier176(IRHaierAC176 *ac, const haier_ac176_remote_model_t model,
|
||||||
const bool on, const stdAc::opmode_t mode,
|
const bool on, const stdAc::opmode_t mode,
|
||||||
const bool celsius, const float degrees,
|
const bool celsius, const float degrees,
|
||||||
const stdAc::fanspeed_t fan,
|
const stdAc::fanspeed_t fan,
|
||||||
@@ -1134,6 +1135,7 @@ void IRac::haier176(IRHaierAC176 *ac,
|
|||||||
const bool turbo, const bool quiet, const bool filter,
|
const bool turbo, const bool quiet, const bool filter,
|
||||||
const int16_t sleep) {
|
const int16_t sleep) {
|
||||||
ac->begin();
|
ac->begin();
|
||||||
|
ac->setModel(model);
|
||||||
ac->setMode(ac->convertMode(mode));
|
ac->setMode(ac->convertMode(mode));
|
||||||
ac->setUseFahrenheit(!celsius);
|
ac->setUseFahrenheit(!celsius);
|
||||||
ac->setTemp(degrees);
|
ac->setTemp(degrees);
|
||||||
@@ -2795,9 +2797,9 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
|||||||
case HAIER_AC176:
|
case HAIER_AC176:
|
||||||
{
|
{
|
||||||
IRHaierAC176 ac(_pin, _inverted, _modulation);
|
IRHaierAC176 ac(_pin, _inverted, _modulation);
|
||||||
haier176(&ac, send.power, send.mode, send.celsius, send.degrees,
|
haier176(&ac, (haier_ac176_remote_model_t)send.model, send.power,
|
||||||
send.fanspeed, send.swingv, send.swingh, send.turbo,
|
send.mode, send.celsius, send.degrees, send.fanspeed,
|
||||||
send.filter, send.sleep);
|
send.swingv, send.swingh, send.turbo, send.filter, send.sleep);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif // SEND_HAIER_AC176
|
#endif // SEND_HAIER_AC176
|
||||||
@@ -3316,12 +3318,18 @@ stdAc::swingh_t IRac::strToSwingH(const char *str,
|
|||||||
/// @param[in] str A Ptr to a C-style string to be converted.
|
/// @param[in] str A Ptr to a C-style string to be converted.
|
||||||
/// @param[in] def The enum to return if no conversion was possible.
|
/// @param[in] def The enum to return if no conversion was possible.
|
||||||
/// @return The equivalent enum.
|
/// @return The equivalent enum.
|
||||||
|
/// @note After adding a new model you should update modelToStr() too.
|
||||||
int16_t IRac::strToModel(const char *str, const int16_t def) {
|
int16_t IRac::strToModel(const char *str, const int16_t def) {
|
||||||
// Gree
|
// Gree
|
||||||
if (!STRCASECMP(str, kYaw1fStr)) {
|
if (!STRCASECMP(str, kYaw1fStr)) {
|
||||||
return gree_ac_remote_model_t::YAW1F;
|
return gree_ac_remote_model_t::YAW1F;
|
||||||
} else if (!STRCASECMP(str, kYbofbStr)) {
|
} else if (!STRCASECMP(str, kYbofbStr)) {
|
||||||
return gree_ac_remote_model_t::YBOFB;
|
return gree_ac_remote_model_t::YBOFB;
|
||||||
|
// Haier models
|
||||||
|
} else if (!STRCASECMP(str, kV9014557AStr)) {
|
||||||
|
return haier_ac176_remote_model_t::V9014557_A;
|
||||||
|
} else if (!STRCASECMP(str, kV9014557BStr)) {
|
||||||
|
return haier_ac176_remote_model_t::V9014557_B;
|
||||||
// HitachiAc1 models
|
// HitachiAc1 models
|
||||||
} else if (!STRCASECMP(str, kRlt0541htaaStr)) {
|
} else if (!STRCASECMP(str, kRlt0541htaaStr)) {
|
||||||
return hitachi_ac1_remote_model_t::R_LT0541_HTA_A;
|
return hitachi_ac1_remote_model_t::R_LT0541_HTA_A;
|
||||||
|
|||||||
10
src/IRac.h
10
src/IRac.h
@@ -261,11 +261,11 @@ void electra(IRElectraAc *ac,
|
|||||||
#endif // SEND_HAIER_AC
|
#endif // SEND_HAIER_AC
|
||||||
#if SEND_HAIER_AC176
|
#if SEND_HAIER_AC176
|
||||||
void haier176(IRHaierAC176 *ac,
|
void haier176(IRHaierAC176 *ac,
|
||||||
const bool on, const stdAc::opmode_t mode,
|
const haier_ac176_remote_model_t model, const bool on,
|
||||||
const bool celsius, const float degrees,
|
const stdAc::opmode_t mode, const bool celsius,
|
||||||
const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
|
const float degrees, const stdAc::fanspeed_t fan,
|
||||||
const stdAc::swingh_t swingh, const bool turbo,
|
const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
|
||||||
const bool quiet, const bool filter,
|
const bool turbo, const bool quiet, const bool filter,
|
||||||
const int16_t sleep = -1);
|
const int16_t sleep = -1);
|
||||||
#endif // SEND_HAIER_AC176
|
#endif // SEND_HAIER_AC176
|
||||||
#if SEND_HAIER_AC_YRW02
|
#if SEND_HAIER_AC_YRW02
|
||||||
|
|||||||
@@ -136,6 +136,12 @@ enum gree_ac_remote_model_t {
|
|||||||
YBOFB, // (2) Green, YBOFB2, YAPOF3
|
YBOFB, // (2) Green, YBOFB2, YAPOF3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// HAIER_AC176 A/C model numbers
|
||||||
|
enum haier_ac176_remote_model_t {
|
||||||
|
V9014557_A = 1, // (1) V9014557 Remote in "A" setting. (Default)
|
||||||
|
V9014557_B, // (2) V9014557 Remote in "B" setting.
|
||||||
|
};
|
||||||
|
|
||||||
/// HITACHI_AC1 A/C model numbers
|
/// HITACHI_AC1 A/C model numbers
|
||||||
enum hitachi_ac1_remote_model_t {
|
enum hitachi_ac1_remote_model_t {
|
||||||
R_LT0541_HTA_A = 1, // (1) R-LT0541-HTA Remote in "A" setting. (Default)
|
R_LT0541_HTA_A = 1, // (1) R-LT0541-HTA Remote in "A" setting. (Default)
|
||||||
|
|||||||
@@ -228,6 +228,8 @@ IRTEXT_CONST_STRING(kBitsStr, D_STR_BITS); ///< "Bits"
|
|||||||
// Model Names
|
// Model Names
|
||||||
IRTEXT_CONST_STRING(kYaw1fStr, D_STR_YAW1F); ///< "YAW1F"
|
IRTEXT_CONST_STRING(kYaw1fStr, D_STR_YAW1F); ///< "YAW1F"
|
||||||
IRTEXT_CONST_STRING(kYbofbStr, D_STR_YBOFB); ///< "YBOFB"
|
IRTEXT_CONST_STRING(kYbofbStr, D_STR_YBOFB); ///< "YBOFB"
|
||||||
|
IRTEXT_CONST_STRING(kV9014557AStr, D_STR_V9014557_A); ///< "V9014557-A"
|
||||||
|
IRTEXT_CONST_STRING(kV9014557BStr, D_STR_V9014557_B); ///< "V9014557-B"
|
||||||
IRTEXT_CONST_STRING(kRlt0541htaaStr, D_STR_RLT0541HTA_A); ///< "R-LT0541-HTA-A"
|
IRTEXT_CONST_STRING(kRlt0541htaaStr, D_STR_RLT0541HTA_A); ///< "R-LT0541-HTA-A"
|
||||||
IRTEXT_CONST_STRING(kRlt0541htabStr, D_STR_RLT0541HTA_B); ///< "R-LT0541-HTA-B"
|
IRTEXT_CONST_STRING(kRlt0541htabStr, D_STR_RLT0541HTA_B); ///< "R-LT0541-HTA-B"
|
||||||
IRTEXT_CONST_STRING(kArrah2eStr, D_STR_ARRAH2E); ///< "ARRAH2E"
|
IRTEXT_CONST_STRING(kArrah2eStr, D_STR_ARRAH2E); ///< "ARRAH2E"
|
||||||
|
|||||||
@@ -218,6 +218,8 @@ extern IRTEXT_CONST_PTR(kTypeStr);
|
|||||||
extern IRTEXT_CONST_PTR(kUnknownStr);
|
extern IRTEXT_CONST_PTR(kUnknownStr);
|
||||||
extern IRTEXT_CONST_PTR(kUpperStr);
|
extern IRTEXT_CONST_PTR(kUpperStr);
|
||||||
extern IRTEXT_CONST_PTR(kUpStr);
|
extern IRTEXT_CONST_PTR(kUpStr);
|
||||||
|
extern IRTEXT_CONST_PTR(kV9014557AStr);
|
||||||
|
extern IRTEXT_CONST_PTR(kV9014557BStr);
|
||||||
extern IRTEXT_CONST_PTR(kVaneStr);
|
extern IRTEXT_CONST_PTR(kVaneStr);
|
||||||
extern IRTEXT_CONST_PTR(kWallStr);
|
extern IRTEXT_CONST_PTR(kWallStr);
|
||||||
extern IRTEXT_CONST_PTR(kWeeklyTimerStr);
|
extern IRTEXT_CONST_PTR(kWeeklyTimerStr);
|
||||||
|
|||||||
@@ -586,6 +586,7 @@ namespace irutils {
|
|||||||
/// @param[in] protocol The IR protocol.
|
/// @param[in] protocol The IR protocol.
|
||||||
/// @param[in] model The model number for that protocol.
|
/// @param[in] model The model number for that protocol.
|
||||||
/// @return The resulting String.
|
/// @return The resulting String.
|
||||||
|
/// @note After adding a new model you should update IRac::strToModel() too.
|
||||||
String modelToStr(const decode_type_t protocol, const int16_t model) {
|
String modelToStr(const decode_type_t protocol, const int16_t model) {
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case decode_type_t::FUJITSU_AC:
|
case decode_type_t::FUJITSU_AC:
|
||||||
@@ -606,6 +607,16 @@ namespace irutils {
|
|||||||
default: return kUnknownStr;
|
default: return kUnknownStr;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case decode_type_t::HAIER_AC176:
|
||||||
|
switch (model) {
|
||||||
|
case haier_ac176_remote_model_t::V9014557_A:
|
||||||
|
return kV9014557AStr;
|
||||||
|
case haier_ac176_remote_model_t::V9014557_B:
|
||||||
|
return kV9014557BStr;
|
||||||
|
default:
|
||||||
|
return kUnknownStr;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case decode_type_t::HITACHI_AC1:
|
case decode_type_t::HITACHI_AC1:
|
||||||
switch (model) {
|
switch (model) {
|
||||||
case hitachi_ac1_remote_model_t::R_LT0541_HTA_A:
|
case hitachi_ac1_remote_model_t::R_LT0541_HTA_A:
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ using irutils::addBoolToString;
|
|||||||
using irutils::addIntToString;
|
using irutils::addIntToString;
|
||||||
using irutils::addLabeledString;
|
using irutils::addLabeledString;
|
||||||
using irutils::addModeToString;
|
using irutils::addModeToString;
|
||||||
|
using irutils::addModelToString;
|
||||||
using irutils::addSwingHToString;
|
using irutils::addSwingHToString;
|
||||||
using irutils::addFanToString;
|
using irutils::addFanToString;
|
||||||
using irutils::addTempToString;
|
using irutils::addTempToString;
|
||||||
@@ -582,7 +583,7 @@ bool IRHaierAC176::validChecksum(const uint8_t state[], const uint16_t length) {
|
|||||||
/// Reset the internal state to a fixed known good state.
|
/// Reset the internal state to a fixed known good state.
|
||||||
void IRHaierAC176::stateReset(void) {
|
void IRHaierAC176::stateReset(void) {
|
||||||
std::memset(_.raw, 0, sizeof _.raw);
|
std::memset(_.raw, 0, sizeof _.raw);
|
||||||
_.Prefix = kHaierAcYrw02Prefix;
|
_.Model = kHaierAcYrw02ModelA;
|
||||||
_.Prefix2 = kHaierAc176Prefix;
|
_.Prefix2 = kHaierAc176Prefix;
|
||||||
_.Temp = kHaierAcYrw02DefTempC - kHaierAcYrw02MinTempC;
|
_.Temp = kHaierAcYrw02DefTempC - kHaierAcYrw02MinTempC;
|
||||||
_.Health = true;
|
_.Health = true;
|
||||||
@@ -619,11 +620,33 @@ void IRHaierAC176::setButton(uint8_t button) {
|
|||||||
case kHaierAcYrw02ButtonTurbo:
|
case kHaierAcYrw02ButtonTurbo:
|
||||||
case kHaierAcYrw02ButtonSleep:
|
case kHaierAcYrw02ButtonSleep:
|
||||||
case kHaierAcYrw02ButtonLock:
|
case kHaierAcYrw02ButtonLock:
|
||||||
case kHaierAcYrw02ButtonCF:
|
case kHaierAcYrw02ButtonCFAB:
|
||||||
_.Button = button;
|
_.Button = button;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get/Detect the model of the A/C.
|
||||||
|
/// @return The enum of the compatible model.
|
||||||
|
haier_ac176_remote_model_t IRHaierAC176::getModel(void) const {
|
||||||
|
switch (_.Model) {
|
||||||
|
case kHaierAcYrw02ModelB: return haier_ac176_remote_model_t::V9014557_B;
|
||||||
|
default: return haier_ac176_remote_model_t::V9014557_A;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the model of the A/C to emulate.
|
||||||
|
/// @param[in] model The enum of the appropriate model.
|
||||||
|
void IRHaierAC176::setModel(haier_ac176_remote_model_t model) {
|
||||||
|
_.Button = kHaierAcYrw02ButtonCFAB;
|
||||||
|
switch (model) {
|
||||||
|
case haier_ac176_remote_model_t::V9014557_B:
|
||||||
|
_.Model = kHaierAcYrw02ModelB;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
_.Model = kHaierAcYrw02ModelA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Get the Button/Command setting of the A/C.
|
/// Get the Button/Command setting of the A/C.
|
||||||
/// @return The value of the button/command that was pressed.
|
/// @return The value of the button/command that was pressed.
|
||||||
uint8_t IRHaierAC176::getButton(void) const {
|
uint8_t IRHaierAC176::getButton(void) const {
|
||||||
@@ -677,7 +700,7 @@ void IRHaierAC176::setTemp(const uint8_t degree, const bool fahrenheit) {
|
|||||||
else
|
else
|
||||||
_.Button = kHaierAcYrw02ButtonTempUp;
|
_.Button = kHaierAcYrw02ButtonTempUp;
|
||||||
} else {
|
} else {
|
||||||
_.Button = kHaierAcYrw02ButtonCF;
|
_.Button = kHaierAcYrw02ButtonCFAB;
|
||||||
}
|
}
|
||||||
_.UseFahrenheit = fahrenheit;
|
_.UseFahrenheit = fahrenheit;
|
||||||
|
|
||||||
@@ -1106,7 +1129,7 @@ stdAc::swingh_t IRHaierAC176::toCommonSwingH(const uint8_t pos) {
|
|||||||
stdAc::state_t IRHaierAC176::toCommon(void) const {
|
stdAc::state_t IRHaierAC176::toCommon(void) const {
|
||||||
stdAc::state_t result;
|
stdAc::state_t result;
|
||||||
result.protocol = decode_type_t::HAIER_AC_YRW02;
|
result.protocol = decode_type_t::HAIER_AC_YRW02;
|
||||||
result.model = -1; // No models used.
|
result.model = getModel();
|
||||||
result.power = _.Power;
|
result.power = _.Power;
|
||||||
result.mode = toCommonMode(_.Mode);
|
result.mode = toCommonMode(_.Mode);
|
||||||
result.celsius = !_.UseFahrenheit;
|
result.celsius = !_.UseFahrenheit;
|
||||||
@@ -1131,8 +1154,9 @@ stdAc::state_t IRHaierAC176::toCommon(void) const {
|
|||||||
/// @return A human readable string.
|
/// @return A human readable string.
|
||||||
String IRHaierAC176::toString(void) const {
|
String IRHaierAC176::toString(void) const {
|
||||||
String result = "";
|
String result = "";
|
||||||
result.reserve(260); // Reserve some heap for the string to reduce fragging.
|
result.reserve(280); // Reserve some heap for the string to reduce fragging.
|
||||||
result += addBoolToString(_.Power, kPowerStr, false);
|
result += addModelToString(decode_type_t::HAIER_AC176, getModel(), false);
|
||||||
|
result += addBoolToString(_.Power, kPowerStr);
|
||||||
uint8_t cmd = _.Button;
|
uint8_t cmd = _.Button;
|
||||||
result += addIntToString(cmd, kButtonStr);
|
result += addIntToString(cmd, kButtonStr);
|
||||||
result += kSpaceLBraceStr;
|
result += kSpaceLBraceStr;
|
||||||
@@ -1173,7 +1197,7 @@ String IRHaierAC176::toString(void) const {
|
|||||||
case kHaierAcYrw02ButtonLock:
|
case kHaierAcYrw02ButtonLock:
|
||||||
result += kLockStr;
|
result += kLockStr;
|
||||||
break;
|
break;
|
||||||
case kHaierAcYrw02ButtonCF:
|
case kHaierAcYrw02ButtonCFAB:
|
||||||
result += kCelsiusFahrenheitStr;
|
result += kCelsiusFahrenheitStr;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -1367,7 +1391,7 @@ bool IRrecv::decodeHaierACYRW02(decode_results* results, uint16_t offset,
|
|||||||
|
|
||||||
// Compliance
|
// Compliance
|
||||||
if (strict) {
|
if (strict) {
|
||||||
if (results->state[0] != kHaierAcYrw02Prefix) return false;
|
if (results->state[0] != kHaierAcYrw02ModelA) return false;
|
||||||
if (!IRHaierACYRW02::validChecksum(results->state, nbits / 8)) return false;
|
if (!IRHaierACYRW02::validChecksum(results->state, nbits / 8)) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1400,7 +1424,8 @@ bool IRrecv::decodeHaierAC176(decode_results* results, uint16_t offset,
|
|||||||
|
|
||||||
// Compliance
|
// Compliance
|
||||||
if (strict) {
|
if (strict) {
|
||||||
if (results->state[0] != kHaierAcYrw02Prefix) return false;
|
if ((results->state[0] != kHaierAcYrw02ModelA) &&
|
||||||
|
(results->state[0] != kHaierAcYrw02ModelB)) return false;
|
||||||
if (!IRHaierAC176::validChecksum(results->state, nbits / 8)) return false;
|
if (!IRHaierAC176::validChecksum(results->state, nbits / 8)) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -141,7 +141,8 @@ const uint8_t kHaierAcYrw02MinTempF = 60;
|
|||||||
const uint8_t kHaierAcYrw02MaxTempF = 86;
|
const uint8_t kHaierAcYrw02MaxTempF = 86;
|
||||||
const uint8_t kHaierAcYrw02DefTempC = 25;
|
const uint8_t kHaierAcYrw02DefTempC = 25;
|
||||||
|
|
||||||
const uint8_t kHaierAcYrw02Prefix = 0xA6;
|
const uint8_t kHaierAcYrw02ModelA = 0xA6;
|
||||||
|
const uint8_t kHaierAcYrw02ModelB = 0x59;
|
||||||
const uint8_t kHaierAc176Prefix = 0xB7;
|
const uint8_t kHaierAc176Prefix = 0xB7;
|
||||||
|
|
||||||
const uint8_t kHaierAcYrw02SwingVOff = 0x0;
|
const uint8_t kHaierAcYrw02SwingVOff = 0x0;
|
||||||
@@ -181,7 +182,7 @@ const uint8_t kHaierAcYrw02ButtonTurbo = 0b01000;
|
|||||||
const uint8_t kHaierAcYrw02ButtonSleep = 0b01011;
|
const uint8_t kHaierAcYrw02ButtonSleep = 0b01011;
|
||||||
const uint8_t kHaierAcYrw02ButtonTimer = 0b10000;
|
const uint8_t kHaierAcYrw02ButtonTimer = 0b10000;
|
||||||
const uint8_t kHaierAcYrw02ButtonLock = 0b10100;
|
const uint8_t kHaierAcYrw02ButtonLock = 0b10100;
|
||||||
const uint8_t kHaierAcYrw02ButtonCF = 0b11010;
|
const uint8_t kHaierAcYrw02ButtonCFAB = 0b11010;
|
||||||
|
|
||||||
const uint8_t kHaierAcYrw02NoTimers = 0b000;
|
const uint8_t kHaierAcYrw02NoTimers = 0b000;
|
||||||
const uint8_t kHaierAcYrw02OffTimer = 0b001;
|
const uint8_t kHaierAcYrw02OffTimer = 0b001;
|
||||||
@@ -194,7 +195,7 @@ union HaierAc176Protocol{
|
|||||||
uint8_t raw[kHaierAC176StateLength]; ///< The state in native form
|
uint8_t raw[kHaierAC176StateLength]; ///< The state in native form
|
||||||
struct {
|
struct {
|
||||||
// Byte 0
|
// Byte 0
|
||||||
uint8_t Prefix :8;
|
uint8_t Model :8;
|
||||||
// Byte 1
|
// Byte 1
|
||||||
uint8_t SwingV :4;
|
uint8_t SwingV :4;
|
||||||
uint8_t Temp :4; // 16C~30C
|
uint8_t Temp :4; // 16C~30C
|
||||||
@@ -374,6 +375,9 @@ class IRHaierAC176 {
|
|||||||
void begin(void);
|
void begin(void);
|
||||||
void stateReset(void);
|
void stateReset(void);
|
||||||
|
|
||||||
|
void setModel(const haier_ac176_remote_model_t model);
|
||||||
|
haier_ac176_remote_model_t getModel(void) const;
|
||||||
|
|
||||||
void setButton(const uint8_t button);
|
void setButton(const uint8_t button);
|
||||||
uint8_t getButton(void) const;
|
uint8_t getButton(void) const;
|
||||||
|
|
||||||
|
|||||||
@@ -550,6 +550,12 @@
|
|||||||
#ifndef D_STR_YBOFB
|
#ifndef D_STR_YBOFB
|
||||||
#define D_STR_YBOFB "YBOFB"
|
#define D_STR_YBOFB "YBOFB"
|
||||||
#endif // D_STR_YBOFB
|
#endif // D_STR_YBOFB
|
||||||
|
#ifndef D_STR_V9014557_A
|
||||||
|
#define D_STR_V9014557_A "V9014557-A"
|
||||||
|
#endif // D_STR_V9014557_A
|
||||||
|
#ifndef D_STR_V9014557_B
|
||||||
|
#define D_STR_V9014557_B "V9014557-B"
|
||||||
|
#endif // D_STR_V9014557_B
|
||||||
#ifndef D_STR_RLT0541HTA_A
|
#ifndef D_STR_RLT0541HTA_A
|
||||||
#define D_STR_RLT0541HTA_A "R-LT0541-HTA-A"
|
#define D_STR_RLT0541HTA_A "R-LT0541-HTA-A"
|
||||||
#endif // D_STR_RLT0541HTA_A
|
#endif // D_STR_RLT0541HTA_A
|
||||||
|
|||||||
@@ -793,23 +793,24 @@ TEST(TestIRac, Haier176) {
|
|||||||
IRac irac(kGpioUnused);
|
IRac irac(kGpioUnused);
|
||||||
IRrecv capture(kGpioUnused);
|
IRrecv capture(kGpioUnused);
|
||||||
const char expected[] =
|
const char expected[] =
|
||||||
"Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 23C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 5 (Power), "
|
||||||
"Fan: 2 (Medium), Turbo: On, Quiet: Off, Swing(V): 1 (Highest), "
|
"Mode: 1 (Cool), Temp: 23C, Fan: 2 (Medium), Turbo: On, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: On, Health: On, "
|
"Swing(V): 1 (Highest), Swing(H): 0 (Middle), Sleep: On, Health: On, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off";
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off";
|
||||||
ac.begin();
|
ac.begin();
|
||||||
irac.haier176(&ac,
|
irac.haier176(&ac,
|
||||||
true, // Power
|
haier_ac176_remote_model_t::V9014557_A, // Model
|
||||||
stdAc::opmode_t::kCool, // Mode
|
true, // Power
|
||||||
true, // Celsius
|
stdAc::opmode_t::kCool, // Mode
|
||||||
23, // Degrees
|
true, // Celsius
|
||||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
23, // Degrees
|
||||||
stdAc::swingv_t::kHigh, // Vertical swing
|
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||||
stdAc::swingh_t::kOff, // Horizontal swing
|
stdAc::swingv_t::kHigh, // Vertical swing
|
||||||
true, // Turbo
|
stdAc::swingh_t::kOff, // Horizontal swing
|
||||||
false, // Quiet
|
true, // Turbo
|
||||||
true, // Filter
|
false, // Quiet
|
||||||
8 * 60 + 0); // Sleep time
|
true, // Filter
|
||||||
|
8 * 60 + 0); // Sleep time
|
||||||
ASSERT_EQ(expected, ac.toString());
|
ASSERT_EQ(expected, ac.toString());
|
||||||
ac._irsend.makeDecodeResult();
|
ac._irsend.makeDecodeResult();
|
||||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||||
@@ -825,9 +826,9 @@ TEST(TestIRac, HaierYrwo2) {
|
|||||||
IRac irac(kGpioUnused);
|
IRac irac(kGpioUnused);
|
||||||
IRrecv capture(kGpioUnused);
|
IRrecv capture(kGpioUnused);
|
||||||
char expected[] =
|
char expected[] =
|
||||||
"Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 23C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 5 (Power), "
|
||||||
"Fan: 2 (Medium), Turbo: Off, Quiet: On, Swing(V): 1 (Highest), "
|
"Mode: 1 (Cool), Temp: 23C, Fan: 2 (Medium), Turbo: Off, Quiet: On, "
|
||||||
"Swing(H): 7 (Auto), Sleep: On, Health: On, "
|
"Swing(V): 1 (Highest), Swing(H): 7 (Auto), Sleep: On, Health: On, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off";
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off";
|
||||||
|
|
||||||
ac.begin();
|
ac.begin();
|
||||||
|
|||||||
@@ -541,7 +541,7 @@ TEST(TestHaierACYRW02Class, Temperature) {
|
|||||||
EXPECT_EQ(78, ac.getTemp());
|
EXPECT_EQ(78, ac.getTemp());
|
||||||
|
|
||||||
ac.setTemp(24);
|
ac.setTemp(24);
|
||||||
EXPECT_EQ(kHaierAcYrw02ButtonCF, ac.getButton());
|
EXPECT_EQ(kHaierAcYrw02ButtonCFAB, ac.getButton());
|
||||||
|
|
||||||
ac.setTemp(0);
|
ac.setTemp(0);
|
||||||
EXPECT_EQ(kHaierAcYrw02MinTempC, ac.getTemp());
|
EXPECT_EQ(kHaierAcYrw02MinTempC, ac.getTemp());
|
||||||
@@ -784,18 +784,18 @@ TEST(TestHaierACYRW02Class, MessageConstuction) {
|
|||||||
IRHaierACYRW02 ac(kGpioUnused);
|
IRHaierACYRW02 ac(kGpioUnused);
|
||||||
|
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 5 (Power), Mode: 0 (Auto), Temp: 25C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 5 (Power), "
|
||||||
"Fan: 5 (Auto), Turbo: Off, Quiet: Off, Swing(V): 0 (Off), "
|
"Mode: 0 (Auto), Temp: 25C, Fan: 5 (Auto), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: On, "
|
"Swing(V): 0 (Off), Swing(H): 0 (Middle), Sleep: Off, Health: On, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
ac.setMode(kHaierAcYrw02Cool);
|
ac.setMode(kHaierAcYrw02Cool);
|
||||||
ac.setTemp(21);
|
ac.setTemp(21);
|
||||||
ac.setFan(kHaierAcYrw02FanHigh);
|
ac.setFan(kHaierAcYrw02FanHigh);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 4 (Fan), Mode: 1 (Cool), Temp: 21C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 4 (Fan), "
|
||||||
"Fan: 1 (High), Turbo: Off, Quiet: Off, Swing(V): 0 (Off), "
|
"Mode: 1 (Cool), Temp: 21C, Fan: 1 (High), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: On, "
|
"Swing(V): 0 (Off), Swing(H): 0 (Middle), Sleep: Off, Health: On, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
|
|
||||||
@@ -805,9 +805,9 @@ TEST(TestHaierACYRW02Class, MessageConstuction) {
|
|||||||
ac.setSleep(true);
|
ac.setSleep(true);
|
||||||
ac.setTurbo(true);
|
ac.setTurbo(true);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 8 (Turbo), Mode: 1 (Cool), Temp: 75F, "
|
"Model: 1 (V9014557-A), Power: On, Button: 8 (Turbo), "
|
||||||
"Fan: 1 (High), Turbo: On, Quiet: Off, Swing(V): 2 (Middle), "
|
"Mode: 1 (Cool), Temp: 75F, Fan: 1 (High), Turbo: On, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: On, Health: Off, "
|
"Swing(V): 2 (Middle), Swing(H): 0 (Middle), Sleep: On, Health: Off, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
}
|
}
|
||||||
@@ -821,9 +821,9 @@ TEST(TestHaierACYRW02Class, RealStates) {
|
|||||||
IRHaierACYRW02 ac(kGpioUnused);
|
IRHaierACYRW02 ac(kGpioUnused);
|
||||||
ac.setRaw(expectedState1);
|
ac.setRaw(expectedState1);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 7 (Health), Mode: 4 (Heat), Temp: 30C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 7 (Health), "
|
||||||
"Fan: 1 (High), Turbo: Off, Quiet: Off, Swing(V): 1 (Highest), "
|
"Mode: 4 (Heat), Temp: 30C, Fan: 1 (High), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
"Swing(V): 1 (Highest), Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
|
|
||||||
@@ -832,9 +832,9 @@ TEST(TestHaierACYRW02Class, RealStates) {
|
|||||||
0x80, 0x00, 0x00, 0x00, 0x00, 0x05, 0x75};
|
0x80, 0x00, 0x00, 0x00, 0x00, 0x05, 0x75};
|
||||||
ac.setRaw(expectedState2);
|
ac.setRaw(expectedState2);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: Off, Button: 5 (Power), Mode: 4 (Heat), Temp: 30C, "
|
"Model: 1 (V9014557-A), Power: Off, Button: 5 (Power), "
|
||||||
"Fan: 1 (High), Turbo: Off, Quiet: Off, Swing(V): 0 (Off), "
|
"Mode: 4 (Heat), Temp: 30C, Fan: 1 (High), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
"Swing(V): 0 (Off), Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
|
|
||||||
@@ -843,9 +843,9 @@ TEST(TestHaierACYRW02Class, RealStates) {
|
|||||||
0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2B};
|
0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2B};
|
||||||
ac.setRaw(expectedState3);
|
ac.setRaw(expectedState3);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 1 (Temp Down), Mode: 1 (Cool), Temp: 16C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 1 (Temp Down), "
|
||||||
"Fan: 1 (High), Turbo: Off, Quiet: Off, Swing(V): 2 (Middle), "
|
"Mode: 1 (Cool), Temp: 16C, Fan: 1 (High), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: On, "
|
"Swing(V): 2 (Middle), Swing(H): 0 (Middle), Sleep: Off, Health: On, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
|
|
||||||
@@ -855,9 +855,9 @@ TEST(TestHaierACYRW02Class, RealStates) {
|
|||||||
0x20, 0x80, 0x00, 0x00, 0x00, 0x0B, 0xD7};
|
0x20, 0x80, 0x00, 0x00, 0x00, 0x0B, 0xD7};
|
||||||
ac.setRaw(expectedState4);
|
ac.setRaw(expectedState4);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 11 (Sleep), Mode: 1 (Cool), Temp: 25C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 11 (Sleep), "
|
||||||
"Fan: 5 (Auto), Turbo: Off, Quiet: Off, Swing(V): 12 (Auto), "
|
"Mode: 1 (Cool), Temp: 25C, Fan: 5 (Auto), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: On, Health: On, "
|
"Swing(V): 12 (Auto), Swing(H): 0 (Middle), Sleep: On, Health: On, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
|
|
||||||
@@ -867,9 +867,9 @@ TEST(TestHaierACYRW02Class, RealStates) {
|
|||||||
0x20, 0x80, 0x00, 0x00, 0x00, 0x04, 0x85};
|
0x20, 0x80, 0x00, 0x00, 0x00, 0x04, 0x85};
|
||||||
ac.setRaw(expectedState5);
|
ac.setRaw(expectedState5);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 4 (Fan), Mode: 1 (Cool), Temp: 25C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 4 (Fan), "
|
||||||
"Fan: 1 (High), Turbo: Off, Quiet: Off, Swing(V): 12 (Auto), "
|
"Mode: 1 (Cool), Temp: 25C, Fan: 1 (High), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: On, Health: On, "
|
"Swing(V): 12 (Auto), Swing(H): 0 (Middle), Sleep: On, Health: On, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
}
|
}
|
||||||
@@ -1099,9 +1099,9 @@ TEST(TestDecodeHaierAC_YRW02, RealExample) {
|
|||||||
IRHaierACYRW02 ac(kGpioUnused);
|
IRHaierACYRW02 ac(kGpioUnused);
|
||||||
ac.setRaw(irsend.capture.state);
|
ac.setRaw(irsend.capture.state);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 17C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 5 (Power), "
|
||||||
"Fan: 1 (High), Turbo: Off, Quiet: Off, Swing(V): 2 (Middle), "
|
"Mode: 1 (Cool), Temp: 17C, Fan: 1 (High), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: On, "
|
"Swing(V): 2 (Middle), Swing(H): 0 (Middle), Sleep: Off, Health: On, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
}
|
}
|
||||||
@@ -1239,7 +1239,7 @@ TEST(TestHaierACYRW02Class, toCommon) {
|
|||||||
ac.setTurbo(true);
|
ac.setTurbo(true);
|
||||||
// Now test it.
|
// Now test it.
|
||||||
ASSERT_EQ(decode_type_t::HAIER_AC_YRW02, ac.toCommon().protocol);
|
ASSERT_EQ(decode_type_t::HAIER_AC_YRW02, ac.toCommon().protocol);
|
||||||
ASSERT_EQ(-1, ac.toCommon().model);
|
ASSERT_EQ(1, ac.toCommon().model);
|
||||||
ASSERT_TRUE(ac.toCommon().power);
|
ASSERT_TRUE(ac.toCommon().power);
|
||||||
ASSERT_TRUE(ac.toCommon().celsius);
|
ASSERT_TRUE(ac.toCommon().celsius);
|
||||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||||
@@ -1326,9 +1326,9 @@ TEST(TestDecodeHaierAC176, SyntheticDecode) {
|
|||||||
EXPECT_FALSE(irsend.capture.repeat);
|
EXPECT_FALSE(irsend.capture.repeat);
|
||||||
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
|
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 24C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 5 (Power), "
|
||||||
"Fan: 5 (Auto), Turbo: Off, Quiet: Off, Swing(V): 6 (UNKNOWN), "
|
"Mode: 1 (Cool), Temp: 24C, Fan: 5 (Auto), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
"Swing(V): 6 (UNKNOWN), Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
IRAcUtils::resultAcToString(&irsend.capture));
|
IRAcUtils::resultAcToString(&irsend.capture));
|
||||||
stdAc::state_t result, prev;
|
stdAc::state_t result, prev;
|
||||||
@@ -1368,9 +1368,9 @@ TEST(TestHaierAC176Class, BuildKnownState) {
|
|||||||
ac.setFan(kHaierAcYrw02FanHigh);
|
ac.setFan(kHaierAcYrw02FanHigh);
|
||||||
EXPECT_TRUE(ac.validChecksum(ac.getRaw()));
|
EXPECT_TRUE(ac.validChecksum(ac.getRaw()));
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 4 (Fan), Mode: 4 (Heat), Temp: 24C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 4 (Fan), "
|
||||||
"Fan: 1 (High), Turbo: Off, Quiet: Off, Swing(V): 0 (Off), "
|
"Mode: 4 (Heat), Temp: 24C, Fan: 1 (High), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: On, "
|
"Swing(V): 0 (Off), Swing(H): 0 (Middle), Sleep: Off, Health: On, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
/* Disabled pending:
|
/* Disabled pending:
|
||||||
@@ -1460,49 +1460,78 @@ TEST(TestHaierAC176Class, Timers) {
|
|||||||
ac.setRaw(timer30m);
|
ac.setRaw(timer30m);
|
||||||
EXPECT_EQ(kHaierAcYrw02OnTimer, ac.getTimerMode());
|
EXPECT_EQ(kHaierAcYrw02OnTimer, ac.getTimerMode());
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: Off, Button: 16 (Timer), Mode: 0 (Auto), Temp: 24C, "
|
"Model: 1 (V9014557-A), Power: Off, Button: 16 (Timer), "
|
||||||
"Fan: 5 (Auto), Turbo: Off, Quiet: Off, Swing(V): 2 (Middle), "
|
"Mode: 0 (Auto), Temp: 24C, Fan: 5 (Auto), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
"Swing(V): 2 (Middle), Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
||||||
"Timer Mode: 2 (On), On Timer: 00:30, Off Timer: Off, Lock: Off",
|
"Timer Mode: 2 (On), On Timer: 00:30, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
ac.setRaw(timeroff);
|
ac.setRaw(timeroff);
|
||||||
EXPECT_EQ(kHaierAcYrw02NoTimers, ac.getTimerMode());
|
EXPECT_EQ(kHaierAcYrw02NoTimers, ac.getTimerMode());
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 16 (Timer), Mode: 0 (Auto), Temp: 24C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 16 (Timer), "
|
||||||
"Fan: 5 (Auto), Turbo: Off, Quiet: Off, Swing(V): 2 (Middle), "
|
"Mode: 0 (Auto), Temp: 24C, Fan: 5 (Auto), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
"Swing(V): 2 (Middle), Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
ac.setRaw(timeroffthenon);
|
ac.setRaw(timeroffthenon);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 16 (Timer), Mode: 0 (Auto), Temp: 24C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 16 (Timer), "
|
||||||
"Fan: 5 (Auto), Turbo: Off, Quiet: Off, Swing(V): 2 (Middle), "
|
"Mode: 0 (Auto), Temp: 24C, Fan: 5 (Auto), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
"Swing(V): 2 (Middle), Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
||||||
"Timer Mode: 5 (Off-On), On Timer: 08:00, Off Timer: 00:30, Lock: Off",
|
"Timer Mode: 5 (Off-On), On Timer: 08:00, Off Timer: 00:30, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
ac.setTimerMode(kHaierAcYrw02OnThenOffTimer);
|
ac.setTimerMode(kHaierAcYrw02OnThenOffTimer);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 16 (Timer), Mode: 0 (Auto), Temp: 24C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 16 (Timer), "
|
||||||
"Fan: 5 (Auto), Turbo: Off, Quiet: Off, Swing(V): 2 (Middle), "
|
"Mode: 0 (Auto), Temp: 24C, Fan: 5 (Auto), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
"Swing(V): 2 (Middle), Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
||||||
"Timer Mode: 4 (On-Off), On Timer: 08:00, Off Timer: 00:30, Lock: Off",
|
"Timer Mode: 4 (On-Off), On Timer: 08:00, Off Timer: 00:30, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
ac.setTimerMode(kHaierAcYrw02OffTimer);
|
ac.setTimerMode(kHaierAcYrw02OffTimer);
|
||||||
EXPECT_EQ(0, ac.getOnTimer());
|
EXPECT_EQ(0, ac.getOnTimer());
|
||||||
EXPECT_EQ(30, ac.getOffTimer());
|
EXPECT_EQ(30, ac.getOffTimer());
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 16 (Timer), Mode: 0 (Auto), Temp: 24C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 16 (Timer), "
|
||||||
"Fan: 5 (Auto), Turbo: Off, Quiet: Off, Swing(V): 2 (Middle), "
|
"Mode: 0 (Auto), Temp: 24C, Fan: 5 (Auto), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
"Swing(V): 2 (Middle), Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
||||||
"Timer Mode: 1 (Off), On Timer: Off, Off Timer: 00:30, Lock: Off",
|
"Timer Mode: 1 (Off), On Timer: Off, Off Timer: 00:30, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
ac.setTimerMode(kHaierAcYrw02NoTimers);
|
ac.setTimerMode(kHaierAcYrw02NoTimers);
|
||||||
EXPECT_EQ(0, ac.getOnTimer());
|
EXPECT_EQ(0, ac.getOnTimer());
|
||||||
EXPECT_EQ(0, ac.getOffTimer());
|
EXPECT_EQ(0, ac.getOffTimer());
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"Power: On, Button: 16 (Timer), Mode: 0 (Auto), Temp: 24C, "
|
"Model: 1 (V9014557-A), Power: On, Button: 16 (Timer), "
|
||||||
"Fan: 5 (Auto), Turbo: Off, Quiet: Off, Swing(V): 2 (Middle), "
|
"Mode: 0 (Auto), Temp: 24C, Fan: 5 (Auto), Turbo: Off, Quiet: Off, "
|
||||||
"Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
"Swing(V): 2 (Middle), Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
||||||
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
|
ac.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(TestHaierAC176Class, Models) {
|
||||||
|
IRHaierAC176 ac(kGpioUnused);
|
||||||
|
ac.begin();
|
||||||
|
EXPECT_EQ(haier_ac176_remote_model_t::V9014557_A, ac.getModel());
|
||||||
|
|
||||||
|
ac.setButton(kHaierAcYrw02ButtonTempUp);
|
||||||
|
ac.setModel(haier_ac176_remote_model_t::V9014557_B);
|
||||||
|
EXPECT_EQ(haier_ac176_remote_model_t::V9014557_B, ac.getModel());
|
||||||
|
EXPECT_EQ(kHaierAcYrw02ButtonCFAB, ac.getButton());
|
||||||
|
|
||||||
|
ac.setButton(kHaierAcYrw02ButtonTempDown);
|
||||||
|
ac.setModel(haier_ac176_remote_model_t::V9014557_A);
|
||||||
|
EXPECT_EQ(haier_ac176_remote_model_t::V9014557_A, ac.getModel());
|
||||||
|
EXPECT_EQ(kHaierAcYrw02ButtonCFAB, ac.getButton());
|
||||||
|
|
||||||
|
// Real data.
|
||||||
|
const uint8_t setmodelb[kHaierAC176StateLength] = {
|
||||||
|
0x59, 0x82, 0x00, 0x00, 0x40, 0x60, 0x00, 0xC0, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x1A, 0x55, 0xB7, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x77};
|
||||||
|
ac.setRaw(setmodelb);
|
||||||
|
EXPECT_EQ(haier_ac176_remote_model_t::V9014557_B, ac.getModel());
|
||||||
|
EXPECT_EQ(
|
||||||
|
"Model: 2 (V9014557-B), Power: On, Button: 26 (Celsius/Fahrenheit), "
|
||||||
|
"Mode: 6 (Fan), Temp: 24C, Fan: 3 (Low), Turbo: Off, Quiet: Off, "
|
||||||
|
"Swing(V): 2 (Middle), Swing(H): 0 (Middle), Sleep: Off, Health: Off, "
|
||||||
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
|
||||||
ac.toString());
|
ac.toString());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user