| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664 |
- // Copyright 2017 David Conran
- #include "ir_Toshiba.h"
- #include "IRrecv.h"
- #include "IRrecv_test.h"
- #include "IRsend.h"
- #include "IRsend_test.h"
- #include "gtest/gtest.h"
- // Tests for Toshiba A/C methods.
- // Test sending typical data only.
- TEST(TestSendToshibaAC, SendDataOnly) {
- IRsendTest irsend(4);
- irsend.begin();
- uint8_t toshiba_code[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
- 0x00, 0x00, 0x00, 0x00};
- irsend.reset();
- irsend.sendToshibaAC(toshiba_code);
- EXPECT_EQ(
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s7048"
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s7048",
- irsend.outputStr());
- }
- // Test sending with repeats.
- TEST(TestSendToshibaAC, SendWithRepeats) {
- IRsendTest irsend(4);
- irsend.begin();
- irsend.reset();
- uint8_t toshiba_code[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
- 0x00, 0x00, 0x00, 0x00};
- irsend.sendToshibaAC(toshiba_code, kToshibaACStateLength, 0);
- EXPECT_EQ(
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s7048",
- irsend.outputStr());
- irsend.reset();
- irsend.sendToshibaAC(toshiba_code, kToshibaACStateLength, 2);
- EXPECT_EQ(
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s7048"
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s7048"
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s7048",
- irsend.outputStr());
- }
- // Test sending atypical sizes.
- TEST(TestSendToshibaAC, SendUnexpectedSizes) {
- IRsendTest irsend(4);
- irsend.begin();
- uint8_t toshiba_short_code[8] = {0x01, 0x02, 0x03, 0x04,
- 0x05, 0x06, 0x07, 0x08};
- uint8_t toshiba_long_code[10] = {0x01, 0x02, 0x03, 0x04, 0x05,
- 0x06, 0x07, 0x08, 0x09, 0x0A};
- irsend.reset();
- irsend.sendToshibaAC(toshiba_short_code, kToshibaACStateLength - 1);
- ASSERT_EQ("", irsend.outputStr());
- irsend.reset();
- irsend.sendToshibaAC(toshiba_long_code, kToshibaACStateLength + 1);
- ASSERT_EQ(
- "m4400s4300"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623m543s1623"
- "m543s472m543s472m543s472m543s472m543s1623m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s1623m543s472m543s1623m543s472"
- "m543s7048"
- "m4400s4300"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623m543s1623"
- "m543s472m543s472m543s472m543s472m543s1623m543s472m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s1623m543s472m543s1623m543s472"
- "m543s7048",
- irsend.outputStr());
- }
- // Tests for IRToshibaAC class.
- TEST(TestToshibaACClass, Power) {
- IRToshibaAC toshiba(0);
- toshiba.begin();
- toshiba.on();
- EXPECT_TRUE(toshiba.getPower());
- toshiba.off();
- EXPECT_FALSE(toshiba.getPower());
- toshiba.setPower(true);
- EXPECT_TRUE(toshiba.getPower());
- toshiba.setPower(false);
- EXPECT_FALSE(toshiba.getPower());
- }
- TEST(TestToshibaACClass, Temperature) {
- IRToshibaAC toshiba(0);
- toshiba.begin();
- toshiba.setTemp(0);
- EXPECT_EQ(kToshibaAcMinTemp, toshiba.getTemp());
- toshiba.setTemp(255);
- EXPECT_EQ(kToshibaAcMaxTemp, toshiba.getTemp());
- toshiba.setTemp(kToshibaAcMinTemp);
- EXPECT_EQ(kToshibaAcMinTemp, toshiba.getTemp());
- toshiba.setTemp(kToshibaAcMaxTemp);
- EXPECT_EQ(kToshibaAcMaxTemp, toshiba.getTemp());
- toshiba.setTemp(kToshibaAcMinTemp - 1);
- EXPECT_EQ(kToshibaAcMinTemp, toshiba.getTemp());
- toshiba.setTemp(kToshibaAcMaxTemp + 1);
- EXPECT_EQ(kToshibaAcMaxTemp, toshiba.getTemp());
- toshiba.setTemp(17);
- EXPECT_EQ(17, toshiba.getTemp());
- toshiba.setTemp(21);
- EXPECT_EQ(21, toshiba.getTemp());
- toshiba.setTemp(25);
- EXPECT_EQ(25, toshiba.getTemp());
- toshiba.setTemp(30);
- EXPECT_EQ(30, toshiba.getTemp());
- }
- TEST(TestToshibaACClass, OperatingMode) {
- IRToshibaAC toshiba(0);
- toshiba.begin();
- toshiba.setMode(kToshibaAcAuto);
- EXPECT_EQ(kToshibaAcAuto, toshiba.getMode());
- toshiba.setMode(kToshibaAcCool);
- EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
- toshiba.setMode(kToshibaAcHeat);
- EXPECT_EQ(kToshibaAcHeat, toshiba.getMode());
- toshiba.setMode(kToshibaAcDry);
- EXPECT_EQ(kToshibaAcDry, toshiba.getMode());
- toshiba.setMode(kToshibaAcHeat + 1);
- EXPECT_EQ(kToshibaAcAuto, toshiba.getMode());
- toshiba.setMode(255);
- EXPECT_EQ(kToshibaAcAuto, toshiba.getMode());
- // Setting the power off changes the underlying mode in the state to heat.
- toshiba.setPower(true);
- toshiba.setMode(kToshibaAcCool);
- EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
- EXPECT_EQ(kToshibaAcCool, toshiba.getMode(true));
- toshiba.setPower(false);
- EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
- EXPECT_EQ(kToshibaAcHeat, toshiba.getMode(true));
- }
- TEST(TestToshibaACClass, FanSpeed) {
- IRToshibaAC toshiba(0);
- toshiba.begin();
- toshiba.setFan(kToshibaAcFanAuto);
- EXPECT_EQ(kToshibaAcFanAuto, toshiba.getFan());
- toshiba.setFan(255);
- EXPECT_EQ(kToshibaAcFanMax, toshiba.getFan());
- toshiba.setFan(kToshibaAcFanMax);
- EXPECT_EQ(kToshibaAcFanMax, toshiba.getFan());
- toshiba.setFan(kToshibaAcFanMax - 1);
- EXPECT_EQ(kToshibaAcFanMax - 1, toshiba.getFan());
- toshiba.setFan(1);
- EXPECT_EQ(1, toshiba.getFan());
- toshiba.setFan(2);
- EXPECT_EQ(2, toshiba.getFan());
- toshiba.setFan(3);
- EXPECT_EQ(3, toshiba.getFan());
- toshiba.setFan(4);
- EXPECT_EQ(4, toshiba.getFan());
- toshiba.setFan(kToshibaAcFanMax + 1);
- EXPECT_EQ(kToshibaAcFanMax, toshiba.getFan());
- }
- TEST(TestToshibaACClass, RawState) {
- IRToshibaAC toshiba(0);
- toshiba.begin();
- uint8_t initial_state[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
- 0x00, 0x00, 0x00, 0x01};
- uint8_t modified_state[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
- 0x00, 0xC1, 0x00, 0xC0};
- // Verify the starting state.
- EXPECT_STATE_EQ(initial_state, toshiba.getRaw(), kToshibaACBits);
- EXPECT_TRUE(toshiba.getPower());
- EXPECT_EQ(kToshibaAcAuto, toshiba.getMode());
- EXPECT_EQ(kToshibaAcFanAuto, toshiba.getFan());
- // Change some settings.
- toshiba.setMode(kToshibaAcCool);
- toshiba.setFan(kToshibaAcFanMax);
- toshiba.setTemp(kToshibaAcMinTemp);
- // Verify those were set.
- EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
- EXPECT_EQ(kToshibaAcFanMax, toshiba.getFan());
- EXPECT_EQ(kToshibaAcMinTemp, toshiba.getTemp());
- // Retrieve the modified state.
- EXPECT_STATE_EQ(modified_state, toshiba.getRaw(), kToshibaACBits);
- // Set it back to the initial state.
- toshiba.setRaw(initial_state);
- // Check the new state was set correctly.
- EXPECT_TRUE(toshiba.getPower());
- EXPECT_EQ(kToshibaAcAuto, toshiba.getMode());
- EXPECT_EQ(kToshibaAcFanAuto, toshiba.getFan());
- EXPECT_STATE_EQ(initial_state, toshiba.getRaw(), kToshibaACBits);
- }
- TEST(TestToshibaACClass, Checksums) {
- IRToshibaAC toshiba(0);
- toshiba.begin();
- uint8_t initial_state[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
- 0x00, 0x00, 0x00, 0x01};
- uint8_t modified_state[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
- 0x00, 0xC1, 0x00, 0xC0};
- uint8_t invalid_state[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
- 0x00, 0x00, 0x00, 0x00};
- EXPECT_EQ(0x01, toshiba.calcChecksum(initial_state));
- EXPECT_EQ(0xC0, toshiba.calcChecksum(modified_state));
- // Check we can call it without instantiating the object.
- EXPECT_EQ(0x01, IRToshibaAC::calcChecksum(initial_state));
- // Use different lengths.
- EXPECT_EQ(0x01, IRToshibaAC::calcChecksum(initial_state,
- kToshibaACStateLength - 1));
- EXPECT_EQ(0xFF, IRToshibaAC::calcChecksum(initial_state, 3));
- // Minimum length that actually means anything.
- EXPECT_EQ(0xF2, IRToshibaAC::calcChecksum(initial_state, 2));
- // Technically, there is no such thing as a checksum for a length of < 2
- // But test it anyway
- EXPECT_EQ(0x00, IRToshibaAC::calcChecksum(initial_state, 1));
- EXPECT_EQ(0x00, IRToshibaAC::calcChecksum(initial_state, 0));
- // Validity tests.
- EXPECT_TRUE(IRToshibaAC::validChecksum(initial_state));
- EXPECT_TRUE(IRToshibaAC::validChecksum(modified_state));
- EXPECT_FALSE(IRToshibaAC::validChecksum(invalid_state));
- EXPECT_FALSE(IRToshibaAC::validChecksum(initial_state, 0));
- EXPECT_FALSE(IRToshibaAC::validChecksum(initial_state, 1));
- EXPECT_FALSE(IRToshibaAC::validChecksum(initial_state, 2));
- }
- TEST(TestToshibaACClass, HumanReadableOutput) {
- IRToshibaAC toshiba(0);
- toshiba.begin();
- uint8_t initial_state[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
- 0x00, 0x00, 0x00, 0x01};
- uint8_t modified_state[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
- 0x00, 0xC1, 0x00, 0xC0};
- toshiba.setRaw(initial_state);
- EXPECT_EQ("Power: On, Mode: 0 (AUTO), Temp: 17C, Fan: 0 (AUTO)",
- toshiba.toString());
- toshiba.setRaw(modified_state);
- EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 17C, Fan: 5 (MAX)",
- toshiba.toString());
- toshiba.off();
- toshiba.setTemp(25);
- toshiba.setFan(3);
- toshiba.setMode(kToshibaAcDry);
- EXPECT_EQ("Power: Off, Mode: 2 (DRY), Temp: 25C, Fan: 3", toshiba.toString());
- }
- TEST(TestToshibaACClass, MessageConstuction) {
- IRToshibaAC toshiba(0);
- IRsendTest irsend(4);
- toshiba.begin();
- irsend.begin();
- toshiba.setFan(1);
- toshiba.setMode(kToshibaAcCool);
- toshiba.setTemp(27);
- toshiba.on();
- // Check everything for kicks.
- EXPECT_EQ(1, toshiba.getFan());
- EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
- EXPECT_EQ(27, toshiba.getTemp());
- EXPECT_TRUE(toshiba.getPower());
- irsend.reset();
- irsend.sendToshibaAC(toshiba.getRaw());
- EXPECT_EQ(
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s1623m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s1623m543s1623m543s1623m543s472m543s472m543s472m543s472m543s472"
- "m543s7048"
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s1623m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s1623m543s1623m543s1623m543s472m543s472m543s472m543s472m543s472"
- "m543s7048",
- irsend.outputStr());
- // Turn off the power and re-check.
- toshiba.setPower(false);
- // Check everything for kicks.
- EXPECT_EQ(1, toshiba.getFan());
- EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
- EXPECT_EQ(27, toshiba.getTemp());
- EXPECT_FALSE(toshiba.getPower());
- irsend.reset();
- irsend.sendToshibaAC(toshiba.getRaw());
- EXPECT_EQ(
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s1623m543s472m543s472m543s472m543s1623m543s1623m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s1623m543s472"
- "m543s7048"
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s1623m543s472m543s472m543s472m543s1623m543s1623m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s1623m543s472"
- "m543s7048",
- irsend.outputStr());
- // Turn the power back on, and check nothing changed.
- toshiba.on();
- EXPECT_EQ(1, toshiba.getFan());
- EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
- EXPECT_EQ(27, toshiba.getTemp());
- EXPECT_TRUE(toshiba.getPower());
- irsend.reset();
- irsend.sendToshibaAC(toshiba.getRaw());
- EXPECT_EQ(
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s1623m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s1623m543s1623m543s1623m543s472m543s472m543s472m543s472m543s472"
- "m543s7048"
- "m4400s4300"
- "m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
- "m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
- "m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
- "m543s472m543s1623m543s472m543s472m543s472m543s472m543s472m543s1623"
- "m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
- "m543s1623m543s1623m543s1623m543s472m543s472m543s472m543s472m543s472"
- "m543s7048",
- irsend.outputStr());
- }
- // Decoding a message we entirely constructed based solely on a given state.
- TEST(TestDecodeToshibaAC, SyntheticExample) {
- IRsendTest irsend(4);
- IRrecv irrecv(4);
- irsend.begin();
- uint8_t expectedState[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
- 0x00, 0x00, 0x00, 0x01};
- irsend.reset();
- irsend.sendToshibaAC(expectedState);
- irsend.makeDecodeResult();
- EXPECT_TRUE(irrecv.decode(&irsend.capture));
- ASSERT_EQ(TOSHIBA_AC, irsend.capture.decode_type);
- ASSERT_EQ(kToshibaACBits, irsend.capture.bits);
- EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
- }
- // Test decoding against captures from a real Toshiba A/C remote.
- // Recorded by @mwildbolz
- TEST(TestDecodeToshibaAC, RealExamples) {
- IRToshibaAC toshiba(0);
- IRsendTest irsend(4);
- IRrecv irrecv(4);
- irsend.begin();
- uint16_t rawData1[295] = {
- 4442, 4292, 612, 1544, 616, 1544, 616, 1544, 612, 1548, 610, 468,
- 612, 468, 662, 1494, 640, 438, 616, 464, 614, 464, 616, 464,
- 612, 468, 610, 1544, 616, 1544, 616, 468, 612, 1544, 616, 464,
- 694, 386, 616, 464, 612, 468, 612, 468, 636, 444, 610, 1546,
- 616, 1544, 612, 1546, 614, 1546, 616, 1546, 740, 1420, 612, 1544,
- 616, 1546, 616, 464, 610, 468, 610, 470, 612, 468, 610, 468,
- 610, 470, 636, 438, 616, 464, 616, 464, 616, 1546, 636, 442,
- 612, 1546, 614, 1544, 616, 464, 614, 464, 610, 468, 612, 468,
- 612, 468, 612, 468, 636, 440, 614, 464, 616, 464, 616, 464,
- 612, 468, 636, 442, 638, 442, 662, 418, 610, 464, 616, 464,
- 616, 464, 610, 468, 612, 468, 636, 444, 610, 468, 638, 438,
- 614, 1546, 612, 1548, 612, 470, 610, 468, 636, 442, 612, 468,
- 612, 1544, 612, 7396, 4442, 4292, 610, 1546, 616, 1544, 612, 1548,
- 612, 1546, 616, 464, 616, 464, 616, 1544, 612, 468, 662, 418,
- 610, 468, 638, 442, 638, 438, 616, 1546, 616, 1544, 612, 468,
- 610, 1546, 616, 464, 616, 464, 642, 438, 616, 464, 612, 468,
- 610, 470, 610, 1546, 616, 1544, 612, 1546, 616, 1546, 614, 1546,
- 612, 1550, 610, 1544, 616, 1546, 614, 464, 642, 438, 610, 468,
- 612, 468, 612, 468, 612, 468, 610, 468, 638, 438, 614, 464,
- 616, 1544, 636, 444, 636, 1520, 616, 1544, 616, 464, 616, 464,
- 612, 468, 612, 468, 612, 468, 612, 468, 612, 464, 612, 470,
- 636, 442, 638, 442, 612, 470, 692, 384, 614, 464, 616, 464,
- 612, 468, 610, 468, 612, 468, 610, 470, 610, 464, 616, 464,
- 616, 464, 616, 464, 610, 1550, 610, 1546, 640, 444, 688, 386,
- 616, 464, 612, 468, 612, 1544, 642};
- irsend.reset();
- irsend.sendRaw(rawData1, 295, 38000);
- irsend.makeDecodeResult();
- EXPECT_TRUE(irrecv.decode(&irsend.capture));
- ASSERT_EQ(TOSHIBA_AC, irsend.capture.decode_type);
- ASSERT_EQ(kToshibaACBits, irsend.capture.bits);
- toshiba.setRaw(irsend.capture.state);
- EXPECT_TRUE(toshiba.getPower());
- EXPECT_EQ(23, toshiba.getTemp());
- EXPECT_EQ(kToshibaAcFanAuto, toshiba.getFan());
- EXPECT_EQ(kToshibaAcAuto, toshiba.getMode());
- uint16_t rawData2[295] = {
- 4500, 4236, 636, 1520, 642, 1520, 640, 1520, 664, 1492, 642, 440,
- 668, 412, 642, 1518, 638, 438, 666, 414, 640, 438, 642, 438,
- 638, 442, 642, 1516, 640, 1520, 642, 438, 642, 1520, 636, 438,
- 668, 412, 640, 440, 666, 412, 642, 438, 668, 412, 640, 1516,
- 668, 1492, 642, 1520, 666, 1494, 638, 1520, 642, 1520, 668, 1490,
- 666, 1494, 642, 438, 638, 438, 668, 412, 668, 412, 642, 438,
- 642, 438, 664, 412, 642, 438, 642, 438, 642, 1518, 642, 434,
- 668, 412, 642, 438, 668, 412, 692, 388, 666, 412, 642, 434,
- 642, 438, 642, 1518, 668, 412, 668, 412, 640, 438, 638, 438,
- 642, 438, 640, 438, 668, 1492, 642, 440, 666, 412, 640, 438,
- 642, 438, 642, 434, 668, 412, 668, 412, 666, 414, 666, 1494,
- 640, 438, 642, 434, 668, 412, 642, 438, 642, 438, 668, 412,
- 668, 414, 640, 7362, 4474, 4262, 642, 1518, 638, 1520, 640, 1520,
- 668, 1494, 640, 434, 642, 438, 640, 1520, 642, 438, 642, 438,
- 642, 438, 642, 438, 642, 434, 668, 1494, 642, 1518, 638, 442,
- 638, 1520, 642, 438, 642, 438, 668, 414, 664, 408, 642, 438,
- 668, 412, 642, 1520, 666, 1494, 642, 1514, 642, 1518, 642, 1520,
- 636, 1520, 668, 1494, 666, 1494, 638, 438, 666, 414, 640, 440,
- 666, 412, 668, 412, 668, 412, 642, 434, 668, 412, 668, 412,
- 668, 1494, 642, 438, 642, 434, 642, 438, 642, 438, 642, 438,
- 642, 438, 642, 434, 646, 434, 642, 1518, 668, 412, 642, 438,
- 642, 434, 666, 414, 640, 438, 642, 438, 642, 1518, 642, 438,
- 642, 434, 668, 412, 642, 438, 642, 438, 642, 438, 642, 438,
- 642, 438, 640, 1520, 636, 438, 642, 438, 642, 438, 666, 414,
- 668, 412, 642, 440, 640, 438, 640};
- irsend.reset();
- irsend.sendRaw(rawData2, 295, 38000);
- irsend.makeDecodeResult();
- EXPECT_TRUE(irrecv.decode(&irsend.capture));
- ASSERT_EQ(TOSHIBA_AC, irsend.capture.decode_type);
- ASSERT_EQ(kToshibaACBits, irsend.capture.bits);
- toshiba.setRaw(irsend.capture.state);
- EXPECT_TRUE(toshiba.getPower());
- EXPECT_EQ(17, toshiba.getTemp());
- EXPECT_EQ(3, toshiba.getFan());
- EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
- uint16_t rawData3[295] = {
- 4474, 4262, 642, 1514, 642, 1520, 642, 1520, 642, 1514, 642, 438,
- 642, 438, 642, 1520, 636, 438, 642, 438, 642, 438, 642, 438,
- 642, 438, 640, 1520, 638, 1520, 642, 438, 640, 1520, 642, 438,
- 642, 434, 642, 438, 642, 438, 642, 438, 668, 414, 636, 1520,
- 642, 1520, 642, 1514, 642, 1520, 642, 1520, 640, 1518, 638, 1520,
- 666, 1494, 642, 438, 642, 434, 642, 438, 640, 438, 642, 438,
- 642, 440, 640, 434, 642, 438, 642, 438, 642, 1520, 642, 438,
- 642, 1514, 642, 1520, 640, 1520, 636, 438, 642, 438, 642, 438,
- 666, 414, 642, 1520, 636, 1520, 642, 438, 642, 438, 640, 438,
- 642, 434, 642, 1518, 642, 1520, 642, 438, 642, 434, 640, 438,
- 642, 438, 642, 438, 642, 440, 642, 438, 668, 408, 642, 1520,
- 642, 438, 642, 1520, 638, 1518, 642, 438, 642, 438, 640, 1520,
- 640, 438, 642, 7362, 4474, 4262, 642, 1518, 638, 1520, 640, 1520,
- 642, 1520, 638, 438, 642, 438, 642, 1518, 642, 438, 638, 438,
- 642, 438, 642, 438, 642, 438, 642, 1514, 642, 1520, 642, 438,
- 666, 1490, 642, 438, 642, 438, 642, 440, 640, 438, 642, 434,
- 640, 438, 642, 1520, 642, 1520, 636, 1520, 642, 1520, 642, 1514,
- 642, 1518, 642, 1518, 640, 1516, 642, 438, 642, 438, 642, 438,
- 640, 438, 638, 442, 642, 434, 642, 440, 640, 438, 642, 438,
- 642, 1518, 642, 438, 642, 1514, 642, 1520, 642, 1518, 642, 438,
- 642, 432, 642, 438, 642, 438, 642, 1520, 642, 1514, 642, 438,
- 642, 438, 642, 438, 642, 438, 642, 1514, 642, 1520, 642, 438,
- 642, 438, 638, 438, 642, 438, 642, 438, 640, 440, 642, 438,
- 640, 434, 642, 1520, 642, 438, 640, 1520, 668, 1490, 666, 414,
- 640, 438, 642, 1520, 642, 438, 636};
- irsend.reset();
- irsend.sendRaw(rawData3, 295, 38000);
- irsend.makeDecodeResult();
- EXPECT_TRUE(irrecv.decode(&irsend.capture));
- ASSERT_EQ(TOSHIBA_AC, irsend.capture.decode_type);
- ASSERT_EQ(kToshibaACBits, irsend.capture.bits);
- toshiba.setRaw(irsend.capture.state);
- EXPECT_TRUE(toshiba.getPower());
- EXPECT_EQ(24, toshiba.getTemp());
- EXPECT_EQ(kToshibaAcFanMax, toshiba.getFan());
- EXPECT_EQ(kToshibaAcHeat, toshiba.getMode());
- uint16_t rawData4[295] = {
- 4474, 4262, 636, 1520, 640, 1520, 640, 1520, 638, 1518, 642, 438,
- 642, 438, 642, 1520, 636, 438, 642, 438, 642, 438, 642, 438,
- 636, 444, 636, 1520, 640, 1520, 642, 438, 638, 1524, 638, 438,
- 640, 438, 642, 438, 640, 438, 642, 438, 638, 438, 642, 1518,
- 642, 1520, 666, 1494, 636, 1520, 640, 1520, 640, 1520, 636, 1524,
- 638, 1520, 640, 440, 640, 438, 642, 438, 636, 444, 636, 438,
- 642, 438, 640, 440, 640, 438, 642, 438, 642, 1518, 638, 438,
- 642, 1518, 642, 438, 640, 1520, 636, 444, 636, 438, 640, 438,
- 642, 438, 668, 1494, 640, 438, 642, 1518, 636, 444, 636, 438,
- 640, 1520, 642, 1518, 642, 1520, 636, 444, 636, 438, 642, 438,
- 642, 438, 640, 440, 640, 438, 640, 440, 640, 438, 640, 1518,
- 642, 1520, 636, 1524, 636, 1518, 642, 438, 642, 1518, 642, 1518,
- 640, 438, 642, 7364, 4472, 4262, 642, 1518, 642, 1518, 638, 1518,
- 642, 1520, 642, 438, 642, 438, 640, 1520, 636, 440, 640, 438,
- 642, 438, 640, 438, 642, 438, 642, 1518, 636, 1524, 636, 438,
- 640, 1520, 642, 438, 642, 438, 640, 438, 636, 444, 636, 438,
- 668, 412, 642, 1518, 642, 1520, 642, 1520, 636, 1518, 642, 1518,
- 642, 1520, 636, 1520, 668, 1494, 642, 438, 636, 444, 664, 412,
- 642, 438, 668, 412, 642, 438, 636, 442, 638, 442, 638, 438,
- 642, 1518, 642, 438, 642, 1518, 638, 438, 642, 1518, 642, 440,
- 640, 438, 636, 444, 636, 444, 636, 1520, 642, 438, 642, 1520,
- 636, 444, 636, 438, 642, 1520, 640, 1520, 636, 1520, 668, 412,
- 642, 438, 642, 438, 642, 438, 638, 442, 636, 438, 642, 438,
- 668, 412, 640, 1520, 638, 1524, 636, 1520, 642, 1520, 636, 444,
- 638, 1522, 638, 1518, 640, 438, 642};
- irsend.reset();
- irsend.sendRaw(rawData4, 295, 38000);
- irsend.makeDecodeResult();
- EXPECT_TRUE(irrecv.decode(&irsend.capture));
- ASSERT_EQ(TOSHIBA_AC, irsend.capture.decode_type);
- ASSERT_EQ(kToshibaACBits, irsend.capture.bits);
- toshiba.setRaw(irsend.capture.state);
- EXPECT_FALSE(toshiba.getPower());
- EXPECT_EQ(22, toshiba.getTemp());
- EXPECT_EQ(4, toshiba.getFan());
- // Confirming the quirky behaviour that the 'Power OFF' signal
- // sets the mode to heat.
- // The previous state the remote was in was 'AUTO' just prior to
- // sending the power off message.
- EXPECT_EQ(kToshibaAcHeat, toshiba.getMode());
- }
|