Files
OpenMQTTGateway/lib/IRremoteESP8266/test/ir_Haier_test.cpp
Florian b12ee19979 Ir esp8266 lib update and code impacts (#235)
* integrate new IRremoteESP8266 lib 2.4.2 and add new protocols

IR_RC6
IR_MITSUBISHI
IR_GICABLE
IR_MITSUBISHI2
IR_LASERTAG
IR_CARRIER_AC
IR_MIDEA
IR_NIKAI
IR_SHERWOOD
IR_DENON
IR_AIWA_RC_T501
IR_JVC
2018-07-22 16:44:10 +02:00

561 lines
21 KiB
C++

// Copyright 2018 David Conran
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Haier.h"
#include "gtest/gtest.h"
// Tests for sendHaierAC()
// Test sending typical data only.
TEST(TestSendHaierAC, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
uint8_t haier_zero[HAIER_AC_STATE_LENGTH] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
irsend.reset();
irsend.sendHaierAC(haier_zero);
EXPECT_EQ(
"m3000s3000m3000s4300"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s150000", irsend.outputStr());
uint8_t haier_test[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x01, 0x20, 0x01, 0x00, 0xC0, 0x20, 0x00, 0xA7};
irsend.reset();
irsend.sendHaierAC(haier_test);
EXPECT_EQ(
"m3000s3000m3000s4300"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s1650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s1650m520s1650"
"m520s150000", irsend.outputStr());
}
// Test sending typical data with repeats.
TEST(TestSendHaierAC, SendWithRepeats) {
IRsendTest irsend(0);
irsend.begin();
irsend.reset();
uint8_t haier_test[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x01, 0x20, 0x01, 0x00, 0xC0, 0x20, 0x00, 0xA7};
irsend.reset();
irsend.sendHaierAC(haier_test, HAIER_AC_STATE_LENGTH, 2); // two repeats.
EXPECT_EQ(
"m3000s3000m3000s4300"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s1650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s1650m520s1650"
"m520s150000"
"m3000s3000m3000s4300"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s1650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s1650m520s1650"
"m520s150000"
"m3000s3000m3000s4300"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s1650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s1650m520s1650"
"m520s150000", irsend.outputStr());
}
// Tests for IRHaierAC class.
TEST(TestHaierACClass, Command) {
IRHaierAC haier(0);
haier.begin();
haier.setCommand(HAIER_AC_CMD_OFF);
EXPECT_EQ(HAIER_AC_CMD_OFF, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_ON);
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_MODE);
EXPECT_EQ(HAIER_AC_CMD_MODE, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_FAN);
EXPECT_EQ(HAIER_AC_CMD_FAN, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_TEMP_UP);
EXPECT_EQ(HAIER_AC_CMD_TEMP_UP, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_TEMP_DOWN);
EXPECT_EQ(HAIER_AC_CMD_TEMP_DOWN, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_SLEEP);
EXPECT_EQ(HAIER_AC_CMD_SLEEP, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_TIMER_SET);
EXPECT_EQ(HAIER_AC_CMD_TIMER_SET, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_TIMER_CANCEL);
EXPECT_EQ(HAIER_AC_CMD_TIMER_CANCEL, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_HEALTH);
EXPECT_EQ(HAIER_AC_CMD_HEALTH, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_SWING);
EXPECT_EQ(HAIER_AC_CMD_SWING, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_ON);
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
// Test unexpected values.
haier.setCommand(0b00001110);
EXPECT_EQ(HAIER_AC_CMD_OFF, haier.getCommand());
haier.setCommand(0b00001111);
EXPECT_EQ(HAIER_AC_CMD_OFF, haier.getCommand());
haier.setCommand(0b00000100);
EXPECT_EQ(HAIER_AC_CMD_OFF, haier.getCommand());
}
TEST(TestHaierACClass, OperatingMode) {
IRHaierAC haier(0);
haier.begin();
haier.setMode(HAIER_AC_AUTO);
EXPECT_EQ(HAIER_AC_AUTO, haier.getMode());
haier.setMode(HAIER_AC_COOL);
EXPECT_EQ(HAIER_AC_COOL, haier.getMode());
haier.setMode(HAIER_AC_HEAT);
EXPECT_EQ(HAIER_AC_HEAT, haier.getMode());
haier.setMode(HAIER_AC_FAN);
EXPECT_EQ(HAIER_AC_FAN, haier.getMode());
haier.setMode(HAIER_AC_DRY);
EXPECT_EQ(HAIER_AC_DRY, haier.getMode());
haier.setMode(HAIER_AC_AUTO - 1);
EXPECT_EQ(HAIER_AC_AUTO, haier.getMode());
haier.setMode(HAIER_AC_COOL);
EXPECT_EQ(HAIER_AC_COOL, haier.getMode());
haier.setMode(HAIER_AC_FAN + 1);
EXPECT_EQ(HAIER_AC_AUTO, haier.getMode());
haier.setMode(255);
EXPECT_EQ(HAIER_AC_AUTO, haier.getMode());
}
TEST(TestHaierACClass, Temperature) {
IRHaierAC haier(0);
haier.begin();
haier.setTemp(HAIER_AC_MIN_TEMP);
EXPECT_EQ(HAIER_AC_MIN_TEMP, haier.getTemp());
haier.setCommand(HAIER_AC_CMD_ON);
haier.setTemp(HAIER_AC_MIN_TEMP + 1);
EXPECT_EQ(HAIER_AC_MIN_TEMP + 1, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_UP, haier.getCommand());
haier.setTemp(HAIER_AC_MAX_TEMP);
EXPECT_EQ(HAIER_AC_MAX_TEMP, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_UP, haier.getCommand());
haier.setTemp(HAIER_AC_MIN_TEMP - 1);
EXPECT_EQ(HAIER_AC_MIN_TEMP, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_DOWN, haier.getCommand());
haier.setTemp(HAIER_AC_MAX_TEMP + 1);
EXPECT_EQ(HAIER_AC_MAX_TEMP, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_UP, haier.getCommand());
haier.setTemp(23);
EXPECT_EQ(23, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_DOWN, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_ON);
haier.setTemp(23);
EXPECT_EQ(23, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
haier.setTemp(0);
EXPECT_EQ(HAIER_AC_MIN_TEMP, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_DOWN, haier.getCommand());
haier.setTemp(255);
EXPECT_EQ(HAIER_AC_MAX_TEMP, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_UP, haier.getCommand());
}
TEST(TestHaierACClass, FanSpeed) {
IRHaierAC haier(0);
haier.begin();
haier.setFan(HAIER_AC_FAN_LOW);
haier.setCommand(HAIER_AC_CMD_ON);
haier.setFan(HAIER_AC_FAN_AUTO);
EXPECT_EQ(HAIER_AC_FAN_AUTO, haier.getFan());
EXPECT_EQ(HAIER_AC_CMD_FAN, haier.getCommand());
haier.setFan(HAIER_AC_FAN_LOW);
EXPECT_EQ(HAIER_AC_FAN_LOW, haier.getFan());
haier.setFan(HAIER_AC_FAN_MED);
EXPECT_EQ(HAIER_AC_FAN_MED, haier.getFan());
haier.setFan(HAIER_AC_FAN_HIGH);
EXPECT_EQ(HAIER_AC_FAN_HIGH, haier.getFan());
haier.setCommand(HAIER_AC_CMD_ON);
haier.setFan(HAIER_AC_FAN_HIGH);
EXPECT_EQ(HAIER_AC_FAN_HIGH, haier.getFan());
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
}
TEST(TestHaierACClass, Swing) {
IRHaierAC haier(0);
haier.begin();
haier.setFan(HAIER_AC_FAN_LOW);
haier.setCommand(HAIER_AC_CMD_ON);
haier.setSwing(HAIER_AC_SWING_OFF);
EXPECT_EQ(HAIER_AC_SWING_OFF, haier.getSwing());
haier.setSwing(HAIER_AC_SWING_UP);
EXPECT_EQ(HAIER_AC_SWING_UP, haier.getSwing());
EXPECT_EQ(HAIER_AC_CMD_SWING, haier.getCommand());
haier.setSwing(HAIER_AC_SWING_DOWN);
EXPECT_EQ(HAIER_AC_SWING_DOWN, haier.getSwing());
EXPECT_EQ(HAIER_AC_CMD_SWING, haier.getCommand());
haier.setSwing(HAIER_AC_SWING_CHG);
EXPECT_EQ(HAIER_AC_SWING_CHG, haier.getSwing());
EXPECT_EQ(HAIER_AC_CMD_SWING, haier.getCommand());
}
TEST(TestHaierACClass, CurrentTime) {
IRHaierAC haier(0);
haier.begin();
EXPECT_EQ(0, haier.getCurrTime());
haier.setCurrTime(1);
EXPECT_EQ(1, haier.getCurrTime());
haier.setCurrTime(60);
EXPECT_EQ(60, haier.getCurrTime());
haier.setCurrTime(61);
EXPECT_EQ(61, haier.getCurrTime());
haier.setCurrTime(18 * 60 + 34); // 18:34
EXPECT_EQ(1114, haier.getCurrTime());
haier.setCurrTime(23 * 60 + 59); // 23:59
EXPECT_EQ(HAIER_AC_MAX_TIME, haier.getCurrTime()); // 23:59
haier.setCurrTime(23 * 60 + 59 + 1); // 24:00
EXPECT_EQ(HAIER_AC_MAX_TIME, haier.getCurrTime()); // 23:59
haier.setCurrTime(UINT16_MAX);
EXPECT_EQ(HAIER_AC_MAX_TIME, haier.getCurrTime()); // 23:59
}
TEST(TestHaierACClass, Timers) {
IRHaierAC haier(0);
haier.begin();
haier.setCommand(HAIER_AC_CMD_ON);
// Off by default.
EXPECT_GT(0, haier.getOnTimer());
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
// On Timer.
haier.setOnTimer(6 * 60); // 6am
EXPECT_EQ(6 * 60, haier.getOnTimer()); // 6am
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_TIMER_SET, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_ON);
EXPECT_EQ(6 * 60, haier.getOnTimer()); // 6am
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
haier.cancelTimers();
EXPECT_GT(0, haier.getOnTimer());
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_TIMER_CANCEL, haier.getCommand());
// Off Timer.
haier.setOffTimer(18 * 60 + 30); // 6:30pm
EXPECT_GT(0, haier.getOnTimer());
EXPECT_EQ(18 * 60 + 30, haier.getOffTimer()); // 6:30pm
EXPECT_EQ(HAIER_AC_CMD_TIMER_SET, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_ON);
EXPECT_GT(0, haier.getOnTimer());
EXPECT_EQ(18 * 60 + 30, haier.getOffTimer()); // 6:30pm
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
haier.cancelTimers();
EXPECT_GT(0, haier.getOnTimer());
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_TIMER_CANCEL, haier.getCommand());
// Both Timers.
haier.setOnTimer(6 * 60); // 6am
EXPECT_EQ(HAIER_AC_CMD_TIMER_SET, haier.getCommand());
haier.setOffTimer(18 * 60 + 30); // 6:30pm
EXPECT_EQ(HAIER_AC_CMD_TIMER_SET, haier.getCommand());
EXPECT_EQ(6 * 60, haier.getOnTimer()); // 6am
EXPECT_EQ(18 * 60 + 30, haier.getOffTimer()); // 6:30pm
haier.cancelTimers();
EXPECT_GT(0, haier.getOnTimer());
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_TIMER_CANCEL, haier.getCommand());
}
TEST(TestHaierACClass, TimeToString) {
EXPECT_EQ("00:00", IRHaierAC::timeToString(0));
EXPECT_EQ("00:01", IRHaierAC::timeToString(1));
EXPECT_EQ("00:10", IRHaierAC::timeToString(10));
EXPECT_EQ("00:59", IRHaierAC::timeToString(59));
EXPECT_EQ("01:00", IRHaierAC::timeToString(60));
EXPECT_EQ("01:01", IRHaierAC::timeToString(61));
EXPECT_EQ("01:59", IRHaierAC::timeToString(60 + 59));
EXPECT_EQ("18:59", IRHaierAC::timeToString(18 * 60 + 59));
EXPECT_EQ("23:59", IRHaierAC::timeToString(23 * 60 + 59));
}
TEST(TestHaierACClass, MessageConstuction) {
IRHaierAC haier(0);
EXPECT_EQ("Command: 1 (On), Mode: 0 (AUTO), Temp: 25C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: Off, "
"Current Time: 00:00, On Timer: Off, Off Timer: Off",
haier.toString());
haier.setMode(HAIER_AC_COOL);
haier.setTemp(21);
haier.setFan(HAIER_AC_FAN_HIGH);
EXPECT_EQ("Command: 3 (Fan), Mode: 1 (COOL), Temp: 21C, Fan: 3 (MAX), "
"Swing: 0 (Off), Sleep: Off, Health: Off, "
"Current Time: 00:00, On Timer: Off, Off Timer: Off",
haier.toString());
haier.setSwing(HAIER_AC_SWING_CHG);
haier.setHealth(true);
haier.setSleep(true);
haier.setCurrTime(615); // 10:15am
EXPECT_EQ("Command: 8 (Sleep), Mode: 3 (HEAT), Temp: 21C, Fan: 3 (MAX), "
"Swing: 3 (Chg), Sleep: On, Health: On, "
"Current Time: 10:15, On Timer: Off, Off Timer: Off",
haier.toString());
haier.setOnTimer(800); // 1:20pm
haier.setOffTimer(1125); // 6:45pm
haier.setCommand(HAIER_AC_CMD_ON);
EXPECT_EQ("Command: 1 (On), Mode: 2 (DRY), Temp: 21C, Fan: 2, "
"Swing: 3 (Chg), Sleep: On, Health: On, "
"Current Time: 10:15, On Timer: 13:20, Off Timer: 18:45",
haier.toString());
// Now change a few already set things.
haier.setMode(HAIER_AC_HEAT);
EXPECT_EQ("Command: 2 (Mode), Mode: 3 (HEAT), Temp: 21C, Fan: 2, "
"Swing: 3 (Chg), Sleep: On, Health: On, "
"Current Time: 10:15, On Timer: 13:52, Off Timer: 18:45",
haier.toString());
haier.setTemp(25);
EXPECT_EQ("Command: 6 (Temp Up), Mode: 3 (HEAT), Temp: 25C, Fan: 2, "
"Swing: 3 (Chg), Sleep: On, Health: On, "
"Current Time: 10:15, On Timer: 13:52, Off Timer: 18:45",
haier.toString());
uint8_t expectedState[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x96, 0xEA, 0xCF, 0x32, 0x2D, 0x0D, 0x74, 0xD4};
EXPECT_STATE_EQ(expectedState, haier.getRaw(), HAIER_AC_BITS);
// Check that the checksum is valid.
EXPECT_TRUE(IRHaierAC::validChecksum(haier.getRaw()));
// Now load up some random data.
uint8_t randomState[HAIER_AC_STATE_LENGTH] = {
0x52, 0x49, 0x50, 0x20, 0x54, 0x61, 0x6C, 0x69, 0x61};
EXPECT_FALSE(IRHaierAC::validChecksum(randomState));
haier.setRaw(randomState);
EXPECT_EQ("Command: 9 (Timer Set), Mode: 3 (HEAT), Temp: 20C, Fan: 2, "
"Swing: 1 (Up), Sleep: On, Health: Off, "
"Current Time: 16:32, On Timer: Off, Off Timer: Off",
haier.toString());
// getRaw() should correct the checksum.
EXPECT_TRUE(IRHaierAC::validChecksum(haier.getRaw()));
}
// Tests for decodeHaierAC().
// Decode normal "synthetic" messages.
TEST(TestDecodeHaierAC, NormalDecodeWithStrict) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
uint8_t expectedState[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x01, 0x20, 0x01, 0x00, 0xC0, 0x20, 0x00, 0xA7};
// With the specific decoder.
irsend.reset();
irsend.sendHaierAC(expectedState);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeHaierAC(&irsend.capture, HAIER_AC_BITS, true));
EXPECT_EQ(HAIER_AC, irsend.capture.decode_type);
EXPECT_EQ(HAIER_AC_BITS, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
// With the all the decoders.
irsend.reset();
irsend.sendHaierAC(expectedState);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(HAIER_AC, irsend.capture.decode_type);
EXPECT_EQ(HAIER_AC_BITS, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
}
// Decode a "real" example message.
TEST(TestDecodeHaierAC, RealExample1) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
// Data from Issue #404 captured by kuzin2006
uint16_t rawData[149] = {3030, 3044, 3030, 4304, 576, 1694, 550, 582, 552,
1704, 552, 714, 550, 582, 550, 1706, 552, 582, 550, 1836, 552, 582, 578,
568, 550, 582, 550, 714, 550, 582, 550, 582, 552, 582, 550, 1836, 552,
582, 552, 580, 580, 1692, 550, 712, 552, 582, 550, 582, 552, 580, 550,
714, 552, 582, 550, 582, 552, 582, 578, 698, 552, 580, 552, 582, 552,
582, 552, 1836, 552, 580, 552, 582, 552, 582, 550, 714, 578, 568, 550,
582, 550, 582, 552, 714, 550, 1706, 550, 1706, 550, 582, 550, 714, 552,
582, 580, 566, 552, 582, 550, 714, 552, 580, 552, 580, 552, 1706, 550,
714, 550, 582, 552, 582, 578, 568, 552, 712, 552, 582, 550, 582, 550,
582, 550, 712, 552, 582, 550, 582, 552, 582, 578, 722, 552, 1704, 550,
582, 550, 1706, 550, 736, 550, 582, 550, 1706, 550, 1704, 552, 1704, 578};
uint8_t expectedState[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x01, 0x20, 0x01, 0x00, 0xC0, 0x20, 0x00, 0xA7};
irsend.sendRaw(rawData, 149, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(HAIER_AC, irsend.capture.decode_type);
EXPECT_EQ(HAIER_AC_BITS, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRHaierAC haier(0);
haier.setRaw(irsend.capture.state);
EXPECT_EQ("Command: 1 (On), Mode: 0 (AUTO), Temp: 16C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: Off, "
"Current Time: 00:01, On Timer: Off, Off Timer: Off",
haier.toString());
}
// Decode a "real" example message.
TEST(TestDecodeHaierAC, RealExample2) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
// Data from Issue #404 captured by kuzin2006
uint16_t rawData[149] = {3028, 3046, 3028, 4304, 576, 1694, 552, 582, 550,
1704, 552, 714, 550, 582, 552, 1704, 550, 582, 550, 1836, 552, 582, 578,
1690, 552, 1704, 552, 712, 550, 582, 550, 1706, 550, 1706, 552, 712, 550,
582, 552, 582, 578, 1690, 552, 714, 552, 580, 552, 582, 552, 582, 550,
712, 552, 582, 550, 582, 550, 582, 578, 698, 552, 582, 550, 584, 550, 582,
552, 1836, 550, 582, 550, 582, 550, 582, 550, 712, 578, 568, 550, 582,
550, 582, 550, 714, 552, 1706, 550, 1706, 552, 580, 550, 714, 550, 582,
580, 568, 550, 582, 550, 714, 550, 582, 550, 582, 550, 1706, 552, 712,
550, 582, 550, 582, 580, 568, 552, 712, 550, 584, 550, 582, 550, 584, 550,
712, 550, 582, 550, 582, 550, 582, 578, 722, 550, 582, 552, 580, 552, 582,
550, 738, 550, 1706, 550, 1704, 552, 582, 550, 582, 578};
uint8_t expectedState[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x66, 0x20, 0x01, 0x00, 0xC0, 0x20, 0x00, 0x0C};
irsend.sendRaw(rawData, 149, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(HAIER_AC, irsend.capture.decode_type);
EXPECT_EQ(HAIER_AC_BITS, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRHaierAC haier(0);
haier.setRaw(irsend.capture.state);
EXPECT_EQ("Command: 6 (Temp Up), Mode: 0 (AUTO), Temp: 22C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: Off, "
"Current Time: 00:01, On Timer: Off, Off Timer: Off",
haier.toString());
}
// Decode a "real" example message.
TEST(TestDecodeHaierAC, RealExample3) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
// Data from Issue #404 captured by kuzin2006
uint16_t rawData[149] = {3030, 3044, 3030, 4302, 578, 1692, 550, 582, 550,
1706, 550, 714, 550, 582, 552, 1706, 550, 582, 550, 1836, 552, 1706, 578,
1690, 552, 1704, 552, 714, 550, 1706, 552, 1706, 550, 582, 550, 714, 552,
582, 550, 582, 578, 1690, 550, 714, 552, 582, 552, 582, 550, 582, 550,
714, 550, 584, 550, 582, 550, 582, 578, 700, 552, 1706, 550, 582, 550,
582, 552, 1836, 550, 582, 550, 582, 552, 1706, 550, 714, 578, 568, 552,
582, 552, 582, 550, 714, 550, 1706, 550, 1706, 550, 582, 552, 712, 552,
582, 580, 568, 550, 582, 550, 714, 550, 582, 550, 582, 550, 1706, 550,
714, 550, 582, 550, 582, 578, 568, 552, 712, 552, 582, 550, 582, 550, 582,
550, 712, 550, 584, 550, 582, 552, 582, 578, 722, 552, 1704, 550, 582,
550, 1706, 550, 1862, 550, 1706, 550, 582, 550, 1704, 552, 582, 578};
uint8_t expectedState[HAIER_AC_STATE_LENGTH] = {
0xA5, 0xEC, 0x20, 0x09, 0x20, 0xC0, 0x20, 0x00, 0xBA};
irsend.sendRaw(rawData, 149, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(HAIER_AC, irsend.capture.decode_type);
EXPECT_EQ(HAIER_AC_BITS, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRHaierAC haier(0);
haier.setRaw(irsend.capture.state);
EXPECT_EQ("Command: 12 (Health), Mode: 0 (AUTO), Temp: 30C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: On, "
"Current Time: 00:09, On Timer: Off, Off Timer: Off",
haier.toString());
}