| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651 |
- // Copyright 2017 David Conran
- #include "ir_Midea.h"
- #include "IRsend.h"
- #include "IRsend_test.h"
- #include "gtest/gtest.h"
- // Tests for sendMidea().
- // Test sending typical data only.
- TEST(TestSendMidea, SendDataOnly) {
- IRsendTest irsend(4);
- irsend.begin();
- irsend.reset();
- irsend.sendMidea(0x0);
- EXPECT_EQ(
- "m4480s4480"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s5600"
- "m4480s4480"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s5600",
- irsend.outputStr());
- irsend.reset();
- irsend.sendMidea(0x55AA55AA55AA);
- EXPECT_EQ(
- "m4480s4480"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s5600"
- "m4480s4480"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s5600",
- irsend.outputStr());
- irsend.reset();
- irsend.sendMidea(0xFFFFFFFFFFFF);
- EXPECT_EQ(
- "m4480s4480"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s5600"
- "m4480s4480"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s5600",
- irsend.outputStr());
- }
- // Test sending with different repeats.
- TEST(TestSendMidea, SendWithRepeats) {
- IRsendTest irsend(4);
- irsend.begin();
- irsend.reset();
- irsend.sendMidea(0x55AA55AA55AA, kMideaBits, 1); // 1 repeat.
- EXPECT_EQ(
- "m4480s4480"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s5600"
- "m4480s4480"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s5600"
- "m4480s4480"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s5600"
- "m4480s4480"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s5600",
- irsend.outputStr());
- irsend.sendMidea(0x55AA55AA55AA, kMideaBits, 2); // 2 repeats.
- EXPECT_EQ(
- "m4480s4480"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s5600"
- "m4480s4480"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s5600"
- "m4480s4480"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s5600"
- "m4480s4480"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s5600"
- "m4480s4480"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s5600"
- "m4480s4480"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
- "m560s5600",
- irsend.outputStr());
- }
- // Test sending an atypical data size.
- TEST(TestSendMidea, SendUnusualSize) {
- IRsendTest irsend(4);
- irsend.begin();
- irsend.reset();
- irsend.sendMidea(0x0, 8);
- EXPECT_EQ(
- "m4480s4480"
- "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
- "m560s5600"
- "m4480s4480"
- "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
- "m560s5600",
- irsend.outputStr());
- irsend.reset();
- irsend.sendMidea(0x1234567890ABCDEF, 64);
- EXPECT_EQ(
- "m4480s4480"
- "m560s560m560s560m560s560m560s1680m560s560m560s560m560s1680m560s560"
- "m560s560m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s1680m560s560"
- "m560s560m560s1680m560s1680m560s1680m560s1680m560s560m560s560m560s560"
- "m560s1680m560s560m560s560m560s1680m560s560m560s560m560s560m560s560"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s1680"
- "m560s1680m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680"
- "m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s1680m560s1680"
- "m560s5600"
- "m4480s4480"
- "m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560m560s1680"
- "m560s1680m560s1680m560s560m560s560m560s1680m560s560m560s1680m560s1680"
- "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s560m560s1680"
- "m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680m560s1680"
- "m560s560m560s1680m560s1680m560s560m560s1680m560s1680m560s1680m560s1680"
- "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s560"
- "m560s560m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560"
- "m560s560m560s560m560s560m560s1680m560s560m560s560m560s560m560s560"
- "m560s5600",
- irsend.outputStr());
- // Bit sizes must be a multiple of 8.
- irsend.reset();
- irsend.sendMidea(0x0, 17);
- EXPECT_EQ("", irsend.outputStr());
- }
- // Tests for IRMideaAC class.
- // Tests for controlling the power state.
- TEST(TestMideaACClass, Power) {
- IRMideaAC midea(0);
- midea.begin();
- midea.setRaw(0xA1026FFFFFE2); // Power off.
- midea.on();
- EXPECT_TRUE(midea.getPower());
- EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
- midea.off();
- EXPECT_FALSE(midea.getPower());
- EXPECT_EQ(0xA1026FFFFFE2, midea.getRaw());
- midea.setPower(true);
- EXPECT_TRUE(midea.getPower());
- EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
- midea.setPower(false);
- EXPECT_FALSE(midea.getPower());
- EXPECT_EQ(0xA1026FFFFFE2, midea.getRaw());
- }
- // Tests for the various Checksum routines.
- TEST(TestMideaACClass, Checksums) {
- IRMideaAC midea(0);
- midea.begin();
- // Known good states
- EXPECT_EQ(0x62, IRMideaAC::calcChecksum(0xA1826FFFFF62));
- EXPECT_EQ(0x70, IRMideaAC::calcChecksum(0xA18177FFFF70));
- // Now without the checksum part.
- EXPECT_EQ(0x62, IRMideaAC::calcChecksum(0xA1826FFFFF00));
- EXPECT_EQ(0x70, IRMideaAC::calcChecksum(0xA18177FFFF00));
- // Made up values.
- EXPECT_EQ(0x00, IRMideaAC::calcChecksum(0x000000000000));
- EXPECT_EQ(0xDF, IRMideaAC::calcChecksum(0x1234567890AB));
- EXPECT_EQ(0xA0, IRMideaAC::calcChecksum(0xFFFFFFFFFFFF));
- // Larger than expected value (full 64bit)
- EXPECT_EQ(0xDF, IRMideaAC::calcChecksum(0xFF1234567890AB));
- EXPECT_EQ(0xDF, IRMideaAC::calcChecksum(0x551234567890AB));
- // Validity tests.
- EXPECT_TRUE(IRMideaAC::validChecksum(0xA1826FFFFF62));
- EXPECT_TRUE(IRMideaAC::validChecksum(0xA18177FFFF70));
- EXPECT_FALSE(IRMideaAC::validChecksum(0x1234567890AB));
- // Doing a setRaw() with a bad state should make a valid checksum on getRaw().
- midea.setRaw(0xA1826FFFFF00);
- EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
- }
- TEST(TestMideaACClass, OperatingMode) {
- IRMideaAC midea(0);
- midea.begin();
- midea.setRaw(0xA1826FFFFF62); // Auto mode already set.
- midea.setMode(kMideaACAuto);
- EXPECT_EQ(kMideaACAuto, midea.getMode());
- EXPECT_EQ(0xA1826FFFFF62, midea.getRaw()); // State shouldn't have changed.
- midea.setMode(kMideaACCool);
- EXPECT_EQ(kMideaACCool, midea.getMode());
- EXPECT_EQ(0xA1806FFFFF61, midea.getRaw());
- midea.setMode(kMideaACAuto);
- EXPECT_EQ(kMideaACAuto, midea.getMode());
- EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
- midea.setMode(kMideaACHeat);
- EXPECT_EQ(kMideaACHeat, midea.getMode());
- EXPECT_EQ(0xA1836FFFFF63, midea.getRaw());
- midea.setMode(kMideaACDry);
- EXPECT_EQ(kMideaACDry, midea.getMode());
- EXPECT_EQ(0xA1816FFFFF60, midea.getRaw());
- midea.setMode(kMideaACFan);
- EXPECT_EQ(kMideaACFan, midea.getMode());
- EXPECT_EQ(0xA1846FFFFF66, midea.getRaw());
- midea.setMode(255);
- EXPECT_EQ(kMideaACAuto, midea.getMode());
- EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
- }
- TEST(TestMideaACClass, FanSpeed) {
- IRMideaAC midea(0);
- midea.begin();
- midea.setRaw(0xA1826FFFFF62); // Auto mode already set.
- EXPECT_EQ(kMideaACFanAuto, midea.getFan());
- midea.setFan(kMideaACFanLow);
- EXPECT_EQ(kMideaACFanLow, midea.getFan());
- EXPECT_EQ(0xA18A6FFFFF6C, midea.getRaw());
- midea.setFan(255); // Setting an unexpected value defaults to auto.
- EXPECT_EQ(kMideaACFanAuto, midea.getFan());
- EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
- midea.setFan(kMideaACFanMed);
- EXPECT_EQ(kMideaACFanMed, midea.getFan());
- EXPECT_EQ(0xA1926FFFFF7C, midea.getRaw());
- midea.setFan(kMideaACFanHigh);
- EXPECT_EQ(kMideaACFanHigh, midea.getFan());
- EXPECT_EQ(0xA19A6FFFFF74, midea.getRaw());
- midea.setFan(kMideaACFanAuto);
- EXPECT_EQ(kMideaACFanAuto, midea.getFan());
- EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
- }
- TEST(TestMideaACClass, Temperature) {
- IRMideaAC midea(0);
- midea.begin();
- midea.setRaw(0xA1826FFFFF62); // 77F / 25C
- EXPECT_EQ(77, midea.getTemp()); // F
- EXPECT_EQ(77, midea.getTemp(false)); // F
- EXPECT_EQ(25, midea.getTemp(true)); // F
- midea.setTemp(0);
- EXPECT_EQ(kMideaACMinTempF, midea.getTemp());
- EXPECT_EQ(0xA18260FFFF6C, midea.getRaw());
- midea.setTemp(255);
- EXPECT_EQ(kMideaACMaxTempF, midea.getTemp());
- EXPECT_EQ(0xA18278FFFF78, midea.getRaw());
- midea.setTemp(0, true);
- EXPECT_EQ(kMideaACMinTempF, midea.getTemp());
- EXPECT_EQ(0xA18260FFFF6C, midea.getRaw());
- midea.setTemp(255, true);
- EXPECT_EQ(kMideaACMaxTempF, midea.getTemp());
- EXPECT_EQ(0xA18278FFFF78, midea.getRaw());
- // fahrenheit min/max etc.
- midea.setTemp(kMideaACMinTempF);
- EXPECT_EQ(kMideaACMinTempF, midea.getTemp());
- midea.setTemp(kMideaACMaxTempF);
- EXPECT_EQ(kMideaACMaxTempF, midea.getTemp());
- midea.setTemp(kMideaACMinTempF - 1);
- EXPECT_EQ(kMideaACMinTempF, midea.getTemp());
- midea.setTemp(kMideaACMaxTempF + 1);
- EXPECT_EQ(kMideaACMaxTempF, midea.getTemp());
- // celsius min/max etc.
- midea.setTemp(kMideaACMinTempC, true);
- EXPECT_EQ(kMideaACMinTempC, midea.getTemp(true));
- EXPECT_EQ(kMideaACMinTempF, midea.getTemp(false));
- midea.setTemp(kMideaACMaxTempC, true);
- EXPECT_EQ(kMideaACMaxTempC, midea.getTemp(true));
- EXPECT_EQ(kMideaACMaxTempF, midea.getTemp(false));
- midea.setTemp(kMideaACMinTempC - 1, true);
- EXPECT_EQ(kMideaACMinTempC, midea.getTemp(true));
- midea.setTemp(kMideaACMaxTempC + 1, true);
- EXPECT_EQ(kMideaACMaxTempC, midea.getTemp(true));
- EXPECT_EQ(kMideaACMaxTempF, midea.getTemp(false));
- // General changes.
- midea.setTemp(17, true); // C
- EXPECT_EQ(17, midea.getTemp(true)); // C
- EXPECT_EQ(63, midea.getTemp(false)); // F
- midea.setTemp(21, true); // C
- EXPECT_EQ(21, midea.getTemp(true)); // C
- EXPECT_EQ(70, midea.getTemp(false)); // F
- midea.setTemp(25, true); // C
- EXPECT_EQ(25, midea.getTemp(true)); // C
- EXPECT_EQ(77, midea.getTemp(false)); // F
- midea.setTemp(30, true); // C
- EXPECT_EQ(30, midea.getTemp(true)); // C
- EXPECT_EQ(86, midea.getTemp(false)); // F
- midea.setTemp(80, false); // F
- EXPECT_EQ(26, midea.getTemp(true)); // C
- EXPECT_EQ(80, midea.getTemp(false)); // F
- midea.setTemp(70); // F
- EXPECT_EQ(21, midea.getTemp(true)); // C
- EXPECT_EQ(70, midea.getTemp(false)); // F
- EXPECT_EQ(70, midea.getTemp()); // F
- }
- // Tests for controlling the sleep state.
- TEST(TestMideaACClass, Sleep) {
- IRMideaAC midea(0);
- midea.begin();
- midea.setRaw(0xA1826FFFFF62); // Sleep off.
- EXPECT_FALSE(midea.getSleep());
- midea.setSleep(true);
- EXPECT_TRUE(midea.getSleep());
- EXPECT_EQ(0xA1C26FFFFF22, midea.getRaw());
- midea.setSleep(false);
- EXPECT_FALSE(midea.getSleep());
- EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
- }
- TEST(TestMideaACClass, HumanReadableOutput) {
- IRMideaAC midea(0);
- midea.begin();
- midea.setRaw(0xA1826FFFFF62);
- EXPECT_EQ(
- "Power: On, Mode: 2 (AUTO), Temp: 25C/77F, Fan: 0 (AUTO), "
- "Sleep: Off",
- midea.toString());
- midea.off();
- midea.setTemp(25);
- midea.setFan(kMideaACFanHigh);
- midea.setMode(kMideaACDry);
- midea.setSleep(true);
- EXPECT_EQ("Power: Off, Mode: 1 (DRY), Temp: 16C/62F, Fan: 3 (HI), Sleep: On",
- midea.toString());
- midea.setRaw(0xA19867FFFF7E);
- EXPECT_EQ("Power: On, Mode: 0 (COOL), Temp: 20C/69F, Fan: 3 (HI), Sleep: Off",
- midea.toString());
- }
- // Tests for decodeMidea().
- // Decode normal Midea messages with strict set.
- TEST(TestDecodeMidea, NormalDecodeWithStrict) {
- IRsendTest irsend(4);
- IRrecv irrecv(4);
- irsend.begin();
- // Normal Midea 48-bit message.
- irsend.reset();
- irsend.sendMidea(0x1234567890DF);
- irsend.makeDecodeResult();
- ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
- EXPECT_EQ(MIDEA, irsend.capture.decode_type);
- EXPECT_EQ(kMideaBits, irsend.capture.bits);
- EXPECT_EQ(0x1234567890DF, irsend.capture.value);
- EXPECT_EQ(0x0, irsend.capture.address);
- EXPECT_EQ(0x0, irsend.capture.command);
- EXPECT_FALSE(irsend.capture.repeat);
- // Normal Midea 48-bit message.
- irsend.reset();
- irsend.sendMidea(0x0);
- irsend.makeDecodeResult();
- ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
- EXPECT_EQ(MIDEA, irsend.capture.decode_type);
- EXPECT_EQ(kMideaBits, irsend.capture.bits);
- EXPECT_EQ(0x0, irsend.capture.value);
- EXPECT_EQ(0x0, irsend.capture.address);
- EXPECT_EQ(0x0, irsend.capture.command);
- EXPECT_FALSE(irsend.capture.repeat);
- // Normal Midea 48-bit message.
- irsend.reset();
- irsend.sendMidea(0xFFFFFFFFFFA0);
- irsend.makeDecodeResult();
- ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
- EXPECT_EQ(MIDEA, irsend.capture.decode_type);
- EXPECT_EQ(kMideaBits, irsend.capture.bits);
- EXPECT_EQ(0xFFFFFFFFFFA0, irsend.capture.value);
- EXPECT_EQ(0x0, irsend.capture.address);
- EXPECT_EQ(0x0, irsend.capture.command);
- EXPECT_FALSE(irsend.capture.repeat);
- // Real Midea 48-bit message via just decode().
- // i.e. No conficts with other decoders.
- irsend.reset();
- irsend.sendMidea(0xA18263FFFF6E);
- irsend.makeDecodeResult();
- ASSERT_TRUE(irrecv.decode(&irsend.capture));
- EXPECT_EQ(MIDEA, irsend.capture.decode_type);
- EXPECT_EQ(kMideaBits, irsend.capture.bits);
- EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
- EXPECT_EQ(0x0, irsend.capture.address);
- EXPECT_EQ(0x0, irsend.capture.command);
- EXPECT_FALSE(irsend.capture.repeat);
- }
- // Decode normal repeated Midea messages.
- TEST(TestDecodeMidea, NormalDecodeWithRepeatAndStrict) {
- IRsendTest irsend(4);
- IRrecv irrecv(4);
- irsend.begin();
- // Normal Midea 48-bit message with 2 repeats.
- irsend.reset();
- irsend.sendMidea(0xA18263FFFF6E, kMideaBits, 2);
- irsend.makeDecodeResult();
- ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
- EXPECT_EQ(MIDEA, irsend.capture.decode_type);
- EXPECT_EQ(kMideaBits, irsend.capture.bits);
- EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
- EXPECT_FALSE(irsend.capture.repeat);
- irsend.makeDecodeResult(2 * (2 * kMideaBits + 4));
- ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
- EXPECT_EQ(MIDEA, irsend.capture.decode_type);
- EXPECT_EQ(kMideaBits, irsend.capture.bits);
- EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
- irsend.makeDecodeResult(4 * (2 * kMideaBits + 4));
- ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
- EXPECT_EQ(MIDEA, irsend.capture.decode_type);
- EXPECT_EQ(kMideaBits, irsend.capture.bits);
- EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
- }
- // Decode unsupported Midea messages.
- TEST(TestDecodeMidea, DecodeWithNonStrictSizes) {
- IRsendTest irsend(4);
- IRrecv irrecv(4);
- irsend.begin();
- irsend.reset();
- irsend.sendMidea(0x12, 8); // Illegal value Midea 8-bit message.
- irsend.makeDecodeResult();
- // Should fail with strict on.
- ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
- // Should pass if strict off.
- ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, 8, false));
- EXPECT_EQ(MIDEA, irsend.capture.decode_type);
- EXPECT_EQ(8, irsend.capture.bits);
- EXPECT_EQ(0x12, irsend.capture.value);
- irsend.reset();
- irsend.sendMidea(0x12345678, 32); // Illegal value Midea 32-bit message.
- irsend.makeDecodeResult();
- // Shouldn't pass with strict when we ask for less bits than we got.
- ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
- irsend.makeDecodeResult();
- // Should fail with strict when we ask for the wrong bit size.
- ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, 32, true));
- // Should pass if strict off.
- ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, 32, false));
- EXPECT_EQ(MIDEA, irsend.capture.decode_type);
- EXPECT_EQ(32, irsend.capture.bits);
- EXPECT_EQ(0x12345678, irsend.capture.value);
- // Decode should fail if asked to decode non-multiples of 8 bits.
- irsend.reset();
- irsend.sendMidea(0x123456, kMideaBits, 2);
- irsend.makeDecodeResult();
- ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, 9, false));
- }
- // Decode (non-standard) 64-bit messages.
- TEST(TestDecodeMidea, Decode64BitMessages) {
- IRsendTest irsend(4);
- IRrecv irrecv(4);
- irsend.begin();
- irsend.reset();
- // Illegal size Midea 64-bit message.
- irsend.sendMidea(0xFFFFFFFFFFFFFFFF, 64);
- irsend.makeDecodeResult();
- // Should work with a 'normal' match (not strict)
- ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, 64, false));
- EXPECT_EQ(MIDEA, irsend.capture.decode_type);
- EXPECT_EQ(64, irsend.capture.bits);
- EXPECT_EQ(0xFFFFFFFFFFFFFFFF, irsend.capture.value);
- }
- // Fail to decode a non-Midea example via GlobalCache
- TEST(TestDecodeMidea, FailToDecodeNonMideaExample) {
- IRsendTest irsend(4);
- IRrecv irrecv(4);
- irsend.begin();
- irsend.reset();
- // Modified a few entries to unexpected values, based on previous test case.
- uint16_t gc_test[39] = {38000, 1, 1, 322, 162, 20, 61, 20, 61, 20,
- 20, 20, 20, 20, 20, 20, 127, 20, 61, 9,
- 20, 20, 61, 20, 20, 20, 61, 20, 61, 20,
- 61, 20, 20, 20, 20, 20, 20, 20, 884};
- irsend.sendGC(gc_test, 39);
- irsend.makeDecodeResult();
- ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture));
- ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, kMideaBits, false));
- }
- // Decode against a real capture reported by a user. See issue #354
- TEST(TestDecodeMidea, DecodeRealExample) {
- IRsendTest irsend(4);
- IRrecv irrecv(4);
- irsend.begin();
- irsend.reset();
- uint16_t rawData[199] = {
- 4366, 4470, 498, 1658, 522, 554, 498, 1658, 496, 580, 498, 580,
- 498, 578, 498, 580, 498, 1658, 498, 1658, 498, 578, 498, 578,
- 498, 580, 496, 582, 496, 578, 498, 1658, 498, 580, 498, 580,
- 498, 1656, 498, 1656, 500, 580, 498, 578, 502, 576, 500, 1656,
- 498, 1656, 500, 1654, 500, 1656, 500, 1656, 498, 1658, 498, 1656,
- 500, 1658, 498, 1656, 498, 1656, 500, 1656, 500, 1654, 500, 1578,
- 578, 1658, 498, 1656, 500, 1658, 498, 1656, 498, 1656, 500, 578,
- 498, 1638, 516, 1656, 500, 578, 500, 1656, 500, 1656, 498, 1658,
- 522, 554, 500, 5258, 4366, 4472, 498, 580, 498, 1658, 498, 580,
- 498, 1656, 500, 1600, 556, 1658, 500, 1656, 500, 578, 498, 578,
- 522, 1634, 498, 1588, 568, 1658, 498, 1656, 500, 1654, 498, 580,
- 498, 1658, 498, 1658, 498, 580, 496, 578, 500, 1654, 500, 1636,
- 518, 1656, 500, 578, 520, 558, 498, 578, 498, 580, 498, 576,
- 500, 578, 498, 580, 498, 578, 498, 578, 498, 580, 498, 578,
- 498, 580, 498, 580, 520, 556, 498, 580, 496, 580, 498, 578,
- 500, 578, 498, 1658, 498, 580, 498, 578, 498, 1656, 500, 578,
- 498, 580, 498, 580, 498, 1656, 522};
- irsend.sendRaw(rawData, 199, 38000);
- irsend.makeDecodeResult();
- ASSERT_TRUE(irrecv.decode(&irsend.capture));
- EXPECT_EQ(MIDEA, irsend.capture.decode_type);
- EXPECT_EQ(kMideaBits, irsend.capture.bits);
- EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
- }
|