Update IRRemote ESP8266 to 2.6.2 and add ESP32 support

This commit is contained in:
Florian committed 2019-07-08 22:21:02 +02:00
1 parent 2ee18320be
commit 24bcdbc97c
195 files changed
+22963 -4737

No files matched your search

+162 -8
View File
@@ -19,6 +19,7 @@ TEST(TestSendHaierAC, SendDataOnly) {
irsend.reset();
irsend.sendHaierAC(haier_zero);
EXPECT_EQ(
"f38000d50"
"m3000s3000m3000s4300"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
@@ -37,6 +38,7 @@ TEST(TestSendHaierAC, SendDataOnly) {
irsend.reset();
irsend.sendHaierAC(haier_test);
EXPECT_EQ(
"f38000d50"
"m3000s3000m3000s4300"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
@@ -62,6 +64,7 @@ TEST(TestSendHaierAC, SendWithRepeats) {
irsend.reset();
irsend.sendHaierAC(haier_test, kHaierACStateLength, 2); // two repeats.
EXPECT_EQ(
"f38000d50"
"m3000s3000m3000s4300"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
@@ -374,7 +377,7 @@ TEST(TestHaierACClass, MessageConstuction) {
haier.setSleep(true);
haier.setCurrTime(615); // 10:15am
EXPECT_EQ(
"Command: 8 (Sleep), Mode: 3 (HEAT), Temp: 21C, Fan: 3 (MAX), "
"Command: 8 (Sleep), Mode: 1 (COOL), Temp: 21C, Fan: 3 (MAX), "
"Swing: 3 (Chg), Sleep: On, Health: On, "
"Current Time: 10:15, On Timer: Off, Off Timer: Off",
haier.toString());
@@ -383,7 +386,7 @@ TEST(TestHaierACClass, MessageConstuction) {
haier.setCommand(kHaierAcCmdOn);
EXPECT_EQ(
"Command: 1 (On), Mode: 2 (DRY), Temp: 21C, Fan: 2, "
"Command: 1 (On), Mode: 1 (COOL), 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());
@@ -393,18 +396,18 @@ TEST(TestHaierACClass, MessageConstuction) {
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",
"Current Time: 10:15, On Timer: 13:20, 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",
"Current Time: 10:15, On Timer: 13:20, Off Timer: 18:45",
haier.toString());
uint8_t expectedState[kHaierACStateLength] = {0xA5, 0x96, 0xEA, 0xCF, 0x32,
0x2D, 0x0D, 0x74, 0xD4};
0xED, 0x6D, 0x54, 0xD4};
EXPECT_STATE_EQ(expectedState, haier.getRaw(), kHaierACBits);
// Check that the checksum is valid.
@@ -828,7 +831,7 @@ TEST(TestDecodeHaierAC, RealExample1) {
IRHaierAC haier(0);
haier.setRaw(irsend.capture.state);
EXPECT_EQ(
"Command: 1 (On), Mode: 0 (AUTO), Temp: 16C, Fan: 0 (AUTO), "
"Command: 1 (On), Mode: 1 (COOL), Temp: 16C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: Off, "
"Current Time: 00:01, On Timer: Off, Off Timer: Off",
haier.toString());
@@ -870,7 +873,7 @@ TEST(TestDecodeHaierAC, RealExample2) {
IRHaierAC haier(0);
haier.setRaw(irsend.capture.state);
EXPECT_EQ(
"Command: 6 (Temp Up), Mode: 0 (AUTO), Temp: 22C, Fan: 0 (AUTO), "
"Command: 6 (Temp Up), Mode: 1 (COOL), Temp: 22C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: Off, "
"Current Time: 00:01, On Timer: Off, Off Timer: Off",
haier.toString());
@@ -912,7 +915,7 @@ TEST(TestDecodeHaierAC, RealExample3) {
IRHaierAC haier(0);
haier.setRaw(irsend.capture.state);
EXPECT_EQ(
"Command: 12 (Health), Mode: 0 (AUTO), Temp: 30C, Fan: 0 (AUTO), "
"Command: 12 (Health), Mode: 1 (COOL), Temp: 30C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: On, "
"Current Time: 00:09, On Timer: Off, Off Timer: Off",
haier.toString());
@@ -987,3 +990,154 @@ TEST(TestDecodeHaierAC_YRW02, RealExample) {
" Health: On",
haier.toString());
}
// Default state of the remote needed to include hidden data.
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/668
TEST(TestHaierAcIssues, Issue668) {
IRHaierAC ac(0);
IRHaierAC acText(1);
IRrecv irrecv(0);
ac.begin();
// Turn on the AC.
ac._irsend.reset();
char expected_on[] =
"Command: 1 (On), Mode: 1 (COOL), Temp: 25C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: Off, Current Time: 00:00, "
"On Timer: Off, Off Timer: Off";
// State taken from real capture:
// https://github.com/markszabo/IRremoteESP8266/issues/668#issuecomment-483531895
uint8_t expected_on_state[9] = {
0xA5, 0x91, 0x20, 0x00, 0x0C, 0xC0, 0x20, 0x00, 0x42};
ac.setMode(kHaierAcCool);
ac.setCommand(kHaierAcCmdOn);
EXPECT_EQ(expected_on, ac.toString());
ac.send();
ac._irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&ac._irsend.capture));
ASSERT_EQ(HAIER_AC, ac._irsend.capture.decode_type);
EXPECT_EQ(kHaierACBits, ac._irsend.capture.bits);
EXPECT_STATE_EQ(expected_on_state,
ac._irsend.capture.state, ac._irsend.capture.bits);
acText.setRaw(ac._irsend.capture.state);
EXPECT_EQ(expected_on, acText.toString());
// Set the temp to 25C
ac._irsend.reset();
ac.setTemp(25);
EXPECT_EQ(expected_on, ac.toString());
ASSERT_EQ(25, ac.getTemp());
ac.send();
ac._irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&ac._irsend.capture));
ASSERT_EQ(HAIER_AC, ac._irsend.capture.decode_type);
EXPECT_EQ(kHaierACBits, ac._irsend.capture.bits);
EXPECT_STATE_EQ(expected_on_state,
ac._irsend.capture.state, ac._irsend.capture.bits);
acText.setRaw(ac._irsend.capture.state);
EXPECT_EQ(expected_on, acText.toString());
// Increase the temp by 1.
ac._irsend.reset();
char expected_temp_plus_one[] =
"Command: 6 (Temp Up), Mode: 1 (COOL), Temp: 26C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: Off, Current Time: 00:00, "
"On Timer: Off, Off Timer: Off";
// State taken from real capture:
// https://github.com/markszabo/IRremoteESP8266/issues/668#issuecomment-483531895
uint8_t expected_temp_plus_one_state[9] = {
0xA5, 0xA6, 0x20, 0x00, 0x0C, 0xC0, 0x20, 0x00, 0x57};
ASSERT_EQ(25, ac.getTemp());
ac.setTemp(ac.getTemp() + 1);
ASSERT_EQ(26, ac.getTemp());
EXPECT_EQ(expected_temp_plus_one, ac.toString());
ac.send();
ac._irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&ac._irsend.capture));
ASSERT_EQ(HAIER_AC, ac._irsend.capture.decode_type);
EXPECT_EQ(kHaierACBits, ac._irsend.capture.bits);
EXPECT_STATE_EQ(expected_temp_plus_one_state,
ac._irsend.capture.state, ac._irsend.capture.bits);
acText.setRaw(ac._irsend.capture.state);
EXPECT_EQ(expected_temp_plus_one, acText.toString());
// Decrease the temp by 1.
ac._irsend.reset();
char expected_temp_minus_one[] =
"Command: 7 (Temp Down), Mode: 1 (COOL), Temp: 25C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: Off, Current Time: 00:00, "
"On Timer: Off, Off Timer: Off";
ASSERT_EQ(26, ac.getTemp());
ac.setTemp(ac.getTemp() - 1);
ASSERT_EQ(25, ac.getTemp());
EXPECT_EQ(expected_temp_minus_one, ac.toString());
ac.send();
ac._irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&ac._irsend.capture));
ASSERT_EQ(HAIER_AC, ac._irsend.capture.decode_type);
EXPECT_EQ(kHaierACBits, ac._irsend.capture.bits);
acText.setRaw(ac._irsend.capture.state);
EXPECT_EQ(expected_temp_minus_one, acText.toString());
}
TEST(TestHaierACClass, toCommon) {
IRHaierAC ac(0);
ac.setCommand(kHaierAcCmdOn);
ac.setMode(kHaierAcCool);
ac.setTemp(20);
ac.setFan(kHaierAcFanHigh);
ac.setSwing(kHaierAcSwingChg);
ac.setHealth(true);
ac.setSleep(true);
// Now test it.
ASSERT_EQ(decode_type_t::HAIER_AC, ac.toCommon().protocol);
ASSERT_EQ(-1, ac.toCommon().model);
ASSERT_TRUE(ac.toCommon().power);
ASSERT_TRUE(ac.toCommon().celsius);
ASSERT_EQ(20, ac.toCommon().degrees);
ASSERT_TRUE(ac.toCommon().filter);
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
ASSERT_EQ(0, ac.toCommon().sleep);
// Unsupported.
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
ASSERT_FALSE(ac.toCommon().turbo);
ASSERT_FALSE(ac.toCommon().light);
ASSERT_FALSE(ac.toCommon().quiet);
ASSERT_FALSE(ac.toCommon().econo);
ASSERT_FALSE(ac.toCommon().clean);
ASSERT_FALSE(ac.toCommon().beep);
ASSERT_EQ(-1, ac.toCommon().clock);
}
TEST(TestHaierACYRW02Class, toCommon) {
IRHaierACYRW02 ac(0);
ac.setPower(true);
ac.setMode(kHaierAcYrw02Cool);
ac.setTemp(20);
ac.setFan(kHaierAcYrw02FanHigh);
ac.setSwing(kHaierAcYrw02SwingTop);
ac.setHealth(true);
ac.setSleep(true);
// Now test it.
ASSERT_EQ(decode_type_t::HAIER_AC_YRW02, ac.toCommon().protocol);
ASSERT_EQ(-1, ac.toCommon().model);
ASSERT_TRUE(ac.toCommon().power);
ASSERT_TRUE(ac.toCommon().celsius);
ASSERT_EQ(20, ac.toCommon().degrees);
ASSERT_TRUE(ac.toCommon().filter);
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
ASSERT_EQ(stdAc::swingv_t::kHighest, ac.toCommon().swingv);
ASSERT_EQ(0, ac.toCommon().sleep);
// Unsupported.
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
ASSERT_FALSE(ac.toCommon().turbo);
ASSERT_FALSE(ac.toCommon().light);
ASSERT_FALSE(ac.toCommon().quiet);
ASSERT_FALSE(ac.toCommon().econo);
ASSERT_FALSE(ac.toCommon().clean);
ASSERT_FALSE(ac.toCommon().beep);
ASSERT_EQ(-1, ac.toCommon().clock);
}