Update IRRemoteESP8266 version to 2.5.5

factorize IR send signal function between the 2 types of receiving
Add new IRRemoteESP8266 protocols
replace pins on mega according schema
remove unecessaries spaces
This commit is contained in:
Florian committed 2019-02-08 16:50:37 +01:00
1 parent 0180a0dbd5
commit f0305236db
149 files changed
+20957 -7850

No files matched your search

+55 -68
View File
@@ -1,8 +1,8 @@
// Copyright 2017 David Conran
#include "IRrecv_test.h"
#include "IRremoteESP8266.h"
#include "IRrecv.h"
#include "IRremoteESP8266.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
@@ -10,7 +10,7 @@
// Tests for the IRrecv object.
TEST(TestIRrecv, DefaultBufferSize) {
IRrecv irrecv_default(1);
EXPECT_EQ(RAWBUF, irrecv_default.getBufSize());
EXPECT_EQ(kRawBuf, irrecv_default.getBufSize());
}
TEST(TestIRrecv, LargeBufferSize) {
@@ -30,7 +30,7 @@ TEST(TestIRrecv, MediumBufferSize) {
TEST(TestIRrecv, IRrecvDestructor) {
IRrecv *irrecv_ptr = new IRrecv(1);
EXPECT_EQ(RAWBUF, irrecv_ptr->getBufSize());
EXPECT_EQ(kRawBuf, irrecv_ptr->getBufSize());
delete irrecv_ptr;
irrecv_ptr = new IRrecv(1, 1234);
@@ -120,7 +120,7 @@ TEST(TestDecode, DecodeNEC) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x807F40BF, irsend.capture.value);
}
@@ -134,7 +134,7 @@ TEST(TestDecode, DecodeJVC) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(JVC, irsend.capture.decode_type);
EXPECT_EQ(JVC_BITS, irsend.capture.bits);
EXPECT_EQ(kJvcBits, irsend.capture.bits);
EXPECT_EQ(0xC2B8, irsend.capture.value);
}
@@ -148,15 +148,15 @@ TEST(TestDecode, DecodeLG) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LG, irsend.capture.decode_type);
EXPECT_EQ(LG_BITS, irsend.capture.bits);
EXPECT_EQ(kLgBits, irsend.capture.bits);
EXPECT_EQ(0x4B4AE51, irsend.capture.value);
irsend.reset();
irsend.sendLG(0xB4B4AE51, LG32_BITS);
irsend.sendLG(0xB4B4AE51, kLg32Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LG, irsend.capture.decode_type);
EXPECT_EQ(LG32_BITS, irsend.capture.bits);
EXPECT_EQ(kLg32Bits, irsend.capture.bits);
EXPECT_EQ(0xB4B4AE51, irsend.capture.value);
}
@@ -168,9 +168,9 @@ TEST(TestDecode, DecodePanasonic) {
irsend.reset();
irsend.sendPanasonic64(0x40040190ED7C);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x40040190ED7C, irsend.capture.value);
}
@@ -184,7 +184,7 @@ TEST(TestDecode, DecodeSamsung) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SAMSUNG, irsend.capture.decode_type);
EXPECT_EQ(SAMSUNG_BITS, irsend.capture.bits);
EXPECT_EQ(kSamsungBits, irsend.capture.bits);
EXPECT_EQ(0xE0E09966, irsend.capture.value);
}
@@ -199,7 +199,7 @@ TEST(TestDecode, DecodeSherwood) {
ASSERT_TRUE(irrecv.decode(&irsend.capture));
// Sherwood codes are really NEC codes.
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x807F40BF, irsend.capture.value);
}
@@ -213,7 +213,7 @@ TEST(TestDecode, DecodeWhynter) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(WHYNTER, irsend.capture.decode_type);
EXPECT_EQ(WHYNTER_BITS, irsend.capture.bits);
EXPECT_EQ(kWhynterBits, irsend.capture.bits);
EXPECT_EQ(0x87654321, irsend.capture.value);
}
@@ -225,30 +225,29 @@ TEST(TestDecode, DecodeSony) {
// Synthesised Normal Sony 20-bit message.
irsend.reset();
irsend.sendSony(irsend.encodeSony(SONY_20_BITS, 0x1, 0x1, 0x1));
irsend.sendSony(irsend.encodeSony(kSony20Bits, 0x1, 0x1, 0x1));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_20_BITS, irsend.capture.bits);
EXPECT_EQ(kSony20Bits, irsend.capture.bits);
EXPECT_EQ(0x81080, irsend.capture.value);
// Synthesised Normal Sony 15-bit message.
irsend.reset();
irsend.sendSony(irsend.encodeSony(SONY_15_BITS, 21, 1), SONY_15_BITS);
irsend.sendSony(irsend.encodeSony(kSony15Bits, 21, 1), kSony15Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_15_BITS, irsend.capture.bits);
EXPECT_EQ(kSony15Bits, irsend.capture.bits);
EXPECT_EQ(0x5480, irsend.capture.value);
// Synthesised Normal Sony 12-bit message.
irsend.reset();
irsend.sendSony(irsend.encodeSony(SONY_12_BITS, 21, 1), SONY_12_BITS);
irsend.sendSony(irsend.encodeSony(kSony12Bits, 21, 1), kSony12Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_12_BITS, irsend.capture.bits);
EXPECT_EQ(kSony12Bits, irsend.capture.bits);
EXPECT_EQ(0xA90, irsend.capture.value);
}
@@ -262,7 +261,7 @@ TEST(TestDecode, DecodeSharp) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SHARP, irsend.capture.decode_type);
EXPECT_EQ(SHARP_BITS, irsend.capture.bits);
EXPECT_EQ(kSharpBits, irsend.capture.bits);
EXPECT_EQ(0x454A, irsend.capture.value);
}
@@ -276,7 +275,7 @@ TEST(TestDecode, DecodeSanyo) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
EXPECT_EQ(SANYO_LC7461_BITS, irsend.capture.bits);
EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
EXPECT_EQ(0x2468DCB56A9, irsend.capture.value);
}
@@ -292,7 +291,7 @@ TEST(TestDecode, DecodeRCMM) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(RCMM, irsend.capture.decode_type);
EXPECT_EQ(RCMM_BITS, irsend.capture.bits);
EXPECT_EQ(kRCMMBits, irsend.capture.bits);
EXPECT_EQ(0xe0a600, irsend.capture.value);
// Normal RCMM 12-bit message.
@@ -324,7 +323,7 @@ TEST(TestDecode, DecodeMitsubishi) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
EXPECT_EQ(0xC2B8, irsend.capture.value);
}
@@ -339,15 +338,15 @@ TEST(TestDecode, DecodeRC5) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(RC5, irsend.capture.decode_type);
EXPECT_EQ(RC5_BITS, irsend.capture.bits);
EXPECT_EQ(kRC5Bits, irsend.capture.bits);
EXPECT_EQ(0x175, irsend.capture.value);
// Synthesised Normal RC-5X 13-bit message.
irsend.reset();
irsend.sendRC5(irsend.encodeRC5X(0x02, 0x41, true), RC5X_BITS);
irsend.sendRC5(irsend.encodeRC5X(0x02, 0x41, true), kRC5XBits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(RC5X, irsend.capture.decode_type);
EXPECT_EQ(RC5X_BITS, irsend.capture.bits);
EXPECT_EQ(kRC5XBits, irsend.capture.bits);
EXPECT_EQ(0x1881, irsend.capture.value);
}
@@ -362,16 +361,16 @@ TEST(TestDecode, DecodeRC6) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_MODE0_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6Mode0Bits, irsend.capture.bits);
EXPECT_EQ(0x175, irsend.capture.value);
// Normal RC-6 36-bit message.
irsend.reset();
irsend.sendRC6(0xC800F742A, RC6_36_BITS);
irsend.sendRC6(0xC800F742A, kRC6_36Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_36_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6_36Bits, irsend.capture.bits);
EXPECT_EQ(0xC800F742A, irsend.capture.value);
}
@@ -385,7 +384,7 @@ TEST(TestDecode, DecodeDish) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(DISH, irsend.capture.decode_type);
EXPECT_EQ(DISH_BITS, irsend.capture.bits);
EXPECT_EQ(kDishBits, irsend.capture.bits);
EXPECT_EQ(0x9C00, irsend.capture.value);
}
@@ -404,7 +403,7 @@ TEST(TestDecode, DecodeDenon) {
EXPECT_EQ(0x2278, irsend.capture.value);
// Legacy Denon 14-bit message.
irsend.reset();
irsend.sendDenon(0x1278, DENON_LEGACY_BITS);
irsend.sendDenon(0x1278, kDenonLegacyBits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(DENON, irsend.capture.decode_type);
@@ -430,7 +429,7 @@ TEST(TestDecode, DecodeCoolix) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(COOLIX, irsend.capture.decode_type);
EXPECT_EQ(COOLIX_BITS, irsend.capture.bits);
EXPECT_EQ(kCoolixBits, irsend.capture.bits);
EXPECT_EQ(0x123456, irsend.capture.value);
}
@@ -444,7 +443,7 @@ TEST(TestDecode, DecodeAiwa) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(AIWA_RC_T501, irsend.capture.decode_type);
EXPECT_EQ(AIWA_RC_T501_BITS, irsend.capture.bits);
EXPECT_EQ(kAiwaRcT501Bits, irsend.capture.bits);
EXPECT_EQ(0x7F, irsend.capture.value);
}
@@ -454,14 +453,8 @@ TEST(TestMatchData, SpaceEncoded) {
IRrecv irrecv(1);
irsend.begin();
uint16_t space_encoded_raw[11] = {
500, 500,
500, 1500,
499, 499,
501, 1501,
499, 1490,
500
};
uint16_t space_encoded_raw[11] = {500, 500, 500, 1500, 499, 499,
501, 1501, 499, 1490, 500};
match_result_t result;
irsend.reset();
@@ -485,29 +478,35 @@ TEST(TestMatchData, MarkEncoded) {
IRrecv irrecv(1);
irsend.begin();
uint16_t mark_encoded_raw[11] = {
500, 500,
1500, 500,
499, 499,
1501, 501,
1499, 490,
500
};
uint16_t mark_encoded_raw[11] = {500, 500, 1500, 500, 499, 499,
1501, 501, 1499, 490, 500};
match_result_t result;
irsend.reset();
irsend.sendRaw(mark_encoded_raw, 11, 38000);
irsend.makeDecodeResult();
// MSBF order.
result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1500, 500, 500, 500);
ASSERT_TRUE(result.success);
EXPECT_EQ(0b01011, result.data);
EXPECT_EQ(10, result.used);
// LSBF order.
result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1500, 500, 500, 500,
kTolerance, kMarkExcess, false);
ASSERT_TRUE(result.success);
EXPECT_EQ(0b11010, result.data); // Bits reversed of the previous test.
EXPECT_EQ(10, result.used);
irsend.reset();
irsend.sendRaw(mark_encoded_raw, 11, 38000);
irsend.makeDecodeResult();
// MSBF order.
result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1000, 500, 500, 500);
ASSERT_FALSE(result.success);
// LSBF order.
result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1000, 500, 500, 500,
kTolerance, kMarkExcess, false);
ASSERT_FALSE(result.success);
}
// Test matchData() on "equal total bit time" encoded data.
@@ -516,14 +515,8 @@ TEST(TestMatchData, EqualTotalBitTimeEncoded) {
IRrecv irrecv(1);
irsend.begin();
uint16_t equal_encoded_raw[11] = {
500, 1500,
1500, 500,
499, 1499,
1501, 501,
1499, 490,
500
};
uint16_t equal_encoded_raw[11] = {500, 1500, 1500, 500, 499, 1499,
1501, 501, 1499, 490, 500};
match_result_t result;
irsend.reset();
@@ -547,21 +540,15 @@ TEST(TestMatchData, ArbitraryEncoded) {
IRrecv irrecv(1);
irsend.begin();
uint16_t arbitrary_encoded_raw[11] = {
500, 1500,
3000, 1000,
499, 1499,
3001, 1001,
2999, 990,
500
};
uint16_t arbitrary_encoded_raw[11] = {500, 1500, 3000, 1000, 499, 1499,
3001, 1001, 2999, 990, 500};
match_result_t result;
irsend.reset();
irsend.sendRaw(arbitrary_encoded_raw, 11, 38000);
irsend.makeDecodeResult();
result = irrecv.matchData(irsend.capture.rawbuf + 1, 5,
3000, 1000, 500, 1500);
result =
irrecv.matchData(irsend.capture.rawbuf + 1, 5, 3000, 1000, 500, 1500);
ASSERT_TRUE(result.success);
EXPECT_EQ(0b01011, result.data);
EXPECT_EQ(10, result.used);
+6 -3
View File
@@ -8,7 +8,10 @@
#include <string>
#include "IRutils.h"
#define EXPECT_STATE_EQ(a, b, c) for (uint8_t i = 0; i < c / 8; ++i) {\
EXPECT_EQ(a[i], b[i]) << "Expected state "\
"differs at i = " << uint64ToString(i); }
#define EXPECT_STATE_EQ(a, b, c) \
for (uint8_t i = 0; i < c / 8; ++i) { \
EXPECT_EQ(a[i], b[i]) << "Expected state " \
"differs at i = " \
<< uint64ToString(i); \
}
#endif // TEST_IRRECV_TEST_H_
+33 -29
View File
@@ -44,11 +44,12 @@ TEST(TestSendData, SendTypicalData) {
EXPECT_EQ("m1s2m3s4m1s2m3s4m1s2m1s2m3s4m3s4m1s2m1s2m1s2m1s2m3s4m3s4m3s4m3s4",
irsend.outputStr());
irsend.sendData(1, 2, 3, 4, 0x1234567890ABCDEF, 64, true);
EXPECT_EQ("m3s4m3s4m3s4m1s2m3s4m3s4m1s2m3s4m3s4m3s4m1s2m1s2m3s4m1s2m3s4m3s4"
"m3s4m1s2m3s4m1s2m3s4m1s2m1s2m3s4m3s4m1s2m1s2m1s2m1s2m3s4m3s4m3s4"
"m1s2m3s4m3s4m1s2m3s4m3s4m3s4m3s4m1s2m3s4m1s2m3s4m1s2m3s4m1s2m1s2"
"m1s2m1s2m3s4m3s4m1s2m1s2m3s4m1s2m1s2m1s2m1s2m3s4m1s2m1s2m1s2m1s2",
irsend.outputStr());
EXPECT_EQ(
"m3s4m3s4m3s4m1s2m3s4m3s4m1s2m3s4m3s4m3s4m1s2m1s2m3s4m1s2m3s4m3s4"
"m3s4m1s2m3s4m1s2m3s4m1s2m1s2m3s4m3s4m1s2m1s2m1s2m1s2m3s4m3s4m3s4"
"m1s2m3s4m3s4m1s2m3s4m3s4m3s4m3s4m1s2m3s4m1s2m3s4m1s2m3s4m1s2m1s2"
"m1s2m1s2m3s4m3s4m1s2m1s2m3s4m1s2m1s2m1s2m1s2m3s4m1s2m1s2m1s2m1s2",
irsend.outputStr());
}
// Test sending more than expected bits.
@@ -56,12 +57,13 @@ TEST(TestSendData, SendOverLargeData) {
IRsendTest irsend(4);
irsend.begin();
irsend.sendData(1, 2, 3, 4, 0xFFFFFFFFFFFFFFFF, 70, true);
EXPECT_EQ("m3s4m3s4m3s4m3s4m3s4m3s4"
"m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2"
"m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2"
"m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2"
"m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2",
irsend.outputStr());
EXPECT_EQ(
"m3s4m3s4m3s4m3s4m3s4m3s4"
"m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2"
"m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2"
"m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2"
"m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2",
irsend.outputStr());
}
// Test inverting the output.
@@ -81,13 +83,13 @@ TEST(TestSendRaw, GeneralUse) {
irsend.begin();
// NEC C3E0E0E8 as measured in #204
uint16_t rawData[67] = {8950, 4500, 550, 1650, 600, 1650, 550, 550, 600, 500,
600, 550, 550, 550, 600, 1650, 550, 1650, 600, 1650,
600, 1650, 550, 1700, 550, 550, 600, 550, 550, 550,
600, 500, 600, 550, 550, 1650, 600, 1650, 600, 1650,
550, 550, 600, 500, 600, 500, 600, 550, 550, 550,
600, 1650, 550, 1650, 600, 1650, 600, 500, 650, 1600,
600, 500, 600, 550, 550, 550, 600};
uint16_t rawData[67] = {
8950, 4500, 550, 1650, 600, 1650, 550, 550, 600, 500, 600, 550,
550, 550, 600, 1650, 550, 1650, 600, 1650, 600, 1650, 550, 1700,
550, 550, 600, 550, 550, 550, 600, 500, 600, 550, 550, 1650,
600, 1650, 600, 1650, 550, 550, 600, 500, 600, 500, 600, 550,
550, 550, 600, 1650, 550, 1650, 600, 1650, 600, 500, 650, 1600,
600, 500, 600, 550, 550, 550, 600};
irsend.sendRaw(rawData, 67, 38);
EXPECT_EQ(
@@ -96,12 +98,13 @@ TEST(TestSendRaw, GeneralUse) {
"m600s1650m600s1650m550s1700m550s550m600s550m550s550m600s500m600s550"
"m550s1650m600s1650m600s1650m550s550m600s500m600s500m600s550m550s550"
"m600s1650m550s1650m600s1650m600s500m650s1600m600s500m600s550m550s550"
"m600", irsend.outputStr());
"m600",
irsend.outputStr());
irsend.reset();
irsend.sendRaw(rawData, 67, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeNEC(&irsend.capture, NEC_BITS, false));
ASSERT_TRUE(irrecv.decodeNEC(&irsend.capture, kNECBits, false));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(32, irsend.capture.bits);
EXPECT_EQ(0xC3E0E0E8, irsend.capture.value);
@@ -111,7 +114,8 @@ TEST(TestSendRaw, GeneralUse) {
"m600s1650m600s1650m550s1700m550s550m600s550m550s550m600s500m600s550"
"m550s1650m600s1650m600s1650m550s550m600s500m600s500m600s550m550s550"
"m600s1650m550s1650m600s1650m600s500m650s1600m600s500m600s550m550s550"
"m600", irsend.outputStr());
"m600",
irsend.outputStr());
}
// Incorrect handling of decodes from Raw. i.e. There is no gap recorded at
@@ -124,18 +128,18 @@ TEST(TestSendRaw, NoTrailingGap) {
irsend.begin();
irsend.reset();
uint16_t rawData[67] = {9000, 4500, 650, 550, 650, 1650, 600, 550, 650, 550,
600, 1650, 650, 550, 600, 1650, 650, 1650, 650, 1650,
600, 550, 650, 1650, 650, 1650, 650, 550, 600, 1650,
650, 1650, 650, 550, 650, 550, 650, 1650, 650, 550,
650, 550, 650, 550, 600, 550, 650, 550, 650, 550,
650, 1650, 600, 550, 650, 1650, 650, 1650, 650, 1650,
650, 1650, 650, 1650, 650, 1650, 600};
uint16_t rawData[67] = {
9000, 4500, 650, 550, 650, 1650, 600, 550, 650, 550, 600, 1650,
650, 550, 600, 1650, 650, 1650, 650, 1650, 600, 550, 650, 1650,
650, 1650, 650, 550, 600, 1650, 650, 1650, 650, 550, 650, 550,
650, 1650, 650, 550, 650, 550, 650, 550, 600, 550, 650, 550,
650, 550, 650, 1650, 600, 550, 650, 1650, 650, 1650, 650, 1650,
650, 1650, 650, 1650, 650, 1650, 600};
irsend.sendRaw(rawData, 67, 38);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
}
TEST(TestLowLevelSend, MarkFrequencyModulationAt38kHz) {
+24 -41
View File
@@ -20,32 +20,29 @@
uint32_t _IRtimer_unittest_now = 0;
#endif // UNIT_TEST
class IRsendTest: public IRsend {
class IRsendTest : public IRsend {
public:
uint32_t output[OUTPUT_BUF];
uint16_t last;
uint16_t rawbuf[RAW_BUF];
decode_results capture;
explicit IRsendTest(uint16_t x, bool i = false, bool j = true) :
IRsend(x, i, j) {
explicit IRsendTest(uint16_t x, bool i = false, bool j = true)
: IRsend(x, i, j) {
reset();
}
void reset() {
last = 0;
for (uint16_t i = 0; i < OUTPUT_BUF; i++)
output[i] = 0;
for (uint16_t i = 0; i < RAW_BUF; i++)
rawbuf[i] = 0;
for (uint16_t i = 0; i < OUTPUT_BUF; i++) output[i] = 0;
for (uint16_t i = 0; i < RAW_BUF; i++) rawbuf[i] = 0;
}
std::string outputStr() {
std::stringstream result;
if (last == 0 && output[0] == 0)
return "";
if (last == 0 && output[0] == 0) return "";
for (uint16_t i = 0; i <= last; i++) {
if ((i & 1) != outputOff ) // Odd XOR outputOff
if ((i & 1) != outputOff) // Odd XOR outputOff
result << "s";
else
result << "m";
@@ -59,45 +56,38 @@ class IRsendTest: public IRsend {
capture.decode_type = UNKNOWN;
capture.bits = 0;
capture.rawlen = last + 2 - offset;
capture.overflow = (last - offset >= (int16_t) RAW_BUF);
capture.overflow = (last - offset >= (int16_t)RAW_BUF);
capture.repeat = false;
capture.address = 0;
capture.command = 0;
capture.value = 0;
capture.rawbuf = rawbuf;
for (uint16_t i = 0;
(i < RAW_BUF - 1) && (offset < OUTPUT_BUF);
for (uint16_t i = 0; (i < RAW_BUF - 1) && (offset < OUTPUT_BUF);
i++, offset++)
if (output[offset] / RAWTICK > UINT16_MAX)
if (output[offset] / kRawTick > UINT16_MAX)
rawbuf[i + 1] = UINT16_MAX;
else
rawbuf[i + 1] = output[offset] / RAWTICK;
rawbuf[i + 1] = output[offset] / kRawTick;
}
void dumpRawResult() {
std::cout << std::dec;
if (capture.rawlen == 0) return;
std::cout << "uint16_t rawbuf["<< capture.rawlen - 1 << "] = {";
std::cout << "uint16_t rawbuf[" << capture.rawlen - 1 << "] = {";
for (uint16_t i = 1; i < capture.rawlen; i++) {
if (i % 8 == 1)
std::cout << std::endl << " ";
std::cout << (capture.rawbuf[i] * RAWTICK);
if (i % 8 == 1) std::cout << std::endl << " ";
std::cout << (capture.rawbuf[i] * kRawTick);
// std::cout << "(" << capture.rawbuf[i] << ")";
if (i < capture.rawlen - 1)
std::cout << ", ";
if (i < capture.rawlen - 1) std::cout << ", ";
}
std::cout << "};" << std::endl;
}
void addGap(uint32_t usecs) {
space(usecs);
}
void addGap(uint32_t usecs) { space(usecs); }
protected:
uint16_t mark(uint16_t usec) {
IRtimer::add(usec);
if (last >= OUTPUT_BUF)
return 0;
if (last >= OUTPUT_BUF) return 0;
if (last & 1) // Is odd? (i.e. last call was a space())
output[++last] = usec;
else
@@ -107,8 +97,7 @@ class IRsendTest: public IRsend {
void space(uint32_t time) {
IRtimer::add(time);
if (last >= OUTPUT_BUF)
return;
if (last >= OUTPUT_BUF) return;
if (last & 1) { // Is odd? (i.e. last call was a space())
output[last] += time;
} else {
@@ -118,18 +107,16 @@ class IRsendTest: public IRsend {
};
#ifdef UNIT_TEST
class IRsendLowLevelTest: public IRsend {
class IRsendLowLevelTest : public IRsend {
public:
std::string low_level_sequence;
explicit IRsendLowLevelTest(uint16_t x, bool i = false, bool j = true) :
IRsend(x, i, j) {
explicit IRsendLowLevelTest(uint16_t x, bool i = false, bool j = true)
: IRsend(x, i, j) {
reset();
}
void reset() {
low_level_sequence = "";
}
void reset() { low_level_sequence = ""; }
protected:
void _delayMicroseconds(uint32_t usec) {
@@ -139,13 +126,9 @@ class IRsendLowLevelTest: public IRsend {
low_level_sequence += Convert.str() + "usecs";
}
void ledOff() {
low_level_sequence += "[Off]";
}
void ledOff() { low_level_sequence += "[Off]"; }
void ledOn() {
low_level_sequence += "[On]";
}
void ledOn() { low_level_sequence += "[On]"; }
};
#endif // UNIT_TEST
+89 -37
View File
@@ -41,14 +41,14 @@ TEST(ReverseBitsTest, LessBitsReversedThanInputHasSet) {
// Tests for uint64ToString()
TEST(TestUint64ToString, TrivialCases) {
EXPECT_EQ("0", uint64ToString(0)); // Default base (10)
EXPECT_EQ("0", uint64ToString(0, 2)); // Base-2
EXPECT_EQ("0", uint64ToString(0, 8)); // Base-8
EXPECT_EQ("0", uint64ToString(0)); // Default base (10)
EXPECT_EQ("0", uint64ToString(0, 2)); // Base-2
EXPECT_EQ("0", uint64ToString(0, 8)); // Base-8
EXPECT_EQ("0", uint64ToString(0, 10)); // Base-10
EXPECT_EQ("0", uint64ToString(0, 16)); // Base-16
EXPECT_EQ("1", uint64ToString(1, 2)); // Base-2
EXPECT_EQ("2", uint64ToString(2, 8)); // Base-8
EXPECT_EQ("1", uint64ToString(1, 2)); // Base-2
EXPECT_EQ("2", uint64ToString(2, 8)); // Base-8
EXPECT_EQ("3", uint64ToString(3, 10)); // Base-10
EXPECT_EQ("4", uint64ToString(4, 16)); // Base-16
}
@@ -65,17 +65,17 @@ TEST(TestUint64ToString, NormalUse) {
TEST(TestUint64ToString, Max64Bit) {
EXPECT_EQ("18446744073709551615", uint64ToString(UINT64_MAX)); // Default
EXPECT_EQ("1111111111111111111111111111111111111111111111111111111111111111",
uint64ToString(UINT64_MAX, 2)); // Base-2
uint64ToString(UINT64_MAX, 2)); // Base-2
EXPECT_EQ("1777777777777777777777", uint64ToString(UINT64_MAX, 8)); // Base-8
EXPECT_EQ("18446744073709551615", uint64ToString(UINT64_MAX, 10)); // Base-10
EXPECT_EQ("FFFFFFFFFFFFFFFF", uint64ToString(UINT64_MAX, 16)); // Base-16
EXPECT_EQ("FFFFFFFFFFFFFFFF", uint64ToString(UINT64_MAX, 16)); // Base-16
}
TEST(TestUint64ToString, Max32Bit) {
EXPECT_EQ("4294967295", uint64ToString(UINT32_MAX)); // Default
EXPECT_EQ("4294967295", uint64ToString(UINT32_MAX)); // Default
EXPECT_EQ("37777777777", uint64ToString(UINT32_MAX, 8)); // Base-8
EXPECT_EQ("4294967295", uint64ToString(UINT32_MAX, 10)); // Base-10
EXPECT_EQ("FFFFFFFF", uint64ToString(UINT32_MAX, 16)); // Base-16
EXPECT_EQ("FFFFFFFF", uint64ToString(UINT32_MAX, 16)); // Base-16
}
TEST(TestUint64ToString, InterestingCases) {
@@ -89,8 +89,8 @@ TEST(TestUint64ToString, SillyBases) {
EXPECT_EQ("12345", uint64ToString(12345, 0)); // Super silly, makes no sense.
EXPECT_EQ("12345", uint64ToString(12345, 1)); // We don't do unary.
EXPECT_EQ("12345", uint64ToString(12345, 100)); // We can't print base-100.
EXPECT_EQ("12345", uint64ToString(12345, 37)); // Base-37 is one to far.
EXPECT_EQ("9IX", uint64ToString(12345, 36)); // But we *can* do base-36.
EXPECT_EQ("12345", uint64ToString(12345, 37)); // Base-37 is one to far.
EXPECT_EQ("9IX", uint64ToString(12345, 36)); // But we *can* do base-36.
}
TEST(TestGetCorrectedRawLength, NoLargeValues) {
@@ -115,7 +115,7 @@ TEST(TestGetCorrectedRawLength, WithLargeValues) {
irsend.makeDecodeResult();
irrecv.decode(&irsend.capture);
irsend.capture.rawbuf[3] = 60000;
ASSERT_EQ(2, RAWTICK); // The following values rely on RAWTICK being 2.
ASSERT_EQ(2, kRawTick); // The following values rely on kRawTick being 2.
EXPECT_EQ(7 + 2, getCorrectedRawLength(&irsend.capture));
irsend.capture.rawbuf[4] = UINT16_MAX - 1;
EXPECT_EQ(7 + 2 * 2, getCorrectedRawLength(&irsend.capture));
@@ -132,18 +132,22 @@ TEST(TestResultToSourceCode, SimpleTests) {
irsend.sendRaw(test_data, 7, 38000);
irsend.makeDecodeResult();
irrecv.decode(&irsend.capture);
EXPECT_EQ("uint16_t rawData[7] = {10, 20, 30, 40, 50, 60, 70};"
" // UNKNOWN A5E5F35D\n", resultToSourceCode(&irsend.capture));
EXPECT_EQ(
"uint16_t rawData[7] = {10, 20, 30, 40, 50, 60, 70};"
" // UNKNOWN A5E5F35D\n",
resultToSourceCode(&irsend.capture));
// Stick in some large values.
irsend.capture.rawbuf[3] = 60000;
EXPECT_EQ("uint16_t rawData[9] = {10, 20, 65535, 0, 54465, 40,"
" 50, 60, 70}; // UNKNOWN A5E5F35D\n",
resultToSourceCode(&irsend.capture));
EXPECT_EQ(
"uint16_t rawData[9] = {10, 20, 65535, 0, 54465, 40,"
" 50, 60, 70}; // UNKNOWN A5E5F35D\n",
resultToSourceCode(&irsend.capture));
irsend.capture.rawbuf[5] = UINT16_MAX;
EXPECT_EQ("uint16_t rawData[11] = {10, 20, 65535, 0, 54465, 40,"
" 65535, 0, 65535, 60, 70}; // UNKNOWN A5E5F35D\n",
resultToSourceCode(&irsend.capture));
EXPECT_EQ(
"uint16_t rawData[11] = {10, 20, 65535, 0, 54465, 40,"
" 65535, 0, 65535, 60, 70}; // UNKNOWN A5E5F35D\n",
resultToSourceCode(&irsend.capture));
// Reset and put the large value in a space location.
irsend.reset();
@@ -151,9 +155,10 @@ TEST(TestResultToSourceCode, SimpleTests) {
irsend.makeDecodeResult();
irrecv.decode(&irsend.capture);
irsend.capture.rawbuf[4] = UINT16_MAX - 1;
EXPECT_EQ("uint16_t rawData[9] = {10, 20, 30, 65535, 0, 65533,"
" 50, 60, 70}; // UNKNOWN A5E5F35D\n",
resultToSourceCode(&irsend.capture));
EXPECT_EQ(
"uint16_t rawData[9] = {10, 20, 30, 65535, 0, 65533,"
" 50, 60, 70}; // UNKNOWN A5E5F35D\n",
resultToSourceCode(&irsend.capture));
}
TEST(TestResultToSourceCode, SimpleProtocols) {
@@ -167,7 +172,7 @@ TEST(TestResultToSourceCode, SimpleProtocols) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(NEC, irsend.capture.decode_type);
ASSERT_EQ(NEC_BITS, irsend.capture.bits);
ASSERT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(
"uint16_t rawData[68] = {8960, 4480, 560, 560, 560, 560, 560, 560, "
"560, 560, 560, 1680, 560, 560, 560, 560, 560, 560, 560, 1680, "
@@ -178,7 +183,8 @@ TEST(TestResultToSourceCode, SimpleProtocols) {
"}; // NEC 8F704FB\n"
"uint32_t address = 0x10;\n"
"uint32_t command = 0x20;\n"
"uint64_t data = 0x8F704FB;\n", resultToSourceCode(&irsend.capture));
"uint64_t data = 0x8F704FB;\n",
resultToSourceCode(&irsend.capture));
// Generate a code which DOESN'T have address & command values.
irsend.reset();
@@ -186,7 +192,7 @@ TEST(TestResultToSourceCode, SimpleProtocols) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(NIKAI, irsend.capture.decode_type);
ASSERT_EQ(NIKAI_BITS, irsend.capture.bits);
ASSERT_EQ(kNikaiBits, irsend.capture.bits);
EXPECT_EQ(
"uint16_t rawData[52] = {4000, 4000, 500, 2000, 500, 2000, "
"500, 2000, 500, 2000, 500, 1000, 500, 1000, 500, 2000, 500, 1000, "
@@ -194,7 +200,8 @@ TEST(TestResultToSourceCode, SimpleProtocols) {
"500, 1000, 500, 1000, 500, 2000, 500, 2000, 500, 1000, 500, 2000, "
"500, 1000, 500, 1000, 500, 1000, 500, 1000, 500, 8500 };"
" // NIKAI D0F2F\n"
"uint64_t data = 0xD0F2F;\n", resultToSourceCode(&irsend.capture));
"uint64_t data = 0xD0F2F;\n",
resultToSourceCode(&irsend.capture));
}
TEST(TestResultToSourceCode, ComplexProtocols) {
@@ -202,15 +209,15 @@ TEST(TestResultToSourceCode, ComplexProtocols) {
IRrecv irrecv(1);
irsend.begin();
uint8_t state[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x01};
uint8_t state[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
0x00, 0x00, 0x00, 0x01};
irsend.reset();
irsend.sendToshibaAC(state);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(TOSHIBA_AC, irsend.capture.decode_type);
ASSERT_EQ(TOSHIBA_AC_BITS, irsend.capture.bits);
ASSERT_EQ(kToshibaACBits, irsend.capture.bits);
EXPECT_EQ(
"uint16_t rawData[296] = {4400, 4300, 542, 1622, 542, 1622, "
"542, 1622, 542, 1622, 542, 472, 542, 472, 542, 1622, 542, 472, "
@@ -239,7 +246,8 @@ TEST(TestResultToSourceCode, ComplexProtocols) {
"542, 472, 542, 472, 542, 472, 542, 472, 542, 472, 542, 1622, "
"542, 7048 }; // TOSHIBA_AC\n"
"uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, "
"0x01};\n", resultToSourceCode(&irsend.capture));
"0x01};\n",
resultToSourceCode(&irsend.capture));
}
TEST(TestResultToTimingInfo, General) {
@@ -252,7 +260,7 @@ TEST(TestResultToTimingInfo, General) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(NEC, irsend.capture.decode_type);
ASSERT_EQ(NEC_BITS, irsend.capture.bits);
ASSERT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(
"Raw Timing[68]:\n"
" + 8960, - 4480, + 560, - 560, + 560, - 560,"
@@ -297,7 +305,7 @@ TEST(TestResultToHumanReadableBasic, SimpleCodes) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(NEC, irsend.capture.decode_type);
ASSERT_EQ(NEC_BITS, irsend.capture.bits);
ASSERT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(
"Encoding : NEC\n"
"Code : 8F704FB (32 bits)\n",
@@ -309,16 +317,15 @@ TEST(TestResultToHumanReadableBasic, ComplexCodes) {
IRrecv irrecv(1);
irsend.begin();
uint8_t state[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x01};
uint8_t state[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
0x00, 0x00, 0x00, 0x01};
irsend.reset();
irsend.sendToshibaAC(state);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(TOSHIBA_AC, irsend.capture.decode_type);
ASSERT_EQ(TOSHIBA_AC_BITS, irsend.capture.bits);
ASSERT_EQ(kToshibaACBits, irsend.capture.bits);
EXPECT_EQ(
"Encoding : TOSHIBA_AC\n"
"Code : F20D03FC0100000001 (72 bits)\n",
@@ -343,3 +350,48 @@ TEST(TestInvertBits, MoreThan64Bits) {
ASSERT_EQ(0xAAAA5555AAAA5555, invertBits(0x5555AAAA5555AAAA, 70));
ASSERT_EQ(0xFFFFFFFFFFFFFFFF, invertBits(0x0, 128));
}
TEST(TestCountBits, Pointer) {
uint8_t data[14] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
ASSERT_EQ(0, countBits(data, 0));
ASSERT_EQ(0, countBits(data, 1));
ASSERT_EQ(0, countBits(data, 1, true));
ASSERT_EQ(8, countBits(data, 1, false));
ASSERT_EQ(1, countBits(data, 2));
ASSERT_EQ(15, countBits(data, 2, false));
ASSERT_EQ(1, countBits(data + 1, 1));
ASSERT_EQ(2, countBits(data, 3));
ASSERT_EQ(4, countBits(data, 4));
ASSERT_EQ(25, countBits(data, 14));
ASSERT_EQ(25, countBits(data, 14));
ASSERT_EQ(14 * 8, countBits(data, 14, true) + countBits(data, 14, false));
ASSERT_EQ(125, countBits(data, 14, true, 100));
}
TEST(TestCountBits, Integer) {
uint64_t data = 0xAAAAAAAAAAAAAAAA;
ASSERT_EQ(0, countBits(data, 0));
ASSERT_EQ(0, countBits(data, 1));
ASSERT_EQ(0, countBits(data, 1, true));
ASSERT_EQ(1, countBits(data, 1, false));
ASSERT_EQ(1, countBits(data, 3));
ASSERT_EQ(2, countBits(data, 3, false));
ASSERT_EQ(4, countBits(data, 8));
ASSERT_EQ(4, countBits(data, 8, false));
ASSERT_EQ(32, countBits(data, 64));
ASSERT_EQ(32, countBits(data, 64, false));
data = 0;
ASSERT_EQ(0, countBits(data, 1, true));
ASSERT_EQ(1, countBits(data, 1, false));
ASSERT_EQ(0, countBits(data, 64));
ASSERT_EQ(64, countBits(data, 64, false));
data = 0xFFFFFFFFFFFFFFFF;
ASSERT_EQ(1, countBits(data, 1, true));
ASSERT_EQ(0, countBits(data, 1, false));
ASSERT_EQ(64, countBits(data, 64));
ASSERT_EQ(0, countBits(data, 64, false));
}
+90 -12
View File
@@ -34,7 +34,9 @@ TESTS = IRutils_test IRsend_test ir_NEC_test ir_GlobalCache_test \
ir_Aiwa_test ir_Denon_test ir_Sanyo_test ir_Daikin_test ir_Coolix_test \
ir_Gree_test IRrecv_test ir_Pronto_test ir_Fujitsu_test ir_Nikai_test \
ir_Toshiba_test ir_Midea_test ir_Magiquest_test ir_Lasertag_test \
ir_Carrier_test ir_Haier_test ir_Hitachi_test ir_GICable_test
ir_Carrier_test ir_Haier_test ir_Hitachi_test ir_GICable_test \
ir_Whirlpool_test ir_Lutron_test ir_Electra_test ir_Pioneer_test \
ir_MWM_test ir_Vestel_test
# All Google Test headers. Usually you shouldn't change this
# definition.
@@ -63,7 +65,7 @@ run : all
run_tests : run
install-googletest :
git clone https://github.com/google/googletest.git ../lib/googletest
git clone -b v1.8.x https://github.com/google/googletest.git ../lib/googletest
# Builds gtest.a and gtest_main.a.
@@ -73,18 +75,40 @@ GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
# All the IR protocol object files.
PROTOCOLS = ir_NEC.o ir_Sony.o ir_Samsung.o ir_JVC.o ir_RCMM.o ir_RC5_RC6.o \
ir_LG.o ir_Mitsubishi.o ir_Fujitsu.o ir_Sharp.o ir_Sanyo.o ir_Denon.o ir_Dish.o \
ir_Panasonic.o ir_Whynter.o ir_Coolix.o ir_Aiwa.o ir_Sherwood.o \
ir_Kelvinator.o ir_Daikin.o ir_Gree.o ir_Pronto.o ir_Nikai.o ir_Toshiba.o \
ir_Midea.o ir_Magiquest.o ir_Lasertag.o ir_Carrier.o ir_Haier.o \
ir_Hitachi.o ir_GICable.o
ir_LG.o ir_Mitsubishi.o ir_Fujitsu.o ir_Sharp.o ir_Sanyo.o ir_Denon.o ir_Dish.o \
ir_Panasonic.o ir_Whynter.o ir_Coolix.o ir_Aiwa.o ir_Sherwood.o \
ir_Kelvinator.o ir_Daikin.o ir_Gree.o ir_Pronto.o ir_Nikai.o ir_Toshiba.o \
ir_Midea.o ir_Magiquest.o ir_Lasertag.o ir_Carrier.o ir_Haier.o \
ir_Hitachi.o ir_GICable.o ir_Whirlpool.o ir_Lutron.o ir_Electra.o \
ir_Pioneer.o ir_MWM.o ir_Vestel.o
# All the IR Protocol header files.
PROTOCOLS_H = $(USER_DIR)/ir_Argo.h \
$(USER_DIR)/ir_Gree.h \
$(USER_DIR)/ir_Magiquest.h \
$(USER_DIR)/ir_Coolix.h \
$(USER_DIR)/ir_Haier.h \
$(USER_DIR)/ir_Midea.h \
$(USER_DIR)/ir_Toshiba.h \
$(USER_DIR)/ir_Daikin.h \
$(USER_DIR)/ir_Kelvinator.h \
$(USER_DIR)/ir_Mitsubishi.h \
$(USER_DIR)/ir_NEC.h \
$(USER_DIR)/ir_Samsung.h \
$(USER_DIR)/ir_Trotec.h \
$(USER_DIR)/ir_Fujitsu.h \
$(USER_DIR)/ir_LG.h \
$(USER_DIR)/ir_Panasonic.h \
$(USER_DIR)/ir_Whirlpool.h \
$(USER_DIR)/ir_Vestel.h
# Common object files
COMMON_OBJ = IRutils.o IRtimer.o IRsend.o IRrecv.o ir_GlobalCache.o \
$(PROTOCOLS) gtest_main.a
# Common dependencies
COMMON_DEPS = $(USER_DIR)/IRrecv.h $(USER_DIR)/IRsend.h $(USER_DIR)/IRtimer.h \
$(USER_DIR)/IRutils.h $(USER_DIR)/IRremoteESP8266.h
$(USER_DIR)/IRutils.h $(USER_DIR)/IRremoteESP8266.h \
$(PROTOCOLS_H)
# Common test dependencies
COMMON_TEST_DEPS = $(COMMON_DEPS) IRrecv_test.h IRsend_test.h
@@ -140,7 +164,7 @@ IRrecv_test.o : IRrecv_test.cpp $(USER_DIR)/IRsend.h $(USER_DIR)/IRrecv.h IRsend
IRrecv_test : IRrecv_test.o $(COMMON_OBJ)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_NEC.o : $(USER_DIR)/ir_NEC.cpp $(COMMON_DEPS)
ir_NEC.o : $(USER_DIR)/ir_NEC.cpp $(USER_DIR)/ir_NEC.h $(COMMON_DEPS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_NEC.cpp
ir_NEC_test.o : ir_NEC_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
@@ -176,10 +200,10 @@ ir_Sony_test.o : ir_Sony_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
ir_Sony_test : $(COMMON_OBJ) ir_Sony_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Samsung.o : $(USER_DIR)/ir_Samsung.cpp $(COMMON_DEPS)
ir_Samsung.o : $(USER_DIR)/ir_Samsung.cpp $(USER_DIR)/ir_Samsung.h $(COMMON_DEPS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Samsung.cpp
ir_Samsung_test.o : ir_Samsung_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
ir_Samsung_test.o : ir_Samsung_test.cpp $(USER_DIR)/ir_Samsung.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Samsung_test.cpp
ir_Samsung_test : $(COMMON_OBJ) ir_Samsung_test.o
@@ -287,7 +311,7 @@ ir_Whynter_test : $(COMMON_OBJ) ir_Whynter_test.o
ir_Coolix.o : $(USER_DIR)/ir_Coolix.cpp $(COMMON_DEPS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Coolix.cpp
ir_Coolix_test.o : ir_Coolix_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
ir_Coolix_test.o : ir_Coolix_test.cpp $(USER_DIR)/ir_Coolix.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Coolix_test.cpp
ir_Coolix_test : $(COMMON_OBJ) ir_Coolix_test.o
@@ -427,3 +451,57 @@ ir_GICable_test.o : ir_GICable_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
ir_GICable_test : $(COMMON_OBJ) ir_GICable_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Whirlpool.o : $(USER_DIR)/ir_Whirlpool.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Whirlpool.cpp
ir_Whirlpool_test.o : ir_Whirlpool_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Whirlpool_test.cpp
ir_Whirlpool_test : $(COMMON_OBJ) ir_Whirlpool_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Lutron.o : $(USER_DIR)/ir_Lutron.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Lutron.cpp
ir_Lutron_test.o : ir_Lutron_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Lutron_test.cpp
ir_Lutron_test : $(COMMON_OBJ) ir_Lutron_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Electra.o : $(USER_DIR)/ir_Electra.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Electra.cpp
ir_Electra_test.o : ir_Electra_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Electra_test.cpp
ir_Electra_test : $(COMMON_OBJ) ir_Electra_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Pioneer.o : $(USER_DIR)/ir_Pioneer.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Pioneer.cpp
ir_Pioneer_test.o : ir_Pioneer_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Pioneer_test.cpp
ir_Pioneer_test : $(COMMON_OBJ) ir_Pioneer_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_MWM.o : $(USER_DIR)/ir_MWM.cpp $(COMMON_DEPS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_MWM.cpp
ir_MWM_test.o : ir_MWM_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_MWM_test.cpp
ir_MWM_test : $(COMMON_OBJ) ir_MWM_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Vestel.o : $(USER_DIR)/ir_Vestel.cpp $(COMMON_DEPS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Vestel.cpp
ir_Vestel_test.o : ir_Vestel_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Vestel_test.cpp
ir_Vestel_test : $(COMMON_OBJ) ir_Vestel_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
+55 -59
View File
@@ -21,7 +21,8 @@ TEST(TestSendAiwa, SendDataOnly) {
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s23520"
"m8960s2240m560s96320", irsend.outputStr());
"m8960s2240m560s96320",
irsend.outputStr());
}
// Test sending oversized data.
@@ -40,7 +41,7 @@ TEST(TestSendAiwa, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendAiwaRCT501(0x7F, AIWA_RC_T501_BITS, 0); // No repeats.
irsend.sendAiwaRCT501(0x7F, kAiwaRcT501Bits, 0); // No repeats.
EXPECT_EQ(
"m8960s4480"
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
@@ -48,9 +49,10 @@ TEST(TestSendAiwa, SendWithRepeats) {
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s23520", irsend.outputStr());
"m560s1680m560s1680m560s23520",
irsend.outputStr());
irsend.reset();
irsend.sendAiwaRCT501(0x7F, AIWA_RC_T501_BITS, 1); // 1 repeat.
irsend.sendAiwaRCT501(0x7F, kAiwaRcT501Bits, 1); // 1 repeat.
EXPECT_EQ(
"m8960s4480"
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
@@ -59,9 +61,10 @@ TEST(TestSendAiwa, SendWithRepeats) {
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s23520"
"m8960s2240m560s96320", irsend.outputStr());
"m8960s2240m560s96320",
irsend.outputStr());
irsend.reset();
irsend.sendAiwaRCT501(0x7F, AIWA_RC_T501_BITS, 2); // 2 repeats.
irsend.sendAiwaRCT501(0x7F, kAiwaRcT501Bits, 2); // 2 repeats.
EXPECT_EQ(
"m8960s4480"
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
@@ -71,7 +74,8 @@ TEST(TestSendAiwa, SendWithRepeats) {
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s23520"
"m8960s2240m560s96320"
"m8960s2240m560s96320", irsend.outputStr());
"m8960s2240m560s96320",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -88,7 +92,8 @@ TEST(TestSendAiwa, SendUnusualSize) {
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s1680m560s560m560s560"
"m560s1680m560s560m560s1680m560s36960"
"m8960s2240m560s96320", irsend.outputStr());
"m8960s2240m560s96320",
irsend.outputStr());
irsend.reset();
irsend.sendAiwaRCT501(0x1234567890, 37);
@@ -103,7 +108,8 @@ TEST(TestSendAiwa, SendUnusualSize) {
"m560s1680m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s1680"
"m560s560m560s560m560s1680m560s560m560s560m560s560m560s560m560s1680"
"m560s22400"
"m8960s2240m560s96320", irsend.outputStr());
"m8960s2240m560s96320",
irsend.outputStr());
}
// Tests for decodeAiwaRCT501().
@@ -118,10 +124,9 @@ TEST(TestDecodeAiwa, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendAiwaRCT501(0x7F);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
true));
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, true));
EXPECT_EQ(AIWA_RC_T501, irsend.capture.decode_type);
EXPECT_EQ(AIWA_RC_T501_BITS, irsend.capture.bits);
EXPECT_EQ(kAiwaRcT501Bits, irsend.capture.bits);
EXPECT_EQ(0x7F, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -131,10 +136,9 @@ TEST(TestDecodeAiwa, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendAiwaRCT501(0x0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
true));
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, true));
EXPECT_EQ(AIWA_RC_T501, irsend.capture.decode_type);
EXPECT_EQ(AIWA_RC_T501_BITS, irsend.capture.bits);
EXPECT_EQ(kAiwaRcT501Bits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -144,10 +148,9 @@ TEST(TestDecodeAiwa, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendAiwaRCT501(0x7FFF);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
true));
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, true));
EXPECT_EQ(AIWA_RC_T501, irsend.capture.decode_type);
EXPECT_EQ(AIWA_RC_T501_BITS, irsend.capture.bits);
EXPECT_EQ(kAiwaRcT501Bits, irsend.capture.bits);
EXPECT_EQ(0x7FFF, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -162,12 +165,11 @@ TEST(TestDecodeAiwa, NormalDecodeWithRepeatAndStrict) {
// Normal Aiwa 15-bit(42bit) message with 2 repeats.
irsend.reset();
irsend.sendAiwaRCT501(0x7F, AIWA_RC_T501_BITS, 2);
irsend.sendAiwaRCT501(0x7F, kAiwaRcT501Bits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
true));
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, true));
EXPECT_EQ(AIWA_RC_T501, irsend.capture.decode_type);
EXPECT_EQ(AIWA_RC_T501_BITS, irsend.capture.bits);
EXPECT_EQ(kAiwaRcT501Bits, irsend.capture.bits);
EXPECT_EQ(0x7F, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -182,48 +184,44 @@ TEST(TestDecodeAiwa, DecodeWithNonStrictValues) {
irsend.reset();
// Confirm using sendNEC(data, 42, 1) can make a legal Aiwa message.
irsend.sendNEC(0x1D8113F00FF, 42, AIWA_RC_T501_MIN_REPEAT);
irsend.sendNEC(0x1D8113F00FF, 42, kAiwaRcT501MinRepeats);
irsend.makeDecodeResult();
// MUST pass with strict on.
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
true));
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, true));
ASSERT_EQ(0x7F, irsend.capture.value);
irsend.reset();
// Use sendNEC(data, 42) to make/send an illegal value Aiwa message.
// Value is illegal due to bad pre & post data.
irsend.sendNEC(0x1234567890A, 42, AIWA_RC_T501_MIN_REPEAT);
irsend.sendNEC(0x1234567890A, 42, kAiwaRcT501MinRepeats);
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
true));
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, true));
// Should fail if strict off too.
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
false));
ASSERT_FALSE(
irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, false));
irsend.reset();
// Use sendNEC(data, 42) to make/send an illegal value Aiwa message.
// Value is illegal due to bad post data only.
irsend.sendNEC(0x1D8113F00FE, 42, AIWA_RC_T501_MIN_REPEAT);
irsend.sendNEC(0x1D8113F00FE, 42, kAiwaRcT501MinRepeats);
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
true));
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, true));
// Should fail if strict off too.
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
false));
ASSERT_FALSE(
irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, false));
irsend.reset();
// Use sendNEC(data, 42) to make/send an illegal value Aiwa message.
// Value is illegal due to bad pre data only.
irsend.sendNEC(0x0D8113F00FF, 42, AIWA_RC_T501_MIN_REPEAT);
irsend.sendNEC(0x0D8113F00FF, 42, kAiwaRcT501MinRepeats);
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
true));
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, true));
// Should fail if strict off too.
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
false));
ASSERT_FALSE(
irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, false));
}
// Decode unsupported Aiwa messages.
@@ -236,8 +234,7 @@ TEST(TestDecodeAiwa, DecodeWithNonStrictSizes) {
irsend.sendAiwaRCT501(0x0, 8); // Illegal size Aiwa 8-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
true));
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, 8, false));
EXPECT_EQ(AIWA_RC_T501, irsend.capture.decode_type);
@@ -248,8 +245,7 @@ TEST(TestDecodeAiwa, DecodeWithNonStrictSizes) {
irsend.sendAiwaRCT501(0x12345678, 32); // Illegal size Aiwa 32-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
true));
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, true));
// Should fail with strict when we ask for the wrong bit size.
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, 32, true));
@@ -278,7 +274,7 @@ TEST(TestDecodeAiwa, Decode64BitMessages) {
// Reconfirm it by sending a true 64bit NEC message with the Aiwa prefix.
irsend.reset();
irsend.sendNEC(0x76044FFFFFFFFFFF, 64, AIWA_RC_T501_MIN_REPEAT);
irsend.sendNEC(0x76044FFFFFFFFFFF, 64, kAiwaRcT501MinRepeats);
irsend.makeDecodeResult();
// Should work with a 'normal' match (not strict)
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture, 37, false));
@@ -295,20 +291,19 @@ TEST(TestDecodeAiwa, DecodeGlobalCacheExample) {
irsend.reset();
// Aiwa Power Toggle from Global Cache.
uint16_t gc_test[95] = {38000, 1, 89, 342, 171, 21, 21, 21, 64, 21, 64,
21, 64, 21, 21, 21, 64, 21, 64, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 64, 21, 21,
21, 21, 21, 21, 21, 64, 21, 21, 21, 21, 21, 64,
21, 64, 21, 64, 21, 64, 21, 64, 21, 64, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 64, 21, 64, 21, 64, 21, 64, 21, 64,
21, 64, 21, 64, 21, 64, 21, 875, 342, 171, 21, 3565};
uint16_t gc_test[95] = {
38000, 1, 89, 342, 171, 21, 21, 21, 64, 21, 64, 21, 64, 21, 21, 21,
64, 21, 64, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
64, 21, 21, 21, 21, 21, 21, 21, 64, 21, 21, 21, 21, 21, 64, 21,
64, 21, 64, 21, 64, 21, 64, 21, 64, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 64, 21, 64, 21, 64, 21,
64, 21, 64, 21, 64, 21, 64, 21, 64, 21, 875, 342, 171, 21, 3565};
irsend.sendGC(gc_test, 95);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeAiwaRCT501(&irsend.capture));
EXPECT_EQ(AIWA_RC_T501, irsend.capture.decode_type);
EXPECT_EQ(AIWA_RC_T501_BITS, irsend.capture.bits);
EXPECT_EQ(kAiwaRcT501Bits, irsend.capture.bits);
EXPECT_EQ(0x7F, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -326,13 +321,14 @@ TEST(TestDecodeAiwa, FailToDecodeNonAiwaExample) {
irsend.begin();
irsend.reset();
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};
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.decodeAiwaRCT501(&irsend.capture));
ASSERT_FALSE(irrecv.decodeAiwaRCT501(&irsend.capture, AIWA_RC_T501_BITS,
false));
ASSERT_FALSE(
irrecv.decodeAiwaRCT501(&irsend.capture, kAiwaRcT501Bits, false));
}
+85 -79
View File
@@ -32,7 +32,8 @@ TEST(TestSendCarrierAC, SendDataOnly) {
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
"m628s20000", irsend.outputStr());
"m628s20000",
irsend.outputStr());
irsend.reset();
irsend.sendCarrierAC(0x12345678);
EXPECT_EQ(
@@ -53,7 +54,8 @@ TEST(TestSendCarrierAC, SendDataOnly) {
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000", irsend.outputStr());
"m628s20000",
irsend.outputStr());
irsend.reset();
irsend.sendCarrierAC(0x4CCA541D);
@@ -75,7 +77,8 @@ TEST(TestSendCarrierAC, SendDataOnly) {
"m628s1320m628s1320m628s532m628s532m628s1320m628s532m628s1320m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s532m628s532m628s1320m628s1320m628s1320m628s532m628s1320"
"m628s20000", irsend.outputStr());
"m628s20000",
irsend.outputStr());
}
// Test sending typical data only.
@@ -84,62 +87,63 @@ TEST(TestSendCarrierAC, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendCarrierAC(0x12345678, CARRIER_AC_BITS, 2); // two repeats.
irsend.sendCarrierAC(0x12345678, kCarrierAcBits, 2); // two repeats.
EXPECT_EQ(
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s1320m628s1320m628s1320m628s532m628s1320m628s1320m628s532m628s1320"
"m628s1320m628s1320m628s532m628s532m628s1320m628s532m628s1320m628s1320"
"m628s1320m628s532m628s1320m628s532m628s1320m628s532m628s532m628s1320"
"m628s1320m628s532m628s532m628s532m628s532m628s1320m628s1320m628s1320"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s1320m628s1320m628s1320m628s532m628s1320m628s1320m628s532m628s1320"
"m628s1320m628s1320m628s532m628s532m628s1320m628s532m628s1320m628s1320"
"m628s1320m628s532m628s1320m628s532m628s1320m628s532m628s532m628s1320"
"m628s1320m628s532m628s532m628s532m628s532m628s1320m628s1320m628s1320"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s1320m628s1320m628s1320m628s532m628s1320m628s1320m628s532m628s1320"
"m628s1320m628s1320m628s532m628s532m628s1320m628s532m628s1320m628s1320"
"m628s1320m628s532m628s1320m628s532m628s1320m628s532m628s532m628s1320"
"m628s1320m628s532m628s532m628s532m628s532m628s1320m628s1320m628s1320"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000", irsend.outputStr());
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s1320m628s1320m628s1320m628s532m628s1320m628s1320m628s532m628s1320"
"m628s1320m628s1320m628s532m628s532m628s1320m628s532m628s1320m628s1320"
"m628s1320m628s532m628s1320m628s532m628s1320m628s532m628s532m628s1320"
"m628s1320m628s532m628s532m628s532m628s532m628s1320m628s1320m628s1320"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s1320m628s1320m628s1320m628s532m628s1320m628s1320m628s532m628s1320"
"m628s1320m628s1320m628s532m628s532m628s1320m628s532m628s1320m628s1320"
"m628s1320m628s532m628s1320m628s532m628s1320m628s532m628s532m628s1320"
"m628s1320m628s532m628s532m628s532m628s532m628s1320m628s1320m628s1320"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s1320m628s1320m628s1320m628s532m628s1320m628s1320m628s532m628s1320"
"m628s1320m628s1320m628s532m628s532m628s1320m628s532m628s1320m628s1320"
"m628s1320m628s532m628s1320m628s532m628s1320m628s532m628s532m628s1320"
"m628s1320m628s532m628s532m628s532m628s532m628s1320m628s1320m628s1320"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000",
irsend.outputStr());
}
// Tests for decodeCarrierAC().
@@ -153,9 +157,9 @@ TEST(TestDecodeCarrierAC, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendCarrierAC(0x0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeCarrierAC(&irsend.capture, CARRIER_AC_BITS, true));
ASSERT_TRUE(irrecv.decodeCarrierAC(&irsend.capture, kCarrierAcBits, true));
EXPECT_EQ(CARRIER_AC, irsend.capture.decode_type);
EXPECT_EQ(CARRIER_AC_BITS, irsend.capture.bits);
EXPECT_EQ(kCarrierAcBits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -164,9 +168,9 @@ TEST(TestDecodeCarrierAC, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendCarrierAC(0xB335ABE2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeCarrierAC(&irsend.capture, CARRIER_AC_BITS, true));
ASSERT_TRUE(irrecv.decodeCarrierAC(&irsend.capture, kCarrierAcBits, true));
EXPECT_EQ(CARRIER_AC, irsend.capture.decode_type);
EXPECT_EQ(CARRIER_AC_BITS, irsend.capture.bits);
EXPECT_EQ(kCarrierAcBits, irsend.capture.bits);
EXPECT_EQ(0xB335ABE2, irsend.capture.value);
EXPECT_EQ(0xB335, irsend.capture.address);
EXPECT_EQ(0xABE2, irsend.capture.command);
@@ -178,7 +182,7 @@ TEST(TestDecodeCarrierAC, NormalDecodeWithStrict) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(CARRIER_AC, irsend.capture.decode_type);
EXPECT_EQ(CARRIER_AC_BITS, irsend.capture.bits);
EXPECT_EQ(kCarrierAcBits, irsend.capture.bits);
EXPECT_EQ(0xB335ABE2, irsend.capture.value);
}
@@ -191,27 +195,29 @@ TEST(TestDecodeCarrierAC, RealExamples) {
irsend.reset();
// Data from Issue #385 captured by gnkarn
uint16_t rawData[203] = {
8532, 4216, 628, 1312, 628, 528, 628, 1312, 628, 1312, 628, 528, 628, 524,
628, 1316, 624, 1316, 628, 524, 628, 528, 628, 1312, 628, 1316, 624, 528,
628, 1312, 628, 528, 628, 1312, 628, 1312, 628, 528, 628, 1316, 624, 528,
628, 1312, 628, 528, 628, 1312, 628, 1316, 624, 1316, 628, 1312, 628,
1316, 628, 524, 628, 528, 628, 528, 624, 1316, 628, 528, 628, 20064, 8504,
4228, 628, 528, 628, 1312, 628, 528, 628, 528, 628, 1312, 628, 1316, 624,
532, 624, 528, 628, 1316, 628, 1312, 628, 528, 628, 528, 628, 1312, 628,
528, 628, 1316, 628, 528, 624, 528, 628, 1316, 628, 528, 628, 1316, 624,
528, 628, 1316, 628, 528, 624, 532, 624, 528, 628, 528, 628, 528, 628,
1316, 624, 1316, 628, 1316, 628, 528, 624, 1316, 628, 20076, 8528, 4212,
624, 1316, 628, 528, 628, 1316, 628, 1316, 624, 528, 628, 528, 628, 1316,
628, 1316, 628, 528, 624, 532, 624, 1316, 628, 1316, 628, 528, 628, 1316,
624, 528, 628, 1316, 628, 1316, 628, 528, 628, 1316, 624, 532, 624, 1316,
628, 532, 624, 1316, 628, 1316, 624, 1320, 624, 1316, 628, 1316, 628, 528,
628, 528, 628, 528, 628, 1316, 624, 532, 624};
8532, 4216, 628, 1312, 628, 528, 628, 1312, 628, 1312, 628, 528,
628, 524, 628, 1316, 624, 1316, 628, 524, 628, 528, 628, 1312,
628, 1316, 624, 528, 628, 1312, 628, 528, 628, 1312, 628, 1312,
628, 528, 628, 1316, 624, 528, 628, 1312, 628, 528, 628, 1312,
628, 1316, 624, 1316, 628, 1312, 628, 1316, 628, 524, 628, 528,
628, 528, 624, 1316, 628, 528, 628, 20064, 8504, 4228, 628, 528,
628, 1312, 628, 528, 628, 528, 628, 1312, 628, 1316, 624, 532,
624, 528, 628, 1316, 628, 1312, 628, 528, 628, 528, 628, 1312,
628, 528, 628, 1316, 628, 528, 624, 528, 628, 1316, 628, 528,
628, 1316, 624, 528, 628, 1316, 628, 528, 624, 532, 624, 528,
628, 528, 628, 528, 628, 1316, 624, 1316, 628, 1316, 628, 528,
624, 1316, 628, 20076, 8528, 4212, 624, 1316, 628, 528, 628, 1316,
628, 1316, 624, 528, 628, 528, 628, 1316, 628, 1316, 628, 528,
624, 532, 624, 1316, 628, 1316, 628, 528, 628, 1316, 624, 528,
628, 1316, 628, 1316, 628, 528, 628, 1316, 624, 532, 624, 1316,
628, 532, 624, 1316, 628, 1316, 624, 1320, 624, 1316, 628, 1316,
628, 528, 628, 528, 628, 528, 628, 1316, 624, 532, 624};
irsend.sendRaw(rawData, 203, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(CARRIER_AC, irsend.capture.decode_type);
EXPECT_EQ(CARRIER_AC_BITS, irsend.capture.bits);
EXPECT_EQ(kCarrierAcBits, irsend.capture.bits);
EXPECT_EQ(0xB335ABE2, irsend.capture.value);
EXPECT_EQ(0xB335, irsend.capture.address);
EXPECT_EQ(0xABE2, irsend.capture.command);
+236 -33
View File
@@ -1,5 +1,6 @@
// Copyright 2017 David Conran
// Copyright 2017-2018 David Conran
#include "ir_Coolix.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
@@ -21,7 +22,8 @@ TEST(TestSendCoolix, SendDataOnly) {
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s5040", irsend.outputStr());
"m560s5040",
irsend.outputStr());
irsend.reset();
irsend.sendCOOLIX(0xAA55AA);
@@ -33,7 +35,8 @@ TEST(TestSendCoolix, SendDataOnly) {
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s5040", irsend.outputStr());
"m560s5040",
irsend.outputStr());
irsend.reset();
irsend.sendCOOLIX(0xFFFFFF);
@@ -45,7 +48,8 @@ TEST(TestSendCoolix, SendDataOnly) {
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s5040", irsend.outputStr());
"m560s5040",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -54,7 +58,7 @@ TEST(TestSendCoolix, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendCOOLIX(0xAA55AA, COOLIX_BITS, 1); // 1 repeat.
irsend.sendCOOLIX(0xAA55AA, kCoolixBits, 1); // 1 repeat.
EXPECT_EQ(
"m4480s4480"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
@@ -71,8 +75,9 @@ TEST(TestSendCoolix, SendWithRepeats) {
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s5040", irsend.outputStr());
irsend.sendCOOLIX(0xAA55AA, COOLIX_BITS, 2); // 2 repeats.
"m560s5040",
irsend.outputStr());
irsend.sendCOOLIX(0xAA55AA, kCoolixBits, 2); // 2 repeats.
EXPECT_EQ(
"m4480s4480"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
@@ -97,7 +102,8 @@ TEST(TestSendCoolix, SendWithRepeats) {
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s5040", irsend.outputStr());
"m560s5040",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -111,7 +117,8 @@ TEST(TestSendCoolix, SendUnusualSize) {
"m4480s4480"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s5040", irsend.outputStr());
"m560s5040",
irsend.outputStr());
irsend.reset();
irsend.sendCOOLIX(0x1234567890ABCDEF, 64);
@@ -133,12 +140,13 @@ TEST(TestSendCoolix, SendUnusualSize) {
"m560s560m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560"
"m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s560m560s560m560s560m560s1680m560s560m560s560m560s560m560s560"
"m560s5040", irsend.outputStr());
"m560s5040",
irsend.outputStr());
// Bit sizes must be a multiple of 8.
irsend.reset();
irsend.sendCOOLIX(0x0, 17);
EXPECT_EQ("" , irsend.outputStr());
EXPECT_EQ("", irsend.outputStr());
}
// Tests for decodeCOOLIX().
@@ -153,9 +161,9 @@ TEST(TestDecodeCoolix, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendCOOLIX(0x123456);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, COOLIX_BITS, true));
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, kCoolixBits, true));
EXPECT_EQ(COOLIX, irsend.capture.decode_type);
EXPECT_EQ(COOLIX_BITS, irsend.capture.bits);
EXPECT_EQ(kCoolixBits, irsend.capture.bits);
EXPECT_EQ(0x123456, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -165,9 +173,9 @@ TEST(TestDecodeCoolix, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendCOOLIX(0x0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, COOLIX_BITS, true));
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, kCoolixBits, true));
EXPECT_EQ(COOLIX, irsend.capture.decode_type);
EXPECT_EQ(COOLIX_BITS, irsend.capture.bits);
EXPECT_EQ(kCoolixBits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -177,9 +185,9 @@ TEST(TestDecodeCoolix, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendCOOLIX(0xFFFFFF);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, COOLIX_BITS, true));
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, kCoolixBits, true));
EXPECT_EQ(COOLIX, irsend.capture.decode_type);
EXPECT_EQ(COOLIX_BITS, irsend.capture.bits);
EXPECT_EQ(kCoolixBits, irsend.capture.bits);
EXPECT_EQ(0xFFFFFF, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -194,24 +202,24 @@ TEST(TestDecodeCoolix, NormalDecodeWithRepeatAndStrict) {
// Normal Coolix 16-bit message with 2 repeats.
irsend.reset();
irsend.sendCOOLIX(0x123456, COOLIX_BITS, 2);
irsend.sendCOOLIX(0x123456, kCoolixBits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, COOLIX_BITS, true));
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, kCoolixBits, true));
EXPECT_EQ(COOLIX, irsend.capture.decode_type);
EXPECT_EQ(COOLIX_BITS, irsend.capture.bits);
EXPECT_EQ(kCoolixBits, irsend.capture.bits);
EXPECT_EQ(0x123456, irsend.capture.value);
EXPECT_FALSE(irsend.capture.repeat);
irsend.makeDecodeResult(4 * COOLIX_BITS + 4);
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, COOLIX_BITS, true));
irsend.makeDecodeResult(4 * kCoolixBits + 4);
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, kCoolixBits, true));
EXPECT_EQ(COOLIX, irsend.capture.decode_type);
EXPECT_EQ(COOLIX_BITS, irsend.capture.bits);
EXPECT_EQ(kCoolixBits, irsend.capture.bits);
EXPECT_EQ(0x123456, irsend.capture.value);
irsend.makeDecodeResult(2 * (4 * COOLIX_BITS + 4));
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, COOLIX_BITS, true));
irsend.makeDecodeResult(2 * (4 * kCoolixBits + 4));
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, kCoolixBits, true));
EXPECT_EQ(COOLIX, irsend.capture.decode_type);
EXPECT_EQ(COOLIX_BITS, irsend.capture.bits);
EXPECT_EQ(kCoolixBits, irsend.capture.bits);
EXPECT_EQ(0x123456, irsend.capture.value);
}
@@ -225,7 +233,7 @@ TEST(TestDecodeCoolix, DecodeWithNonStrictSizes) {
irsend.sendCOOLIX(0x12, 8); // Illegal value Coolix 8-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeCOOLIX(&irsend.capture, COOLIX_BITS, true));
ASSERT_FALSE(irrecv.decodeCOOLIX(&irsend.capture, kCoolixBits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeCOOLIX(&irsend.capture, 8, false));
EXPECT_EQ(COOLIX, irsend.capture.decode_type);
@@ -236,7 +244,7 @@ TEST(TestDecodeCoolix, DecodeWithNonStrictSizes) {
irsend.sendCOOLIX(0x12345678, 32); // Illegal value Coolix 32-bit message.
irsend.makeDecodeResult();
// Shouldn't pass with strict when we ask for less bits than we got.
ASSERT_FALSE(irrecv.decodeCOOLIX(&irsend.capture, COOLIX_BITS, true));
ASSERT_FALSE(irrecv.decodeCOOLIX(&irsend.capture, kCoolixBits, true));
irsend.makeDecodeResult();
// Should fail with strict when we ask for the wrong bit size.
@@ -249,7 +257,7 @@ TEST(TestDecodeCoolix, DecodeWithNonStrictSizes) {
// Decode should fail if asked to decode non-multiples of 8 bits.
irsend.reset();
irsend.sendCOOLIX(0x123456, COOLIX_BITS, 2);
irsend.sendCOOLIX(0x123456, kCoolixBits, 2);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeCOOLIX(&irsend.capture, 9, false));
}
@@ -279,12 +287,207 @@ TEST(TestDecodeCoolix, FailToDecodeNonCoolixExample) {
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};
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.decodeCOOLIX(&irsend.capture));
ASSERT_FALSE(irrecv.decodeCOOLIX(&irsend.capture, COOLIX_BITS, false));
ASSERT_FALSE(irrecv.decodeCOOLIX(&irsend.capture, kCoolixBits, false));
}
// Tests for the IRCoolixAC class.
TEST(TestCoolixACClass, SetAndGetRaw) {
IRCoolixAC ircoolix(0);
ircoolix.setRaw(kCoolixOff);
EXPECT_EQ(kCoolixOff, ircoolix.getRaw());
ircoolix.setRaw(kCoolixDefaultState);
EXPECT_EQ(kCoolixDefaultState, ircoolix.getRaw());
}
TEST(TestCoolixACClass, SetAndGetTemp) {
IRCoolixAC ircoolix(0);
ircoolix.setTemp(25);
EXPECT_EQ(25, ircoolix.getTemp());
ircoolix.setTemp(kCoolixTempMin);
EXPECT_EQ(kCoolixTempMin, ircoolix.getTemp());
ircoolix.setTemp(kCoolixTempMax);
EXPECT_EQ(kCoolixTempMax, ircoolix.getTemp());
ircoolix.setTemp(kCoolixTempMin - 1);
EXPECT_EQ(kCoolixTempMin, ircoolix.getTemp());
ircoolix.setTemp(kCoolixTempMax + 1);
EXPECT_EQ(kCoolixTempMax, ircoolix.getTemp());
}
TEST(TestCoolixACClass, SetAndGetMode) {
IRCoolixAC ircoolix(0);
ircoolix.setMode(kCoolixHeat);
EXPECT_EQ(kCoolixHeat, ircoolix.getMode());
ircoolix.setMode(kCoolixCool);
EXPECT_EQ(kCoolixCool, ircoolix.getMode());
ircoolix.setMode(kCoolixDry);
EXPECT_EQ(kCoolixDry, ircoolix.getMode());
ircoolix.setMode(kCoolixAuto);
EXPECT_EQ(kCoolixAuto, ircoolix.getMode());
ircoolix.setMode(kCoolixFan);
EXPECT_EQ(kCoolixFan, ircoolix.getMode());
}
TEST(TestCoolixACClass, SetAndGetFan) {
IRCoolixAC ircoolix(0);
ircoolix.setFan(kCoolixFanMax);
EXPECT_EQ(kCoolixFanMax, ircoolix.getFan());
ircoolix.setFan(kCoolixFanMin);
EXPECT_EQ(kCoolixFanMin, ircoolix.getFan());
ircoolix.setFan(kCoolixFanZoneFollow);
EXPECT_EQ(kCoolixFanZoneFollow, ircoolix.getFan());
ircoolix.setFan(kCoolixFanAuto);
EXPECT_EQ(kCoolixFanAuto, ircoolix.getFan());
ircoolix.setFan(kCoolixFanMax);
EXPECT_EQ(kCoolixFanMax, ircoolix.getFan());
ASSERT_NE(3, kCoolixFanAuto);
// Now try some unexpected value.
ircoolix.setFan(3);
EXPECT_EQ(kCoolixFanAuto, ircoolix.getFan());
}
TEST(TestCoolixACClass, SetGetClearSensorTempAndZoneFollow) {
IRCoolixAC ircoolix(0);
ircoolix.setRaw(kCoolixDefaultState);
EXPECT_FALSE(ircoolix.getZoneFollow());
EXPECT_LT(kCoolixSensorTempMax, ircoolix.getSensorTemp());
ircoolix.setSensorTemp(25);
EXPECT_TRUE(ircoolix.getZoneFollow());
EXPECT_EQ(25, ircoolix.getSensorTemp());
// Lower bounds
ircoolix.setSensorTemp(kCoolixSensorTempMin);
EXPECT_TRUE(ircoolix.getZoneFollow());
EXPECT_EQ(kCoolixSensorTempMin, ircoolix.getSensorTemp());
ircoolix.setSensorTemp(kCoolixSensorTempMin - 1);
EXPECT_TRUE(ircoolix.getZoneFollow());
EXPECT_EQ(kCoolixSensorTempMin, ircoolix.getSensorTemp());
// Upper bounds
ircoolix.setSensorTemp(kCoolixSensorTempMax);
EXPECT_TRUE(ircoolix.getZoneFollow());
EXPECT_EQ(kCoolixSensorTempMax, ircoolix.getSensorTemp());
ircoolix.setSensorTemp(kCoolixSensorTempMax + 1);
EXPECT_TRUE(ircoolix.getZoneFollow());
EXPECT_EQ(kCoolixSensorTempMax, ircoolix.getSensorTemp());
// Clearing
ircoolix.clearSensorTemp();
EXPECT_FALSE(ircoolix.getZoneFollow());
EXPECT_LT(kCoolixSensorTempMax, ircoolix.getSensorTemp());
}
TEST(TestCoolixACClass, SpecialModesAndReset) {
IRCoolixAC ircoolix(0);
ASSERT_NE(kCoolixSwing, ircoolix.getRaw());
ircoolix.setSwing();
ASSERT_EQ(kCoolixSwing, ircoolix.getRaw());
ircoolix.setTurbo();
ASSERT_EQ(kCoolixTurbo, ircoolix.getRaw());
ircoolix.setSleep();
ASSERT_EQ(kCoolixSleep, ircoolix.getRaw());
ircoolix.setLed();
ASSERT_EQ(kCoolixLed, ircoolix.getRaw());
ircoolix.setClean();
ASSERT_EQ(kCoolixClean, ircoolix.getRaw());
ircoolix.stateReset();
ASSERT_NE(kCoolixClean, ircoolix.getRaw());
}
TEST(TestCoolixACClass, HumanReadable) {
IRCoolixAC ircoolix(0);
// Initial starting point.
EXPECT_EQ(
"Power: On, Fan: 5 (AUTO), Mode: 2 (AUTO), Temp: 25C, "
"Zone Follow: Off, Sensor Temp: Ignored",
ircoolix.toString());
ircoolix.setSensorTemp(24);
ircoolix.setTemp(22);
ircoolix.setMode(kCoolixCool);
ircoolix.setFan(kCoolixFanMin);
EXPECT_EQ(
"Power: On, Fan: 4 (MIN), Mode: 0 (COOL), Temp: 22C, "
"Zone Follow: On, Sensor Temp: 24C",
ircoolix.toString());
ircoolix.setSwing();
EXPECT_EQ("Power: On, Fan: 3 (UNKNOWN), Swing: Toggle", ircoolix.toString());
ircoolix.setPower(false);
EXPECT_EQ("Power: Off", ircoolix.toString());
}
TEST(TestCoolixACClass, KnownExamples) {
IRCoolixAC ircoolix(0);
ircoolix.setRaw(0b101100101011111111100100);
EXPECT_EQ(
"Power: On, Fan: 5 (AUTO), Mode: 4 (FAN), Zone Follow: Off, "
"Sensor Temp: Ignored",
ircoolix.toString());
ircoolix.setRaw(0b101100101001111100000000);
EXPECT_EQ(
"Power: On, Fan: 4 (MIN), Mode: 0 (COOL), Temp: 17C, "
"Zone Follow: Off, Sensor Temp: Ignored",
ircoolix.toString());
}
TEST(TestCoolixACClass, Issue579FanAuto0) {
IRCoolixAC ircoolix(0);
ircoolix.setRaw(0xB21F28);
EXPECT_EQ(
"Power: On, Fan: 0 (AUTO0), Mode: 2 (AUTO), Temp: 20C, "
"Zone Follow: Off, Sensor Temp: Ignored",
ircoolix.toString());
}
TEST(TestCoolixACClass, RealCaptureExample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
// From Issue #579
uint16_t powerOffRawData[199] = {
4444, 4434, 590, 1578, 698, 446, 590, 1578, 622, 1596, 622, 500,
644, 476, 644, 1548, 588, 532, 594, 530, 612, 1578, 590, 532,
588, 534, 672, 1518, 594, 1598, 590, 510, 612, 1580, 644, 480,
612, 1578, 644, 1548, 644, 1548, 594, 1598, 642, 506, 644, 1550,
644, 1548, 594, 1600, 644, 478, 644, 478, 642, 480, 644, 478,
642, 1548, 594, 530, 590, 532, 614, 1578, 644, 1548, 594, 1600,
588, 534, 566, 556, 588, 530, 590, 532, 586, 514, 612, 532,
588, 532, 590, 534, 588, 1578, 642, 1576, 642, 1550, 588, 1602,
588, 1580, 642, 4712, 4546, 4406, 588, 1606, 642, 478, 644, 1550,
590, 1604, 588, 534, 586, 532, 586, 1582, 642, 480, 642, 480,
668, 1550, 642, 480, 642, 478, 642, 1552, 612, 1578, 586, 538,
588, 1580, 674, 472, 590, 1602, 586, 1580, 618, 1576, 642, 1548,
594, 530, 590, 1584, 608, 1578, 644, 1550, 642, 480, 642, 478,
642, 480, 642, 480, 642, 1550, 590, 530, 592, 528, 592, 1602,
642, 1548, 592, 1604, 586, 584, 642, 480, 640, 480, 640, 480,
642, 480, 642, 480, 642, 480, 642, 480, 642, 1552, 590, 1604,
588, 1578, 642, 1552, 640, 1550, 592}; // COOLIX B27BE0
irsend.begin();
irsend.reset();
irsend.sendRaw(powerOffRawData, 199, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(COOLIX, irsend.capture.decode_type);
EXPECT_EQ(kCoolixBits, irsend.capture.bits);
EXPECT_EQ(kCoolixOff, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
}
File diff suppressed because it is too large. Load diff
+37 -31
View File
@@ -19,7 +19,8 @@ TEST(TestSendDenon, SendDataOnly) {
"m260s43602"
"m260s780m260s1820m260s780m260s780m260s780m260s780m260s1820m260s1820"
"m260s780m260s780m260s780m260s780m260s1820m260s1820m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
irsend.reset();
// Denon Eco Mode On. (Panasonic/Kaseikyo)
@@ -32,7 +33,8 @@ TEST(TestSendDenon, SendDataOnly) {
"m432s1296m432s432m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s432m432s432m432s1296m432s1296"
"m432s98928", irsend.outputStr());
"m432s98928",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -54,7 +56,8 @@ TEST(TestSendDenon, SendNormalWithRepeats) {
"m260s43602"
"m260s780m260s1820m260s780m260s780m260s780m260s780m260s1820m260s1820"
"m260s780m260s780m260s780m260s780m260s1820m260s1820m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
irsend.sendDenon(0x2278, DENON_BITS, 2); // 2 repeats.
EXPECT_EQ(
"m260s780m260s1820m260s780m260s780m260s780m260s1820m260s780m260s780"
@@ -74,7 +77,8 @@ TEST(TestSendDenon, SendNormalWithRepeats) {
"m260s43602"
"m260s780m260s1820m260s780m260s780m260s780m260s780m260s1820m260s1820"
"m260s780m260s780m260s780m260s780m260s1820m260s1820m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
}
TEST(TestSendDenon, Send48BitWithRepeats) {
@@ -99,7 +103,8 @@ TEST(TestSendDenon, Send48BitWithRepeats) {
"m432s1296m432s432m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s432m432s432m432s1296m432s1296"
"m432s98928", irsend.outputStr());
"m432s98928",
irsend.outputStr());
irsend.sendDenon(0x2A4C028D6CE3, DENON_48_BITS, 2); // 2 repeats.
EXPECT_EQ(
"m3456s1728"
@@ -125,7 +130,8 @@ TEST(TestSendDenon, Send48BitWithRepeats) {
"m432s1296m432s432m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s432m432s432m432s1296m432s1296"
"m432s98928", irsend.outputStr());
"m432s98928",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -139,7 +145,8 @@ TEST(TestSendDenon, SendUnusualSize) {
"m260s780m260s780m260s780m260s1820m260s780m260s780m260s1820m260s780"
"m260s43602"
"m260s1820m260s1820m260s1820m260s780m260s1820m260s1820m260s780m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
irsend.reset();
irsend.sendDenon(0x1234567890ABCDEF, 64);
@@ -153,7 +160,8 @@ TEST(TestSendDenon, SendUnusualSize) {
"m432s1296m432s432m432s1296m432s432m432s1296m432s432m432s1296m432s1296"
"m432s1296m432s1296m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s1296m432s1296"
"m432s74736", irsend.outputStr());
"m432s74736",
irsend.outputStr());
}
// Tests for decodeDenon().
@@ -179,12 +187,12 @@ TEST(TestDecodeDenon, NormalDecodeWithStrict) {
// Legacy Denon 14-bit message.
irsend.reset();
irsend.sendDenon(0x1278, DENON_LEGACY_BITS);
irsend.sendDenon(0x1278, kDenonLegacyBits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeDenon(&irsend.capture, DENON_LEGACY_BITS, true));
ASSERT_TRUE(irrecv.decodeDenon(&irsend.capture, kDenonLegacyBits, true));
EXPECT_EQ(DENON, irsend.capture.decode_type);
EXPECT_EQ(DENON_LEGACY_BITS, irsend.capture.bits);
EXPECT_EQ(kDenonLegacyBits, irsend.capture.bits);
EXPECT_EQ(0x1278, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -211,13 +219,11 @@ TEST(TestDecodeDenon, DecodeGlobalCacheExample) {
irsend.reset();
// Denon AVR series Power On code from Global Cache. (Sharp style)
uint16_t gc_test_power[67] = {38000, 1, 1,
10, 30, 10, 70, 10, 30, 10, 30, 10, 30, 10, 70,
10, 30, 10, 30, 10, 70, 10, 70, 10, 70, 10, 70,
10, 30, 10, 30, 10, 30, 10, 1657,
10, 30, 10, 70, 10, 30, 10, 30, 10, 30, 10, 30,
10, 70, 10, 70, 10, 30, 10, 30, 10, 30, 10, 30,
10, 70, 10, 70, 10, 70, 10, 1657};
uint16_t gc_test_power[67] = {
38000, 1, 1, 10, 30, 10, 70, 10, 30, 10, 30, 10, 30, 10, 70, 10, 30,
10, 30, 10, 70, 10, 70, 10, 70, 10, 70, 10, 30, 10, 30, 10, 30, 10,
1657, 10, 30, 10, 70, 10, 30, 10, 30, 10, 30, 10, 30, 10, 70, 10, 70,
10, 30, 10, 30, 10, 30, 10, 30, 10, 70, 10, 70, 10, 70, 10, 1657};
irsend.sendGC(gc_test_power, 67);
irsend.makeDecodeResult();
@@ -230,15 +236,14 @@ TEST(TestDecodeDenon, DecodeGlobalCacheExample) {
EXPECT_FALSE(irsend.capture.repeat);
// Denon "Eco Mode Auto" code from Global Cache. (Panasonic style)
uint16_t gc_test_eco[103] = {37000, 1, 1, 128, 64, 16, 16, 16, 16, 16, 48,
16, 16, 16, 48, 16, 16, 16, 48, 16, 16, 16, 16,
16, 48, 16, 16, 16, 16, 16, 48, 16, 48, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 48, 16, 16, 16, 48, 16, 16, 16, 16,
16, 16, 16, 48, 16, 48, 16, 16, 16, 48, 16, 16,
16, 48, 16, 48, 16, 16, 16, 48, 16, 48, 16, 16,
16, 16, 16, 48, 16, 48, 16, 48, 16, 16, 16, 16,
16, 16, 16, 48, 16, 48, 16, 2766};
uint16_t gc_test_eco[103] = {
37000, 1, 1, 128, 64, 16, 16, 16, 16, 16, 48, 16, 16, 16, 48,
16, 16, 16, 48, 16, 16, 16, 16, 16, 48, 16, 16, 16, 16, 16,
48, 16, 48, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 48, 16, 16, 16, 48, 16, 16, 16, 16, 16,
16, 16, 48, 16, 48, 16, 16, 16, 48, 16, 16, 16, 48, 16, 48,
16, 16, 16, 48, 16, 48, 16, 16, 16, 16, 16, 48, 16, 48, 16,
48, 16, 16, 16, 16, 16, 16, 16, 48, 16, 48, 16, 2766};
irsend.reset();
irsend.sendGC(gc_test_eco, 103);
irsend.makeDecodeResult();
@@ -259,14 +264,15 @@ TEST(TestDecodeDenon, FailToDecodeNonDenonExample) {
irsend.begin();
irsend.reset();
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};
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.decodeDenon(&irsend.capture));
ASSERT_FALSE(irrecv.decodeDenon(&irsend.capture, DENON_LEGACY_BITS, false));
ASSERT_FALSE(irrecv.decodeDenon(&irsend.capture, kDenonLegacyBits, false));
ASSERT_FALSE(irrecv.decodeDenon(&irsend.capture, DENON_BITS, false));
ASSERT_FALSE(irrecv.decodeDenon(&irsend.capture, DENON_48_BITS, false));
}
+68 -61
View File
@@ -26,7 +26,8 @@ TEST(TestSendDish, SendDataOnly) {
"m400s6100"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100", irsend.outputStr());
"m400s6100",
irsend.outputStr());
irsend.reset();
irsend.sendDISH(0x9C00); // Power on.
@@ -43,7 +44,8 @@ TEST(TestSendDish, SendDataOnly) {
"m400s6100"
"m400s1700m400s2800m400s2800m400s1700m400s1700m400s1700m400s2800m400s2800"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100", irsend.outputStr());
"m400s6100",
irsend.outputStr());
irsend.reset();
irsend.sendDISH(0xFFFF);
@@ -60,7 +62,8 @@ TEST(TestSendDish, SendDataOnly) {
"m400s6100"
"m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700"
"m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700"
"m400s6100", irsend.outputStr());
"m400s6100",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -69,15 +72,16 @@ TEST(TestSendDish, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendDISH(0x9C00, DISH_BITS, 0); // 0 repeats.
irsend.sendDISH(0x9C00, kDishBits, 0); // 0 repeats.
EXPECT_EQ(
"m400s6100"
"m400s1700m400s2800m400s2800m400s1700m400s1700m400s1700m400s2800m400s2800"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100", irsend.outputStr());
"m400s6100",
irsend.outputStr());
irsend.reset();
irsend.sendDISH(0x9C00, DISH_BITS, 1); // 1 repeat.
irsend.sendDISH(0x9C00, kDishBits, 1); // 1 repeat.
EXPECT_EQ(
"m400s6100"
"m400s1700m400s2800m400s2800m400s1700m400s1700m400s1700m400s2800m400s2800"
@@ -85,9 +89,10 @@ TEST(TestSendDish, SendWithRepeats) {
"m400s6100"
"m400s1700m400s2800m400s2800m400s1700m400s1700m400s1700m400s2800m400s2800"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100", irsend.outputStr());
"m400s6100",
irsend.outputStr());
irsend.sendDISH(0x9C00, DISH_BITS, 2); // 2 repeats.
irsend.sendDISH(0x9C00, kDishBits, 2); // 2 repeats.
EXPECT_EQ(
"m400s6100"
"m400s1700m400s2800m400s2800m400s1700m400s1700m400s1700m400s2800m400s2800"
@@ -98,7 +103,8 @@ TEST(TestSendDish, SendWithRepeats) {
"m400s6100"
"m400s1700m400s2800m400s2800m400s1700m400s1700m400s1700m400s2800m400s2800"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100", irsend.outputStr());
"m400s6100",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -109,15 +115,16 @@ TEST(TestSendDish, SendUnusualSize) {
irsend.reset();
irsend.sendDISH(0x0, 8);
EXPECT_EQ(
"m400s6100"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100", irsend.outputStr());
"m400s6100"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100"
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
"m400s6100",
irsend.outputStr());
irsend.reset();
irsend.sendDISH(0x1234567890ABCDEF, 64);
@@ -158,7 +165,8 @@ TEST(TestSendDish, SendUnusualSize) {
"m400s1700m400s2800m400s1700m400s2800m400s1700m400s2800m400s1700m400s1700"
"m400s1700m400s1700m400s2800m400s2800m400s1700m400s1700m400s2800m400s1700"
"m400s1700m400s1700m400s1700m400s2800m400s1700m400s1700m400s1700m400s1700"
"m400s6100", irsend.outputStr());
"m400s6100",
irsend.outputStr());
}
// Tests for decodeDISH().
@@ -173,9 +181,9 @@ TEST(TestDecodeDish, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendDISH(0x9C00);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeDISH(&irsend.capture, DISH_BITS, true));
ASSERT_TRUE(irrecv.decodeDISH(&irsend.capture, kDishBits, true));
EXPECT_EQ(DISH, irsend.capture.decode_type);
EXPECT_EQ(DISH_BITS, irsend.capture.bits);
EXPECT_EQ(kDishBits, irsend.capture.bits);
EXPECT_EQ(0x9C00, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -192,7 +200,7 @@ TEST(TestDecodeDish, DecodeWithNonStrictSize) {
irsend.sendDISH(0x12, 8); // Illegal size Dish message. (smaller)
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeDISH(&irsend.capture, DISH_BITS, true));
ASSERT_FALSE(irrecv.decodeDISH(&irsend.capture, kDishBits, true));
irsend.makeDecodeResult();
// Should fail with strict when we ask for the wrong bit size.
@@ -209,7 +217,7 @@ TEST(TestDecodeDish, DecodeWithNonStrictSize) {
irsend.sendDISH(0x12345678, 32); // Illegal size Dish message. (larger)
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeDISH(&irsend.capture, DISH_BITS, true));
ASSERT_FALSE(irrecv.decodeDISH(&irsend.capture, kDishBits, true));
irsend.makeDecodeResult();
// Should fail with strict when we ask for the wrong bit size.
@@ -247,47 +255,45 @@ TEST(TestDecodeDish, DecodeGlobalCacheExample) {
IRrecv irrecv(4);
irsend.begin();
/*
irsend.reset();
// Dish DTV Pal code from Global Cache.
uint16_t gc_test_dtv[27] = {58000, 1, 3, 22, 538, 22, 252, 22, 156, 22, 156,
22, 156, 22, 156, 22, 252, 22, 252, 22, 252, 22,
252, 22, 252, 22, 538};
irsend.sendGC(gc_test_dtv, 27);
irsend.makeDecodeResult();
/*
irsend.reset();
// Dish DTV Pal code from Global Cache.
uint16_t gc_test_dtv[27] = {58000, 1, 3, 22, 538, 22, 252, 22, 156, 22, 156,
22, 156, 22, 156, 22, 252, 22, 252, 22, 252, 22,
252, 22, 252, 22, 538};
irsend.sendGC(gc_test_dtv, 27);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeDISH(&irsend.capture, DISH_BITS, true));
EXPECT_EQ(DISH, irsend.capture.decode_type);
EXPECT_EQ(DISH_BITS, 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);
ASSERT_TRUE(irrecv.decodeDISH(&irsend.capture, kDishBits, true));
EXPECT_EQ(DISH, irsend.capture.decode_type);
EXPECT_EQ(kDishBits, 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);
ASSERT_TRUE(irrecv.decodeDISH(&irsend.capture));
EXPECT_EQ(DISH, irsend.capture.decode_type);
EXPECT_EQ(DISH_BITS, 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);
*/
ASSERT_TRUE(irrecv.decodeDISH(&irsend.capture));
EXPECT_EQ(DISH, irsend.capture.decode_type);
EXPECT_EQ(kDishBits, 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);
*/
// Dish Hopper 3 code from Global Cache.
uint16_t gc_test_hopper[73] = {58000, 1, 37, 23, 351, 23, 94, 23, 164,
23, 164, 23, 94, 23, 94, 23, 94, 23, 164,
23, 164, 23, 164, 23, 164, 23, 164, 23, 164,
23, 164, 23, 164, 23, 164, 23, 164, 23, 351,
23, 94, 23, 164, 23, 164, 23, 94, 23, 94,
23, 94, 23, 164, 23, 164, 23, 164, 23, 164,
23, 164, 23, 164, 23, 164, 23, 164, 23, 164,
23, 164, 23, 351};
uint16_t gc_test_hopper[73] = {
58000, 1, 37, 23, 351, 23, 94, 23, 164, 23, 164, 23, 94, 23, 94, 23,
94, 23, 164, 23, 164, 23, 164, 23, 164, 23, 164, 23, 164, 23, 164, 23,
164, 23, 164, 23, 164, 23, 351, 23, 94, 23, 164, 23, 164, 23, 94, 23,
94, 23, 94, 23, 164, 23, 164, 23, 164, 23, 164, 23, 164, 23, 164, 23,
164, 23, 164, 23, 164, 23, 164, 23, 351};
irsend.reset();
irsend.sendGC(gc_test_hopper, 73);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeDISH(&irsend.capture, DISH_BITS, true));
ASSERT_TRUE(irrecv.decodeDISH(&irsend.capture, kDishBits, true));
EXPECT_EQ(DISH, irsend.capture.decode_type);
EXPECT_EQ(DISH_BITS, irsend.capture.bits);
EXPECT_EQ(kDishBits, irsend.capture.bits);
EXPECT_EQ(0x9C00, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -295,7 +301,7 @@ TEST(TestDecodeDish, DecodeGlobalCacheExample) {
ASSERT_TRUE(irrecv.decodeDISH(&irsend.capture));
EXPECT_EQ(DISH, irsend.capture.decode_type);
EXPECT_EQ(DISH_BITS, irsend.capture.bits);
EXPECT_EQ(kDishBits, irsend.capture.bits);
EXPECT_EQ(0x9C00, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -310,12 +316,13 @@ TEST(TestDecodeDish, FailToDecodeNonDishExample) {
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};
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.decodeDISH(&irsend.capture));
ASSERT_FALSE(irrecv.decodeDISH(&irsend.capture, DISH_BITS, false));
ASSERT_FALSE(irrecv.decodeDISH(&irsend.capture, kDishBits, false));
}
@@ -0,0 +1,98 @@
// Copyright 2018 David Conran
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for sendElectraAC().
// Test sending typical data only.
TEST(TestSendElectraAC, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
uint8_t data[kElectraAcStateLength] = {0xC3, 0xE1, 0x6F, 0x14, 0x06,
0x00, 0x04, 0x00, 0x00, 0x04,
0x00, 0xA0, 0xB0};
irsend.sendElectraAC(data);
EXPECT_EQ(
"m9166s4470"
"m646s1647m646s1647m646s547m646s547m646s547m646s547m646s1647m646s1647"
"m646s1647m646s1647m646s1647m646s547m646s547m646s547m646s547m646s1647"
"m646s547m646s1647m646s1647m646s547m646s1647m646s1647m646s1647m646s1647"
"m646s547m646s547m646s547m646s1647m646s547m646s1647m646s547m646s547"
"m646s547m646s547m646s547m646s547m646s547m646s1647m646s1647m646s547"
"m646s547m646s547m646s547m646s547m646s547m646s547m646s547m646s547"
"m646s547m646s547m646s547m646s547m646s547m646s1647m646s547m646s547"
"m646s547m646s547m646s547m646s547m646s547m646s547m646s547m646s547"
"m646s547m646s547m646s547m646s547m646s547m646s547m646s547m646s547"
"m646s547m646s547m646s547m646s547m646s547m646s1647m646s547m646s547"
"m646s547m646s547m646s547m646s547m646s547m646s547m646s547m646s547"
"m646s1647m646s547m646s1647m646s547m646s547m646s547m646s547m646s547"
"m646s1647m646s547m646s1647m646s1647m646s547m646s547m646s547m646s547"
"m646s100000",
irsend.outputStr());
}
// Tests for decodeElectraAC().
// Decode normal ElectraAC messages.
TEST(TestDecodeElectraAC, SyntheticDecode) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Synthesised Normal ElectraAC message.
irsend.reset();
uint8_t expectedState[kElectraAcStateLength] = {0xC3, 0xE1, 0x6F, 0x14, 0x06,
0x00, 0x04, 0x00, 0x00, 0x04,
0x00, 0xA0, 0xB0};
irsend.sendElectraAC(expectedState);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(ELECTRA_AC, irsend.capture.decode_type);
EXPECT_EQ(kElectraAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
}
// Decode a recorded example
TEST(TestDecodeElectraAC, RealExampleDecode) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Real ElectraAC message.
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/527
uint16_t rawData[211] = {
9166, 4470, 642, 1632, 642, 1632, 668, 534, 666, 534, 668, 534,
614, 536, 640, 1636, 640, 1646, 694, 1662, 612, 1628, 642, 1666,
664, 532, 668, 534, 666, 534, 666, 532, 666, 1644, 642, 532,
640, 1634, 668, 1632, 642, 538, 666, 1660, 610, 1666, 664, 1632,
642, 1672, 610, 536, 666, 534, 694, 532, 666, 1636, 614, 538,
666, 1632, 642, 536, 666, 544, 692, 534, 640, 558, 640, 534,
640, 540, 666, 534, 638, 1666, 638, 1636, 640, 550, 666, 534,
640, 540, 666, 534, 640, 540, 666, 536, 638, 540, 666, 536,
638, 550, 664, 536, 638, 540, 664, 536, 638, 540, 666, 534,
638, 1640, 664, 536, 692, 546, 664, 536, 664, 536, 664, 536,
664, 546, 612, 532, 636, 538, 664, 536, 664, 546, 612, 538,
638, 538, 638, 538, 664, 536, 690, 538, 662, 538, 664, 538,
662, 548, 664, 536, 662, 538, 662, 562, 638, 564, 636, 564,
636, 1668, 582, 556, 652, 572, 612, 568, 636, 564, 610, 570,
636, 556, 616, 550, 656, 566, 610, 570, 632, 578, 608, 1640,
662, 562, 642, 1686, 582, 570, 634, 566, 604, 576, 636, 566,
610, 578, 634, 1664, 584, 590, 660, 1636, 610, 1642, 664, 590,
610, 590, 636, 566, 634, 568, 686}; // UNKNOWN 9AD8CDB5
uint8_t expectedState[kElectraAcStateLength] = {0xC3, 0xE1, 0x6F, 0x14, 0x06,
0x00, 0x04, 0x00, 0x00, 0x04,
0x00, 0xA0, 0xB0};
irsend.reset();
irsend.sendRaw(rawData, 211, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(ELECTRA_AC, irsend.capture.decode_type);
EXPECT_EQ(kElectraAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
}
+83 -80
View File
@@ -25,16 +25,16 @@ template<typename T, size_t size>
// Test sending typical data only.
TEST(TestIRFujitsuACClass, GetRawDefault) {
IRFujitsuAC fujitsu = IRFujitsuAC(4); // AR-RAH2E
fujitsu.setCmd(FUJITSU_AC_CMD_TURN_ON);
fujitsu.setSwing(FUJITSU_AC_SWING_BOTH);
fujitsu.setMode(FUJITSU_AC_MODE_COOL);
fujitsu.setFanSpeed(FUJITSU_AC_FAN_HIGH);
fujitsu.setCmd(kFujitsuAcCmdTurnOn);
fujitsu.setSwing(kFujitsuAcSwingBoth);
fujitsu.setMode(kFujitsuAcModeCool);
fujitsu.setFanSpeed(kFujitsuAcFanHigh);
fujitsu.setTemp(24);
uint8_t expected_arrah2e[16] = {
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30,
0x81, 0x01, 0x31, 0x00, 0x00, 0x00, 0x20, 0xFD};
EXPECT_TRUE(ArraysMatch(expected_arrah2e, fujitsu.getRaw()));
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
@@ -43,7 +43,7 @@ TEST(TestIRFujitsuACClass, GetRawDefault) {
0x81, 0x01, 0x31, 0x00, 0x00, 0x00, 0x1D};
fujitsu.setModel(ARDB1);
EXPECT_TRUE(ArraysMatch(expected_ardb1, fujitsu.getRaw()));
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH - 1, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
}
@@ -54,14 +54,14 @@ TEST(TestIRFujitsuACClass, GetRawTurnOff) {
fujitsu.off();
uint8_t expected_arrah2e[7] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02, 0xFD};
EXPECT_TRUE(ArraysMatch(expected_arrah2e, fujitsu.getRaw()));
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH_SHORT, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLengthShort, fujitsu.getStateLength());
EXPECT_EQ("Power: Off, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
fujitsu.setModel(ARDB1);
uint8_t expected_ardb1[6] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02};
EXPECT_TRUE(ArraysMatch(expected_ardb1, fujitsu.getRaw()));
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH_SHORT - 1, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLengthShort - 1, fujitsu.getStateLength());
EXPECT_EQ("Power: Off, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
}
@@ -71,7 +71,7 @@ TEST(TestIRFujitsuACClass, GetRawStepHoriz) {
fujitsu.stepHoriz();
uint8_t expected[7] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x79, 0x86};
EXPECT_TRUE(ArraysMatch(expected, fujitsu.getRaw()));
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH_SHORT, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLengthShort, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: Step vane horizontally",
fujitsu.toString());
@@ -83,7 +83,7 @@ TEST(TestIRFujitsuACClass, GetRawStepVert) {
fujitsu.stepVert();
uint8_t expected_arrah2e[7] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x6C, 0x93};
EXPECT_TRUE(ArraysMatch(expected_arrah2e, fujitsu.getRaw()));
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH_SHORT, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLengthShort, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: Step vane vertically",
fujitsu.toString());
@@ -92,7 +92,7 @@ TEST(TestIRFujitsuACClass, GetRawStepVert) {
fujitsu.stepVert();
uint8_t expected_ardb1[6] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x6C};
EXPECT_TRUE(ArraysMatch(expected_ardb1, fujitsu.getRaw()));
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH_SHORT - 1,
EXPECT_EQ(kFujitsuAcStateLengthShort - 1,
fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: Step vane vertically",
@@ -101,10 +101,10 @@ TEST(TestIRFujitsuACClass, GetRawStepVert) {
TEST(TestIRFujitsuACClass, GetRawWithSwingHoriz) {
IRFujitsuAC fujitsu = IRFujitsuAC(4);
fujitsu.setCmd(FUJITSU_AC_CMD_STAY_ON);
fujitsu.setSwing(FUJITSU_AC_SWING_HORIZ);
fujitsu.setMode(FUJITSU_AC_MODE_COOL);
fujitsu.setFanSpeed(FUJITSU_AC_FAN_QUIET);
fujitsu.setCmd(kFujitsuAcCmdStayOn);
fujitsu.setSwing(kFujitsuAcSwingHoriz);
fujitsu.setMode(kFujitsuAcModeCool);
fujitsu.setFanSpeed(kFujitsuAcFanQuiet);
fujitsu.setTemp(25);
uint8_t expected[16] = {0x14, 0x63, 0x0, 0x10, 0x10, 0xFE, 0x9, 0x30,
0x90, 0x1, 0x24, 0x0, 0x0, 0x0, 0x20, 0xFB};
@@ -116,10 +116,10 @@ TEST(TestIRFujitsuACClass, GetRawWithSwingHoriz) {
TEST(TestIRFujitsuACClass, GetRawWithFan) {
IRFujitsuAC fujitsu = IRFujitsuAC(4);
fujitsu.setCmd(FUJITSU_AC_CMD_STAY_ON);
fujitsu.setSwing(FUJITSU_AC_SWING_HORIZ);
fujitsu.setMode(FUJITSU_AC_MODE_FAN);
fujitsu.setFanSpeed(FUJITSU_AC_FAN_MED);
fujitsu.setCmd(kFujitsuAcCmdStayOn);
fujitsu.setSwing(kFujitsuAcSwingHoriz);
fujitsu.setMode(kFujitsuAcModeFan);
fujitsu.setFanSpeed(kFujitsuAcFanMed);
fujitsu.setTemp(20); // temp doesn't matter for fan
// but it is sent by the RC anyway
fujitsu.setModel(ARRAH2E);
@@ -127,7 +127,7 @@ TEST(TestIRFujitsuACClass, GetRawWithFan) {
0x14, 0x63, 0x0, 0x10, 0x10, 0xFE, 0x9, 0x30,
0x40, 0x3, 0x22, 0x0, 0x0, 0x0, 0x20, 0x4B};
EXPECT_TRUE(ArraysMatch(expected_arrah2e, fujitsu.getRaw()));
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 3 (FAN), Temp: 20C, Fan: 2 (MED), Swing: Horiz, "
"Command: N/A", fujitsu.toString());
@@ -136,15 +136,15 @@ TEST(TestIRFujitsuACClass, GetRawWithFan) {
0x14, 0x63, 0x0, 0x10, 0x10, 0xFC, 0x8, 0x30,
0x40, 0x3, 0x22, 0x0, 0x0, 0x0, 0x6B};
EXPECT_TRUE(ArraysMatch(expected_ardb1, fujitsu.getRaw()));
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH - 1, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 3 (FAN), Temp: 20C, Fan: 2 (MED), Swing: Horiz, "
"Command: N/A", fujitsu.toString());
}
TEST(TestIRFujitsuACClass, SetRaw) {
IRFujitsuAC fujitsu = IRFujitsuAC(0);
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH, fujitsu.getStateLength());
uint8_t expected_default_arrah2e[FUJITSU_AC_STATE_LENGTH] = {
EXPECT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
uint8_t expected_default_arrah2e[kFujitsuAcStateLength] = {
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30,
0x81, 0x01, 0x31, 0x00, 0x00, 0x00, 0x20, 0xFD};
EXPECT_TRUE(ArraysMatch(expected_default_arrah2e, fujitsu.getRaw()));
@@ -152,11 +152,11 @@ TEST(TestIRFujitsuACClass, SetRaw) {
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
// Now set a new state via setRaw();
// This state is a real state from an AR-DB1 remote.
uint8_t new_state1[FUJITSU_AC_STATE_LENGTH - 1] = {
uint8_t new_state1[kFujitsuAcStateLength - 1] = {
0x14, 0x63, 0x00, 0x10, 0x10, 0xFC, 0x08, 0x30,
0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x9F};
fujitsu.setRaw(new_state1, FUJITSU_AC_STATE_LENGTH - 1);
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH - 1, fujitsu.getStateLength());
fujitsu.setRaw(new_state1, kFujitsuAcStateLength - 1);
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
EXPECT_TRUE(ArraysMatch(new_state1, fujitsu.getRaw()));
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 19C, Fan: 0 (AUTO), "
"Swing: Off, Command: N/A", fujitsu.toString());
@@ -168,36 +168,39 @@ TEST(TestSendFujitsuAC, GenerateMessage) {
fujitsu.begin();
irsend.begin();
fujitsu.setCmd(FUJITSU_AC_CMD_STAY_ON);
fujitsu.setSwing(FUJITSU_AC_SWING_BOTH);
fujitsu.setMode(FUJITSU_AC_MODE_COOL);
fujitsu.setFanSpeed(FUJITSU_AC_FAN_HIGH);
fujitsu.setCmd(kFujitsuAcCmdStayOn);
fujitsu.setSwing(kFujitsuAcSwingBoth);
fujitsu.setMode(kFujitsuAcModeCool);
fujitsu.setFanSpeed(kFujitsuAcFanHigh);
fujitsu.setTemp(24);
EXPECT_EQ(FUJITSU_AC_FAN_HIGH, fujitsu.getFanSpeed());
EXPECT_EQ(FUJITSU_AC_MODE_COOL, fujitsu.getMode());
EXPECT_EQ(kFujitsuAcFanHigh, fujitsu.getFanSpeed());
EXPECT_EQ(kFujitsuAcModeCool, fujitsu.getMode());
EXPECT_EQ(24, fujitsu.getTemp());
EXPECT_EQ(FUJITSU_AC_SWING_BOTH, fujitsu.getSwing());
EXPECT_EQ(FUJITSU_AC_CMD_STAY_ON, fujitsu.getCmd());
EXPECT_EQ(kFujitsuAcSwingBoth, fujitsu.getSwing());
EXPECT_EQ(kFujitsuAcCmdStayOn, fujitsu.getCmd());
irsend.reset();
irsend.sendFujitsuAC(fujitsu.getRaw(), FUJITSU_AC_STATE_LENGTH);
irsend.sendFujitsuAC(fujitsu.getRaw(), kFujitsuAcStateLength);
EXPECT_EQ(
"m3324s1574m448s390m448s390m448s1182m448s390m448s1182m448s390m448s390m448"
"s390m448s1182m448s1182m448s390m448s390m448s390m448s1182m448s1182m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s1182m448s390m448s390m448s390m448s390m448s1182"
"m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s390"
"m448s390m448s1182m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s1182m448s1182m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s1182m448s1182m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390m448s1182m448"
"s1182m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390m448"
"s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s8100",
"m3324s1574"
"m448s390m448s390m448s1182m448s390m448s1182m448s390m448s390m448s390"
"m448s1182m448s1182m448s390m448s390m448s390m448s1182m448s1182m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390"
"m448s390m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182"
"m448s1182m448s390m448s390m448s1182m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s1182m448s1182m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s1182"
"m448s1182m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s1182m448s390m448s390m448s390m448s1182m448s1182m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s1182m448s390m448s390"
"m448s390m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182"
"m448s8100",
irsend.outputStr());
}
@@ -209,10 +212,10 @@ TEST(TestSendFujitsuAC, GenerateShortMessage) {
fujitsu.off();
EXPECT_EQ(FUJITSU_AC_CMD_TURN_OFF, fujitsu.getCmd());
EXPECT_EQ(kFujitsuAcCmdTurnOff, fujitsu.getCmd());
irsend.reset();
irsend.sendFujitsuAC(fujitsu.getRaw(), FUJITSU_AC_STATE_LENGTH_SHORT);
irsend.sendFujitsuAC(fujitsu.getRaw(), kFujitsuAcStateLengthShort);
EXPECT_EQ(
"m3324s1574m448s390m448s390m448s1182m448s390m448s1182m448s390m448s390m448"
"s390m448s1182m448s1182m448s390m448s390m448s390m448s1182m448s1182m448s390"
@@ -232,8 +235,8 @@ TEST(TestSendFujitsuAC, Issue275) {
irsend.begin();
irsend.reset();
fujitsu.setCmd(FUJITSU_AC_CMD_TURN_OFF);
irsend.sendFujitsuAC(fujitsu.getRaw(), FUJITSU_AC_STATE_LENGTH_SHORT);
fujitsu.setCmd(kFujitsuAcCmdTurnOff);
irsend.sendFujitsuAC(fujitsu.getRaw(), kFujitsuAcStateLengthShort);
EXPECT_EQ(
// Header
"m3324s1574"
@@ -299,24 +302,24 @@ TEST(TestDecodeFujitsuAC, SyntheticShortMessages) {
irsend.reset();
fujitsu.setModel(ARRAH2E);
fujitsu.setCmd(FUJITSU_AC_CMD_TURN_OFF);
fujitsu.setCmd(kFujitsuAcCmdTurnOff);
irsend.sendFujitsuAC(fujitsu.getRaw(), fujitsu.getStateLength());
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
ASSERT_EQ(FUJITSU_AC_MIN_BITS + 8, irsend.capture.bits);
ASSERT_EQ(kFujitsuAcMinBits + 8, irsend.capture.bits);
uint8_t expected_arrah2e[7] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02, 0xFD};
EXPECT_TRUE(ArraysMatch(expected_arrah2e, irsend.capture.state));
irsend.reset();
fujitsu.setModel(ARDB1);
fujitsu.setCmd(FUJITSU_AC_CMD_TURN_OFF);
fujitsu.setCmd(kFujitsuAcCmdTurnOff);
irsend.sendFujitsuAC(fujitsu.getRaw(), fujitsu.getStateLength());
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
ASSERT_EQ(FUJITSU_AC_MIN_BITS, irsend.capture.bits);
ASSERT_EQ(kFujitsuAcMinBits, irsend.capture.bits);
uint8_t expected_ardb1[6] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02};
EXPECT_TRUE(ArraysMatch(expected_ardb1, irsend.capture.state));
}
@@ -330,23 +333,23 @@ TEST(TestDecodeFujitsuAC, SyntheticLongMessages) {
irsend.reset();
fujitsu.setModel(ARRAH2E);
fujitsu.setCmd(FUJITSU_AC_CMD_STAY_ON);
fujitsu.setSwing(FUJITSU_AC_SWING_VERT);
fujitsu.setMode(FUJITSU_AC_MODE_COOL);
fujitsu.setFanSpeed(FUJITSU_AC_FAN_QUIET);
fujitsu.setCmd(kFujitsuAcCmdStayOn);
fujitsu.setSwing(kFujitsuAcSwingVert);
fujitsu.setMode(kFujitsuAcModeCool);
fujitsu.setFanSpeed(kFujitsuAcFanQuiet);
fujitsu.setTemp(18);
irsend.sendFujitsuAC(fujitsu.getRaw(), fujitsu.getStateLength());
ASSERT_EQ(FUJITSU_AC_STATE_LENGTH, fujitsu.getStateLength());
ASSERT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeFujitsuAC(&irsend.capture));
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
ASSERT_EQ(FUJITSU_AC_BITS, irsend.capture.bits);
uint8_t expected_arrah2e[FUJITSU_AC_STATE_LENGTH] = {
ASSERT_EQ(kFujitsuAcBits, irsend.capture.bits);
uint8_t expected_arrah2e[kFujitsuAcStateLength] = {
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30,
0x20, 0x01, 0x14, 0x00, 0x00, 0x00, 0x20, 0x7B};
EXPECT_TRUE(ArraysMatch(expected_arrah2e, irsend.capture.state));
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 18C, Fan: 4 (QUIET), "
"Swing: Vert, Command: N/A", fujitsu.toString());
@@ -357,13 +360,13 @@ TEST(TestDecodeFujitsuAC, SyntheticLongMessages) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
ASSERT_EQ(FUJITSU_AC_BITS - 8, irsend.capture.bits);
uint8_t expected_ardb1[FUJITSU_AC_STATE_LENGTH - 1] = {
ASSERT_EQ(kFujitsuAcBits - 8, irsend.capture.bits);
uint8_t expected_ardb1[kFujitsuAcStateLength - 1] = {
0x14, 0x63, 0x00, 0x10, 0x10, 0xFC, 0x08, 0x30,
0x20, 0x01, 0x14, 0x00, 0x00, 0x00, 0x9B};
EXPECT_TRUE(ArraysMatch(expected_ardb1, irsend.capture.state));
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH - 1, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 18C, Fan: 4 (QUIET), "
"Swing: Vert, Command: N/A", fujitsu.toString());
}
@@ -391,11 +394,11 @@ TEST(TestDecodeFujitsuAC, RealShortARDB1OffExample) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
ASSERT_EQ(FUJITSU_AC_MIN_BITS, irsend.capture.bits);
ASSERT_EQ(kFujitsuAcMinBits, irsend.capture.bits);
uint8_t expected[6] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02};
EXPECT_TRUE(ArraysMatch(expected, irsend.capture.state));
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH_SHORT - 1, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLengthShort - 1, fujitsu.getStateLength());
EXPECT_EQ("Power: Off, Mode: 0 (AUTO), Temp: 16C, Fan: 0 (AUTO), "
"Swing: Off, Command: N/A", fujitsu.toString());
}
@@ -433,13 +436,13 @@ TEST(TestDecodeFujitsuAC, RealLongARDB1Example) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
ASSERT_EQ(FUJITSU_AC_BITS - 8, irsend.capture.bits);
uint8_t expected1[FUJITSU_AC_STATE_LENGTH - 1] = {
ASSERT_EQ(kFujitsuAcBits - 8, irsend.capture.bits);
uint8_t expected1[kFujitsuAcStateLength - 1] = {
0x14, 0x63, 0x00, 0x10, 0x10, 0xFC, 0x08, 0x30,
0x21, 0x01, 0x04, 0x00, 0x00, 0x00, 0xAA};
EXPECT_TRUE(ArraysMatch(expected1, irsend.capture.state));
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH - 1, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 18C, Fan: 4 (QUIET), "
"Swing: Off, Command: N/A", fujitsu.toString());
@@ -470,13 +473,13 @@ TEST(TestDecodeFujitsuAC, RealLongARDB1Example) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
ASSERT_EQ(FUJITSU_AC_BITS - 8, irsend.capture.bits);
uint8_t expected2[FUJITSU_AC_STATE_LENGTH - 1] = {
ASSERT_EQ(kFujitsuAcBits - 8, irsend.capture.bits);
uint8_t expected2[kFujitsuAcStateLength - 1] = {
0x14, 0x63, 0x00, 0x10, 0x10, 0xFC, 0x08, 0x30,
0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x9F};
EXPECT_TRUE(ArraysMatch(expected2, irsend.capture.state));
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH - 1, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 19C, Fan: 0 (AUTO), "
"Swing: Off, Command: N/A", fujitsu.toString());
}
@@ -515,10 +518,10 @@ TEST(TestDecodeFujitsuAC, Issue414) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
ASSERT_EQ(FUJITSU_AC_BITS, irsend.capture.bits);
ASSERT_EQ(kFujitsuAcBits, irsend.capture.bits);
EXPECT_TRUE(ArraysMatch(state, irsend.capture.state));
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH, fujitsu.getStateLength());
EXPECT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 4 (HEAT), Temp: 24C, Fan: 0 (AUTO), "
"Swing: Off, Command: N/A", fujitsu.toString());
@@ -528,7 +531,7 @@ TEST(TestDecodeFujitsuAC, Issue414) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
ASSERT_EQ(FUJITSU_AC_BITS, irsend.capture.bits);
ASSERT_EQ(kFujitsuAcBits, irsend.capture.bits);
EXPECT_TRUE(ArraysMatch(state, irsend.capture.state));
EXPECT_EQ(
"m3324s1574"
+34 -25
View File
@@ -16,21 +16,24 @@ TEST(TestSendGICable, SendDataOnly) {
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200"
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200"
"m550s41650"
"m9000s2200m550s87850", irsend.outputStr());
"m9000s2200m550s87850",
irsend.outputStr());
irsend.sendGICable(0x8807);
EXPECT_EQ(
"m9000s4400"
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
"m550s30650"
"m9000s2200m550s87850", irsend.outputStr());
"m9000s2200m550s87850",
irsend.outputStr());
irsend.sendGICable(0xFFFF);
EXPECT_EQ(
"m9000s4400"
"m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400"
"m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400"
"m550s6450"
"m9000s2200m550s87850", irsend.outputStr());
"m9000s2200m550s87850",
irsend.outputStr());
}
// Test sending with repeats.
@@ -38,22 +41,24 @@ TEST(TestSendGICable, SendWithRepeats) {
IRsendTest irsend(0);
irsend.begin();
// Send a command with 0 repeats.
irsend.sendGICable(0x8807, GICABLE_BITS, 0);
irsend.sendGICable(0x8807, kGicableBits, 0);
EXPECT_EQ(
"m9000s4400"
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
"m550s30650", irsend.outputStr());
"m550s30650",
irsend.outputStr());
// Send a command with 1 repeat.
irsend.sendGICable(0x8807, GICABLE_BITS, 1);
irsend.sendGICable(0x8807, kGicableBits, 1);
EXPECT_EQ(
"m9000s4400"
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
"m550s30650"
"m9000s2200m550s87850", irsend.outputStr());
"m9000s2200m550s87850",
irsend.outputStr());
// Send a command with 3 repeats.
irsend.sendGICable(0x8807, GICABLE_BITS, 3);
irsend.sendGICable(0x8807, kGicableBits, 3);
EXPECT_EQ(
"m9000s4400"
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
@@ -61,7 +66,8 @@ TEST(TestSendGICable, SendWithRepeats) {
"m550s30650"
"m9000s2200m550s87850"
"m9000s2200m550s87850"
"m9000s2200m550s87850", irsend.outputStr());
"m9000s2200m550s87850",
irsend.outputStr());
}
// Tests for decodeGICable().
@@ -77,7 +83,7 @@ TEST(TestDecodeGICable, SyntheticDecode) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(GICABLE, irsend.capture.decode_type);
EXPECT_EQ(GICABLE_BITS, irsend.capture.bits);
EXPECT_EQ(kGicableBits, irsend.capture.bits);
EXPECT_EQ(0x8807, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -91,16 +97,17 @@ TEST(TestDecodeGICable, RealExampleDecodeOK) {
// Real GICable "OK/Select" message.
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/447
uint16_t rawData[39] = {
9064, 4408, 580, 4408, 580, 2152, 578, 2150, 580, 2150, 580, 4408, 580,
2150, 580, 2150, 580, 2150, 580, 2150, 580, 2150, 580, 2150, 580, 2150,
580, 2150, 580, 4408, 580, 4408, 580, 4408, 580, 30622, 9066, 2148, 580};
uint16_t rawData[39] = {9064, 4408, 580, 4408, 580, 2152, 578, 2150,
580, 2150, 580, 4408, 580, 2150, 580, 2150,
580, 2150, 580, 2150, 580, 2150, 580, 2150,
580, 2150, 580, 2150, 580, 4408, 580, 4408,
580, 4408, 580, 30622, 9066, 2148, 580};
irsend.reset();
irsend.sendRaw(rawData, 39, 39);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(GICABLE, irsend.capture.decode_type);
EXPECT_EQ(GICABLE_BITS, irsend.capture.bits);
EXPECT_EQ(kGicableBits, irsend.capture.bits);
EXPECT_EQ(0x8807, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -113,16 +120,17 @@ TEST(TestDecodeGICable, RealExampleDecodeLEFT) {
// Real GICable "LEFT" message.
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/447
uint16_t rawData[39] = {
9040, 4434, 554, 2176, 580, 4408, 554, 4434, 582, 2148, 554, 4434, 580,
4408, 556, 2174, 580, 2150, 580, 2150, 582, 2148, 556, 2176, 580, 2150,
580, 4408, 580, 4408, 580, 4408, 582, 2150, 580, 26078, 9066, 2148, 580};
uint16_t rawData[39] = {9040, 4434, 554, 2176, 580, 4408, 554, 4434,
582, 2148, 554, 4434, 580, 4408, 556, 2174,
580, 2150, 580, 2150, 582, 2148, 556, 2176,
580, 2150, 580, 4408, 580, 4408, 580, 4408,
582, 2150, 580, 26078, 9066, 2148, 580};
irsend.reset();
irsend.sendRaw(rawData, 39, 39);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(GICABLE, irsend.capture.decode_type);
EXPECT_EQ(GICABLE_BITS, irsend.capture.bits);
EXPECT_EQ(kGicableBits, irsend.capture.bits);
EXPECT_EQ(0x6C0E, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -136,16 +144,17 @@ TEST(TestDecodeGICable, RealExampleDecodeZEROKey) {
// Real GICable "Zero Key" message.
// Note: Zero key looks similar to a JVC message, hence this test.
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/447
uint16_t rawData[39] = {
9036, 4434, 552, 2178, 552, 2178, 552, 2180, 550, 2178, 552, 2178, 550,
2180, 552, 2178, 552, 2178, 550, 2180, 552, 2178, 526, 2204, 552, 2178,
552, 2178, 526, 2204, 526, 2204, 526, 2204, 526, 41932, 9036, 2176, 552};
uint16_t rawData[39] = {9036, 4434, 552, 2178, 552, 2178, 552, 2180,
550, 2178, 552, 2178, 550, 2180, 552, 2178,
552, 2178, 550, 2180, 552, 2178, 526, 2204,
552, 2178, 552, 2178, 526, 2204, 526, 2204,
526, 2204, 526, 41932, 9036, 2176, 552};
irsend.reset();
irsend.sendRaw(rawData, 39, 39);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(GICABLE, irsend.capture.decode_type);
EXPECT_EQ(GICABLE_BITS, irsend.capture.bits);
EXPECT_EQ(kGicableBits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -13,27 +13,28 @@ TEST(TestSendGlobalCache, NonRepeatingCode) {
irsend.begin();
irsend.reset();
// Modified NEC TV "Power On" from Global Cache with no repeats
uint16_t gc_test[71] = {38000, 1, 1, 342, 172, 21, 22, 21, 21, 21, 65, 21, 21,
21, 22, 21, 22, 21, 21, 21, 22, 21, 65, 21, 65, 21,
22, 21, 65, 21, 65, 21, 65, 21, 65, 21, 65, 21, 65,
21, 22, 21, 22, 21, 21, 21, 22, 21, 22, 21, 65, 21,
22, 21, 21, 21, 65, 21, 65, 21, 65, 21, 64, 22, 65,
21, 22, 21, 65, 21, 1519};
// Modified NEC TV "Power On" from Global Cache with no repeats
uint16_t gc_test[71] = {38000, 1, 1, 342, 172, 21, 22, 21, 21, 21, 65, 21,
21, 21, 22, 21, 22, 21, 21, 21, 22, 21, 65, 21,
65, 21, 22, 21, 65, 21, 65, 21, 65, 21, 65, 21,
65, 21, 65, 21, 22, 21, 22, 21, 21, 21, 22, 21,
22, 21, 65, 21, 22, 21, 21, 21, 65, 21, 65, 21,
65, 21, 64, 22, 65, 21, 22, 21, 65, 21, 1519};
irsend.sendGC(gc_test, 71);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x20DF827D, irsend.capture.value);
EXPECT_EQ(0x4, irsend.capture.address);
EXPECT_EQ(0x41, irsend.capture.command);
EXPECT_EQ("m8892s4472m546s572m546s546m546s1690m546s546m546s572m546s572"
"m546s546m546s572m546s1690m546s1690m546s572m546s1690m546s1690"
"m546s1690m546s1690m546s1690m546s1690m546s572m546s572m546s546"
"m546s572m546s572m546s1690m546s572m546s546m546s1690m546s1690"
"m546s1690m546s1664m572s1690m546s572m546s1690m546s39494",
irsend.outputStr());
EXPECT_EQ(
"m8892s4472m546s572m546s546m546s1690m546s546m546s572m546s572"
"m546s546m546s572m546s1690m546s1690m546s572m546s1690m546s1690"
"m546s1690m546s1690m546s1690m546s1690m546s572m546s572m546s546"
"m546s572m546s572m546s1690m546s572m546s546m546s1690m546s1690"
"m546s1690m546s1664m572s1690m546s572m546s1690m546s39494",
irsend.outputStr());
}
// Test sending typical command with repeats.
@@ -43,26 +44,28 @@ TEST(TestSendGlobalCache, RepeatCode) {
irsend.begin();
irsend.reset();
// Sherwood (NEC-like) "Power On" from Global Cache with 2 repeats
uint16_t gc_test[75] = {38000, 2, 69, 341, 171, 21, 64, 21, 64, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 64, 21, 64, 21, 21,
21, 64, 21, 21, 21, 21, 21, 21, 21, 64, 21, 21, 21,
64, 21, 21, 21, 21, 21, 21, 21, 64, 21, 21, 21, 21,
21, 21, 21, 21, 21, 64, 21, 64, 21, 64, 21, 21, 21,
64, 21, 64, 21, 64, 21, 1600, 341, 85, 21, 3647};
// Sherwood (NEC-like) "Power On" from Global Cache with 2 repeats
uint16_t gc_test[75] = {
38000, 2, 69, 341, 171, 21, 64, 21, 64, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 64, 21, 64, 21, 21, 21, 64, 21, 21, 21,
21, 21, 21, 21, 64, 21, 21, 21, 64, 21, 21, 21, 21, 21, 21,
21, 64, 21, 21, 21, 21, 21, 21, 21, 21, 21, 64, 21, 64, 21,
64, 21, 21, 21, 64, 21, 64, 21, 64, 21, 1600, 341, 85, 21, 3647};
irsend.sendGC(gc_test, 75);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0xC1A28877, irsend.capture.value);
EXPECT_EQ(0x4583, irsend.capture.address);
EXPECT_EQ(0x11, irsend.capture.command);
EXPECT_EQ("m8866s4446m546s1664m546s1664m546s546m546s546m546s546m546s546"
"m546s546m546s1664m546s1664m546s546m546s1664m546s546m546s546"
"m546s546m546s1664m546s546m546s1664m546s546m546s546m546s546"
"m546s1664m546s546m546s546m546s546m546s546m546s1664m546s1664"
"m546s1664m546s546m546s1664m546s1664m546s1664m546s41600"
"m8866s2210m546s94822"
"m8866s2210m546s94822", irsend.outputStr());
EXPECT_EQ(
"m8866s4446m546s1664m546s1664m546s546m546s546m546s546m546s546"
"m546s546m546s1664m546s1664m546s546m546s1664m546s546m546s546"
"m546s546m546s1664m546s546m546s1664m546s546m546s546m546s546"
"m546s1664m546s546m546s546m546s546m546s546m546s1664m546s1664"
"m546s1664m546s546m546s1664m546s1664m546s1664m546s41600"
"m8866s2210m546s94822"
"m8866s2210m546s94822",
irsend.outputStr());
}
+184 -173
View File
@@ -1,11 +1,11 @@
// Copyright 2017 David Conran
#include "IRremoteESP8266.h"
#include "ir_Gree.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRremoteESP8266.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Gree.h"
#include "gtest/gtest.h"
// Tests for sendGree().
@@ -15,8 +15,8 @@ TEST(TestSendGreeChars, SendData) {
IRsendTest irsend(4);
irsend.begin();
uint8_t gree_code[GREE_STATE_LENGTH] = {
0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
uint8_t gree_code[kGreeStateLength] = {0x12, 0x34, 0x56, 0x78,
0x90, 0xAB, 0xCD, 0xEF};
irsend.reset();
irsend.sendGree(gree_code);
EXPECT_EQ(
@@ -31,7 +31,8 @@ TEST(TestSendGreeChars, SendData) {
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s19000", irsend.outputStr());
"m620s19000",
irsend.outputStr());
}
TEST(TestSendGreeUint64, SendData) {
@@ -52,7 +53,8 @@ TEST(TestSendGreeUint64, SendData) {
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s19000", irsend.outputStr());
"m620s19000",
irsend.outputStr());
}
// Test sending with repeats.
@@ -61,36 +63,37 @@ TEST(TestSendGreeChars, SendWithRepeats) {
irsend.begin();
irsend.reset();
uint8_t gree_code[GREE_STATE_LENGTH] = {
0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
uint8_t gree_code[kGreeStateLength] = {0x12, 0x34, 0x56, 0x78,
0x90, 0xAB, 0xCD, 0xEF};
irsend.reset();
irsend.sendGree(gree_code, GREE_STATE_LENGTH, 1);
irsend.sendGree(gree_code, kGreeStateLength, 1);
EXPECT_EQ(
"m9000s4000"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
"m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
"m620s540m620s1600m620s540"
"m620s19000"
"m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s19000"
"m9000s4000"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
"m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
"m620s540m620s1600m620s540"
"m620s19000"
"m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s19000", irsend.outputStr());
"m9000s4000"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
"m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
"m620s540m620s1600m620s540"
"m620s19000"
"m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s19000"
"m9000s4000"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
"m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
"m620s540m620s1600m620s540"
"m620s19000"
"m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s19000",
irsend.outputStr());
}
TEST(TestSendGreeUint64, SendWithRepeats) {
@@ -98,32 +101,33 @@ TEST(TestSendGreeUint64, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendGree(0x1234567890ABCDEF, GREE_BITS, 1);
irsend.sendGree(0x1234567890ABCDEF, kGreeBits, 1);
EXPECT_EQ(
"m9000s4000"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
"m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
"m620s540m620s1600m620s540"
"m620s19000"
"m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s19000"
"m9000s4000"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
"m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
"m620s540m620s1600m620s540"
"m620s19000"
"m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s19000", irsend.outputStr());
"m9000s4000"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
"m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
"m620s540m620s1600m620s540"
"m620s19000"
"m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s19000"
"m9000s4000"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
"m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
"m620s540m620s1600m620s540"
"m620s19000"
"m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s19000",
irsend.outputStr());
}
// Test sending atypical sizes.
@@ -131,30 +135,31 @@ TEST(TestSendGreeChars, SendUnexpectedSizes) {
IRsendTest irsend(4);
irsend.begin();
uint8_t gree_short_code[GREE_STATE_LENGTH - 1] = {
0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD};
uint8_t gree_long_code[GREE_STATE_LENGTH + 1] = {
0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12};
uint8_t gree_short_code[kGreeStateLength - 1] = {0x12, 0x34, 0x56, 0x78,
0x90, 0xAB, 0xCD};
uint8_t gree_long_code[kGreeStateLength + 1] = {0x12, 0x34, 0x56, 0x78, 0x90,
0xAB, 0xCD, 0xEF, 0x12};
irsend.reset();
irsend.sendGree(gree_short_code, GREE_STATE_LENGTH - 1);
irsend.sendGree(gree_short_code, kGreeStateLength - 1);
ASSERT_EQ("", irsend.outputStr());
irsend.reset();
irsend.sendGree(gree_long_code, GREE_STATE_LENGTH + 1);
irsend.sendGree(gree_long_code, kGreeStateLength + 1);
ASSERT_EQ(
"m9000s4000"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
"m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
"m620s540m620s1600m620s540"
"m620s19000"
"m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s19000", irsend.outputStr());
"m9000s4000"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
"m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
"m620s540m620s1600m620s540"
"m620s19000"
"m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
"m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
"m620s19000",
irsend.outputStr());
}
TEST(TestSendGreeUint64, SendUnexpectedSizes) {
@@ -162,11 +167,11 @@ TEST(TestSendGreeUint64, SendUnexpectedSizes) {
irsend.begin();
irsend.reset();
irsend.sendGree(0x1234567890ABCDEF, GREE_BITS - 1);
irsend.sendGree(0x1234567890ABCDEF, kGreeBits - 1);
ASSERT_EQ("", irsend.outputStr());
irsend.reset();
irsend.sendGree(0x1234567890ABCDEF, GREE_BITS + 1);
irsend.sendGree(0x1234567890ABCDEF, kGreeBits + 1);
ASSERT_EQ("", irsend.outputStr());
}
@@ -174,8 +179,8 @@ TEST(TestSendGree, CompareUint64ToCharResults) {
IRsendTest irsend_chars(4);
IRsendTest irsend_uint64(0);
uint8_t gree_code[GREE_STATE_LENGTH] = {
0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
uint8_t gree_code[kGreeStateLength] = {0x12, 0x34, 0x56, 0x78,
0x90, 0xAB, 0xCD, 0xEF};
irsend_chars.begin();
irsend_uint64.begin();
@@ -186,12 +191,12 @@ TEST(TestSendGree, CompareUint64ToCharResults) {
irsend_uint64.sendGree(0x1234567890ABCDEF);
ASSERT_EQ(irsend_chars.outputStr(), irsend_uint64.outputStr());
uint8_t gree_zero_code[GREE_STATE_LENGTH] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
uint8_t gree_zero_code[kGreeStateLength] = {0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00};
irsend_chars.reset();
irsend_uint64.reset();
irsend_chars.sendGree(gree_zero_code);
irsend_uint64.sendGree((uint64_t) 0x0);
irsend_uint64.sendGree((uint64_t)0x0);
ASSERT_EQ(irsend_chars.outputStr(), irsend_uint64.outputStr());
}
@@ -218,25 +223,25 @@ TEST(TestGreeClass, Temperature) {
IRGreeAC irgree(0);
irgree.begin();
irgree.setMode(GREE_COOL);
irgree.setMode(kGreeCool);
irgree.setTemp(0);
EXPECT_EQ(GREE_MIN_TEMP, irgree.getTemp());
EXPECT_EQ(kGreeMinTemp, irgree.getTemp());
irgree.setTemp(255);
EXPECT_EQ(GREE_MAX_TEMP, irgree.getTemp());
EXPECT_EQ(kGreeMaxTemp, irgree.getTemp());
irgree.setTemp(GREE_MIN_TEMP);
EXPECT_EQ(GREE_MIN_TEMP, irgree.getTemp());
irgree.setTemp(kGreeMinTemp);
EXPECT_EQ(kGreeMinTemp, irgree.getTemp());
irgree.setTemp(GREE_MAX_TEMP);
EXPECT_EQ(GREE_MAX_TEMP, irgree.getTemp());
irgree.setTemp(kGreeMaxTemp);
EXPECT_EQ(kGreeMaxTemp, irgree.getTemp());
irgree.setTemp(GREE_MIN_TEMP - 1);
EXPECT_EQ(GREE_MIN_TEMP, irgree.getTemp());
irgree.setTemp(kGreeMinTemp - 1);
EXPECT_EQ(kGreeMinTemp, irgree.getTemp());
irgree.setTemp(GREE_MAX_TEMP + 1);
EXPECT_EQ(GREE_MAX_TEMP, irgree.getTemp());
irgree.setTemp(kGreeMaxTemp + 1);
EXPECT_EQ(kGreeMaxTemp, irgree.getTemp());
irgree.setTemp(17);
EXPECT_EQ(17, irgree.getTemp());
@@ -256,34 +261,34 @@ TEST(TestGreeClass, OperatingMode) {
irgree.begin();
irgree.setTemp(17);
irgree.setMode(GREE_AUTO); // Auto should lock the temp to 25C.
EXPECT_EQ(GREE_AUTO, irgree.getMode());
irgree.setMode(kGreeAuto); // Auto should lock the temp to 25C.
EXPECT_EQ(kGreeAuto, irgree.getMode());
EXPECT_EQ(25, irgree.getTemp());
irgree.setTemp(17);
EXPECT_EQ(25, irgree.getTemp());
irgree.setMode(GREE_COOL);
EXPECT_EQ(GREE_COOL, irgree.getMode());
irgree.setMode(kGreeCool);
EXPECT_EQ(kGreeCool, irgree.getMode());
irgree.setMode(GREE_HEAT);
EXPECT_EQ(GREE_HEAT, irgree.getMode());
irgree.setMode(kGreeHeat);
EXPECT_EQ(kGreeHeat, irgree.getMode());
ASSERT_NE(GREE_FAN_MAX, 1);
irgree.setFan(GREE_FAN_MAX);
irgree.setMode(GREE_DRY); // Dry should lock the fan to speed 1.
EXPECT_EQ(GREE_DRY, irgree.getMode());
ASSERT_NE(kGreeFanMax, 1);
irgree.setFan(kGreeFanMax);
irgree.setMode(kGreeDry); // Dry should lock the fan to speed 1.
EXPECT_EQ(kGreeDry, irgree.getMode());
EXPECT_EQ(1, irgree.getFan());
irgree.setFan(GREE_FAN_MAX);
irgree.setFan(kGreeFanMax);
EXPECT_EQ(1, irgree.getFan());
irgree.setMode(GREE_FAN);
EXPECT_EQ(GREE_FAN, irgree.getMode());
irgree.setMode(kGreeFan);
EXPECT_EQ(kGreeFan, irgree.getMode());
irgree.setMode(GREE_HEAT + 1);
EXPECT_EQ(GREE_AUTO, irgree.getMode());
irgree.setMode(kGreeHeat + 1);
EXPECT_EQ(kGreeAuto, irgree.getMode());
irgree.setMode(255);
EXPECT_EQ(GREE_AUTO, irgree.getMode());
EXPECT_EQ(kGreeAuto, irgree.getMode());
}
TEST(TestGreeClass, Light) {
@@ -350,16 +355,16 @@ TEST(TestGreeClass, FanSpeed) {
EXPECT_EQ(0, irgree.getFan());
irgree.setFan(255);
EXPECT_EQ(GREE_FAN_MAX, irgree.getFan());
EXPECT_EQ(kGreeFanMax, irgree.getFan());
irgree.setFan(GREE_FAN_MAX);
EXPECT_EQ(GREE_FAN_MAX, irgree.getFan());
irgree.setFan(kGreeFanMax);
EXPECT_EQ(kGreeFanMax, irgree.getFan());
irgree.setFan(GREE_FAN_MAX + 1);
EXPECT_EQ(GREE_FAN_MAX, irgree.getFan());
irgree.setFan(kGreeFanMax + 1);
EXPECT_EQ(kGreeFanMax, irgree.getFan());
irgree.setFan(GREE_FAN_MAX - 1);
EXPECT_EQ(GREE_FAN_MAX - 1, irgree.getFan());
irgree.setFan(kGreeFanMax - 1);
EXPECT_EQ(kGreeFanMax - 1, irgree.getFan());
irgree.setFan(1);
EXPECT_EQ(1, irgree.getFan());
@@ -375,48 +380,48 @@ TEST(TestGreeClass, VerticalSwing) {
IRGreeAC irgree(0);
irgree.begin();
EXPECT_FALSE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_LAST_POS, irgree.getSwingVerticalPosition());
EXPECT_EQ(kGreeSwingLastPos, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(true, GREE_SWING_AUTO);
irgree.setSwingVertical(true, kGreeSwingAuto);
EXPECT_TRUE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_AUTO, irgree.getSwingVerticalPosition());
EXPECT_EQ(kGreeSwingAuto, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(false, GREE_SWING_MIDDLE);
irgree.setSwingVertical(false, kGreeSwingMiddle);
EXPECT_FALSE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_MIDDLE, irgree.getSwingVerticalPosition());
EXPECT_EQ(kGreeSwingMiddle, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(true, GREE_SWING_DOWN_AUTO);
irgree.setSwingVertical(true, kGreeSwingDownAuto);
EXPECT_TRUE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_DOWN_AUTO, irgree.getSwingVerticalPosition());
EXPECT_EQ(kGreeSwingDownAuto, irgree.getSwingVerticalPosition());
// Out of bounds.
irgree.setSwingVertical(false, 255);
EXPECT_FALSE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_LAST_POS, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(false, GREE_SWING_AUTO);
EXPECT_EQ(kGreeSwingLastPos, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(false, kGreeSwingAuto);
EXPECT_FALSE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_LAST_POS, irgree.getSwingVerticalPosition());
EXPECT_EQ(kGreeSwingLastPos, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(true, 255);
EXPECT_TRUE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_AUTO, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(true, GREE_SWING_DOWN);
EXPECT_EQ(kGreeSwingAuto, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(true, kGreeSwingDown);
EXPECT_TRUE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_AUTO, irgree.getSwingVerticalPosition());
EXPECT_EQ(kGreeSwingAuto, irgree.getSwingVerticalPosition());
}
TEST(TestGreeClass, SetAndGetRaw) {
IRGreeAC irgree(0);
uint8_t initialState[GREE_STATE_LENGTH] = {
0x00, 0x09, 0x20, 0x50, 0x00, 0x20, 0x00, 0x50};
uint8_t expectedState[GREE_STATE_LENGTH] = {
0xA9, 0x05, 0xD0, 0x50, 0x00, 0x20, 0x00, 0xA0};
uint8_t initialState[kGreeStateLength] = {0x00, 0x09, 0x20, 0x50,
0x00, 0x20, 0x00, 0x50};
uint8_t expectedState[kGreeStateLength] = {0xA9, 0x05, 0xD0, 0x50,
0x00, 0x20, 0x00, 0xA0};
EXPECT_STATE_EQ(initialState, irgree.getRaw(), GREE_BITS);
EXPECT_STATE_EQ(initialState, irgree.getRaw(), kGreeBits);
// toggle the power state.
irgree.setPower(!irgree.getPower());
irgree.setMode(GREE_COOL);
irgree.setMode(kGreeCool);
irgree.setTemp(21);
irgree.setFan(2);
irgree.setLight(false);
@@ -424,7 +429,7 @@ TEST(TestGreeClass, SetAndGetRaw) {
irgree.setSleep(true);
irgree.setXFan(true);
EXPECT_EQ(GREE_COOL, irgree.getMode());
EXPECT_EQ(kGreeCool, irgree.getMode());
EXPECT_EQ(21, irgree.getTemp());
EXPECT_EQ(2, irgree.getFan());
EXPECT_FALSE(irgree.getLight());
@@ -432,31 +437,33 @@ TEST(TestGreeClass, SetAndGetRaw) {
EXPECT_TRUE(irgree.getSleep());
EXPECT_TRUE(irgree.getXFan());
EXPECT_STATE_EQ(expectedState, irgree.getRaw(), GREE_BITS);
EXPECT_STATE_EQ(expectedState, irgree.getRaw(), kGreeBits);
irgree.setRaw(initialState);
EXPECT_STATE_EQ(initialState, irgree.getRaw(), GREE_BITS);
EXPECT_STATE_EQ(initialState, irgree.getRaw(), kGreeBits);
}
TEST(TestGreeClass, HumanReadable) {
IRGreeAC irgree(0);
EXPECT_EQ("Power: Off, Mode: 0 (AUTO), Temp: 25C, Fan: 0 (AUTO), Turbo: Off, "
"XFan: Off, Light: On, Sleep: Off, Swing Vertical Mode: Manual, "
"Swing Vertical Pos: 0 (Last Pos)",
irgree.toString());
EXPECT_EQ(
"Power: Off, Mode: 0 (AUTO), Temp: 25C, Fan: 0 (AUTO), Turbo: Off, "
"XFan: Off, Light: On, Sleep: Off, Swing Vertical Mode: Manual, "
"Swing Vertical Pos: 0 (Last Pos)",
irgree.toString());
irgree.on();
irgree.setMode(GREE_COOL);
irgree.setTemp(GREE_MIN_TEMP);
irgree.setFan(GREE_FAN_MAX);
irgree.setMode(kGreeCool);
irgree.setTemp(kGreeMinTemp);
irgree.setFan(kGreeFanMax);
irgree.setXFan(true);
irgree.setSleep(true);
irgree.setLight(false);
irgree.setTurbo(true);
irgree.setSwingVertical(true, GREE_SWING_AUTO);
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 3 (MAX), Turbo: On, "
"XFan: On, Light: Off, Sleep: On, Swing Vertical Mode: Auto, "
"Swing Vertical Pos: 1 (Auto)",
irgree.toString());
irgree.setSwingVertical(true, kGreeSwingAuto);
EXPECT_EQ(
"Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 3 (MAX), Turbo: On, "
"XFan: On, Light: Off, Sleep: On, Swing Vertical Mode: Auto, "
"Swing Vertical Pos: 1 (Auto)",
irgree.toString());
}
// Tests for decodeGree().
@@ -467,16 +474,16 @@ TEST(TestDecodeGree, NormalSynthetic) {
IRrecv irrecv(4);
irsend.begin();
uint8_t gree_code[GREE_STATE_LENGTH] = {
0x00, 0x09, 0x20, 0x50, 0x00, 0x20, 0x00, 0x50};
uint8_t gree_code[kGreeStateLength] = {0x00, 0x09, 0x20, 0x50,
0x00, 0x20, 0x00, 0x50};
irsend.reset();
irsend.sendGree(gree_code);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(GREE, irsend.capture.decode_type);
ASSERT_EQ(GREE_BITS, irsend.capture.bits);
EXPECT_STATE_EQ(gree_code, irsend.capture.state, GREE_BITS);
ASSERT_EQ(kGreeBits, irsend.capture.bits);
EXPECT_STATE_EQ(gree_code, irsend.capture.state, kGreeBits);
}
// Decode a synthetic Gree message.
@@ -486,31 +493,35 @@ TEST(TestDecodeGree, NormalRealExample) {
IRGreeAC irgree(4);
irsend.begin();
uint8_t gree_code[GREE_STATE_LENGTH] = {
0x19, 0x0A, 0x60, 0x50, 0x02, 0x23, 0x00, 0xF0};
uint8_t gree_code[kGreeStateLength] = {0x19, 0x0A, 0x60, 0x50,
0x02, 0x23, 0x00, 0xF0};
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/386
uint16_t rawData[139] = {
9008, 4496, 644, 1660, 676, 530, 648, 558, 672, 1636, 646, 1660, 644, 556,
650, 584, 626, 560, 644, 580, 628, 1680, 624, 560, 648, 1662, 644, 582,
648, 536, 674, 530, 646, 580, 628, 560, 670, 532, 646, 562, 644, 556, 672,
536, 648, 1662, 646, 1660, 652, 554, 644, 558, 672, 538, 644, 560, 668,
560, 648, 1638, 668, 536, 644, 1660, 668, 532, 648, 560, 648, 1660, 674,
554, 622, 19990, 646, 580, 624, 1660, 648, 556, 648, 558, 674, 556, 622,
560, 644, 564, 668, 536, 646, 1662, 646, 1658, 672, 534, 648, 558, 644,
562, 648, 1662, 644, 584, 622, 558, 648, 562, 668, 534, 670, 536, 670,
532, 672, 536, 646, 560, 646, 558, 648, 558, 670, 534, 650, 558, 646, 560,
646, 560, 668, 1638, 646, 1662, 646, 1660, 646, 1660, 648}; // Issue #386
9008, 4496, 644, 1660, 676, 530, 648, 558, 672, 1636, 646, 1660,
644, 556, 650, 584, 626, 560, 644, 580, 628, 1680, 624, 560,
648, 1662, 644, 582, 648, 536, 674, 530, 646, 580, 628, 560,
670, 532, 646, 562, 644, 556, 672, 536, 648, 1662, 646, 1660,
652, 554, 644, 558, 672, 538, 644, 560, 668, 560, 648, 1638,
668, 536, 644, 1660, 668, 532, 648, 560, 648, 1660, 674, 554,
622, 19990, 646, 580, 624, 1660, 648, 556, 648, 558, 674, 556,
622, 560, 644, 564, 668, 536, 646, 1662, 646, 1658, 672, 534,
648, 558, 644, 562, 648, 1662, 644, 584, 622, 558, 648, 562,
668, 534, 670, 536, 670, 532, 672, 536, 646, 560, 646, 558,
648, 558, 670, 534, 650, 558, 646, 560, 646, 560, 668, 1638,
646, 1662, 646, 1660, 646, 1660, 648}; // Issue #386
irsend.reset();
irsend.sendRaw(rawData, 139, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(GREE, irsend.capture.decode_type);
ASSERT_EQ(GREE_BITS, irsend.capture.bits);
EXPECT_STATE_EQ(gree_code, irsend.capture.state, GREE_BITS);
ASSERT_EQ(kGreeBits, irsend.capture.bits);
EXPECT_STATE_EQ(gree_code, irsend.capture.state, kGreeBits);
irgree.setRaw(irsend.capture.state);
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 26C, Fan: 1, Turbo: Off, "
"XFan: Off, Light: On, Sleep: Off, Swing Vertical Mode: Manual, "
"Swing Vertical Pos: 2", irgree.toString());
EXPECT_EQ(
"Power: On, Mode: 1 (COOL), Temp: 26C, Fan: 1, Turbo: Off, "
"XFan: Off, Light: On, Sleep: Off, Swing Vertical Mode: Manual, "
"Swing Vertical Pos: 2",
irgree.toString());
}
File diff suppressed because it is too large. Load diff
+502 -314
View File
@@ -1,8 +1,9 @@
// Copyright 2018 David Conran
#include "IRremoteESP8266.h"
#include "ir_Hitachi.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRremoteESP8266.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
@@ -14,10 +15,10 @@ TEST(TestSendHitachiAC, SendData) {
IRsendTest irsend(0);
irsend.begin();
uint8_t hitachi_code[HITACHI_AC_STATE_LENGTH] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80, 0x20, 0x04,
0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0xAC};
uint8_t hitachi_code[kHitachiAcStateLength] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80,
0x20, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xAC};
irsend.reset();
irsend.sendHitachiAC(hitachi_code);
EXPECT_EQ(
@@ -50,7 +51,8 @@ TEST(TestSendHitachiAC, SendData) {
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s1250m400s500m400s1250m400s1250m400s500m400s500"
"m400s100000", irsend.outputStr());
"m400s100000",
irsend.outputStr());
}
// Test sending with repeats.
@@ -58,74 +60,75 @@ TEST(TestSendHitachiAC, SendWithRepeats) {
IRsendTest irsend(0);
irsend.begin();
uint8_t hitachi_code[HITACHI_AC_STATE_LENGTH] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80, 0x20, 0x04,
0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0xAC};
uint8_t hitachi_code[kHitachiAcStateLength] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80,
0x20, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xAC};
irsend.reset();
irsend.sendHitachiAC(hitachi_code, HITACHI_AC_STATE_LENGTH, 1);
irsend.sendHitachiAC(hitachi_code, kHitachiAcStateLength, 1);
EXPECT_EQ(
"m3300s1700"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s1250m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s500m400s1250"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s1250m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s1250m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s1250m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s1250m400s500m400s1250m400s1250m400s500m400s500"
"m400s100000"
"m3300s1700"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s1250m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s500m400s1250"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s1250m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s1250m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s1250m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s1250m400s500m400s1250m400s1250m400s500m400s500"
"m400s100000", irsend.outputStr());
"m3300s1700"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s1250m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s500m400s1250"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s1250m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s1250m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s1250m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s1250m400s500m400s1250m400s1250m400s500m400s500"
"m400s100000"
"m3300s1700"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s1250m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s500m400s1250"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s1250m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s1250m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s1250m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s1250m400s500m400s1250m400s1250m400s500m400s500"
"m400s100000",
irsend.outputStr());
}
// Test sending atypical sizes.
@@ -133,52 +136,208 @@ TEST(TestSendHitachiAC, SendUnexpectedSizes) {
IRsendTest irsend(0);
irsend.begin();
uint8_t hitachi_short_code[HITACHI_AC_STATE_LENGTH - 1] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80, 0x20, 0x04,
0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00};
uint8_t hitachi_long_code[HITACHI_AC_STATE_LENGTH + 1] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80, 0x20, 0x04,
0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0xAC, 0xFF};
uint8_t hitachi_short_code[kHitachiAcStateLength - 1] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48,
0x80, 0x20, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00};
uint8_t hitachi_long_code[kHitachiAcStateLength + 1] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80,
0x20, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xAC, 0xFF};
irsend.reset();
irsend.sendHitachiAC(hitachi_short_code, HITACHI_AC_STATE_LENGTH - 1);
irsend.sendHitachiAC(hitachi_short_code, kHitachiAcStateLength - 1);
ASSERT_EQ("", irsend.outputStr());
irsend.reset();
irsend.sendHitachiAC(hitachi_long_code, HITACHI_AC_STATE_LENGTH + 1);
irsend.sendHitachiAC(hitachi_long_code, kHitachiAcStateLength + 1);
ASSERT_EQ(
"m3300s1700"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s1250m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s500m400s1250"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s1250m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s1250m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s1250m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s1250m400s500m400s1250m400s1250m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s100000", irsend.outputStr());
"m3300s1700"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s1250m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s500m400s1250"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s1250m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s1250m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s1250m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s1250m400s500m400s1250m400s1250m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s100000",
irsend.outputStr());
}
// Tests for IRHitachiAc class.
TEST(TestIRHitachiAcClass, SetAndGetPower) {
IRHitachiAc ac(0);
ac.on();
EXPECT_TRUE(ac.getPower());
ac.off();
EXPECT_FALSE(ac.getPower());
ac.setPower(true);
EXPECT_TRUE(ac.getPower());
ac.setPower(false);
EXPECT_FALSE(ac.getPower());
}
TEST(TestIRHitachiAcClass, SetAndGetSwing) {
IRHitachiAc ac(0);
ac.setSwingVertical(true);
ac.setSwingHorizontal(true);
EXPECT_TRUE(ac.getSwingVertical());
EXPECT_TRUE(ac.getSwingHorizontal());
ac.setSwingVertical(false);
EXPECT_FALSE(ac.getSwingVertical());
EXPECT_TRUE(ac.getSwingHorizontal());
ac.setSwingVertical(true);
EXPECT_TRUE(ac.getSwingVertical());
EXPECT_TRUE(ac.getSwingHorizontal());
ac.setSwingHorizontal(false);
EXPECT_TRUE(ac.getSwingVertical());
EXPECT_FALSE(ac.getSwingHorizontal());
ac.setSwingHorizontal(true);
EXPECT_TRUE(ac.getSwingHorizontal());
}
TEST(TestIRHitachiAcClass, SetAndGetTemp) {
IRHitachiAc ac(0);
ac.setTemp(25);
EXPECT_EQ(25, ac.getTemp());
ac.setTemp(kHitachiAcMinTemp);
EXPECT_EQ(kHitachiAcMinTemp, ac.getTemp());
ac.setTemp(kHitachiAcMinTemp - 1);
EXPECT_EQ(kHitachiAcMinTemp, ac.getTemp());
ac.setTemp(kHitachiAcMaxTemp);
EXPECT_EQ(kHitachiAcMaxTemp, ac.getTemp());
ac.setTemp(kHitachiAcMaxTemp + 1);
EXPECT_EQ(kHitachiAcMaxTemp, ac.getTemp());
ac.setTemp(64);
EXPECT_EQ(64, ac.getTemp());
}
TEST(TestIRHitachiAcClass, SetAndGetMode) {
IRHitachiAc ac(0);
ac.setMode(kHitachiAcCool);
ac.setFan(kHitachiAcFanAuto);
EXPECT_EQ(kHitachiAcCool, ac.getMode());
ac.setTemp(25);
EXPECT_EQ(25, ac.getTemp());
EXPECT_EQ(kHitachiAcFanAuto, ac.getFan());
ac.setMode(kHitachiAcFan);
EXPECT_EQ(kHitachiAcFan, ac.getMode());
EXPECT_EQ(64, ac.getTemp());
EXPECT_NE(kHitachiAcFanAuto, ac.getFan());
ac.setMode(kHitachiAcHeat);
EXPECT_EQ(25, ac.getTemp());
EXPECT_EQ(kHitachiAcHeat, ac.getMode());
ac.setMode(kHitachiAcAuto);
ac.setFan(kHitachiAcFanAuto);
EXPECT_EQ(kHitachiAcAuto, ac.getMode());
ac.setMode(kHitachiAcDry);
EXPECT_EQ(kHitachiAcDry, ac.getMode());
EXPECT_NE(kHitachiAcFanAuto, ac.getFan());
}
TEST(TestIRHitachiAcClass, SetAndGetFan) {
IRHitachiAc ac(0);
ac.setMode(kHitachiAcCool); // All fan options are available in this mode.
ac.setFan(kHitachiAcFanAuto);
EXPECT_EQ(kHitachiAcFanAuto, ac.getFan());
ac.setFan(kHitachiAcFanLow);
EXPECT_EQ(kHitachiAcFanLow, ac.getFan());
ac.setFan(kHitachiAcFanHigh);
EXPECT_EQ(kHitachiAcFanHigh, ac.getFan());
ac.setFan(kHitachiAcFanHigh + 1);
EXPECT_EQ(kHitachiAcFanHigh, ac.getFan());
ac.setFan(0);
EXPECT_EQ(kHitachiAcFanAuto, ac.getFan());
ac.setMode(kHitachiAcFan); // No auto-fan in Fan mode.
EXPECT_EQ(kHitachiAcFanLow, ac.getFan());
ac.setFan(kHitachiAcFanAuto);
EXPECT_EQ(kHitachiAcFanLow, ac.getFan());
ac.setFan(kHitachiAcFanHigh);
EXPECT_EQ(kHitachiAcFanHigh, ac.getFan());
// Only Low and one higher fan settin in Dry mode.
ac.setMode(kHitachiAcDry);
EXPECT_EQ(kHitachiAcFanLow + 1, ac.getFan());
ac.setFan(kHitachiAcFanHigh);
EXPECT_EQ(kHitachiAcFanLow + 1, ac.getFan());
ac.setFan(kHitachiAcFanLow);
EXPECT_EQ(kHitachiAcFanLow, ac.getFan());
ac.setFan(kHitachiAcFanAuto);
EXPECT_EQ(kHitachiAcFanLow, ac.getFan());
}
TEST(TestIRHitachiAcClass, HumanReadable) {
IRHitachiAc ac(0);
ac.setMode(kHitachiAcHeat);
ac.setTemp(kHitachiAcMaxTemp);
ac.on();
ac.setFan(kHitachiAcFanHigh);
ac.setSwingVertical(true);
EXPECT_EQ(
"Power: On, Mode: 3 (HEAT), Temp: 32C, Fan: 5 (HIGH), "
"Swing (Vertical): On, Swing (Horizontal): Off",
ac.toString());
ac.setMode(kHitachiAcCool);
ac.setTemp(kHitachiAcMinTemp);
ac.setFan(kHitachiAcFanLow);
ac.setSwingVertical(false);
ac.setSwingHorizontal(true);
EXPECT_EQ(
"Power: On, Mode: 4 (COOL), Temp: 16C, Fan: 2 (LOW), "
"Swing (Vertical): Off, Swing (Horizontal): On",
ac.toString());
}
TEST(TestIRHitachiAcClass, ChecksumCalculation) {
IRHitachiAc ac(0);
const uint8_t originalstate[kHitachiAcStateLength] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80,
0x20, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xAC};
uint8_t examplestate[kHitachiAcStateLength] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80,
0x20, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xAC};
EXPECT_TRUE(IRHitachiAc::validChecksum(examplestate));
EXPECT_EQ(0xAC, IRHitachiAc::calcChecksum(examplestate));
examplestate[kHitachiAcStateLength - 1] =
0x12; // Make the existing checksum invalid
EXPECT_FALSE(IRHitachiAc::validChecksum(examplestate));
EXPECT_EQ(0xAC, IRHitachiAc::calcChecksum(examplestate));
ac.setRaw(examplestate);
// Extracting the state from the object should have a correct checksum.
EXPECT_TRUE(IRHitachiAc::validChecksum(ac.getRaw()));
EXPECT_STATE_EQ(originalstate, ac.getRaw(), kHitachiAcBits);
examplestate[8] = 0x12; // Force a different checksum calc.
EXPECT_FALSE(IRHitachiAc::validChecksum(examplestate));
EXPECT_EQ(0xFF, IRHitachiAc::calcChecksum(examplestate));
}
// Tests for decodeHitachiAC().
@@ -189,18 +348,18 @@ TEST(TestDecodeHitachiAC, NormalSynthetic) {
IRrecv irrecv(0);
irsend.begin();
uint8_t hitachi_code[HITACHI_AC_STATE_LENGTH] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80, 0x20, 0x04,
0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0xAC};
uint8_t hitachi_code[kHitachiAcStateLength] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80,
0x20, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xAC};
irsend.reset();
irsend.sendHitachiAC(hitachi_code);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(HITACHI_AC, irsend.capture.decode_type);
ASSERT_EQ(HITACHI_AC_BITS, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, HITACHI_AC_BITS);
ASSERT_EQ(kHitachiAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, kHitachiAcBits);
}
// Decode a 'real' HitachiAC message.
@@ -209,54 +368,66 @@ TEST(TestDecodeHitachiAC, NormalRealExample1) {
IRrecv irrecv(0);
irsend.begin();
uint8_t hitachi_code[HITACHI_AC_STATE_LENGTH] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80, 0x20, 0x04,
0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0xAC};
uint8_t hitachi_code[kHitachiAcStateLength] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x80,
0x20, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xAC};
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/417
// 'On' '16c' 'auto fan' 'cooling mode'
uint16_t rawData[451] = {
3318, 1720, 400, 1276, 400, 432, 398, 434, 398, 434, 400, 432, 398, 432,
398, 432, 398, 434, 398, 432, 398, 434, 400, 432, 398, 434, 398, 1278,
398, 434, 398, 434, 396, 434, 398, 434, 398, 432, 398, 434, 398, 432, 398,
1276, 426, 1252, 424, 408, 424, 406, 424, 408, 426, 406, 398, 432, 398,
434, 398, 432, 400, 432, 398, 1276, 426, 408, 424, 1252, 426, 1252, 424,
1250, 426, 1252, 428, 1250, 426, 1252, 424, 406, 426, 1248, 428, 1252,
426, 406, 426, 406, 424, 408, 400, 432, 400, 430, 400, 432, 400, 430, 400,
432, 400, 1276, 400, 1276, 402, 1276, 400, 1276, 400, 1276, 400, 1278,
400, 1276, 402, 1276, 402, 428, 402, 430, 400, 430, 402, 1276, 400, 430,
402, 430, 400, 432, 402, 428, 402, 1278, 400, 430, 402, 430, 402, 1276,
402, 428, 402, 430, 402, 430, 400, 1276, 402, 430, 402, 430, 402, 430,
402, 430, 402, 428, 402, 430, 404, 430, 402, 428, 402, 430, 402, 1276,
402, 430, 402, 428, 402, 430, 400, 428, 402, 430, 402, 430, 402, 430, 402,
430, 402, 428, 402, 430, 402, 1274, 402, 428, 402, 430, 402, 430, 402,
430, 402, 430, 402, 428, 402, 428, 402, 428, 404, 428, 404, 428, 402,
1276, 400, 430, 402, 430, 400, 432, 400, 456, 374, 432, 400, 456, 404,
428, 404, 426, 404, 428, 402, 428, 402, 430, 402, 430, 400, 432, 398, 434,
376, 454, 378, 454, 380, 452, 378, 452, 404, 428, 406, 424, 432, 398, 406,
426, 430, 402, 404, 428, 428, 402, 400, 430, 400, 432, 398, 434, 398, 432,
398, 434, 372, 460, 374, 434, 398, 432, 398, 434, 396, 434, 376, 456, 376,
456, 376, 456, 376, 1300, 378, 454, 378, 452, 378, 454, 378, 454, 378,
454, 378, 452, 378, 454, 400, 432, 402, 430, 402, 430, 402, 430, 402, 428,
402, 430, 402, 430, 400, 430, 402, 430, 400, 432, 400, 430, 400, 432, 400,
430, 402, 430, 400, 432, 398, 432, 400, 430, 400, 432, 398, 432, 398, 434,
398, 432, 398, 432, 400, 434, 398, 432, 398, 432, 398, 434, 398, 434, 396,
434, 398, 434, 398, 432, 398, 434, 398, 432, 398, 456, 376, 454, 376, 436,
396, 454, 376, 454, 378, 454, 376, 454, 376, 456, 374, 458, 374, 1302,
374, 456, 374, 458, 374, 458, 376, 456, 374, 456, 374, 456, 374, 456, 376,
456, 376, 456, 374, 458, 374, 458, 374, 458, 372, 458, 372, 460, 374, 458,
372, 460, 372, 460, 372, 460, 370, 462, 372, 460, 372, 460, 370, 462, 370,
462, 356, 1320, 368, 464, 346, 1332, 356, 476, 368, 1310, 366, 1312, 366,
464, 366, 466, 366};
3318, 1720, 400, 1276, 400, 432, 398, 434, 398, 434, 400, 432,
398, 432, 398, 432, 398, 434, 398, 432, 398, 434, 400, 432,
398, 434, 398, 1278, 398, 434, 398, 434, 396, 434, 398, 434,
398, 432, 398, 434, 398, 432, 398, 1276, 426, 1252, 424, 408,
424, 406, 424, 408, 426, 406, 398, 432, 398, 434, 398, 432,
400, 432, 398, 1276, 426, 408, 424, 1252, 426, 1252, 424, 1250,
426, 1252, 428, 1250, 426, 1252, 424, 406, 426, 1248, 428, 1252,
426, 406, 426, 406, 424, 408, 400, 432, 400, 430, 400, 432,
400, 430, 400, 432, 400, 1276, 400, 1276, 402, 1276, 400, 1276,
400, 1276, 400, 1278, 400, 1276, 402, 1276, 402, 428, 402, 430,
400, 430, 402, 1276, 400, 430, 402, 430, 400, 432, 402, 428,
402, 1278, 400, 430, 402, 430, 402, 1276, 402, 428, 402, 430,
402, 430, 400, 1276, 402, 430, 402, 430, 402, 430, 402, 430,
402, 428, 402, 430, 404, 430, 402, 428, 402, 430, 402, 1276,
402, 430, 402, 428, 402, 430, 400, 428, 402, 430, 402, 430,
402, 430, 402, 430, 402, 428, 402, 430, 402, 1274, 402, 428,
402, 430, 402, 430, 402, 430, 402, 430, 402, 428, 402, 428,
402, 428, 404, 428, 404, 428, 402, 1276, 400, 430, 402, 430,
400, 432, 400, 456, 374, 432, 400, 456, 404, 428, 404, 426,
404, 428, 402, 428, 402, 430, 402, 430, 400, 432, 398, 434,
376, 454, 378, 454, 380, 452, 378, 452, 404, 428, 406, 424,
432, 398, 406, 426, 430, 402, 404, 428, 428, 402, 400, 430,
400, 432, 398, 434, 398, 432, 398, 434, 372, 460, 374, 434,
398, 432, 398, 434, 396, 434, 376, 456, 376, 456, 376, 456,
376, 1300, 378, 454, 378, 452, 378, 454, 378, 454, 378, 454,
378, 452, 378, 454, 400, 432, 402, 430, 402, 430, 402, 430,
402, 428, 402, 430, 402, 430, 400, 430, 402, 430, 400, 432,
400, 430, 400, 432, 400, 430, 402, 430, 400, 432, 398, 432,
400, 430, 400, 432, 398, 432, 398, 434, 398, 432, 398, 432,
400, 434, 398, 432, 398, 432, 398, 434, 398, 434, 396, 434,
398, 434, 398, 432, 398, 434, 398, 432, 398, 456, 376, 454,
376, 436, 396, 454, 376, 454, 378, 454, 376, 454, 376, 456,
374, 458, 374, 1302, 374, 456, 374, 458, 374, 458, 376, 456,
374, 456, 374, 456, 374, 456, 376, 456, 376, 456, 374, 458,
374, 458, 374, 458, 372, 458, 372, 460, 374, 458, 372, 460,
372, 460, 372, 460, 370, 462, 372, 460, 372, 460, 370, 462,
370, 462, 356, 1320, 368, 464, 346, 1332, 356, 476, 368, 1310,
366, 1312, 366, 464, 366, 466, 366};
irsend.reset();
irsend.sendRaw(rawData, 451, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeHitachiAC(&irsend.capture));
EXPECT_EQ(HITACHI_AC, irsend.capture.decode_type);
ASSERT_EQ(HITACHI_AC_BITS, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, HITACHI_AC_BITS);
ASSERT_EQ(kHitachiAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, kHitachiAcBits);
IRHitachiAc ac(0);
ac.setRaw(irsend.capture.state);
EXPECT_EQ(
"Power: On, Mode: 4 (COOL), Temp: 16C, Fan: 1 (AUTO), "
"Swing (Vertical): Off, Swing (Horizontal): Off",
ac.toString());
}
// Decode another 'real' HitachiAC message.
@@ -265,54 +436,66 @@ TEST(TestDecodeHitachiAC, NormalRealExample2) {
IRrecv irrecv(0);
irsend.begin();
uint8_t hitachi_code[HITACHI_AC_STATE_LENGTH] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x10, 0xC0, 0x02,
0x00, 0xA0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0xD0};
uint8_t hitachi_code[kHitachiAcStateLength] = {
0x80, 0x08, 0x0C, 0x02, 0xFD, 0x80, 0x7F, 0x88, 0x48, 0x10,
0xC0, 0x02, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xD0};
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/417
// 'On' '32c' 'auto fan' 'heating mode'
uint16_t rawData[451] = {
3322, 1718, 400, 1278, 398, 432, 402, 430, 400, 430, 402, 430, 402, 430,
400, 432, 400, 432, 402, 430, 400, 430, 402, 430, 400, 430, 402, 1276,
402, 430, 400, 430, 402, 430, 402, 430, 402, 428, 402, 430, 400, 430, 402,
1278, 400, 1274, 402, 430, 400, 432, 400, 430, 402, 430, 402, 430, 400,
430, 400, 432, 402, 428, 402, 1276, 404, 428, 402, 1276, 402, 1274, 402,
1274, 404, 1272, 402, 1274, 402, 1274, 404, 430, 402, 1274, 402, 1274,
402, 430, 402, 430, 402, 430, 400, 430, 402, 430, 404, 428, 402, 430, 400,
430, 402, 1274, 402, 1276, 402, 1276, 402, 1276, 400, 1276, 402, 1272,
404, 1274, 402, 1272, 404, 430, 402, 430, 402, 430, 402, 1274, 404, 428,
402, 428, 404, 430, 402, 430, 402, 1274, 402, 430, 402, 430, 402, 1274,
402, 430, 402, 430, 402, 428, 404, 428, 402, 430, 402, 430, 402, 1272,
406, 430, 402, 428, 402, 430, 402, 430, 400, 1276, 400, 1276, 402, 430,
402, 430, 402, 430, 402, 430, 402, 428, 402, 430, 402, 430, 402, 430, 402,
430, 402, 430, 402, 430, 400, 430, 402, 1272, 404, 430, 400, 430, 402,
430, 402, 428, 404, 430, 400, 430, 402, 430, 402, 430, 402, 428, 402,
1276, 402, 428, 402, 1276, 402, 430, 402, 428, 402, 430, 402, 430, 402,
430, 402, 428, 402, 430, 402, 430, 402, 430, 402, 430, 402, 428, 402, 428,
404, 430, 402, 428, 402, 430, 402, 428, 402, 430, 402, 432, 402, 428, 402,
430, 402, 430, 402, 430, 400, 430, 400, 430, 402, 430, 402, 430, 402, 426,
404, 430, 402, 430, 400, 428, 404, 428, 404, 432, 398, 432, 400, 456, 376,
456, 376, 456, 376, 1276, 402, 454, 378, 456, 376, 454, 378, 454, 402,
430, 376, 454, 376, 456, 400, 430, 378, 454, 400, 432, 402, 430, 376, 454,
376, 456, 376, 454, 400, 432, 374, 458, 400, 430, 398, 434, 374, 456, 374,
456, 374, 458, 374, 458, 374, 456, 352, 482, 372, 460, 374, 458, 364, 468,
352, 480, 372, 460, 352, 480, 352, 480, 352, 480, 352, 480, 352, 454, 400,
432, 376, 480, 374, 456, 374, 456, 378, 430, 404, 452, 376, 430, 404, 428,
406, 426, 406, 426, 404, 426, 406, 428, 406, 426, 430, 400, 430, 1244,
408, 424, 434, 398, 432, 400, 406, 424, 432, 400, 406, 426, 430, 400, 432,
400, 432, 400, 430, 402, 428, 402, 404, 428, 404, 426, 406, 426, 406, 426,
404, 428, 428, 402, 404, 428, 404, 428, 402, 428, 404, 428, 402, 428, 404,
428, 404, 1274, 402, 1274, 404, 428, 400, 1276, 402, 430, 402, 430, 402,
430, 402, 430, 400};
3322, 1718, 400, 1278, 398, 432, 402, 430, 400, 430, 402, 430,
402, 430, 400, 432, 400, 432, 402, 430, 400, 430, 402, 430,
400, 430, 402, 1276, 402, 430, 400, 430, 402, 430, 402, 430,
402, 428, 402, 430, 400, 430, 402, 1278, 400, 1274, 402, 430,
400, 432, 400, 430, 402, 430, 402, 430, 400, 430, 400, 432,
402, 428, 402, 1276, 404, 428, 402, 1276, 402, 1274, 402, 1274,
404, 1272, 402, 1274, 402, 1274, 404, 430, 402, 1274, 402, 1274,
402, 430, 402, 430, 402, 430, 400, 430, 402, 430, 404, 428,
402, 430, 400, 430, 402, 1274, 402, 1276, 402, 1276, 402, 1276,
400, 1276, 402, 1272, 404, 1274, 402, 1272, 404, 430, 402, 430,
402, 430, 402, 1274, 404, 428, 402, 428, 404, 430, 402, 430,
402, 1274, 402, 430, 402, 430, 402, 1274, 402, 430, 402, 430,
402, 428, 404, 428, 402, 430, 402, 430, 402, 1272, 406, 430,
402, 428, 402, 430, 402, 430, 400, 1276, 400, 1276, 402, 430,
402, 430, 402, 430, 402, 430, 402, 428, 402, 430, 402, 430,
402, 430, 402, 430, 402, 430, 402, 430, 400, 430, 402, 1272,
404, 430, 400, 430, 402, 430, 402, 428, 404, 430, 400, 430,
402, 430, 402, 430, 402, 428, 402, 1276, 402, 428, 402, 1276,
402, 430, 402, 428, 402, 430, 402, 430, 402, 430, 402, 428,
402, 430, 402, 430, 402, 430, 402, 430, 402, 428, 402, 428,
404, 430, 402, 428, 402, 430, 402, 428, 402, 430, 402, 432,
402, 428, 402, 430, 402, 430, 402, 430, 400, 430, 400, 430,
402, 430, 402, 430, 402, 426, 404, 430, 402, 430, 400, 428,
404, 428, 404, 432, 398, 432, 400, 456, 376, 456, 376, 456,
376, 1276, 402, 454, 378, 456, 376, 454, 378, 454, 402, 430,
376, 454, 376, 456, 400, 430, 378, 454, 400, 432, 402, 430,
376, 454, 376, 456, 376, 454, 400, 432, 374, 458, 400, 430,
398, 434, 374, 456, 374, 456, 374, 458, 374, 458, 374, 456,
352, 482, 372, 460, 374, 458, 364, 468, 352, 480, 372, 460,
352, 480, 352, 480, 352, 480, 352, 480, 352, 454, 400, 432,
376, 480, 374, 456, 374, 456, 378, 430, 404, 452, 376, 430,
404, 428, 406, 426, 406, 426, 404, 426, 406, 428, 406, 426,
430, 400, 430, 1244, 408, 424, 434, 398, 432, 400, 406, 424,
432, 400, 406, 426, 430, 400, 432, 400, 432, 400, 430, 402,
428, 402, 404, 428, 404, 426, 406, 426, 406, 426, 404, 428,
428, 402, 404, 428, 404, 428, 402, 428, 404, 428, 402, 428,
404, 428, 404, 1274, 402, 1274, 404, 428, 400, 1276, 402, 430,
402, 430, 402, 430, 402, 430, 400};
irsend.reset();
irsend.sendRaw(rawData, 451, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(HITACHI_AC, irsend.capture.decode_type);
ASSERT_EQ(HITACHI_AC_BITS, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, HITACHI_AC_BITS);
ASSERT_EQ(kHitachiAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, kHitachiAcBits);
IRHitachiAc ac(0);
ac.setRaw(irsend.capture.state);
EXPECT_EQ(
"Power: On, Mode: 3 (HEAT), Temp: 32C, Fan: 5 (HIGH), "
"Swing (Vertical): Off, Swing (Horizontal): Off",
ac.toString());
}
// Tests for sendHitachiAC1().
@@ -322,9 +505,9 @@ TEST(TestSendHitachiAC1, SendData) {
IRsendTest irsend(0);
irsend.begin();
uint8_t hitachi_code[HITACHI_AC1_STATE_LENGTH] = {
0xB2, 0xAE, 0x4D, 0x51, 0xF0, 0x61, 0x84, 0x00, 0x00, 0x00, 0x00, 0x30,
0xB8};
uint8_t hitachi_code[kHitachiAc1StateLength] = {0xB2, 0xAE, 0x4D, 0x51, 0xF0,
0x61, 0x84, 0x00, 0x00, 0x00,
0x00, 0x30, 0xB8};
irsend.reset();
irsend.sendHitachiAC1(hitachi_code);
EXPECT_EQ(
@@ -342,7 +525,8 @@ TEST(TestSendHitachiAC1, SendData) {
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s1250m400s1250m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s1250m400s1250m400s1250m400s500m400s500m400s500"
"m400s100000", irsend.outputStr());
"m400s100000",
irsend.outputStr());
}
// Decode a 'real' HitachiAC1 message.
@@ -351,38 +535,40 @@ TEST(TestDecodeHitachiAC1, NormalRealExample) {
IRrecv irrecv(0);
irsend.begin();
uint8_t hitachi_code[HITACHI_AC1_STATE_LENGTH] = {
0xB2, 0xAE, 0x4D, 0x51, 0xF0, 0x61, 0x84, 0x00, 0x00, 0x00, 0x00, 0x10,
0x98};
uint8_t hitachi_code[kHitachiAc1StateLength] = {0xB2, 0xAE, 0x4D, 0x51, 0xF0,
0x61, 0x84, 0x00, 0x00, 0x00,
0x00, 0x10, 0x98};
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/453
uint16_t rawData[211] = {
3400, 3350, 450, 1250, 450, 400, 400, 1300, 400, 1300, 400, 400, 450, 400,
400, 1300, 400, 400, 400, 1300, 400, 400, 450, 1250, 400, 450, 400, 1300,
400, 1250, 450, 1250, 450, 400, 400, 450, 400, 1250, 450, 400, 400, 400,
400, 1300, 400, 1300, 400, 400, 450, 1250, 450, 400, 400, 1300, 400, 400,
450, 1250, 400, 400, 450, 400, 400, 400, 450, 1250, 400, 1300, 450, 1250,
450, 1250, 400, 1300, 400, 400, 450, 400, 400, 450, 350, 450, 400, 400, 400,
1300, 400, 1300, 400, 400, 450, 400, 400, 400, 450, 400, 400, 1300, 400,
1250, 450, 400, 400, 400, 450, 400, 400, 400, 450, 1250, 450, 400, 400, 400,
450, 400, 400, 400, 450, 400, 400, 400, 450, 400, 400, 400, 450, 400, 400,
400, 400, 450, 400, 400, 400, 400, 450, 400, 400, 400, 450, 400, 400, 450,
400, 400, 400, 400, 450, 400, 400, 400, 450, 400, 400, 450, 400, 400, 400,
400, 400, 450, 400, 400, 400, 400, 450, 400, 400, 400, 450, 400, 400, 400,
450, 400, 400, 400, 450, 400, 400, 400, 450, 400, 400, 1300, 400, 400, 450,
400, 400, 400, 400, 400, 450, 1250, 450, 400, 400, 400, 450, 1250, 450,
1250, 450, 400, 400, 400, 450, 400, 400}; // UNKNOWN 828A89E1
3400, 3350, 450, 1250, 450, 400, 400, 1300, 400, 1300, 400, 400,
450, 400, 400, 1300, 400, 400, 400, 1300, 400, 400, 450, 1250,
400, 450, 400, 1300, 400, 1250, 450, 1250, 450, 400, 400, 450,
400, 1250, 450, 400, 400, 400, 400, 1300, 400, 1300, 400, 400,
450, 1250, 450, 400, 400, 1300, 400, 400, 450, 1250, 400, 400,
450, 400, 400, 400, 450, 1250, 400, 1300, 450, 1250, 450, 1250,
400, 1300, 400, 400, 450, 400, 400, 450, 350, 450, 400, 400,
400, 1300, 400, 1300, 400, 400, 450, 400, 400, 400, 450, 400,
400, 1300, 400, 1250, 450, 400, 400, 400, 450, 400, 400, 400,
450, 1250, 450, 400, 400, 400, 450, 400, 400, 400, 450, 400,
400, 400, 450, 400, 400, 400, 450, 400, 400, 400, 400, 450,
400, 400, 400, 400, 450, 400, 400, 400, 450, 400, 400, 450,
400, 400, 400, 400, 450, 400, 400, 400, 450, 400, 400, 450,
400, 400, 400, 400, 400, 450, 400, 400, 400, 400, 450, 400,
400, 400, 450, 400, 400, 400, 450, 400, 400, 400, 450, 400,
400, 400, 450, 400, 400, 1300, 400, 400, 450, 400, 400, 400,
400, 400, 450, 1250, 450, 400, 400, 400, 450, 1250, 450, 1250,
450, 400, 400, 400, 450, 400, 400}; // UNKNOWN 828A89E1
irsend.reset();
irsend.sendRaw(rawData, 211, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(HITACHI_AC1, irsend.capture.decode_type);
ASSERT_EQ(HITACHI_AC1_BITS, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, HITACHI_AC1_BITS);
ASSERT_EQ(kHitachiAc1Bits, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, kHitachiAc1Bits);
}
// Tests for sendHitachiAC2().
// Test sending typical data only.
@@ -390,12 +576,12 @@ TEST(TestSendHitachiAC2, SendData) {
IRsendTest irsend(0);
irsend.begin();
uint8_t hitachi_code[HITACHI_AC2_STATE_LENGTH] = {
0x80, 0x08, 0x00, 0x02, 0xFD, 0xFF, 0x00, 0x33, 0xCC, 0x49, 0xB6, 0x22,
0xDD, 0x01, 0xFE, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
0xFF, 0xCA, 0x35, 0x8F, 0x70, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xFE, 0xC0,
0x3F, 0x80, 0x7F, 0x11, 0xEE, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
0x00, 0xFF, 0x00, 0xFF, 0x00};
uint8_t hitachi_code[kHitachiAc2StateLength] = {
0x80, 0x08, 0x00, 0x02, 0xFD, 0xFF, 0x00, 0x33, 0xCC, 0x49, 0xB6,
0x22, 0xDD, 0x01, 0xFE, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
0xFF, 0x00, 0xFF, 0xCA, 0x35, 0x8F, 0x70, 0x00, 0xFF, 0x00, 0xFF,
0x01, 0xFE, 0xC0, 0x3F, 0x80, 0x7F, 0x11, 0xEE, 0x00, 0xFF, 0x00,
0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00};
irsend.reset();
irsend.sendHitachiAC2(hitachi_code);
EXPECT_EQ(
@@ -453,7 +639,8 @@ TEST(TestSendHitachiAC2, SendData) {
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s100000", irsend.outputStr());
"m400s100000",
irsend.outputStr());
}
// Decode a synthetic HitachiAC2 message.
@@ -464,20 +651,20 @@ TEST(TestDecodeHitachiAC2, NormalSyntheticExample) {
irsend.begin();
// ON - 32c cool (fan auto)
uint8_t hitachi_code[HITACHI_AC2_STATE_LENGTH] = {
0x80, 0x08, 0x00, 0x02, 0xFD, 0xFF, 0x00, 0x33, 0xCC, 0x49, 0xB6, 0x22,
0xDD, 0x01, 0xFE, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
0xFF, 0xCA, 0x35, 0x8F, 0x70, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xFE, 0xC0,
0x3F, 0x80, 0x7F, 0x11, 0xEE, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
0x00, 0xFF, 0x00, 0xFF, 0x00};
uint8_t hitachi_code[kHitachiAc2StateLength] = {
0x80, 0x08, 0x00, 0x02, 0xFD, 0xFF, 0x00, 0x33, 0xCC, 0x49, 0xB6,
0x22, 0xDD, 0x01, 0xFE, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
0xFF, 0x00, 0xFF, 0xCA, 0x35, 0x8F, 0x70, 0x00, 0xFF, 0x00, 0xFF,
0x01, 0xFE, 0xC0, 0x3F, 0x80, 0x7F, 0x11, 0xEE, 0x00, 0xFF, 0x00,
0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00};
irsend.reset();
irsend.sendHitachiAC2(hitachi_code);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(HITACHI_AC2, irsend.capture.decode_type);
ASSERT_EQ(HITACHI_AC2_BITS, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, HITACHI_AC2_BITS);
ASSERT_EQ(kHitachiAc2Bits, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, kHitachiAc2Bits);
}
// Decode a 'real' HitachiAC2 message.
@@ -486,92 +673,93 @@ TEST(TestDecodeHitachiAC2, NormalRealExample) {
IRrecv irrecv(0);
irsend.begin();
uint8_t hitachi_code[HITACHI_AC2_STATE_LENGTH] = {
0x80, 0x08, 0x00, 0x02, 0xFD, 0xFF, 0x00, 0x33, 0xCC, 0x49, 0xB6, 0x22,
0xDD, 0x01, 0xFE, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
0xFF, 0xCA, 0x35, 0x8F, 0x70, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xFE, 0xC0,
0x3F, 0x80, 0x7F, 0x11, 0xEE, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
0x00, 0xFF, 0x00, 0xFF, 0x00};
uint8_t hitachi_code[kHitachiAc2StateLength] = {
0x80, 0x08, 0x00, 0x02, 0xFD, 0xFF, 0x00, 0x33, 0xCC, 0x49, 0xB6,
0x22, 0xDD, 0x01, 0xFE, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
0xFF, 0x00, 0xFF, 0xCA, 0x35, 0x8F, 0x70, 0x00, 0xFF, 0x00, 0xFF,
0x01, 0xFE, 0xC0, 0x3F, 0x80, 0x7F, 0x11, 0xEE, 0x00, 0xFF, 0x00,
0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00};
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/417
uint16_t rawData[851] = { // ON - 32c cool (fan auto)
3432, 1654, 492, 1180, 488, 360, 486, 360, 486, 360, 486, 362,
486, 362, 460, 360, 486, 362, 486, 362, 486, 360, 486, 362,
486, 362, 486, 1184, 488, 362, 486, 360, 486, 362, 486, 362,
486, 362, 460, 362, 486, 362, 486, 362, 484, 362, 486, 362,
486, 362, 486, 362, 458, 362, 484, 362, 486, 362, 484, 364,
484, 362, 486, 1184, 486, 362, 486, 1210, 488, 1210, 488, 1184,
486, 1210, 488, 1210, 488, 1182, 488, 360, 488, 1208, 488, 1208,
488, 1182, 488, 1208, 488, 1208, 488, 1208, 462, 1208, 490, 1208,
488, 1208, 490, 332, 488, 360, 488, 360, 488, 360, 486, 360,
486, 360, 486, 362, 460, 360, 486, 362, 486, 362, 486, 1210,
488, 1210, 460, 362, 486, 362, 486, 1210, 488, 1210, 488, 1182,
488, 1210, 488, 362, 486, 360, 488, 1182, 488, 1210, 488, 362,
486, 362, 486, 360, 486, 1182, 488, 362, 486, 362, 486, 1210,
488, 360, 486, 336, 486, 1210, 488, 1210, 488, 360, 486, 1182,
488, 1210, 488, 360, 488, 1208, 488, 1182, 488, 362, 486, 362,
486, 360, 486, 1210, 460, 362, 486, 360, 486, 362, 486, 1210,
486, 362, 486, 1184, 488, 1208, 488, 360, 486, 1210, 488, 1184,
488, 1208, 488, 362, 486, 1208, 462, 360, 486, 360, 486, 362,
486, 360, 486, 362, 486, 360, 486, 334, 486, 1210, 488, 1208,
488, 1210, 488, 1182, 488, 1208, 488, 1210, 488, 1182, 488, 1208,
488, 360, 488, 360, 486, 360, 486, 334, 486, 362, 486, 362,
486, 362, 486, 362, 486, 362, 486, 1182, 488, 1210, 486, 1210,
488, 1210, 460, 1210, 488, 1210, 488, 1210, 488, 1184, 488, 360,
486, 360, 486, 362, 486, 362, 486, 360, 460, 360, 486, 362,
486, 362, 484, 1210, 488, 1182, 488, 1210, 488, 1210, 488, 1210,
488, 1182, 488, 1208, 488, 1208, 488, 360, 460, 360, 486, 360,
486, 360, 488, 360, 486, 362, 486, 362, 486, 334, 486, 1210,
488, 1208, 488, 1210, 460, 1210, 488, 1208, 488, 1210, 488, 1182,
488, 1208, 488, 360, 486, 362, 486, 360, 488, 334, 486, 360,
486, 362, 486, 362, 486, 362, 486, 1210, 460, 1210, 488, 1210,
488, 1210, 488, 1182, 488, 1210, 488, 1208, 488, 1182, 488, 360,
486, 360, 486, 362, 486, 362, 486, 360, 486, 362, 460, 360,
486, 362, 486, 1210, 486, 1212, 486, 1184, 488, 1210, 488, 1208,
488, 1182, 488, 1208, 488, 1208, 488, 1208, 462, 1208, 488, 360,
486, 362, 486, 1208, 488, 334, 486, 1208, 488, 360, 486, 360,
486, 362, 486, 1182, 488, 1210, 488, 360, 486, 1210, 488, 334,
486, 1208, 488, 1208, 488, 360, 486, 360, 486, 334, 486, 1210,
488, 1210, 488, 1210, 460, 1210, 488, 360, 486, 1208, 488, 1182,
490, 1208, 488, 360, 486, 360, 486, 360, 486, 360, 460, 360,
486, 362, 486, 362, 486, 362, 486, 362, 486, 362, 486, 362,
458, 362, 486, 1210, 488, 1210, 488, 1182, 488, 1210, 488, 1208,
488, 1208, 462, 1208, 488, 1208, 488, 360, 486, 360, 486, 334,
486, 360, 486, 362, 486, 362, 486, 362, 486, 362, 486, 1184,
488, 1210, 488, 1210, 488, 1208, 462, 1210, 488, 1208, 488, 1208,
488, 1182, 488, 360, 486, 360, 486, 360, 486, 362, 486, 360,
460, 362, 486, 360, 488, 1208, 488, 1210, 488, 1184, 488, 1208,
488, 1210, 488, 1182, 488, 1208, 488, 1208, 488, 360, 488, 1182,
488, 1208, 488, 360, 488, 360, 488, 360, 486, 334, 486, 360,
486, 362, 486, 362, 486, 360, 486, 1210, 488, 1182, 488, 1210,
488, 1210, 488, 1182, 488, 1210, 488, 1210, 488, 360, 488, 334,
486, 360, 488, 360, 486, 362, 486, 362, 486, 362, 486, 362,
460, 1210, 488, 1210, 488, 1210, 488, 1184, 488, 1208, 488, 1208,
490, 1182, 488, 360, 488, 360, 486, 362, 486, 1208, 488, 360,
460, 362, 486, 362, 486, 1210, 488, 1210, 488, 1182, 488, 1208,
488, 360, 488, 1208, 488, 1184, 486, 1210, 488, 360, 488, 360,
486, 360, 460, 362, 486, 362, 486, 362, 486, 362, 484, 362,
486, 362, 486, 1184, 488, 1210, 488, 1210, 488, 1182, 488, 1210,
488, 1208, 488, 1208, 462, 1210, 488, 360, 486, 362, 486, 360,
486, 362, 486, 334, 486, 362, 486, 360, 486, 362, 486, 1208,
488, 1184, 488, 1208, 488, 1210, 488, 1182, 488, 1208, 488, 1208,
488, 1208, 488, 1182, 488, 1208, 488, 1208, 488, 1182, 488, 1208,
488, 1208, 488, 1182, 488, 1208, 488, 360, 488, 360, 486, 360,
486, 362, 460, 362, 486, 362, 486, 362, 486, 360, 486, 1208,
488, 1182, 488, 1208, 488, 1210, 488, 1182, 488, 1208, 490, 1208,
488, 1208, 462, 360, 488, 360, 486, 360, 488, 360, 486, 360,
486, 360, 486, 336, 486, 362, 486, 1210, 488, 1208, 488, 1182,
488, 1208, 488, 1208, 488, 1208, 462, 1208, 490, 1206, 490, 360,
488, 360, 488, 332, 486, 360, 488, 360, 486, 360, 488, 360,
486, 360, 486, 1182, 488, 1208, 488, 1206, 492, 1208, 462, 1208,
488, 1208, 488, 1208, 490, 1182, 490, 360, 486, 360, 486, 360,
488, 360, 488, 360, 460, 360, 486, 362, 486, 360, 488};
uint16_t rawData[851] = {
// ON - 32c cool (fan auto)
3432, 1654, 492, 1180, 488, 360, 486, 360, 486, 360, 486, 362,
486, 362, 460, 360, 486, 362, 486, 362, 486, 360, 486, 362,
486, 362, 486, 1184, 488, 362, 486, 360, 486, 362, 486, 362,
486, 362, 460, 362, 486, 362, 486, 362, 484, 362, 486, 362,
486, 362, 486, 362, 458, 362, 484, 362, 486, 362, 484, 364,
484, 362, 486, 1184, 486, 362, 486, 1210, 488, 1210, 488, 1184,
486, 1210, 488, 1210, 488, 1182, 488, 360, 488, 1208, 488, 1208,
488, 1182, 488, 1208, 488, 1208, 488, 1208, 462, 1208, 490, 1208,
488, 1208, 490, 332, 488, 360, 488, 360, 488, 360, 486, 360,
486, 360, 486, 362, 460, 360, 486, 362, 486, 362, 486, 1210,
488, 1210, 460, 362, 486, 362, 486, 1210, 488, 1210, 488, 1182,
488, 1210, 488, 362, 486, 360, 488, 1182, 488, 1210, 488, 362,
486, 362, 486, 360, 486, 1182, 488, 362, 486, 362, 486, 1210,
488, 360, 486, 336, 486, 1210, 488, 1210, 488, 360, 486, 1182,
488, 1210, 488, 360, 488, 1208, 488, 1182, 488, 362, 486, 362,
486, 360, 486, 1210, 460, 362, 486, 360, 486, 362, 486, 1210,
486, 362, 486, 1184, 488, 1208, 488, 360, 486, 1210, 488, 1184,
488, 1208, 488, 362, 486, 1208, 462, 360, 486, 360, 486, 362,
486, 360, 486, 362, 486, 360, 486, 334, 486, 1210, 488, 1208,
488, 1210, 488, 1182, 488, 1208, 488, 1210, 488, 1182, 488, 1208,
488, 360, 488, 360, 486, 360, 486, 334, 486, 362, 486, 362,
486, 362, 486, 362, 486, 362, 486, 1182, 488, 1210, 486, 1210,
488, 1210, 460, 1210, 488, 1210, 488, 1210, 488, 1184, 488, 360,
486, 360, 486, 362, 486, 362, 486, 360, 460, 360, 486, 362,
486, 362, 484, 1210, 488, 1182, 488, 1210, 488, 1210, 488, 1210,
488, 1182, 488, 1208, 488, 1208, 488, 360, 460, 360, 486, 360,
486, 360, 488, 360, 486, 362, 486, 362, 486, 334, 486, 1210,
488, 1208, 488, 1210, 460, 1210, 488, 1208, 488, 1210, 488, 1182,
488, 1208, 488, 360, 486, 362, 486, 360, 488, 334, 486, 360,
486, 362, 486, 362, 486, 362, 486, 1210, 460, 1210, 488, 1210,
488, 1210, 488, 1182, 488, 1210, 488, 1208, 488, 1182, 488, 360,
486, 360, 486, 362, 486, 362, 486, 360, 486, 362, 460, 360,
486, 362, 486, 1210, 486, 1212, 486, 1184, 488, 1210, 488, 1208,
488, 1182, 488, 1208, 488, 1208, 488, 1208, 462, 1208, 488, 360,
486, 362, 486, 1208, 488, 334, 486, 1208, 488, 360, 486, 360,
486, 362, 486, 1182, 488, 1210, 488, 360, 486, 1210, 488, 334,
486, 1208, 488, 1208, 488, 360, 486, 360, 486, 334, 486, 1210,
488, 1210, 488, 1210, 460, 1210, 488, 360, 486, 1208, 488, 1182,
490, 1208, 488, 360, 486, 360, 486, 360, 486, 360, 460, 360,
486, 362, 486, 362, 486, 362, 486, 362, 486, 362, 486, 362,
458, 362, 486, 1210, 488, 1210, 488, 1182, 488, 1210, 488, 1208,
488, 1208, 462, 1208, 488, 1208, 488, 360, 486, 360, 486, 334,
486, 360, 486, 362, 486, 362, 486, 362, 486, 362, 486, 1184,
488, 1210, 488, 1210, 488, 1208, 462, 1210, 488, 1208, 488, 1208,
488, 1182, 488, 360, 486, 360, 486, 360, 486, 362, 486, 360,
460, 362, 486, 360, 488, 1208, 488, 1210, 488, 1184, 488, 1208,
488, 1210, 488, 1182, 488, 1208, 488, 1208, 488, 360, 488, 1182,
488, 1208, 488, 360, 488, 360, 488, 360, 486, 334, 486, 360,
486, 362, 486, 362, 486, 360, 486, 1210, 488, 1182, 488, 1210,
488, 1210, 488, 1182, 488, 1210, 488, 1210, 488, 360, 488, 334,
486, 360, 488, 360, 486, 362, 486, 362, 486, 362, 486, 362,
460, 1210, 488, 1210, 488, 1210, 488, 1184, 488, 1208, 488, 1208,
490, 1182, 488, 360, 488, 360, 486, 362, 486, 1208, 488, 360,
460, 362, 486, 362, 486, 1210, 488, 1210, 488, 1182, 488, 1208,
488, 360, 488, 1208, 488, 1184, 486, 1210, 488, 360, 488, 360,
486, 360, 460, 362, 486, 362, 486, 362, 486, 362, 484, 362,
486, 362, 486, 1184, 488, 1210, 488, 1210, 488, 1182, 488, 1210,
488, 1208, 488, 1208, 462, 1210, 488, 360, 486, 362, 486, 360,
486, 362, 486, 334, 486, 362, 486, 360, 486, 362, 486, 1208,
488, 1184, 488, 1208, 488, 1210, 488, 1182, 488, 1208, 488, 1208,
488, 1208, 488, 1182, 488, 1208, 488, 1208, 488, 1182, 488, 1208,
488, 1208, 488, 1182, 488, 1208, 488, 360, 488, 360, 486, 360,
486, 362, 460, 362, 486, 362, 486, 362, 486, 360, 486, 1208,
488, 1182, 488, 1208, 488, 1210, 488, 1182, 488, 1208, 490, 1208,
488, 1208, 462, 360, 488, 360, 486, 360, 488, 360, 486, 360,
486, 360, 486, 336, 486, 362, 486, 1210, 488, 1208, 488, 1182,
488, 1208, 488, 1208, 488, 1208, 462, 1208, 490, 1206, 490, 360,
488, 360, 488, 332, 486, 360, 488, 360, 486, 360, 488, 360,
486, 360, 486, 1182, 488, 1208, 488, 1206, 492, 1208, 462, 1208,
488, 1208, 488, 1208, 490, 1182, 490, 360, 486, 360, 486, 360,
488, 360, 488, 360, 460, 360, 486, 362, 486, 360, 488};
irsend.reset();
irsend.sendRaw(rawData, 851, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(HITACHI_AC2, irsend.capture.decode_type);
ASSERT_EQ(HITACHI_AC2_BITS, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, HITACHI_AC2_BITS);
ASSERT_EQ(kHitachiAc2Bits, irsend.capture.bits);
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, kHitachiAc2Bits);
}
+45 -38
View File
@@ -17,7 +17,8 @@ TEST(TestSendJVC, SendDataOnly) {
"m8400s4200"
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
"m525s21675", irsend.outputStr());
"m525s21675",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -26,7 +27,7 @@ TEST(TestSendJVC, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendJVC(0xC2B8, JVC_BITS, 1); // 1 repeat.
irsend.sendJVC(0xC2B8, kJvcBits, 1); // 1 repeat.
EXPECT_EQ(
"m8400s4200"
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
@@ -34,8 +35,9 @@ TEST(TestSendJVC, SendWithRepeats) {
"m525s21675"
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
"m525s34275", irsend.outputStr());
irsend.sendJVC(0xC2B8, JVC_BITS, 2); // 2 repeats.
"m525s34275",
irsend.outputStr());
irsend.sendJVC(0xC2B8, kJvcBits, 2); // 2 repeats.
EXPECT_EQ(
"m8400s4200"
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
@@ -46,7 +48,8 @@ TEST(TestSendJVC, SendWithRepeats) {
"m525s34275"
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
"m525s34275", irsend.outputStr());
"m525s34275",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -59,7 +62,8 @@ TEST(TestSendJVC, SendUnusualSize) {
EXPECT_EQ(
"m8400s4200"
"m525s525m525s525m525s525m525s525m525s525m525s525m525s525m525s525"
"m525s38475", irsend.outputStr());
"m525s38475",
irsend.outputStr());
irsend.reset();
irsend.sendJVC(0x1234567890ABCDEF, 64);
@@ -73,7 +77,8 @@ TEST(TestSendJVC, SendUnusualSize) {
"m525s1725m525s525m525s1725m525s525m525s1725m525s525m525s1725m525s1725"
"m525s1725m525s1725m525s525m525s525m525s1725m525s1725m525s525m525s1725"
"m525s1725m525s1725m525s1725m525s525m525s1725m525s1725m525s1725m525s1725"
"m525s10875", irsend.outputStr());
"m525s10875",
irsend.outputStr());
}
// Tests for encodeJVC().
@@ -100,9 +105,9 @@ TEST(TestDecodeJVC, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendJVC(0xC2B8);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, JVC_BITS, true));
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, kJvcBits, true));
EXPECT_EQ(JVC, irsend.capture.decode_type);
EXPECT_EQ(JVC_BITS, irsend.capture.bits);
EXPECT_EQ(kJvcBits, irsend.capture.bits);
EXPECT_EQ(0xC2B8, irsend.capture.value);
EXPECT_EQ(0x43, irsend.capture.address);
EXPECT_EQ(0x1D, irsend.capture.command);
@@ -112,9 +117,9 @@ TEST(TestDecodeJVC, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendJVC(irsend.encodeJVC(0x07, 0x99));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, JVC_BITS, true));
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, kJvcBits, true));
EXPECT_EQ(JVC, irsend.capture.decode_type);
EXPECT_EQ(JVC_BITS, irsend.capture.bits);
EXPECT_EQ(kJvcBits, irsend.capture.bits);
EXPECT_EQ(0xE099, irsend.capture.value);
EXPECT_EQ(0x07, irsend.capture.address);
EXPECT_EQ(0x99, irsend.capture.command);
@@ -124,9 +129,9 @@ TEST(TestDecodeJVC, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendJVC(irsend.encodeJVC(0x1, 0x1));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, JVC_BITS, true));
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, kJvcBits, true));
EXPECT_EQ(JVC, irsend.capture.decode_type);
EXPECT_EQ(JVC_BITS, irsend.capture.bits);
EXPECT_EQ(kJvcBits, irsend.capture.bits);
EXPECT_EQ(0x8080, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x1, irsend.capture.command);
@@ -141,42 +146,42 @@ TEST(TestDecodeJVC, NormalDecodeWithRepeatAndStrict) {
// Normal JVC 16-bit message with 2 repeats.
irsend.reset();
irsend.sendJVC(0xC2B8, JVC_BITS, 2);
irsend.sendJVC(0xC2B8, kJvcBits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, JVC_BITS, true));
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, kJvcBits, true));
EXPECT_EQ(JVC, irsend.capture.decode_type);
EXPECT_EQ(JVC_BITS, irsend.capture.bits);
EXPECT_EQ(kJvcBits, irsend.capture.bits);
EXPECT_EQ(0xC2B8, irsend.capture.value);
EXPECT_EQ(0x43, irsend.capture.address);
EXPECT_EQ(0x1D, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
irsend.makeDecodeResult(2 * JVC_BITS + 4);
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, JVC_BITS, true));
irsend.makeDecodeResult(2 * kJvcBits + 4);
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, kJvcBits, true));
EXPECT_EQ(JVC, irsend.capture.decode_type);
EXPECT_EQ(JVC_BITS, irsend.capture.bits);
EXPECT_EQ(kJvcBits, irsend.capture.bits);
EXPECT_EQ(0xC2B8, irsend.capture.value);
EXPECT_TRUE(irsend.capture.repeat);
irsend.makeDecodeResult(2 * JVC_BITS + 4 + 2 * JVC_BITS + 2);
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, JVC_BITS, true));
irsend.makeDecodeResult(2 * kJvcBits + 4 + 2 * kJvcBits + 2);
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, kJvcBits, true));
EXPECT_EQ(JVC, irsend.capture.decode_type);
EXPECT_EQ(JVC_BITS, irsend.capture.bits);
EXPECT_EQ(kJvcBits, irsend.capture.bits);
EXPECT_EQ(0xC2B8, irsend.capture.value);
EXPECT_TRUE(irsend.capture.repeat);
// Simulate 'just' a JVC repeat command.
// JVC VCR Power On from Global Cache, but modified to be a repeat message.
uint16_t gc_test[37] = {38000, 1, 1, 20, 61, 20, 61, 20, 20, 20, 20,
20, 20, 20, 20, 20, 61, 20, 20, 20, 61, 20, 20, 20,
61, 20, 61, 20, 61, 20, 20, 20, 20, 20, 20, 20, 884};
uint16_t gc_test[37] = {38000, 1, 1, 20, 61, 20, 61, 20, 20, 20, 20, 20, 20,
20, 20, 20, 61, 20, 20, 20, 61, 20, 20, 20, 61, 20,
61, 20, 61, 20, 20, 20, 20, 20, 20, 20, 884};
irsend.reset();
irsend.sendGC(gc_test, 37);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture));
EXPECT_EQ(JVC, irsend.capture.decode_type);
EXPECT_EQ(JVC_BITS, irsend.capture.bits);
EXPECT_EQ(kJvcBits, irsend.capture.bits);
EXPECT_EQ(0xC2B8, irsend.capture.value);
EXPECT_EQ(0x43, irsend.capture.address);
EXPECT_EQ(0x1D, irsend.capture.command);
@@ -193,7 +198,7 @@ TEST(TestDecodeJVC, DecodeWithNonStrictValues) {
irsend.sendJVC(0x0, 8); // Illegal value JVC 8-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeJVC(&irsend.capture, JVC_BITS, true));
ASSERT_FALSE(irrecv.decodeJVC(&irsend.capture, kJvcBits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture, 8, false));
EXPECT_EQ(JVC, irsend.capture.decode_type);
@@ -206,7 +211,7 @@ TEST(TestDecodeJVC, DecodeWithNonStrictValues) {
irsend.sendJVC(0x12345678, 32); // Illegal value JVC 32-bit message.
irsend.makeDecodeResult();
// Should not pass with strict when we ask for less bits than we got.
ASSERT_FALSE(irrecv.decodeJVC(&irsend.capture, JVC_BITS, true));
ASSERT_FALSE(irrecv.decodeJVC(&irsend.capture, kJvcBits, true));
irsend.makeDecodeResult();
// Should fail with strict when we ask for the wrong bit size.
@@ -225,7 +230,7 @@ TEST(TestDecodeJVC, DecodeWithNonStrictValues) {
irsend.makeDecodeResult();
// Shouldn't pass if strict off and the wrong expected bits.
ASSERT_FALSE(irrecv.decodeJVC(&irsend.capture, JVC_BITS, false));
ASSERT_FALSE(irrecv.decodeJVC(&irsend.capture, kJvcBits, false));
// Re-decode with correct bit size.
ASSERT_FALSE(irrecv.decodeJVC(&irsend.capture, 36, true));
@@ -264,16 +269,17 @@ TEST(TestDecodeJVC, DecodeGlobalCacheExample) {
irsend.reset();
// JVC VCR Power On from Global Cache.
uint16_t gc_test[39] = {38000, 1, 1, 322, 162, 20, 61, 20, 61, 20, 20, 20, 20,
20, 20, 20, 20, 20, 61, 20, 20, 20, 61, 20, 20, 20,
61, 20, 61, 20, 61, 20, 20, 20, 20, 20, 20, 20, 884};
// 38000,1,37,320,161,21,59,21,59,21,19,21,19,21,19,21,19,21,59,21,19,21,59,21,59,21,19,21,59,21,19,21,19,21,19,21,19,21,838,21,59,21,59,21,19,21,19,21,19,21,19,21,59,21,19,21,59,21,19,21,59,21,59,21,59,21,19,21,19,21,19,21,850};
uint16_t gc_test[39] = {38000, 1, 1, 322, 162, 20, 61, 20, 61, 20,
20, 20, 20, 20, 20, 20, 20, 20, 61, 20,
20, 20, 61, 20, 20, 20, 61, 20, 61, 20,
61, 20, 20, 20, 20, 20, 20, 20, 884};
// 38000,1,37,320,161,21,59,21,59,21,19,21,19,21,19,21,19,21,59,21,19,21,59,21,59,21,19,21,59,21,19,21,19,21,19,21,19,21,838,21,59,21,59,21,19,21,19,21,19,21,19,21,59,21,19,21,59,21,19,21,59,21,59,21,59,21,19,21,19,21,19,21,850};
irsend.sendGC(gc_test, 39);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeJVC(&irsend.capture));
EXPECT_EQ(JVC, irsend.capture.decode_type);
EXPECT_EQ(JVC_BITS, irsend.capture.bits);
EXPECT_EQ(kJvcBits, irsend.capture.bits);
EXPECT_EQ(0xC2B8, irsend.capture.value);
EXPECT_EQ(0x43, irsend.capture.address);
EXPECT_EQ(0x1D, irsend.capture.command);
@@ -288,12 +294,13 @@ TEST(TestDecodeJVC, FailToDecodeNonJVCExample) {
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};
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.decodeJVC(&irsend.capture));
ASSERT_FALSE(irrecv.decodeJVC(&irsend.capture, JVC_BITS, false));
ASSERT_FALSE(irrecv.decodeJVC(&irsend.capture, kJvcBits, false));
}
+71 -66
View File
@@ -1,11 +1,11 @@
// Copyright 2017 David Conran
#include "IRremoteESP8266.h"
#include "ir_Kelvinator.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRremoteESP8266.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Kelvinator.h"
#include "gtest/gtest.h"
// Tests for sendKelvinator().
@@ -15,7 +15,7 @@ TEST(TestSendKelvinator, SendDataOnly) {
IRsendTest irsend(4);
irsend.begin();
uint8_t kelv_code[KELVINATOR_STATE_LENGTH] = {
uint8_t kelv_code[kKelvinatorStateLength] = {
0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xf0};
irsend.reset();
@@ -44,7 +44,8 @@ TEST(TestSendKelvinator, SendDataOnly) {
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
"m680s39950", irsend.outputStr());
"m680s39950",
irsend.outputStr());
}
// Test sending with repeats.
@@ -53,12 +54,12 @@ TEST(TestSendKelvinator, SendWithRepeats) {
irsend.begin();
irsend.reset();
uint8_t kelv_code[KELVINATOR_STATE_LENGTH] = {
uint8_t kelv_code[kKelvinatorStateLength] = {
0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xf0};
irsend.reset();
irsend.sendKelvinator(kelv_code, KELVINATOR_STATE_LENGTH, 1);
irsend.sendKelvinator(kelv_code, kKelvinatorStateLength, 1);
EXPECT_EQ(
"m9010s4505"
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
@@ -107,7 +108,8 @@ TEST(TestSendKelvinator, SendWithRepeats) {
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
"m680s39950", irsend.outputStr());
"m680s39950",
irsend.outputStr());
}
// Test sending atypical sizes.
@@ -117,9 +119,9 @@ TEST(TestSendKelvinator, SendUnexpectedSizes) {
uint8_t kelv_short_code[15] = {0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10};
uint8_t kelv_long_code[17] = {0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xf0,
0x00};
uint8_t kelv_long_code[17] = {0x19, 0x0B, 0x80, 0x50, 0x00, 0x00,
0x00, 0xE0, 0x19, 0x0B, 0x80, 0x70,
0x00, 0x00, 0x10, 0xf0, 0x00};
irsend.reset();
irsend.sendKelvinator(kelv_short_code, 15);
ASSERT_EQ("", irsend.outputStr());
@@ -152,10 +154,10 @@ TEST(TestSendKelvinator, SendUnexpectedSizes) {
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
"m680s39950", irsend.outputStr());
"m680s39950",
irsend.outputStr());
}
// Tests for IRKelvinatorAC class.
TEST(TestKelvinatorClass, Power) {
@@ -180,22 +182,22 @@ TEST(TestKelvinatorClass, Temperature) {
irkelv.begin();
irkelv.setTemp(0);
EXPECT_EQ(KELVINATOR_MIN_TEMP, irkelv.getTemp());
EXPECT_EQ(kKelvinatorMinTemp, irkelv.getTemp());
irkelv.setTemp(255);
EXPECT_EQ(KELVINATOR_MAX_TEMP, irkelv.getTemp());
EXPECT_EQ(kKelvinatorMaxTemp, irkelv.getTemp());
irkelv.setTemp(KELVINATOR_MIN_TEMP);
EXPECT_EQ(KELVINATOR_MIN_TEMP, irkelv.getTemp());
irkelv.setTemp(kKelvinatorMinTemp);
EXPECT_EQ(kKelvinatorMinTemp, irkelv.getTemp());
irkelv.setTemp(KELVINATOR_MAX_TEMP);
EXPECT_EQ(KELVINATOR_MAX_TEMP, irkelv.getTemp());
irkelv.setTemp(kKelvinatorMaxTemp);
EXPECT_EQ(kKelvinatorMaxTemp, irkelv.getTemp());
irkelv.setTemp(KELVINATOR_MIN_TEMP - 1);
EXPECT_EQ(KELVINATOR_MIN_TEMP, irkelv.getTemp());
irkelv.setTemp(kKelvinatorMinTemp - 1);
EXPECT_EQ(kKelvinatorMinTemp, irkelv.getTemp());
irkelv.setTemp(KELVINATOR_MAX_TEMP + 1);
EXPECT_EQ(KELVINATOR_MAX_TEMP, irkelv.getTemp());
irkelv.setTemp(kKelvinatorMaxTemp + 1);
EXPECT_EQ(kKelvinatorMaxTemp, irkelv.getTemp());
irkelv.setTemp(17);
EXPECT_EQ(17, irkelv.getTemp());
@@ -215,29 +217,29 @@ TEST(TestKelvinatorClass, OperatingMode) {
irkelv.begin();
irkelv.setTemp(24);
irkelv.setMode(KELVINATOR_AUTO);
EXPECT_EQ(KELVINATOR_AUTO, irkelv.getMode());
EXPECT_EQ(KELVINATOR_AUTO_TEMP, irkelv.getTemp());
irkelv.setMode(kKelvinatorAuto);
EXPECT_EQ(kKelvinatorAuto, irkelv.getMode());
EXPECT_EQ(kKelvinatorAutoTemp, irkelv.getTemp());
irkelv.setMode(KELVINATOR_COOL);
EXPECT_EQ(KELVINATOR_COOL, irkelv.getMode());
irkelv.setMode(kKelvinatorCool);
EXPECT_EQ(kKelvinatorCool, irkelv.getMode());
irkelv.setMode(KELVINATOR_HEAT);
EXPECT_EQ(KELVINATOR_HEAT, irkelv.getMode());
irkelv.setMode(kKelvinatorHeat);
EXPECT_EQ(kKelvinatorHeat, irkelv.getMode());
irkelv.setTemp(24);
irkelv.setMode(KELVINATOR_DRY);
EXPECT_EQ(KELVINATOR_DRY, irkelv.getMode());
EXPECT_EQ(KELVINATOR_AUTO_TEMP, irkelv.getTemp());
irkelv.setMode(kKelvinatorDry);
EXPECT_EQ(kKelvinatorDry, irkelv.getMode());
EXPECT_EQ(kKelvinatorAutoTemp, irkelv.getTemp());
irkelv.setMode(KELVINATOR_FAN);
EXPECT_EQ(KELVINATOR_FAN, irkelv.getMode());
irkelv.setMode(kKelvinatorFan);
EXPECT_EQ(kKelvinatorFan, irkelv.getMode());
irkelv.setMode(KELVINATOR_HEAT + 1);
EXPECT_EQ(KELVINATOR_AUTO, irkelv.getMode());
irkelv.setMode(kKelvinatorHeat + 1);
EXPECT_EQ(kKelvinatorAuto, irkelv.getMode());
irkelv.setMode(255);
EXPECT_EQ(KELVINATOR_AUTO, irkelv.getMode());
EXPECT_EQ(kKelvinatorAuto, irkelv.getMode());
}
TEST(TestKelvinatorClass, VaneSwing) {
@@ -352,16 +354,16 @@ TEST(TestKelvinatorClass, FanSpeed) {
EXPECT_EQ(0, irkelv.getFan());
irkelv.setFan(255);
EXPECT_EQ(KELVINATOR_FAN_MAX, irkelv.getFan());
EXPECT_EQ(kKelvinatorFanMax, irkelv.getFan());
irkelv.setFan(KELVINATOR_FAN_MAX);
EXPECT_EQ(KELVINATOR_FAN_MAX, irkelv.getFan());
irkelv.setFan(kKelvinatorFanMax);
EXPECT_EQ(kKelvinatorFanMax, irkelv.getFan());
irkelv.setFan(KELVINATOR_FAN_MAX + 1);
EXPECT_EQ(KELVINATOR_FAN_MAX, irkelv.getFan());
irkelv.setFan(kKelvinatorFanMax + 1);
EXPECT_EQ(kKelvinatorFanMax, irkelv.getFan());
irkelv.setFan(KELVINATOR_FAN_MAX - 1);
EXPECT_EQ(KELVINATOR_FAN_MAX - 1, irkelv.getFan());
irkelv.setFan(kKelvinatorFanMax - 1);
EXPECT_EQ(kKelvinatorFanMax - 1, irkelv.getFan());
irkelv.setFan(1);
EXPECT_EQ(1, irkelv.getFan());
@@ -374,7 +376,7 @@ TEST(TestKelvinatorClass, FanSpeed) {
}
TEST(TestKelvinatorClass, Checksums) {
uint8_t kelv_code[KELVINATOR_STATE_LENGTH] = {
uint8_t kelv_code[kKelvinatorStateLength] = {
0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xf0};
@@ -396,42 +398,44 @@ TEST(TestKelvinatorClass, Checksums) {
TEST(TestKelvinatorClass, SetAndGetRaw) {
IRKelvinatorAC irkelv(0);
uint8_t initialState[KELVINATOR_STATE_LENGTH] = {
uint8_t initialState[kKelvinatorStateLength] = {
0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA0,
0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xA0};
uint8_t expectedState[KELVINATOR_STATE_LENGTH] = {
uint8_t expectedState[kKelvinatorStateLength] = {
0x08, 0x05, 0x20, 0x50, 0x00, 0x00, 0x00, 0x70,
0x08, 0x05, 0x20, 0x70, 0x00, 0x00, 0x00, 0x70};
EXPECT_STATE_EQ(initialState, irkelv.getRaw(), KELVINATOR_BITS);
EXPECT_STATE_EQ(initialState, irkelv.getRaw(), kKelvinatorBits);
// toggle the power state.
irkelv.setPower(!irkelv.getPower());
irkelv.setTemp(21);
irkelv.setLight(true);
EXPECT_STATE_EQ(expectedState, irkelv.getRaw(), KELVINATOR_BITS);
EXPECT_STATE_EQ(expectedState, irkelv.getRaw(), kKelvinatorBits);
irkelv.setRaw(initialState);
EXPECT_STATE_EQ(initialState, irkelv.getRaw(), KELVINATOR_BITS);
EXPECT_STATE_EQ(initialState, irkelv.getRaw(), kKelvinatorBits);
}
TEST(TestKelvinatorClass, HumanReadable) {
IRKelvinatorAC irkelv(0);
EXPECT_EQ("Power: Off, Mode: 0 (AUTO), Temp: 16C, Fan: 0 (AUTO), Turbo: Off, "
"Quiet: Off, XFan: Off, IonFilter: Off, Light: Off, "
"Swing (Horizontal): Off, Swing (Vertical): Off",
irkelv.toString());
EXPECT_EQ(
"Power: Off, Mode: 0 (AUTO), Temp: 16C, Fan: 0 (AUTO), Turbo: Off, "
"Quiet: Off, XFan: Off, IonFilter: Off, Light: Off, "
"Swing (Horizontal): Off, Swing (Vertical): Off",
irkelv.toString());
irkelv.on();
irkelv.setMode(KELVINATOR_COOL);
irkelv.setMode(kKelvinatorCool);
irkelv.setTemp(25);
irkelv.setFan(KELVINATOR_FAN_MAX);
irkelv.setFan(kKelvinatorFanMax);
irkelv.setXFan(true);
irkelv.setIonFilter(true);
irkelv.setLight(true);
irkelv.setSwingHorizontal(true);
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 25C, Fan: 5 (MAX), Turbo: Off, "
"Quiet: Off, XFan: On, IonFilter: On, Light: On, "
"Swing (Horizontal): On, Swing (Vertical): Off",
irkelv.toString());
EXPECT_EQ(
"Power: On, Mode: 1 (COOL), Temp: 25C, Fan: 5 (MAX), Turbo: Off, "
"Quiet: Off, XFan: On, IonFilter: On, Light: On, "
"Swing (Horizontal): On, Swing (Vertical): Off",
irkelv.toString());
}
TEST(TestKelvinatorClass, MessageConstuction) {
@@ -441,7 +445,7 @@ TEST(TestKelvinatorClass, MessageConstuction) {
irsend.begin();
irkelv.setFan(1);
irkelv.setMode(KELVINATOR_COOL);
irkelv.setMode(kKelvinatorCool);
irkelv.setTemp(27);
irkelv.setSwingVertical(false);
irkelv.setSwingHorizontal(true);
@@ -454,7 +458,7 @@ TEST(TestKelvinatorClass, MessageConstuction) {
// Check everything for kicks.
EXPECT_EQ(1, irkelv.getFan());
EXPECT_EQ(KELVINATOR_COOL, irkelv.getMode());
EXPECT_EQ(kKelvinatorCool, irkelv.getMode());
EXPECT_EQ(27, irkelv.getTemp());
EXPECT_FALSE(irkelv.getSwingVertical());
EXPECT_TRUE(irkelv.getSwingHorizontal());
@@ -491,7 +495,8 @@ TEST(TestKelvinatorClass, MessageConstuction) {
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
"m680s39950", irsend.outputStr());
"m680s39950",
irsend.outputStr());
}
// Decode a synthetic Kelvinator message.
@@ -500,7 +505,7 @@ TEST(TestDecodeKelvinator, NormalSynthetic) {
IRrecv irrecv(4);
irsend.begin();
uint8_t kelv_code[KELVINATOR_STATE_LENGTH] = {
uint8_t kelv_code[kKelvinatorStateLength] = {
0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xf0};
irsend.reset();
@@ -508,6 +513,6 @@ TEST(TestDecodeKelvinator, NormalSynthetic) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(KELVINATOR, irsend.capture.decode_type);
ASSERT_EQ(KELVINATOR_BITS, irsend.capture.bits);
EXPECT_STATE_EQ(kelv_code, irsend.capture.state, KELVINATOR_BITS);
ASSERT_EQ(kKelvinatorBits, irsend.capture.bits);
EXPECT_STATE_EQ(kelv_code, irsend.capture.state, kKelvinatorBits);
}
+128 -64
View File
@@ -1,8 +1,8 @@
// Copyright 2017 David Conran
#include "ir_LG.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_LG.h"
#include "gtest/gtest.h"
// Tests for calcLGChecksum()
@@ -30,15 +30,16 @@ TEST(TestSendLG, SendDataOnly) {
irsend.reset();
irsend.sendLG(0x4B4AE51);
EXPECT_EQ(
"m8000s4000"
"m8500s4250"
"m550s550m550s1600m550s550m550s550"
"m550s1600m550s550m550s1600m550s1600m550s550m550s1600m550s550m550s550"
"m550s1600m550s550m550s1600m550s550m550s1600m550s1600m550s1600m550s550"
"m550s550m550s1600m550s550m550s1600m550s550m550s550m550s550m550s1600"
"m550s51050", irsend.outputStr());
"m550s50300",
irsend.outputStr());
irsend.reset();
irsend.sendLG(0xB4B4AE51, LG32_BITS);
irsend.sendLG(0xB4B4AE51, kLg32Bits);
EXPECT_EQ(
"m4480s4480"
"m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
@@ -46,7 +47,8 @@ TEST(TestSendLG, SendDataOnly) {
"m560s1680m560s560m560s1680m560s560m560s1680m560s1680m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560m560s1680"
"m560s44800"
"m8950s2250m550s96300", irsend.outputStr());
"m8950s2250m550s96300",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -55,18 +57,19 @@ TEST(TestSendLG, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendLG(0x4B4AE51, LG_BITS, 1);
irsend.sendLG(0x4B4AE51, kLgBits, 1);
EXPECT_EQ(
"m8000s4000"
"m8500s4250"
"m550s550m550s1600m550s550m550s550"
"m550s1600m550s550m550s1600m550s1600m550s550m550s1600m550s550m550s550"
"m550s1600m550s550m550s1600m550s550m550s1600m550s1600m550s1600m550s550"
"m550s550m550s1600m550s550m550s1600m550s550m550s550m550s550m550s1600"
"m550s51050"
"m8000s2250m550s97250", irsend.outputStr());
"m550s50300"
"m8500s2250m550s96750",
irsend.outputStr());
irsend.reset();
irsend.sendLG(0xB4B4AE51, LG32_BITS, 1);
irsend.sendLG(0xB4B4AE51, kLg32Bits, 1);
EXPECT_EQ(
"m4480s4480"
"m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
@@ -75,7 +78,8 @@ TEST(TestSendLG, SendWithRepeats) {
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560m560s1680"
"m560s44800"
"m8950s2250m550s96300"
"m8950s2250m550s96300", irsend.outputStr());
"m8950s2250m550s96300",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -86,12 +90,13 @@ TEST(TestSendLG, SendUnusualSize) {
irsend.reset();
irsend.sendLG(0x0, 31);
EXPECT_EQ(
"m8000s4000"
"m8500s4250"
"m550s550m550s550m550s550m550s550m550s550m550s550m550s550m550s550"
"m550s550m550s550m550s550m550s550m550s550m550s550m550s550m550s550"
"m550s550m550s550m550s550m550s550m550s550m550s550m550s550m550s550"
"m550s550m550s550m550s550m550s550m550s550m550s550m550s550"
"m550s61400", irsend.outputStr());
"m550s60650",
irsend.outputStr());
irsend.reset();
irsend.sendLG(0x0, 64);
@@ -106,7 +111,8 @@ TEST(TestSendLG, SendUnusualSize) {
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s26880"
"m8950s2250m550s96300", irsend.outputStr());
"m8950s2250m550s96300",
irsend.outputStr());
}
// Tests for encodeLG().
@@ -132,11 +138,11 @@ TEST(TestDecodeLG, NormalDecodeWithStrict) {
// Normal LG 28-bit message.
irsend.reset();
irsend.sendLG(0x4B4AE51, LG_BITS);
irsend.sendLG(0x4B4AE51, kLgBits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, LG_BITS, true));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, kLgBits, true));
EXPECT_EQ(LG, irsend.capture.decode_type);
EXPECT_EQ(LG_BITS, irsend.capture.bits);
EXPECT_EQ(kLgBits, irsend.capture.bits);
EXPECT_EQ(0x4B4AE51, irsend.capture.value);
EXPECT_EQ(0x4B, irsend.capture.address);
EXPECT_EQ(0x4AE5, irsend.capture.command);
@@ -144,11 +150,11 @@ TEST(TestDecodeLG, NormalDecodeWithStrict) {
// Normal LG 32-bit message.
irsend.reset();
irsend.sendLG(0xB4B4AE51, LG32_BITS);
irsend.sendLG(0xB4B4AE51, kLg32Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, LG32_BITS, false));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, kLg32Bits, false));
EXPECT_EQ(LG, irsend.capture.decode_type);
EXPECT_EQ(LG32_BITS, irsend.capture.bits);
EXPECT_EQ(kLg32Bits, irsend.capture.bits);
EXPECT_EQ(0xB4B4AE51, irsend.capture.value);
EXPECT_EQ(0xB4B, irsend.capture.address);
EXPECT_EQ(0x4AE5, irsend.capture.command);
@@ -158,9 +164,9 @@ TEST(TestDecodeLG, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendLG(irsend.encodeLG(0x07, 0x99));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, LG_BITS, true));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, kLgBits, true));
EXPECT_EQ(LG, irsend.capture.decode_type);
EXPECT_EQ(LG_BITS, irsend.capture.bits);
EXPECT_EQ(kLgBits, irsend.capture.bits);
EXPECT_EQ(0x700992, irsend.capture.value);
EXPECT_EQ(0x07, irsend.capture.address);
EXPECT_EQ(0x99, irsend.capture.command);
@@ -168,11 +174,11 @@ TEST(TestDecodeLG, NormalDecodeWithStrict) {
// Synthesised Normal LG 32-bit message.
irsend.reset();
irsend.sendLG(irsend.encodeLG(0x800, 0x8000), LG32_BITS);
irsend.sendLG(irsend.encodeLG(0x800, 0x8000), kLg32Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, LG32_BITS, true));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, kLg32Bits, true));
EXPECT_EQ(LG, irsend.capture.decode_type);
EXPECT_EQ(LG32_BITS, irsend.capture.bits);
EXPECT_EQ(kLg32Bits, irsend.capture.bits);
EXPECT_EQ(0x80080008, irsend.capture.value);
EXPECT_EQ(0x800, irsend.capture.address);
EXPECT_EQ(0x8000, irsend.capture.command);
@@ -187,11 +193,11 @@ TEST(TestDecodeLG, NormalDecodeWithRepeatAndStrict) {
// Normal LG 28-bit message with 2 repeats.
irsend.reset();
irsend.sendLG(irsend.encodeLG(0x07, 0x99), LG_BITS, 2);
irsend.sendLG(irsend.encodeLG(0x07, 0x99), kLgBits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, LG_BITS, true));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, kLgBits, true));
EXPECT_EQ(LG, irsend.capture.decode_type);
EXPECT_EQ(LG_BITS, irsend.capture.bits);
EXPECT_EQ(kLgBits, irsend.capture.bits);
EXPECT_EQ(0x700992, irsend.capture.value);
EXPECT_EQ(0x07, irsend.capture.address);
EXPECT_EQ(0x99, irsend.capture.command);
@@ -199,11 +205,11 @@ TEST(TestDecodeLG, NormalDecodeWithRepeatAndStrict) {
// Normal LG 32-bit message with 2 repeats.
irsend.reset();
irsend.sendLG(irsend.encodeLG(0x07, 0x99), LG32_BITS, 2);
irsend.sendLG(irsend.encodeLG(0x07, 0x99), kLg32Bits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, LG32_BITS, true));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, kLg32Bits, true));
EXPECT_EQ(LG, irsend.capture.decode_type);
EXPECT_EQ(LG32_BITS, irsend.capture.bits);
EXPECT_EQ(kLg32Bits, irsend.capture.bits);
EXPECT_EQ(0x700992, irsend.capture.value);
EXPECT_EQ(0x07, irsend.capture.address);
EXPECT_EQ(0x99, irsend.capture.command);
@@ -221,30 +227,30 @@ TEST(TestDecodeLG, DecodeWithNonStrictValues) {
irsend.reset();
irsend.sendLG(0x1);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG_BITS, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG32_BITS, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG32_BITS, false));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, LG_BITS, false));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLgBits, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLg32Bits, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLg32Bits, false));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, kLgBits, false));
// Illegal LG 32-bit message value.
irsend.reset();
irsend.sendLG(0x1111111, LG32_BITS);
irsend.sendLG(0x1111111, kLg32Bits);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG32_BITS, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG_BITS, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLg32Bits, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLgBits, true));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, LG32_BITS, false));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, kLg32Bits, false));
EXPECT_EQ(LG, irsend.capture.decode_type);
EXPECT_EQ(LG32_BITS, irsend.capture.bits);
EXPECT_EQ(kLg32Bits, irsend.capture.bits);
EXPECT_EQ(0x1111111, irsend.capture.value);
EXPECT_EQ(0x11, irsend.capture.address);
EXPECT_EQ(0x1111, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
irsend.reset();
irsend.sendLG(0x1111111, LG32_BITS);
irsend.sendLG(0x1111111, kLg32Bits);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG_BITS, false));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLgBits, false));
}
// Decode unsupported LG message sizes.
@@ -259,10 +265,10 @@ TEST(TestDecodeLG, DecodeWithNonStrictSizes) {
irsend.sendLG(irsend.encodeLG(0x07, 0x99), 16);
irsend.makeDecodeResult();
// Should fail when unexpected against different bit sizes.
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG_BITS, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG32_BITS, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG_BITS, false));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG32_BITS, false));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLgBits, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLg32Bits, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLgBits, false));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLg32Bits, false));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, 16, false));
@@ -277,10 +283,10 @@ TEST(TestDecodeLG, DecodeWithNonStrictSizes) {
irsend.sendLG(0x123456789, 36); // Illegal value LG 36-bit message.
irsend.makeDecodeResult();
// Should fail when unexpected against different bit sizes.
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG_BITS, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG_BITS, false));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG32_BITS, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG32_BITS, false));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLgBits, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLgBits, false));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLg32Bits, true));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLg32Bits, false));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, 36, false));
EXPECT_EQ(LG, irsend.capture.decode_type);
@@ -317,22 +323,21 @@ TEST(TestDecodeLG, DecodeGlobalCacheExample) {
IRrecv irrecv(4);
irsend.begin();
// TODO(anyone): Find a Global Cache example of the LG 28-bit message.
// TODO(anyone): Find a Global Cache example of the LG 28-bit message.
irsend.reset();
// LG (32-bit) code from Global Cache.
uint16_t gc_test[75] = {38000, 1, 69, 341, 170, 21, 64, 21, 21, 21, 64,
21, 64, 21, 21, 21, 64, 21, 21, 21, 21, 21, 64,
21, 21, 21, 64, 21, 64, 21, 21, 21, 64, 21, 21,
21, 21, 21, 64, 21, 21, 21, 64, 21, 21, 21, 64,
21, 64, 21, 64, 21, 21, 21, 21, 21, 64, 21, 21,
21, 64, 21, 21, 21, 21, 21, 21, 21, 64, 21, 1517,
341, 85, 21, 3655};
uint16_t gc_test[75] = {
38000, 1, 69, 341, 170, 21, 64, 21, 21, 21, 64, 21, 64, 21, 21,
21, 64, 21, 21, 21, 21, 21, 64, 21, 21, 21, 64, 21, 64, 21,
21, 21, 64, 21, 21, 21, 21, 21, 64, 21, 21, 21, 64, 21, 21,
21, 64, 21, 64, 21, 64, 21, 21, 21, 21, 21, 64, 21, 21, 21,
64, 21, 21, 21, 21, 21, 21, 21, 64, 21, 1517, 341, 85, 21, 3655};
irsend.sendGC(gc_test, 75);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, LG32_BITS, true));
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture, kLg32Bits, true));
EXPECT_EQ(LG, irsend.capture.decode_type);
EXPECT_EQ(LG32_BITS, irsend.capture.bits);
EXPECT_EQ(kLg32Bits, irsend.capture.bits);
EXPECT_EQ(0xB4B4AE51, irsend.capture.value);
EXPECT_EQ(0xB4B, irsend.capture.address);
EXPECT_EQ(0x4AE5, irsend.capture.command);
@@ -347,12 +352,71 @@ TEST(TestDecodeLG, FailToDecodeNonLGExample) {
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};
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.decodeLG(&irsend.capture));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, LG_BITS, false));
ASSERT_FALSE(irrecv.decodeLG(&irsend.capture, kLgBits, false));
}
// Tests for sendLG2().
// Test sending typical data only.
TEST(TestSendLG2, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
irsend.reset();
irsend.sendLG2(0x880094D);
EXPECT_EQ(
"m3200s9850"
"m550s1600m550s550m550s550m550s550m550s1600m550s550m550s550m550s550"
"m550s550m550s550m550s550m550s550m550s550m550s550m550s550m550s550"
"m550s1600m550s550m550s550m550s1600m550s550m550s1600m550s550m550s550"
"m550s1600m550s1600m550s550m550s1600"
"m550s55250",
irsend.outputStr());
}
TEST(TestDecodeLG2, SyntheticExample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
irsend.sendLG2(0x880094D);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture));
ASSERT_EQ(LG2, irsend.capture.decode_type);
EXPECT_EQ(kLgBits, irsend.capture.bits);
EXPECT_EQ(0x880094D, irsend.capture.value);
}
// Verify decoding of LG variant 2 messages.
TEST(TestDecodeLG2, RealLG2Example) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
// From issue #548
uint16_t rawData[59] = {
3154, 9834, 520, 1634, 424, 606, 424, 568, 462, 570, 462, 1564,
508, 568, 458, 544, 500, 546, 508, 530, 508, 532, 506, 566,
464, 568, 460, 578, 464, 568, 464, 532, 506, 552, 474, 1592,
506, 568, 460, 570, 462, 1564, 506, 606, 424, 1640, 424, 616,
422, 570, 462, 1616, 460, 1584, 500, 544, 506, 1598, 490}; // UNKNOWN
// F6D13AE8
irsend.sendRaw(rawData, 59, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeLG(&irsend.capture));
ASSERT_EQ(LG2, irsend.capture.decode_type);
EXPECT_EQ(kLgBits, irsend.capture.bits);
EXPECT_EQ(0x880094D, irsend.capture.value);
}
+71 -70
View File
@@ -10,7 +10,6 @@
// LL AAAAAAA SS EE RR RR TTT AAAAAAA GG GG
// LLLLLLL AA AA SSSSS EEEEEEE RR RR TTT AA AA GGGGGG
// Tests for sendLasertag().
// Test sending simplest case data only.
@@ -22,31 +21,34 @@ TEST(TestSendLasertag, SendDataOnly) {
irsend.sendLasertag(0x1); // Red 1
EXPECT_EQ(
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333"
"s333m333s333m333s333m333s666m333s100000", irsend.outputStr());
"s333m333s333m333s333m333s666m333s100000",
irsend.outputStr());
irsend.reset();
irsend.sendLasertag(0x2); // Red 2
EXPECT_EQ(
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333"
"m333s333m333s333m333s333m333s666m666s100333", irsend.outputStr());
"m333s333m333s333m333s333m333s666m666s100333",
irsend.outputStr());
irsend.reset();
irsend.sendLasertag(0x51); // Green 1
// Raw: (21)
// m364s364m332s336m384s276m332s364m332s304m416s584m692s724m640s360m304s332m392s612m380,
EXPECT_EQ(
// m364s364m332s336m384s276m332s364m332s304m416s584
// m692s724m640s360m304s332m392s612m380
// m364s364m332s336m384s276m332s364m332s304m416s584
// m692s724m640s360m304s332m392s612m380
"m333s333m333s333m333s333m333s333m333s333m333s666"
"m666s666m666s333m333s333m333s666m333s100000", irsend.outputStr());
"m666s666m666s333m333s333m333s666m333s100000",
irsend.outputStr());
irsend.reset();
// Raw: (19)
// m332s308m412s280m360s336m332s304m444s248m332s644m744s612m696s692m668s636m360
irsend.sendLasertag(0x55); // Green 5
EXPECT_EQ(
// m332s308m412s280m360s336m332s304m444s248m332s644
// m744s612m696s692m668s636m360
// m332s308m412s280m360s336m332s304m444s248m332s644
// m744s612m696s692m668s636m360
"m333s333m333s333m333s333m333s333m333s333m333s666"
"m666s666m666s666m666s666m333s100000",
irsend.outputStr());
@@ -57,22 +59,24 @@ TEST(TestSendLasertag, SendDataWithRepeat) {
irsend.begin();
irsend.reset();
irsend.sendLasertag(0x1, LASERTAG_BITS, 1); // Red 1, one repeat.
irsend.sendLasertag(0x1, kLasertagBits, 1); // Red 1, one repeat.
EXPECT_EQ(
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333s333"
"m333s333m333s333m333s333m333s666m333s100000"
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333s333"
"m333s333m333s333m333s333m333s666m333s100000", irsend.outputStr());
"m333s333m333s333m333s333m333s666m333s100000",
irsend.outputStr());
irsend.reset();
irsend.sendLasertag(0x52, LASERTAG_BITS, 2); // Green 2, two repeats.
irsend.sendLasertag(0x52, kLasertagBits, 2); // Green 2, two repeats.
EXPECT_EQ(
"m333s333m333s333m333s333m333s333m333s333m333s666m666s666m666s333"
"m333s666m666s100333"
"m333s333m333s333m333s333m333s333m333s333m333s666m666s666m666s333"
"m333s666m666s100333"
"m333s333m333s333m333s333m333s333m333s333m333s666m666s666m666s333"
"m333s666m666s100333", irsend.outputStr());
"m333s666m666s100333",
irsend.outputStr());
}
TEST(TestSendLasertag, SmallestMessageSize) {
@@ -100,7 +104,7 @@ TEST(TestDecodeLasertag, NormalSyntheticDecodeWithStrict) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x01, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address); // Unit 1
EXPECT_EQ(0x0, irsend.capture.command); // Team Red
@@ -111,7 +115,7 @@ TEST(TestDecodeLasertag, NormalSyntheticDecodeWithStrict) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x02, irsend.capture.value);
EXPECT_EQ(0x2, irsend.capture.address); // Unit 2
EXPECT_EQ(0x0, irsend.capture.command); // Team Red
@@ -122,7 +126,7 @@ TEST(TestDecodeLasertag, NormalSyntheticDecodeWithStrict) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x06, irsend.capture.value);
EXPECT_EQ(0x6, irsend.capture.address); // Unit 6
EXPECT_EQ(0x0, irsend.capture.command); // Team Red
@@ -133,7 +137,7 @@ TEST(TestDecodeLasertag, NormalSyntheticDecodeWithStrict) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x51, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address); // Unit 1
EXPECT_EQ(0x5, irsend.capture.command); // Team Green
@@ -144,7 +148,7 @@ TEST(TestDecodeLasertag, NormalSyntheticDecodeWithStrict) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x56, irsend.capture.value);
EXPECT_EQ(0x6, irsend.capture.address); // Unit
EXPECT_EQ(0x5, irsend.capture.command); // Team
@@ -158,183 +162,180 @@ TEST(TestDecodeLasertag, RealExamples) {
irsend.begin();
irsend.reset();
uint16_t green3[21] = {
360, 364, 272, 360, 420, 248, 360, 360, 332, 308, 388, 612, 692, 696,
636, 360, 332, 700, 300, 308, 416};
uint16_t green3[21] = {360, 364, 272, 360, 420, 248, 360, 360, 332, 308, 388,
612, 692, 696, 636, 360, 332, 700, 300, 308, 416};
irsend.sendRaw(green3, 21, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x53, irsend.capture.value);
EXPECT_EQ(0x3, irsend.capture.address); // Unit
EXPECT_EQ(0x5, irsend.capture.command); // Team
irsend.reset();
uint16_t green1[21] = {
364, 364, 332, 336, 384, 276, 332, 364, 332, 304, 416, 584, 692, 724,
640, 360, 304, 332, 392, 612, 380};
uint16_t green1[21] = {364, 364, 332, 336, 384, 276, 332, 364, 332, 304, 416,
584, 692, 724, 640, 360, 304, 332, 392, 612, 380};
irsend.sendRaw(green1, 21, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x51, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address); // Unit
EXPECT_EQ(0x5, irsend.capture.command); // Team
irsend.reset();
uint16_t green4[19] = {
336, 304, 412, 280, 360, 360, 304, 308, 420, 276, 332, 636, 744, 620,
688, 724, 640, 360, 304};
uint16_t green4[19] = {336, 304, 412, 280, 360, 360, 304, 308, 420, 276,
332, 636, 744, 620, 688, 724, 640, 360, 304};
irsend.sendRaw(green4, 19, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x54, irsend.capture.value);
EXPECT_EQ(0x4, irsend.capture.address); // Unit
EXPECT_EQ(0x5, irsend.capture.command); // Team
irsend.reset();
uint16_t unit15[25] = {
280, 360, 360, 308, 332, 388, 308, 332, 360, 308, 360, 360, 304, 304,
412, 284, 304, 692, 364, 360, 276, 336, 416, 276, 328};
uint16_t unit15[25] = {280, 360, 360, 308, 332, 388, 308, 332, 360,
308, 360, 360, 304, 304, 412, 284, 304, 692,
364, 360, 276, 336, 416, 276, 328};
irsend.sendRaw(unit15, 25, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x0F, irsend.capture.value);
EXPECT_EQ(0xF, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
irsend.reset();
uint16_t red_unit2_1[23] = {
406, 262, 384, 374, 256, 354, 306, 366, 252, 442, 256, 374,
358, 336, 278, 438, 246, 340, 380, 292, 304, 688, 746};
uint16_t red_unit2_1[23] = {406, 262, 384, 374, 256, 354, 306, 366,
252, 442, 256, 374, 358, 336, 278, 438,
246, 340, 380, 292, 304, 688, 746};
irsend.sendRaw(red_unit2_1, 23, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x02, irsend.capture.value);
EXPECT_EQ(0x2, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
irsend.reset();
uint16_t red_unit2_2[23] = {
302, 306, 302, 392, 196, 476, 278, 352, 304, 348, 278, 438,
226, 382, 328, 366, 252, 458, 196, 392, 302, 688, 644};
uint16_t red_unit2_2[23] = {302, 306, 302, 392, 196, 476, 278, 352,
304, 348, 278, 438, 226, 382, 328, 366,
252, 458, 196, 392, 302, 688, 644};
irsend.sendRaw(red_unit2_2, 23, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x02, irsend.capture.value);
EXPECT_EQ(0x2, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
irsend.reset();
uint16_t red_unit2_3[23] = {
196, 432, 304, 348, 328, 386, 304, 326, 302, 370, 252, 442,
272, 356, 278, 374, 276, 438, 274, 352, 302, 668, 622};
uint16_t red_unit2_3[23] = {196, 432, 304, 348, 328, 386, 304, 326,
302, 370, 252, 442, 272, 356, 278, 374,
276, 438, 274, 352, 302, 668, 622};
irsend.sendRaw(red_unit2_3, 23, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x02, irsend.capture.value);
EXPECT_EQ(0x2, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
irsend.reset();
uint16_t red_unit2_4[23] = {
304, 390, 328, 324, 324, 346, 350, 364, 300, 330, 320, 310,
324, 388, 242, 366, 354, 318, 354, 340, 244, 726, 670};
uint16_t red_unit2_4[23] = {304, 390, 328, 324, 324, 346, 350, 364,
300, 330, 320, 310, 324, 388, 242, 366,
354, 318, 354, 340, 244, 726, 670};
irsend.sendRaw(red_unit2_4, 23, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x02, irsend.capture.value);
EXPECT_EQ(0x2, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
irsend.reset();
uint16_t red_unit1_1_issue532[25] = {
368, 352, 336, 308, 388, 276, 364, 356, 280, 360, 332, 336, 360, 360, 308,
300, 416, 280, 356, 360, 312, 328, 336, 636, 424};
368, 352, 336, 308, 388, 276, 364, 356, 280, 360, 332, 336, 360,
360, 308, 300, 416, 280, 356, 360, 312, 328, 336, 636, 424};
irsend.sendRaw(red_unit1_1_issue532, 25, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x01, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
irsend.reset();
uint16_t red_unit1_2_issue532[25] = {
328, 400, 272, 360, 388, 280, 360, 364, 272, 364, 332, 336, 332, 388, 304,
308, 388, 280, 356, 364, 272, 368, 384, 612, 408};
328, 400, 272, 360, 388, 280, 360, 364, 272, 364, 332, 336, 332,
388, 304, 308, 388, 280, 356, 364, 272, 368, 384, 612, 408};
irsend.sendRaw(red_unit1_2_issue532, 25, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x01, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
irsend.reset();
uint16_t red_unit1_3_issue532[25] = {
416, 284, 356, 336, 328, 336, 384, 308, 328, 368, 304, 308, 412, 280, 328,
368, 272, 368, 376, 312, 332, 392, 276, 700, 272};
416, 284, 356, 336, 328, 336, 384, 308, 328, 368, 304, 308, 412,
280, 328, 368, 272, 368, 376, 312, 332, 392, 276, 700, 272};
irsend.sendRaw(red_unit1_3_issue532, 25, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x01, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
irsend.reset();
uint16_t red_unit2_1_issue532[23] = {
308, 340, 408, 284, 332, 388, 276, 336, 356, 340, 332, 360, 300, 364, 360,
304, 280, 444, 276, 336, 384, 640, 696};
uint16_t red_unit2_1_issue532[23] = {308, 340, 408, 284, 332, 388, 276, 336,
356, 340, 332, 360, 300, 364, 360, 304,
280, 444, 276, 336, 384, 640, 696};
irsend.sendRaw(red_unit2_1_issue532, 23, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x02, irsend.capture.value);
EXPECT_EQ(0x2, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
irsend.reset();
uint16_t red_unit2_2_issue532[23] = {
332, 308, 388, 280, 328, 420, 308, 304, 384, 308, 332, 364, 272, 368, 384,
276, 364, 360, 308, 332, 384, 612, 696};
uint16_t red_unit2_2_issue532[23] = {332, 308, 388, 280, 328, 420, 308, 304,
384, 308, 332, 364, 272, 368, 384, 276,
364, 360, 308, 332, 384, 612, 696};
irsend.sendRaw(red_unit2_2_issue532, 23, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x02, irsend.capture.value);
EXPECT_EQ(0x2, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
irsend.reset();
uint16_t red_unit2_3_issue532[23] = {
392, 332, 340, 272, 448, 276, 364, 328, 340, 272, 396, 296, 340, 380, 312,
296, 400, 272, 364, 352, 284, 720, 672};
uint16_t red_unit2_3_issue532[23] = {392, 332, 340, 272, 448, 276, 364, 328,
340, 272, 396, 296, 340, 380, 312, 296,
400, 272, 364, 352, 284, 720, 672};
irsend.sendRaw(red_unit2_3_issue532, 23, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(kLasertagBits, irsend.capture.bits);
EXPECT_EQ(0x02, irsend.capture.value);
EXPECT_EQ(0x2, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
+143
View File
@@ -0,0 +1,143 @@
// Copyright 2018 David Conran
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for sendLutron().
// Test sending typical data only.
TEST(TestSendLutron, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
irsend.sendLutron(0);
EXPECT_EQ("m2288s230080", irsend.outputStr());
irsend.sendLutron(0xAAAAAAAAA); // Longest possible sequence. (I think)
EXPECT_EQ(
"m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288"
"m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288"
"m2288s2288m2288s2288m2288s2288m2288s152288",
irsend.outputStr());
irsend.sendLutron(0x7FFFFFFFF);
EXPECT_EQ("m82368s150000", irsend.outputStr());
irsend.sendLutron(0x7F88BD120);
EXPECT_EQ(
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
"s161440",
irsend.outputStr());
}
// Test sending with repeats.
TEST(TestSendLutron, SendWithRepeats) {
IRsendTest irsend(0);
irsend.begin();
// Send a command with 0 repeats.
irsend.sendLutron(0x7F88BD120, kLutronBits, 0);
EXPECT_EQ(
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
"s161440",
irsend.outputStr());
// Send a command with 1 repeat.
irsend.sendLutron(0x7F88BD120, kLutronBits, 1);
EXPECT_EQ(
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
"s161440"
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
"s161440",
irsend.outputStr());
// Send a command with 3 repeats.
irsend.sendLutron(0x7F88BD120, kLutronBits, 3);
EXPECT_EQ(
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
"s161440"
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
"s161440"
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
"s161440"
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
"s161440",
irsend.outputStr());
}
// Tests for decodeLutron().
// Decode normal Lutron messages.
TEST(TestDecodeLutron, SyntheticDecode) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Synthesised Normal Lutron messages.
irsend.reset();
irsend.sendLutron(0x7F88BD120);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LUTRON, irsend.capture.decode_type);
EXPECT_EQ(kLutronBits, irsend.capture.bits);
EXPECT_EQ(0x7F88BD120, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
irsend.reset();
irsend.sendLutron(0x0DEADBEEF);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LUTRON, irsend.capture.decode_type);
EXPECT_EQ(kLutronBits, irsend.capture.bits);
EXPECT_EQ(0x0DEADBEEF, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
irsend.reset();
irsend.sendLutron(0x0);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LUTRON, irsend.capture.decode_type);
EXPECT_EQ(kLutronBits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
irsend.reset();
irsend.sendLutron(0x7FFFFFFFF);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LUTRON, irsend.capture.decode_type);
EXPECT_EQ(kLutronBits, irsend.capture.bits);
EXPECT_EQ(0x7FFFFFFFF, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
}
// Decode a documented example
TEST(TestDecodeLutron, DocumentedExampleFullOff) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Full Off code.
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/515
uint16_t rawData[14] = {20518, 6839, 2280, 6839, 2280, 2280, 9119,
2280, 2280, 6839, 2280, 4560, 2280, 11399};
irsend.reset();
irsend.sendRaw(rawData, 14, 40);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LUTRON, irsend.capture.decode_type);
EXPECT_EQ(kLutronBits, irsend.capture.bits);
EXPECT_EQ(0x7F88BD120, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
uint16_t pronto[18] = {0x0000, 0x0069, 0x0007, 0x0000, 0x032a, 0x010e,
0x005a, 0x010e, 0x005a, 0x005a, 0x0168, 0x005a,
0x005a, 0x010e, 0x005a, 0x00b4, 0x005a, 0x01c2};
irsend.reset();
irsend.sendPronto(pronto, 18);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LUTRON, irsend.capture.decode_type);
EXPECT_EQ(kLutronBits, irsend.capture.bits);
EXPECT_EQ(0x7F88BD120, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
}
+124
View File
@@ -0,0 +1,124 @@
// Copyright 2017 David Conran
// Copyright 2018 Brett T. Warden
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// MM MM WW WW MM MM
// MMM MMM WW WW MMM MMM
// MM M MM WW W WW MM M MM
// MM MM WWW WWW MM MM
// MM MM WW WW MM MM
// Tests for sendMWM().
// Test sending simplest case data only.
TEST(TestSendMWM, SendDataOnly) {
IRsendTest irsend(4);
irsend.begin();
irsend.reset();
unsigned char test1[] = {0x96, 0x19, 0x10, 0x24, 0x0A,
0x6B, 0x20, 0x03, 0x82};
/*
++--+-++--
+-++--+++-
+++++-+++-
+++-++-++-
++-+-++++-
+--+-+--+-
++++++-++-
+--++++++-
++-+++++--
*/
irsend.sendMWM(test1, sizeof(test1), 0);
EXPECT_EQ(
"m834s834m417s417m834s834"
"m417s417m834s834m1251s417"
"m2085s417m1251s417"
"m1251s417m834s417m834s417"
"m834s417m417s417m1668s417"
"m417s834m417s417m417s834m417s417"
"m2502s417m834s417"
"m417s834m2502s417"
"m834s417m2085s30834", irsend.outputStr());
irsend.reset();
unsigned char test2[] = {
0x99, 0x26, 0x66, 0x6E, 0xD1, 0x42, 0x06,
0x20, 0xD0, 0x32, 0xF0, 0x0B
// +-++--++--
// ++--++-++-
// ++--++--+-
// ++---+--+-
// +-+++-+---
// ++-++++-+-
// ++--+++++-
// ++++++-++-
// +++++-+---
// ++-++--++-
// +++++-----
// +--+-++++-
};
irsend.sendMWM(test2, sizeof(test2), 0);
EXPECT_EQ(
"m417s417m834s834m834s834"
"m834s834m834s417m834s417"
"m834s834m834s834m417s417"
"m834s1251m417s834m417s417"
"m417s417m1251s417m417s1251"
"m834s417m1668s417m417s417"
"m834s834m2085s417"
"m2502s417m834s417"
"m2085s417m417s1251"
"m834s417m834s834m834s417"
"m2085s2085"
"m417s834m417s417m1668s30417", irsend.outputStr());
}
// Tests for decodeMWM().
// Example data
TEST(TestDecodeMWM, RealExamples) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
uint16_t short_code[] = {
915, 793, 488, 366, 915, 793, 427, 366, 915, 793, 1281, 427,
2136, 366, 1281, 366, 915, 793, 427, 854, 854, 366, 1281, 854,
1708, 366, 488, 793, 854, 427, 427, 427, 427, 366, 854, 427,
2563, 366, 488, 793, 2563, 366, 488, 2075, 427, 34057};
unsigned char short_expected[] = {0x96, 0x19, 0x10, 0x36, 0x0C,
0x53, 0x02, 0x03, 0xDF};
irsend.sendRaw(short_code, sizeof(short_code) / sizeof(short_code[0]), 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MWM, irsend.capture.decode_type);
EXPECT_EQ(8 * sizeof(short_expected) / sizeof(short_expected[0]),
irsend.capture.bits);
EXPECT_STATE_EQ(short_expected, irsend.capture.state, irsend.capture.bits);
irsend.reset();
uint16_t long_code[] = {
427, 427, 854, 854, 854, 793, 915, 793, 854, 366, 915, 366, 854,
854, 854, 793, 488, 366, 915, 1220, 427, 793, 488, 366, 488, 366,
1281, 427, 427, 1220, 915, 366, 1708, 366, 488, 366, 854, 854, 2136,
366, 2563, 366, 854, 427, 2136, 366, 488, 1220, 854, 427, 854, 793,
915, 366, 2136, 2075, 427, 793, 488, 366, 1708, 30517};
unsigned char long_expected[] = {0x99, 0x26, 0x66, 0x6E, 0xD1, 0x42,
0x06, 0x20, 0xD0, 0x32, 0xF0, 0x0B};
irsend.sendRaw(long_code, sizeof(long_code) / sizeof(long_code[0]), 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MWM, irsend.capture.decode_type);
EXPECT_EQ(8 * sizeof(long_expected) / sizeof(long_expected[0]),
irsend.capture.bits);
EXPECT_STATE_EQ(long_expected, irsend.capture.state, irsend.capture.bits);
}
// vim: et:ts=2:sw=2
+23 -22
View File
@@ -1,9 +1,9 @@
// Copyright 2017 David Conran
#include "ir_Magiquest.h"
#include "IRrecv.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Magiquest.h"
#include "gtest/gtest.h"
// Tests for encodeMagiQuest()
@@ -53,7 +53,7 @@ TEST(TestSendMagiQuest, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendMagiQuest(0x12345678ABCD, MAGIQUEST_BITS, 2); // two repeats.
irsend.sendMagiQuest(0x12345678ABCD, kMagiquestBits, 2); // two repeats.
EXPECT_EQ(
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
"m280s850m280s850m280s850m580s600m280s850m280s850m580s600m280s850"
@@ -90,9 +90,9 @@ TEST(TestDecodeMagiQuest, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendMagiQuest(0x0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, MAGIQUEST_BITS, true));
ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, kMagiquestBits, true));
EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
EXPECT_EQ(MAGIQUEST_BITS, irsend.capture.bits);
EXPECT_EQ(kMagiquestBits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -101,9 +101,9 @@ TEST(TestDecodeMagiQuest, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendMagiQuest(irsend.encodeMagiQuest(0x1, 0x1));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, MAGIQUEST_BITS, true));
ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, kMagiquestBits, true));
EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
EXPECT_EQ(MAGIQUEST_BITS, irsend.capture.bits);
EXPECT_EQ(kMagiquestBits, irsend.capture.bits);
EXPECT_EQ(0x10001, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x1, irsend.capture.command);
@@ -112,9 +112,9 @@ TEST(TestDecodeMagiQuest, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendMagiQuest(irsend.encodeMagiQuest(0x12345678, 0xABCD));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, MAGIQUEST_BITS, true));
ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, kMagiquestBits, true));
EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
EXPECT_EQ(MAGIQUEST_BITS, irsend.capture.bits);
EXPECT_EQ(kMagiquestBits, irsend.capture.bits);
EXPECT_EQ(0x12345678ABCD, irsend.capture.value);
EXPECT_EQ(0x12345678, irsend.capture.address);
EXPECT_EQ(0xABCD, irsend.capture.command);
@@ -126,7 +126,7 @@ TEST(TestDecodeMagiQuest, NormalDecodeWithStrict) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
EXPECT_EQ(MAGIQUEST_BITS, irsend.capture.bits);
EXPECT_EQ(kMagiquestBits, irsend.capture.bits);
EXPECT_EQ(0x12345678ABCD, irsend.capture.value);
}
@@ -137,25 +137,26 @@ TEST(TestDecodeMagiQuest, RealExamples) {
irsend.begin();
irsend.reset();
uint16_t rawData[111] = {
262, 842, 298, 858, 238, 866, 240, 890, 238, 866, 240, 862,
244, 886, 242, 860, 246, 858, 554, 604, 264, 840, 560, 622,
266, 836, 552, 604, 556, 626, 262, 866, 240, 864, 264, 838,
268, 862, 244, 886, 536, 620, 530, 628, 554, 628, 532, 624,
244, 858, 552, 604, 264, 840, 268, 862, 266, 838, 268, 888,
240, 864, 242, 860, 268, 862, 244, 860, 236, 868, 272, 832,
264, 866, 240, 890, 532, 598, 268, 834, 294, 836, 270, 834,
262, 866, 272, 858, 238, 866, 534, 622, 268, 836, 270, 860,
268, 862, 526, 604, 264, 892, 530, 600, 268, 836, 586, 598,
270, 834, 556}; // Data from PR #365 captured by coolacid
uint16_t rawData[111] = {262, 842, 298, 858, 238, 866, 240, 890, 238, 866,
240, 862, 244, 886, 242, 860, 246, 858, 554, 604,
264, 840, 560, 622, 266, 836, 552, 604, 556, 626,
262, 866, 240, 864, 264, 838, 268, 862, 244, 886,
536, 620, 530, 628, 554, 628, 532, 624, 244, 858,
552, 604, 264, 840, 268, 862, 266, 838, 268, 888,
240, 864, 242, 860, 268, 862, 244, 860, 236, 868,
272, 832, 264, 866, 240, 890, 532, 598, 268, 834,
294, 836, 270, 834, 262, 866, 272, 858, 238, 866,
534, 622, 268, 836, 270, 860, 268, 862, 526, 604,
264, 892, 530, 600, 268, 836, 586, 598, 270, 834,
556}; // Data from PR #365 captured by coolacid
irsend.sendRaw(rawData, 111, 36000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
EXPECT_EQ(MAGIQUEST_BITS, irsend.capture.bits);
EXPECT_EQ(kMagiquestBits, irsend.capture.bits);
EXPECT_EQ(0x560F40020455, irsend.capture.value);
EXPECT_EQ(0x560F4002, irsend.capture.address); // Wand ID
EXPECT_EQ(0x0455, irsend.capture.command); // Magnitude
EXPECT_EQ(0x0455, irsend.capture.command); // Magnitude
EXPECT_FALSE(irsend.capture.repeat);
}
+175 -164
View File
@@ -1,8 +1,8 @@
// Copyright 2017 David Conran
#include "ir_Midea.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Midea.h"
#include "gtest/gtest.h"
// Tests for sendMidea().
@@ -30,7 +30,8 @@ TEST(TestSendMidea, SendDataOnly) {
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s5600", irsend.outputStr());
"m560s5600",
irsend.outputStr());
irsend.reset();
irsend.sendMidea(0x55AA55AA55AA);
@@ -50,7 +51,8 @@ TEST(TestSendMidea, SendDataOnly) {
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s5600", irsend.outputStr());
"m560s5600",
irsend.outputStr());
irsend.reset();
irsend.sendMidea(0xFFFFFFFFFFFF);
@@ -70,7 +72,8 @@ TEST(TestSendMidea, SendDataOnly) {
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s5600", irsend.outputStr());
"m560s5600",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -79,7 +82,7 @@ TEST(TestSendMidea, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendMidea(0x55AA55AA55AA, MIDEA_BITS, 1); // 1 repeat.
irsend.sendMidea(0x55AA55AA55AA, kMideaBits, 1); // 1 repeat.
EXPECT_EQ(
"m4480s4480"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
@@ -112,57 +115,59 @@ TEST(TestSendMidea, SendWithRepeats) {
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s5600", irsend.outputStr());
irsend.sendMidea(0x55AA55AA55AA, MIDEA_BITS, 2); // 2 repeats.
"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());
"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.
@@ -178,7 +183,8 @@ TEST(TestSendMidea, SendUnusualSize) {
"m560s5600"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s5600", irsend.outputStr());
"m560s5600",
irsend.outputStr());
irsend.reset();
irsend.sendMidea(0x1234567890ABCDEF, 64);
@@ -202,12 +208,13 @@ TEST(TestSendMidea, SendUnusualSize) {
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560"
"m560s560m560s560m560s560m560s1680m560s560m560s560m560s560m560s560"
"m560s5600", irsend.outputStr());
"m560s5600",
irsend.outputStr());
// Bit sizes must be a multiple of 8.
irsend.reset();
irsend.sendMidea(0x0, 17);
EXPECT_EQ("" , irsend.outputStr());
EXPECT_EQ("", irsend.outputStr());
}
// Tests for IRMideaAC class.
@@ -228,7 +235,6 @@ TEST(TestMideaACClass, Power) {
EXPECT_FALSE(midea.getPower());
EXPECT_EQ(0xA1026FFFFFE2, midea.getRaw());
midea.setPower(true);
EXPECT_TRUE(midea.getPower());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
@@ -272,32 +278,32 @@ TEST(TestMideaACClass, OperatingMode) {
midea.begin();
midea.setRaw(0xA1826FFFFF62); // Auto mode already set.
midea.setMode(MIDEA_AC_AUTO);
EXPECT_EQ(MIDEA_AC_AUTO, midea.getMode());
midea.setMode(kMideaACAuto);
EXPECT_EQ(kMideaACAuto, midea.getMode());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw()); // State shouldn't have changed.
midea.setMode(MIDEA_AC_COOL);
EXPECT_EQ(MIDEA_AC_COOL, midea.getMode());
midea.setMode(kMideaACCool);
EXPECT_EQ(kMideaACCool, midea.getMode());
EXPECT_EQ(0xA1806FFFFF61, midea.getRaw());
midea.setMode(MIDEA_AC_AUTO);
EXPECT_EQ(MIDEA_AC_AUTO, midea.getMode());
midea.setMode(kMideaACAuto);
EXPECT_EQ(kMideaACAuto, midea.getMode());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
midea.setMode(MIDEA_AC_HEAT);
EXPECT_EQ(MIDEA_AC_HEAT, midea.getMode());
midea.setMode(kMideaACHeat);
EXPECT_EQ(kMideaACHeat, midea.getMode());
EXPECT_EQ(0xA1836FFFFF63, midea.getRaw());
midea.setMode(MIDEA_AC_DRY);
EXPECT_EQ(MIDEA_AC_DRY, midea.getMode());
midea.setMode(kMideaACDry);
EXPECT_EQ(kMideaACDry, midea.getMode());
EXPECT_EQ(0xA1816FFFFF60, midea.getRaw());
midea.setMode(MIDEA_AC_FAN);
EXPECT_EQ(MIDEA_AC_FAN, midea.getMode());
midea.setMode(kMideaACFan);
EXPECT_EQ(kMideaACFan, midea.getMode());
EXPECT_EQ(0xA1846FFFFF66, midea.getRaw());
midea.setMode(255);
EXPECT_EQ(MIDEA_AC_AUTO, midea.getMode());
EXPECT_EQ(kMideaACAuto, midea.getMode());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
}
@@ -306,26 +312,26 @@ TEST(TestMideaACClass, FanSpeed) {
midea.begin();
midea.setRaw(0xA1826FFFFF62); // Auto mode already set.
EXPECT_EQ(MIDEA_AC_FAN_AUTO, midea.getFan());
EXPECT_EQ(kMideaACFanAuto, midea.getFan());
midea.setFan(MIDEA_AC_FAN_LOW);
EXPECT_EQ(MIDEA_AC_FAN_LOW, 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(MIDEA_AC_FAN_AUTO, midea.getFan());
EXPECT_EQ(kMideaACFanAuto, midea.getFan());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
midea.setFan(MIDEA_AC_FAN_MED);
EXPECT_EQ(MIDEA_AC_FAN_MED, midea.getFan());
midea.setFan(kMideaACFanMed);
EXPECT_EQ(kMideaACFanMed, midea.getFan());
EXPECT_EQ(0xA1926FFFFF7C, midea.getRaw());
midea.setFan(MIDEA_AC_FAN_HI);
EXPECT_EQ(MIDEA_AC_FAN_HI, midea.getFan());
midea.setFan(kMideaACFanHigh);
EXPECT_EQ(kMideaACFanHigh, midea.getFan());
EXPECT_EQ(0xA19A6FFFFF74, midea.getRaw());
midea.setFan(MIDEA_AC_FAN_AUTO);
EXPECT_EQ(MIDEA_AC_FAN_AUTO, midea.getFan());
midea.setFan(kMideaACFanAuto);
EXPECT_EQ(kMideaACFanAuto, midea.getFan());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
}
@@ -333,81 +339,81 @@ TEST(TestMideaACClass, Temperature) {
IRMideaAC midea(0);
midea.begin();
midea.setRaw(0xA1826FFFFF62); // 77F / 25C
EXPECT_EQ(77, midea.getTemp()); // F
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
EXPECT_EQ(25, midea.getTemp(true)); // F
midea.setTemp(0);
EXPECT_EQ(MIDEA_AC_MIN_TEMP_F, midea.getTemp());
EXPECT_EQ(kMideaACMinTempF, midea.getTemp());
EXPECT_EQ(0xA18260FFFF6C, midea.getRaw());
midea.setTemp(255);
EXPECT_EQ(MIDEA_AC_MAX_TEMP_F, midea.getTemp());
EXPECT_EQ(kMideaACMaxTempF, midea.getTemp());
EXPECT_EQ(0xA18278FFFF78, midea.getRaw());
midea.setTemp(0, true);
EXPECT_EQ(MIDEA_AC_MIN_TEMP_F, midea.getTemp());
EXPECT_EQ(kMideaACMinTempF, midea.getTemp());
EXPECT_EQ(0xA18260FFFF6C, midea.getRaw());
midea.setTemp(255, true);
EXPECT_EQ(MIDEA_AC_MAX_TEMP_F, midea.getTemp());
EXPECT_EQ(kMideaACMaxTempF, midea.getTemp());
EXPECT_EQ(0xA18278FFFF78, midea.getRaw());
// fahrenheit min/max etc.
midea.setTemp(MIDEA_AC_MIN_TEMP_F);
EXPECT_EQ(MIDEA_AC_MIN_TEMP_F, midea.getTemp());
midea.setTemp(kMideaACMinTempF);
EXPECT_EQ(kMideaACMinTempF, midea.getTemp());
midea.setTemp(MIDEA_AC_MAX_TEMP_F);
EXPECT_EQ(MIDEA_AC_MAX_TEMP_F, midea.getTemp());
midea.setTemp(kMideaACMaxTempF);
EXPECT_EQ(kMideaACMaxTempF, midea.getTemp());
midea.setTemp(MIDEA_AC_MIN_TEMP_F - 1);
EXPECT_EQ(MIDEA_AC_MIN_TEMP_F, midea.getTemp());
midea.setTemp(kMideaACMinTempF - 1);
EXPECT_EQ(kMideaACMinTempF, midea.getTemp());
midea.setTemp(MIDEA_AC_MAX_TEMP_F + 1);
EXPECT_EQ(MIDEA_AC_MAX_TEMP_F, midea.getTemp());
midea.setTemp(kMideaACMaxTempF + 1);
EXPECT_EQ(kMideaACMaxTempF, midea.getTemp());
// celsius min/max etc.
midea.setTemp(MIDEA_AC_MIN_TEMP_C, true);
EXPECT_EQ(MIDEA_AC_MIN_TEMP_C, midea.getTemp(true));
EXPECT_EQ(MIDEA_AC_MIN_TEMP_F, midea.getTemp(false));
midea.setTemp(kMideaACMinTempC, true);
EXPECT_EQ(kMideaACMinTempC, midea.getTemp(true));
EXPECT_EQ(kMideaACMinTempF, midea.getTemp(false));
midea.setTemp(MIDEA_AC_MAX_TEMP_C, true);
EXPECT_EQ(MIDEA_AC_MAX_TEMP_C, midea.getTemp(true));
EXPECT_EQ(MIDEA_AC_MAX_TEMP_F, midea.getTemp(false));
midea.setTemp(kMideaACMaxTempC, true);
EXPECT_EQ(kMideaACMaxTempC, midea.getTemp(true));
EXPECT_EQ(kMideaACMaxTempF, midea.getTemp(false));
midea.setTemp(MIDEA_AC_MIN_TEMP_C - 1, true);
EXPECT_EQ(MIDEA_AC_MIN_TEMP_C, midea.getTemp(true));
midea.setTemp(kMideaACMinTempC - 1, true);
EXPECT_EQ(kMideaACMinTempC, midea.getTemp(true));
midea.setTemp(MIDEA_AC_MAX_TEMP_C + 1, true);
EXPECT_EQ(MIDEA_AC_MAX_TEMP_C, midea.getTemp(true));
EXPECT_EQ(MIDEA_AC_MAX_TEMP_F, midea.getTemp(false));
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
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
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
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
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
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
midea.setTemp(70); // F
EXPECT_EQ(21, midea.getTemp(true)); // C
EXPECT_EQ(70, midea.getTemp(false)); // F
EXPECT_EQ(70, midea.getTemp()); // F
EXPECT_EQ(70, midea.getTemp()); // F
}
// Tests for controlling the sleep state.
@@ -431,12 +437,14 @@ TEST(TestMideaACClass, HumanReadableOutput) {
midea.begin();
midea.setRaw(0xA1826FFFFF62);
EXPECT_EQ("Power: On, Mode: 2 (AUTO), Temp: 25C/77F, Fan: 0 (AUTO), "
"Sleep: Off", midea.toString());
EXPECT_EQ(
"Power: On, Mode: 2 (AUTO), Temp: 25C/77F, Fan: 0 (AUTO), "
"Sleep: Off",
midea.toString());
midea.off();
midea.setTemp(25);
midea.setFan(MIDEA_AC_FAN_HI);
midea.setMode(MIDEA_AC_DRY);
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());
@@ -458,9 +466,9 @@ TEST(TestDecodeMidea, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendMidea(0x1234567890DF);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(kMideaBits, irsend.capture.bits);
EXPECT_EQ(0x1234567890DF, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -470,9 +478,9 @@ TEST(TestDecodeMidea, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendMidea(0x0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(kMideaBits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -482,9 +490,9 @@ TEST(TestDecodeMidea, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendMidea(0xFFFFFFFFFFA0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(kMideaBits, irsend.capture.bits);
EXPECT_EQ(0xFFFFFFFFFFA0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -497,7 +505,7 @@ TEST(TestDecodeMidea, NormalDecodeWithStrict) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(kMideaBits, irsend.capture.bits);
EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -512,24 +520,24 @@ TEST(TestDecodeMidea, NormalDecodeWithRepeatAndStrict) {
// Normal Midea 48-bit message with 2 repeats.
irsend.reset();
irsend.sendMidea(0xA18263FFFF6E, MIDEA_BITS, 2);
irsend.sendMidea(0xA18263FFFF6E, kMideaBits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(kMideaBits, irsend.capture.bits);
EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
EXPECT_FALSE(irsend.capture.repeat);
irsend.makeDecodeResult(2 * (2 * MIDEA_BITS + 4));
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
irsend.makeDecodeResult(2 * (2 * kMideaBits + 4));
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(kMideaBits, irsend.capture.bits);
EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
irsend.makeDecodeResult(4 * (2 * MIDEA_BITS + 4));
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
irsend.makeDecodeResult(4 * (2 * kMideaBits + 4));
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(kMideaBits, irsend.capture.bits);
EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
}
@@ -543,7 +551,7 @@ TEST(TestDecodeMidea, DecodeWithNonStrictSizes) {
irsend.sendMidea(0x12, 8); // Illegal value Midea 8-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
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);
@@ -554,7 +562,7 @@ TEST(TestDecodeMidea, DecodeWithNonStrictSizes) {
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, MIDEA_BITS, true));
ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, kMideaBits, true));
irsend.makeDecodeResult();
// Should fail with strict when we ask for the wrong bit size.
@@ -567,7 +575,7 @@ TEST(TestDecodeMidea, DecodeWithNonStrictSizes) {
// Decode should fail if asked to decode non-multiples of 8 bits.
irsend.reset();
irsend.sendMidea(0x123456, MIDEA_BITS, 2);
irsend.sendMidea(0x123456, kMideaBits, 2);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, 9, false));
}
@@ -597,14 +605,15 @@ TEST(TestDecodeMidea, FailToDecodeNonMideaExample) {
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};
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, MIDEA_BITS, false));
ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, kMideaBits, false));
}
// Decode against a real capture reported by a user. See issue #354
@@ -615,26 +624,28 @@ TEST(TestDecodeMidea, DecodeRealExample) {
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};
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(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(kMideaBits, irsend.capture.bits);
EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
}
+415 -131
View File
@@ -1,8 +1,10 @@
// Copyright 2017 David Conran
// Copyright 2018 denxhun
#include "ir_Mitsubishi.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Mitsubishi.h"
#include "gtest/gtest.h"
// Tests for sendMitsubishi().
@@ -20,7 +22,8 @@ TEST(TestSendMitsubishi, SendDataOnly) {
"m300s28080"
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s28080", irsend.outputStr());
"m300s28080",
irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi(0x0);
@@ -30,7 +33,8 @@ TEST(TestSendMitsubishi, SendDataOnly) {
"m300s34080"
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
"m300s34080", irsend.outputStr());
"m300s34080",
irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi(0x4321);
@@ -40,7 +44,8 @@ TEST(TestSendMitsubishi, SendDataOnly) {
"m300s28080"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s2100"
"m300s900m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100"
"m300s28080", irsend.outputStr());
"m300s28080",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -49,22 +54,24 @@ TEST(TestSendMitsubishi, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendMitsubishi(0xE242, MITSUBISHI_BITS, 0); // 0 repeat.
irsend.sendMitsubishi(0xE242, kMitsubishiBits, 0); // 0 repeat.
EXPECT_EQ(
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s28080", irsend.outputStr());
"m300s28080",
irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi(0xE242, MITSUBISHI_BITS, 1); // 1 repeat.
irsend.sendMitsubishi(0xE242, kMitsubishiBits, 1); // 1 repeat.
EXPECT_EQ(
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s28080"
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s28080", irsend.outputStr());
irsend.sendMitsubishi(0xE242, MITSUBISHI_BITS, 2); // 2 repeats.
"m300s28080",
irsend.outputStr());
irsend.sendMitsubishi(0xE242, kMitsubishiBits, 2); // 2 repeats.
EXPECT_EQ(
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
@@ -74,7 +81,8 @@ TEST(TestSendMitsubishi, SendWithRepeats) {
"m300s28080"
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s28080", irsend.outputStr());
"m300s28080",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -88,7 +96,8 @@ TEST(TestSendMitsubishi, SendUnusualSize) {
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
"m300s43680"
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
"m300s43680", irsend.outputStr());
"m300s43680",
irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi(0x1234567890ABCDEF, 64);
@@ -110,7 +119,8 @@ TEST(TestSendMitsubishi, SendUnusualSize) {
"m300s2100m300s900m300s2100m300s900m300s2100m300s900m300s2100m300s2100"
"m300s2100m300s2100m300s900m300s900m300s2100m300s2100m300s900m300s2100"
"m300s2100m300s2100m300s2100m300s900m300s2100m300s2100m300s2100m300s2100"
"m300s28080", irsend.outputStr());
"m300s28080",
irsend.outputStr());
}
// Decode normal Mitsubishi messages.
@@ -123,9 +133,9 @@ TEST(TestDecodeMitsubishi, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendMitsubishi(0xC2B8);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, MITSUBISHI_BITS, true));
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
EXPECT_EQ(0xC2B8, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -134,9 +144,9 @@ TEST(TestDecodeMitsubishi, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendMitsubishi(0x0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, MITSUBISHI_BITS, true));
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -145,9 +155,9 @@ TEST(TestDecodeMitsubishi, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendMitsubishi(0xFFFF);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, MITSUBISHI_BITS, true));
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
EXPECT_EQ(0xFFFF, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -158,14 +168,14 @@ TEST(TestDecodeMitsubishi, NormalDecodeWithStrict) {
// 12 bits.
irsend.sendMitsubishi(0xFFF, 12);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, MITSUBISHI_BITS, true));
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 12, true));
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 64, true));
// 32 bits.
irsend.sendMitsubishi(0xFFF, 32);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, MITSUBISHI_BITS, true));
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 12, true));
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 32, true));
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 64, true));
@@ -179,11 +189,11 @@ TEST(TestDecodeMitsubishi, NormalDecodeWithRepeatAndStrict) {
// Normal Mitsubishi 16-bit message with 2 repeats.
irsend.reset();
irsend.sendMitsubishi(0xC2B8, MITSUBISHI_BITS, 2);
irsend.sendMitsubishi(0xC2B8, kMitsubishiBits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, MITSUBISHI_BITS, true));
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
EXPECT_EQ(0xC2B8, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -191,11 +201,11 @@ TEST(TestDecodeMitsubishi, NormalDecodeWithRepeatAndStrict) {
// Normal Mitsubishi 16-bit message with 0 repeats.
irsend.reset();
irsend.sendMitsubishi(0xC2B8, MITSUBISHI_BITS, 0);
irsend.sendMitsubishi(0xC2B8, kMitsubishiBits, 0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, MITSUBISHI_BITS, true));
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
EXPECT_EQ(0xC2B8, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -212,7 +222,7 @@ TEST(TestDecodeMitsubishi, DecodeWithNonStrictValues) {
irsend.sendMitsubishi(0x0, 8); // Illegal sized Mitsubishi 8-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, MITSUBISHI_BITS, true));
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, 8, false));
EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
@@ -227,7 +237,7 @@ TEST(TestDecodeMitsubishi, DecodeWithNonStrictValues) {
irsend.sendMitsubishi(0xFEDCBA9876543210, 64);
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, MITSUBISHI_BITS, true));
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, 64, false));
EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
@@ -247,15 +257,15 @@ TEST(TestDecodeMitsubishi, DecodeGlobalCacheExample) {
irsend.reset();
// Mitsubishi "Power On" (16-bit) code from Global Cache.
uint16_t gc_test[37] = {33000, 1, 1, 10, 70, 10, 70, 10, 70, 10, 30, 10, 30,
10, 30, 10, 70, 10, 30, 10, 30, 10, 70, 10, 30,
10, 30, 10, 30, 10, 30, 10, 70, 10, 30, 10, 936};
uint16_t gc_test[37] = {33000, 1, 1, 10, 70, 10, 70, 10, 70, 10, 30, 10, 30,
10, 30, 10, 70, 10, 30, 10, 30, 10, 70, 10, 30, 10,
30, 10, 30, 10, 30, 10, 70, 10, 30, 10, 936};
irsend.sendGC(gc_test, 37);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture));
EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
EXPECT_EQ(0xE242, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -270,15 +280,16 @@ TEST(TestDecodeMitsubishi, FailToDecodeNonMitsubishiExample) {
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};
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.decodeMitsubishi(&irsend.capture));
ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, MITSUBISHI_BITS,
false));
ASSERT_FALSE(
irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, false));
}
// Tests for Mitsubishi A/C methods.
@@ -288,7 +299,7 @@ TEST(TestSendMitsubishiAC, SendDataOnly) {
IRsendTest irsend(4);
irsend.begin();
uint8_t mitsub_code[MITSUBISHI_AC_STATE_LENGTH] = {
uint8_t mitsub_code[kMitsubishiACStateLength] = {
0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x08, 0x06, 0x30,
0x45, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F};
irsend.reset();
@@ -333,7 +344,8 @@ TEST(TestSendMitsubishiAC, SendDataOnly) {
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
"m440s17100", irsend.outputStr());
"m440s17100",
irsend.outputStr());
}
// Test sending with repeats.
@@ -342,11 +354,11 @@ TEST(TestSendMitsubishiAC, SendWithRepeats) {
irsend.begin();
irsend.reset();
uint8_t mitsub_code[MITSUBISHI_AC_STATE_LENGTH] = {
uint8_t mitsub_code[kMitsubishiACStateLength] = {
0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x08, 0x06, 0x30,
0x45, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F};
irsend.sendMitsubishiAC(mitsub_code, MITSUBISHI_AC_STATE_LENGTH, 0);
irsend.sendMitsubishiAC(mitsub_code, kMitsubishiACStateLength, 0);
EXPECT_EQ(
"m3400s1750"
"m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
@@ -367,10 +379,11 @@ TEST(TestSendMitsubishiAC, SendWithRepeats) {
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
"m440s17100", irsend.outputStr());
"m440s17100",
irsend.outputStr());
irsend.reset();
irsend.sendMitsubishiAC(mitsub_code, MITSUBISHI_AC_STATE_LENGTH, 2);
irsend.sendMitsubishiAC(mitsub_code, kMitsubishiACStateLength, 2);
EXPECT_EQ(
"m3400s1750"
"m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
@@ -431,7 +444,8 @@ TEST(TestSendMitsubishiAC, SendWithRepeats) {
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
"m440s17100", irsend.outputStr());
"m440s17100",
irsend.outputStr());
}
// Test sending atypical sizes.
@@ -442,10 +456,9 @@ TEST(TestSendMitsubishiAC, SendUnexpectedSizes) {
uint8_t mitsub_short_code[17] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20,
0x08, 0x06, 0x30, 0x45, 0x67, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00};
uint8_t mitsub_long_code[19] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20,
0x08, 0x06, 0x30, 0x45, 0x67, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
0x00};
uint8_t mitsub_long_code[19] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x08,
0x06, 0x30, 0x45, 0x67, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1F, 0x00};
irsend.reset();
irsend.sendMitsubishiAC(mitsub_short_code, 17);
ASSERT_EQ("", irsend.outputStr());
@@ -494,7 +507,8 @@ TEST(TestSendMitsubishiAC, SendUnexpectedSizes) {
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m440s17100", irsend.outputStr());
"m440s17100",
irsend.outputStr());
}
// Tests for IRMitsubishiAC class.
@@ -521,22 +535,22 @@ TEST(TestMitsubishiACClass, Temperature) {
mitsub.begin();
mitsub.setTemp(0);
EXPECT_EQ(MITSUBISHI_AC_MIN_TEMP, mitsub.getTemp());
EXPECT_EQ(kMitsubishiAcMinTemp, mitsub.getTemp());
mitsub.setTemp(255);
EXPECT_EQ(MITSUBISHI_AC_MAX_TEMP, mitsub.getTemp());
EXPECT_EQ(kMitsubishiAcMaxTemp, mitsub.getTemp());
mitsub.setTemp(MITSUBISHI_AC_MIN_TEMP);
EXPECT_EQ(MITSUBISHI_AC_MIN_TEMP, mitsub.getTemp());
mitsub.setTemp(kMitsubishiAcMinTemp);
EXPECT_EQ(kMitsubishiAcMinTemp, mitsub.getTemp());
mitsub.setTemp(MITSUBISHI_AC_MAX_TEMP);
EXPECT_EQ(MITSUBISHI_AC_MAX_TEMP, mitsub.getTemp());
mitsub.setTemp(kMitsubishiAcMaxTemp);
EXPECT_EQ(kMitsubishiAcMaxTemp, mitsub.getTemp());
mitsub.setTemp(MITSUBISHI_AC_MIN_TEMP - 1);
EXPECT_EQ(MITSUBISHI_AC_MIN_TEMP, mitsub.getTemp());
mitsub.setTemp(kMitsubishiAcMinTemp - 1);
EXPECT_EQ(kMitsubishiAcMinTemp, mitsub.getTemp());
mitsub.setTemp(MITSUBISHI_AC_MAX_TEMP + 1);
EXPECT_EQ(MITSUBISHI_AC_MAX_TEMP, mitsub.getTemp());
mitsub.setTemp(kMitsubishiAcMaxTemp + 1);
EXPECT_EQ(kMitsubishiAcMaxTemp, mitsub.getTemp());
mitsub.setTemp(17);
EXPECT_EQ(17, mitsub.getTemp());
@@ -555,60 +569,60 @@ TEST(TestMitsubishiACClass, OperatingMode) {
IRMitsubishiAC mitsub(0);
mitsub.begin();
mitsub.setMode(MITSUBISHI_AC_AUTO);
EXPECT_EQ(MITSUBISHI_AC_AUTO, mitsub.getMode());
mitsub.setMode(kMitsubishiAcAuto);
EXPECT_EQ(kMitsubishiAcAuto, mitsub.getMode());
mitsub.setMode(MITSUBISHI_AC_COOL);
EXPECT_EQ(MITSUBISHI_AC_COOL, mitsub.getMode());
mitsub.setMode(kMitsubishiAcCool);
EXPECT_EQ(kMitsubishiAcCool, mitsub.getMode());
mitsub.setMode(MITSUBISHI_AC_HEAT);
EXPECT_EQ(MITSUBISHI_AC_HEAT, mitsub.getMode());
mitsub.setMode(kMitsubishiAcHeat);
EXPECT_EQ(kMitsubishiAcHeat, mitsub.getMode());
mitsub.setMode(MITSUBISHI_AC_DRY);
EXPECT_EQ(MITSUBISHI_AC_DRY, mitsub.getMode());
mitsub.setMode(kMitsubishiAcDry);
EXPECT_EQ(kMitsubishiAcDry, mitsub.getMode());
mitsub.setMode(MITSUBISHI_AC_AUTO + 1);
EXPECT_EQ(MITSUBISHI_AC_AUTO, mitsub.getMode());
mitsub.setMode(kMitsubishiAcAuto + 1);
EXPECT_EQ(kMitsubishiAcAuto, mitsub.getMode());
mitsub.setMode(255);
EXPECT_EQ(MITSUBISHI_AC_AUTO, mitsub.getMode());
EXPECT_EQ(kMitsubishiAcAuto, mitsub.getMode());
}
TEST(TestMitsubishiACClass, VaneMode) {
IRMitsubishiAC mitsub(0);
mitsub.begin();
mitsub.setVane(MITSUBISHI_AC_VANE_AUTO);
EXPECT_EQ(MITSUBISHI_AC_VANE_AUTO, mitsub.getVane());
mitsub.setVane(kMitsubishiAcVaneAuto);
EXPECT_EQ(kMitsubishiAcVaneAuto, mitsub.getVane());
mitsub.setVane(MITSUBISHI_AC_VANE_AUTO + 1);
EXPECT_EQ(MITSUBISHI_AC_VANE_AUTO + 1, mitsub.getVane());
mitsub.setVane(kMitsubishiAcVaneAuto + 1);
EXPECT_EQ(kMitsubishiAcVaneAuto + 1, mitsub.getVane());
mitsub.setVane(MITSUBISHI_AC_VANE_AUTO_MOVE);
EXPECT_EQ(MITSUBISHI_AC_VANE_AUTO_MOVE, mitsub.getVane());
mitsub.setVane(kMitsubishiAcVaneAutoMove);
EXPECT_EQ(kMitsubishiAcVaneAutoMove, mitsub.getVane());
mitsub.setVane(MITSUBISHI_AC_VANE_AUTO_MOVE + 1);
EXPECT_EQ(MITSUBISHI_AC_VANE_AUTO_MOVE, mitsub.getVane());
mitsub.setVane(kMitsubishiAcVaneAutoMove + 1);
EXPECT_EQ(kMitsubishiAcVaneAutoMove, mitsub.getVane());
mitsub.setVane(MITSUBISHI_AC_VANE_AUTO_MOVE - 1);
EXPECT_EQ(MITSUBISHI_AC_VANE_AUTO_MOVE - 1, mitsub.getVane());
mitsub.setVane(kMitsubishiAcVaneAutoMove - 1);
EXPECT_EQ(kMitsubishiAcVaneAutoMove - 1, mitsub.getVane());
}
TEST(TestMitsubishiACClass, FanSpeed) {
IRMitsubishiAC mitsub(0);
mitsub.begin();
mitsub.setFan(MITSUBISHI_AC_FAN_AUTO);
EXPECT_EQ(MITSUBISHI_AC_FAN_AUTO, mitsub.getFan());
mitsub.setFan(kMitsubishiAcFanAuto);
EXPECT_EQ(kMitsubishiAcFanAuto, mitsub.getFan());
mitsub.setFan(255);
EXPECT_EQ(MITSUBISHI_AC_FAN_REAL_MAX, mitsub.getFan());
EXPECT_EQ(kMitsubishiAcFanRealMax, mitsub.getFan());
mitsub.setFan(MITSUBISHI_AC_FAN_MAX);
EXPECT_EQ(MITSUBISHI_AC_FAN_REAL_MAX, mitsub.getFan());
mitsub.setFan(kMitsubishiAcFanMax);
EXPECT_EQ(kMitsubishiAcFanRealMax, mitsub.getFan());
mitsub.setFan(MITSUBISHI_AC_FAN_MAX - 1);
EXPECT_EQ(MITSUBISHI_AC_FAN_MAX - 1, mitsub.getFan());
mitsub.setFan(kMitsubishiAcFanMax - 1);
EXPECT_EQ(kMitsubishiAcFanMax - 1, mitsub.getFan());
mitsub.setFan(1);
EXPECT_EQ(1, mitsub.getFan());
@@ -622,11 +636,11 @@ TEST(TestMitsubishiACClass, FanSpeed) {
mitsub.setFan(4);
EXPECT_EQ(4, mitsub.getFan());
mitsub.setFan(MITSUBISHI_AC_FAN_SILENT);
EXPECT_EQ(MITSUBISHI_AC_FAN_SILENT, mitsub.getFan());
mitsub.setFan(kMitsubishiAcFanSilent);
EXPECT_EQ(kMitsubishiAcFanSilent, mitsub.getFan());
mitsub.setFan(MITSUBISHI_AC_FAN_SILENT + 1);
EXPECT_EQ(MITSUBISHI_AC_FAN_REAL_MAX, mitsub.getFan());
mitsub.setFan(kMitsubishiAcFanSilent + 1);
EXPECT_EQ(kMitsubishiAcFanRealMax, mitsub.getFan());
}
TEST(TestMitsubishiACClass, MessageConstuction) {
@@ -636,14 +650,14 @@ TEST(TestMitsubishiACClass, MessageConstuction) {
irsend.begin();
mitsub.setFan(1);
mitsub.setMode(MITSUBISHI_AC_COOL);
mitsub.setMode(kMitsubishiAcCool);
mitsub.setTemp(27);
mitsub.setVane(3);
mitsub.on();
// Check everything for kicks.
EXPECT_EQ(1, mitsub.getFan());
EXPECT_EQ(MITSUBISHI_AC_COOL, mitsub.getMode());
EXPECT_EQ(kMitsubishiAcCool, mitsub.getMode());
EXPECT_EQ(27, mitsub.getTemp());
EXPECT_EQ(3, mitsub.getVane());
EXPECT_TRUE(mitsub.getPower());
@@ -660,7 +674,7 @@ TEST(TestMitsubishiACClass, MessageConstuction) {
"m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
"m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420m450s420"
"m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420"
"m450s420m450s1300m450s1300m450s420m450s1300m450s1300m450s420m450s420"
"m450s1300m450s420m450s420m450s1300m450s1300m450s420m450s1300m450s420"
"m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
@@ -669,7 +683,7 @@ TEST(TestMitsubishiACClass, MessageConstuction) {
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s1300m450s420m450s420m450s1300m450s420"
"m450s420m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s420"
"m440s17100"
"m3400s1750"
"m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
@@ -680,7 +694,7 @@ TEST(TestMitsubishiACClass, MessageConstuction) {
"m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
"m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420m450s420"
"m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420"
"m450s420m450s1300m450s1300m450s420m450s1300m450s1300m450s420m450s420"
"m450s1300m450s420m450s420m450s1300m450s1300m450s420m450s1300m450s420"
"m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
@@ -689,11 +703,278 @@ TEST(TestMitsubishiACClass, MessageConstuction) {
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
"m450s420m450s420m450s420m450s1300m450s420m450s420m450s1300m450s420"
"m440s17100", irsend.outputStr());
"m450s420m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s420"
"m440s17100",
irsend.outputStr());
}
// Tests for sendMitsubishi2().
// Tests for decodeMitsubishiAC() with real captured example.
TEST(TestDecodeMitsubishiAC, DecodeRealExample) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
// Mitsubishi AC "Power On, 16C, low fan, vane auto move".
uint16_t rawData[583] = {
3476, 1708, 416, 1264, 420, 1260, 414, 400, 448, 390, 446, 392,
444, 1236, 440, 400, 446, 392, 446, 1234, 440, 1266, 418, 396,
442, 1264, 420, 394, 444, 394, 442, 1264, 422, 1260, 414, 398,
440, 1266, 418, 1264, 420, 392, 446, 392, 444, 1264, 422, 392,
446, 392, 446, 1260, 414, 400, 448, 390, 446, 392, 444, 394,
442, 396, 442, 398, 440, 424, 412, 400, 448, 390, 446, 392,
446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400,
448, 390, 446, 392, 446, 392, 444, 396, 442, 396, 440, 398,
440, 400, 438, 400, 448, 390, 446, 392, 444, 1236, 440, 1266,
418, 394, 442, 396, 440, 398, 438, 402, 446, 1232, 444, 396,
440, 1268, 418, 394, 442, 396, 440, 398, 440, 400, 448, 390,
448, 1232, 442, 1266, 420, 394, 444, 1264, 422, 1260, 416, 396,
440, 398, 450, 1230, 444, 396, 442, 398, 440, 1266, 418, 1264,
422, 1258, 416, 1266, 418, 394, 442, 396, 440, 398, 440, 398,
438, 400, 446, 392, 446, 392, 446, 392, 444, 396, 442, 396,
440, 398, 438, 398, 438, 400, 448, 392, 446, 392, 444, 394,
444, 396, 442, 396, 440, 398, 438, 400, 448, 390, 448, 392,
444, 394, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400,
448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396,
440, 398, 438, 400, 448, 390, 446, 392, 444, 394, 444, 394,
442, 396, 440, 398, 440, 398, 438, 400, 448, 390, 446, 392,
444, 394, 444, 394, 442, 396, 440, 398, 438, 400, 438, 400,
448, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398,
438, 1240, 444, 1264, 422, 390, 446, 392, 446, 1260, 414, 1268,
418, 1264, 422, 12984, 3478, 1708, 418, 1264, 422, 1234, 442, 398,
448, 390, 446, 392, 446, 1234, 440, 400, 448, 390, 446, 1234,
442, 1266, 420, 392, 444, 1264, 420, 392, 446, 394, 444, 1236,
448, 1260, 416, 398, 440, 1266, 418, 1262, 422, 390, 446, 392,
444, 1234, 440, 400, 448, 392, 446, 1234, 440, 398, 450, 390,
446, 392, 444, 394, 444, 394, 442, 396, 442, 398, 440, 400,
438, 400, 448, 390, 446, 392, 444, 394, 442, 396, 442, 396,
440, 398, 438, 400, 448, 390, 446, 392, 446, 392, 444, 394,
442, 396, 442, 396, 440, 398, 438, 400, 448, 416, 420, 392,
444, 1234, 440, 1240, 446, 394, 442, 396, 440, 398, 438, 400,
448, 1232, 444, 396, 440, 1240, 446, 394, 442, 396, 440, 398,
440, 400, 448, 390, 446, 1232, 444, 1238, 446, 394, 444, 1236,
448, 1232, 442, 396, 440, 398, 448, 1232, 444, 396, 440, 398,
438, 1242, 444, 1238, 448, 1234, 442, 1240, 444, 394, 442, 396,
440, 398, 438, 400, 448, 390, 446, 394, 444, 420, 416, 394,
444, 396, 440, 398, 440, 398, 438, 400, 448, 418, 420, 418,
418, 394, 442, 396, 442, 396, 440, 424, 412, 400, 448, 390,
446, 392, 446, 420, 418, 420, 416, 396, 440, 398, 440, 424,
412, 426, 420, 418, 420, 392, 444, 394, 444, 422, 416, 422,
414, 398, 440, 426, 422, 388, 448, 416, 420, 418, 418, 422,
416, 422, 414, 424, 414, 398, 438, 426, 422, 418, 420, 390,
446, 418, 418, 420, 416, 396, 440, 424, 412, 426, 412, 400,
446, 418, 420, 420, 418, 420, 416, 422, 414, 422, 414, 424,
412, 426, 422, 390, 446, 1232, 442, 1240, 446, 394, 444, 394,
442, 1238, 446, 1234, 440, 1240, 444}; // UNKNOWN F6FDB82B
irsend.sendRaw(rawData, 583, 33);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MITSUBISHI_AC, irsend.capture.decode_type);
EXPECT_EQ(kMitsubishiACBits, irsend.capture.bits);
uint8_t expected[kMitsubishiACStateLength] = {
0x23, 0xCB, 0x26, 0x01, 0x00, 0x00, 0x18, 0x0A, 0x36,
0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6};
EXPECT_STATE_EQ(expected, irsend.capture.state, kMitsubishiACBits);
}
// Tests for decodeMitsubishiAC() when the first payload has an error.
TEST(TestDecodeMitsubishiAC, DecodeRealExampleRepeatNeeded) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
// Mitsubishi AC "Power On, 16C, low fan, vane auto move".
uint16_t rawData[583] = {
3476, 1708, 416, 1264, 420, 1260, 414, 400, 448, 390, 446, 392, 444, 1236,
440, 400, 446, 392, 446, 1234, 440, 1266, 418, 396, 442, 1264, 420, 394,
444, 394, 442, 1264, 422, 1260, 414, 398, 440, 1266, 418, 1264, 420, 392,
446, 392, 444, 1264, 422, 392, 446, 392, 446, 1260, 414, 400, 448, 390,
446, 392, 444, 394, 442, 396, 442, 398, 440, 424, 412, 400, 448, 390, 446,
392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400, 448, 390,
446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 440, 400, 438, 400, 448,
390, 446, 392, 444, 1236, 440, 1266, 418, 394, 442, 396, 440, 398, 438,
402, 446, 1232, 444, 396, 440, 1268, 418, 394, 442, 396, 440, 398,
// space 699 is not recognizable:
440, 400, 448, 390, 448, 1232, 442, 1266, 420, 394, 444, 1264, 699, 1260,
416, 396, 440, 398, 450, 1230, 444, 396, 442, 398, 440, 1266, 418, 1264,
422, 1258, 416, 1266, 418, 394, 442, 396, 440, 398, 440, 398, 438, 400,
446, 392, 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 438, 398, 438,
400, 448, 392, 446, 392, 444, 394, 444, 396, 442, 396, 440, 398, 438, 400,
448, 390, 448, 392, 444, 394, 444, 394, 442, 396, 442, 396, 440, 398, 438,
400, 448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398,
438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, 440,
398, 438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398,
438, 400, 438, 400, 448, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440,
398, 438, 1240, 444, 1264, 422, 390, 446, 392, 446, 1260, 414, 1268, 418,
1264, 422, 12984, 3478, 1708, 418, 1264, 422, 1234, 442, 398, 448, 390,
446, 392, 446, 1234, 440, 400, 448, 390, 446, 1234, 442, 1266, 420, 392,
444, 1264, 420, 392, 446, 394, 444, 1236, 448, 1260, 416, 398, 440, 1266,
418, 1262, 422, 390, 446, 392, 444, 1234, 440, 400, 448, 392, 446, 1234,
440, 398, 450, 390, 446, 392, 444, 394, 444, 394, 442, 396, 442, 398, 440,
400, 438, 400, 448, 390, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398,
438, 400, 448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440,
398, 438, 400, 448, 416, 420, 392, 444, 1234, 440, 1240, 446, 394, 442,
396, 440, 398, 438, 400, 448, 1232, 444, 396, 440, 1240, 446, 394, 442,
396, 440, 398, 440, 400, 448, 390, 446, 1232, 444, 1238, 446, 394, 444,
1236, 448, 1232, 442, 396, 440, 398, 448, 1232, 444, 396, 440, 398, 438,
1242, 444, 1238, 448, 1234, 442, 1240, 444, 394, 442, 396, 440, 398, 438,
400, 448, 390, 446, 394, 444, 420, 416, 394, 444, 396, 440, 398, 440, 398,
438, 400, 448, 418, 420, 418, 418, 394, 442, 396, 442, 396, 440, 424, 412,
400, 448, 390, 446, 392, 446, 420, 418, 420, 416, 396, 440, 398, 440, 424,
412, 426, 420, 418, 420, 392, 444, 394, 444, 422, 416, 422, 414, 398, 440,
426, 422, 388, 448, 416, 420, 418, 418, 422, 416, 422, 414, 424, 414, 398,
438, 426, 422, 418, 420, 390, 446, 418, 418, 420, 416, 396, 440, 424, 412,
426, 412, 400, 446, 418, 420, 420, 418, 420, 416, 422, 414, 422, 414, 424,
412, 426, 422, 390, 446, 1232, 442, 1240, 446, 394, 444, 394, 442, 1238,
446, 1234, 440, 1240, 444}; // UNKNOWN F6FDB82B
irsend.sendRaw(rawData, 583, 33);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MITSUBISHI_AC, irsend.capture.decode_type);
EXPECT_EQ(kMitsubishiACBits, irsend.capture.bits);
uint8_t expected[kMitsubishiACStateLength] = {
0x23, 0xCB, 0x26, 0x01, 0x00, 0x00, 0x18, 0x0A, 0x36,
0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6};
EXPECT_STATE_EQ(expected, irsend.capture.state, kMitsubishiACBits);
}
// Tests for decodeMitsubishiAC() when the repeat mark is wrong.
TEST(TestDecodeMitsubishiAC, DecodeRealExampleRepeatMarkError) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
// Mitsubishi AC "Power On, 16C, low fan, vane auto move".
uint16_t rawData[583] = {
3476, 1708, 416, 1264, 420, 1260, 414, 400, 448, 390, 446, 392, 444, 1236,
440, 400, 446, 392, 446, 1234, 440, 1266, 418, 396, 442, 1264, 420, 394,
444, 394, 442, 1264, 422, 1260, 414, 398, 440, 1266, 418, 1264, 420, 392,
446, 392, 444, 1264, 422, 392, 446, 392, 446, 1260, 414, 400, 448, 390,
446, 392, 444, 394, 442, 396, 442, 398, 440, 424, 412, 400, 448, 390, 446,
392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400, 448, 390,
446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 440, 400, 438, 400, 448,
390, 446, 392, 444, 1236, 440, 1266, 418, 394, 442, 396, 440, 398, 438,
402, 446, 1232, 444, 396, 440, 1268, 418, 394, 442, 396, 440, 398, 440,
400, 448, 390, 448, 1232, 442, 1266, 420, 394, 444, 1264, 422, 1260, 416,
396, 440, 398, 450, 1230, 444, 396, 442, 398, 440, 1266, 418, 1264, 422,
1258, 416, 1266, 418, 394, 442, 396, 440, 398, 440, 398, 438, 400, 446,
392, 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 438, 398, 438, 400,
448, 392, 446, 392, 444, 394, 444, 396, 442, 396, 440, 398, 438, 400, 448,
390, 448, 392, 444, 394, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400,
448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438,
400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, 440, 398,
438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, 438,
400, 438, 400, 448, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398,
438, 1240, 444, 1264, 422, 390, 446, 392, 446,
// Repeat mark (1111) wrong:
1260, 414, 1268, 418, 1264, 422, 1111, 347, 1708, 418, 1264, 422, 1234,
442, 398, 448, 390, 446, 392, 446, 1234, 440, 400, 448, 390, 446, 1234,
442, 1266, 420, 392, 444, 1264, 420, 392, 446, 394, 444, 1236, 448, 1260,
416, 398, 440, 1266, 418, 1262, 422, 390, 446, 392, 444, 1234, 440, 400,
448, 392, 446, 1234, 440, 398, 450, 390, 446, 392, 444, 394, 444, 394,
442, 396, 442, 398, 440, 400, 438, 400, 448, 390, 446, 392, 444, 394, 442,
396, 442, 396, 440, 398, 438, 400, 448, 390, 446, 392, 446, 392, 444, 394,
442, 396, 442, 396, 440, 398, 438, 400, 448, 416, 420, 392, 444, 1234,
440, 1240, 446, 394, 442, 396, 440, 398, 438, 400, 448, 1232, 444, 396,
440, 1240, 446, 394, 442, 396, 440, 398, 440, 400, 448, 390, 446, 1232,
444, 1238, 446, 394, 444, 1236, 448, 1232, 442, 396, 440, 398, 448, 1232,
444, 396, 440, 398, 438, 1242, 444, 1238, 448, 1234, 442, 1240, 444, 394,
442, 396, 440, 398, 438, 400, 448, 390, 446, 394, 444, 420, 416, 394, 444,
396, 440, 398, 440, 398, 438, 400, 448, 418, 420, 418, 418, 394, 442, 396,
442, 396, 440, 424, 412, 400, 448, 390, 446, 392, 446, 420, 418, 420, 416,
396, 440, 398, 440, 424, 412, 426, 420, 418, 420, 392, 444, 394, 444, 422,
416, 422, 414, 398, 440, 426, 422, 388, 448, 416, 420, 418, 418, 422, 416,
422, 414, 424, 414, 398, 438, 426, 422, 418, 420, 390, 446, 418, 418, 420,
416, 396, 440, 424, 412, 426, 412, 400, 446, 418, 420, 420, 418, 420, 416,
422, 414, 422, 414, 424, 412, 426, 422, 390, 446, 1232, 442, 1240, 446,
394, 444, 394, 442, 1238, 446, 1234, 440, 1240, 444}; // UNKNOWN F6FDB82B
irsend.sendRaw(rawData, 583, 33);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MITSUBISHI_AC, irsend.capture.decode_type);
EXPECT_EQ(kMitsubishiACBits, irsend.capture.bits);
uint8_t expected[kMitsubishiACStateLength] = {
0x23, 0xCB, 0x26, 0x01, 0x00, 0x00, 0x18, 0x0A, 0x36,
0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6};
EXPECT_STATE_EQ(expected, irsend.capture.state, kMitsubishiACBits);
}
// Tests for decodeMitsubishiAC() when first payload has an error and the
// repeat mark is wrong.
TEST(TestDecodeMitsubishiAC, DecodeRealExampleRepeatNeededButError) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
// Mitsubishi AC "Power On, 16C, low fan, vane auto move".
uint16_t rawData[583] = {
3476, 1708, 416, 1264, 420, 1260, 414, 400, 448, 390, 446, 392, 444, 1236,
440, 400, 446, 392, 446, 1234, 440, 1266, 418, 396, 442, 1264, 420, 394,
444, 394, 442, 1264, 422, 1260, 414, 398, 440, 1266, 418, 1264, 420, 392,
446, 392, 444, 1264, 422, 392, 446, 392, 446, 1260, 414, 400, 448, 390,
446, 392, 444, 394, 442, 396, 442, 398, 440, 424, 412, 400, 448, 390, 446,
392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400, 448, 390,
446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 440, 400, 438, 400, 448,
390, 446, 392, 444, 1236, 440, 1266, 418, 394, 442, 396, 440, 398, 438,
402, 446, 1232, 444, 396, 440, 1268, 418, 394, 442, 396, 440, 398,
// space 699 is not recognizable:
440, 400, 448, 390, 448, 1232, 442, 1266, 420, 394, 444, 1264, 699, 1260,
416, 396, 440, 398, 450, 1230, 444, 396, 442, 398, 440, 1266, 418, 1264,
422, 1258, 416, 1266, 418, 394, 442, 396, 440, 398, 440, 398, 438, 400,
446, 392, 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 438, 398, 438,
400, 448, 392, 446, 392, 444, 394, 444, 396, 442, 396, 440, 398, 438, 400,
448, 390, 448, 392, 444, 394, 444, 394, 442, 396, 442, 396, 440, 398, 438,
400, 448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398,
438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, 440,
398, 438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398,
438, 400, 438, 400, 448, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440,
398, 438, 1240, 444, 1264, 422, 390, 446, 392, 446,
// 1111 is not a valid repeat mark:
1260, 414, 1268, 418, 1264, 422, 1111, 3478, 1708, 418, 1264, 422, 1234,
442, 398, 448, 390, 446, 392, 446, 1234, 440, 400, 448, 390, 446, 1234,
442, 1266, 420, 392, 444, 1264, 420, 392, 446, 394, 444, 1236, 448, 1260,
416, 398, 440, 1266, 418, 1262, 422, 390, 446, 392, 444, 1234, 440, 400,
448, 392, 446, 1234, 440, 398, 450, 390, 446, 392, 444, 394, 444, 394,
442, 396, 442, 398, 440, 400, 438, 400, 448, 390, 446, 392, 444, 394, 442,
396, 442, 396, 440, 398, 438, 400, 448, 390, 446, 392, 446, 392, 444, 394,
442, 396, 442, 396, 440, 398, 438, 400, 448, 416, 420, 392, 444, 1234,
440, 1240, 446, 394, 442, 396, 440, 398, 438, 400, 448, 1232, 444, 396,
440, 1240, 446, 394, 442, 396, 440, 398, 440, 400, 448, 390, 446, 1232,
444, 1238, 446, 394, 444, 1236, 448, 1232, 442, 396, 440, 398, 448, 1232,
444, 396, 440, 398, 438, 1242, 444, 1238, 448, 1234, 442, 1240, 444, 394,
442, 396, 440, 398, 438, 400, 448, 390, 446, 394, 444, 420, 416, 394, 444,
396, 440, 398, 440, 398, 438, 400, 448, 418, 420, 418, 418, 394, 442, 396,
442, 396, 440, 424, 412, 400, 448, 390, 446, 392, 446, 420, 418, 420, 416,
396, 440, 398, 440, 424, 412, 426, 420, 418, 420, 392, 444, 394, 444, 422,
416, 422, 414, 398, 440, 426, 422, 388, 448, 416, 420, 418, 418, 422, 416,
422, 414, 424, 414, 398, 438, 426, 422, 418, 420, 390, 446, 418, 418, 420,
416, 396, 440, 424, 412, 426, 412, 400, 446, 418, 420, 420, 418, 420, 416,
422, 414, 422, 414, 424, 412, 426, 422, 390, 446, 1232, 442, 1240, 446,
394, 444, 394, 442, 1238, 446, 1234, 440, 1240, 444}; // UNKNOWN F6FDB82B
irsend.sendRaw(rawData, 583, 33);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(UNKNOWN, irsend.capture.decode_type);
}
TEST(TestMitsubishiACClass, HumanReadable) {
IRMitsubishiAC irMitsu(0);
EXPECT_EQ(
"Power: On (HEAT), Temp: 22C, FAN: SILENT, VANE: AUTO, "
"Time: 17:10, On timer: 00:00, Off timer: 00:00, Timer: -",
irMitsu.toString());
}
// Test sending typical data only.
TEST(TestSendMitsubishi2, SendDataOnly) {
@@ -712,7 +993,8 @@ TEST(TestSendMitsubishi2, SendDataOnly) {
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500", irsend.outputStr());
"m560s28500",
irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi2(0x0);
@@ -726,7 +1008,8 @@ TEST(TestSendMitsubishi2, SendDataOnly) {
"m560s520m560s520m560s520m560s520m560s520m560s520m560s520m560s520"
"m560s4200"
"m560s520m560s520m560s520m560s520m560s520m560s520m560s520m560s520"
"m560s28500", irsend.outputStr());
"m560s28500",
irsend.outputStr());
}
// Test sending odd repeats.
@@ -735,32 +1018,34 @@ TEST(TestSendMitsubishi2, Repeats) {
irsend.begin();
irsend.reset();
irsend.sendMitsubishi2(0xF82, MITSUBISHI_BITS, 0);
irsend.sendMitsubishi2(0xF82, kMitsubishiBits, 0);
EXPECT_EQ(
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500", irsend.outputStr());
"m560s28500",
irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi2(0xF82, MITSUBISHI_BITS, 2);
irsend.sendMitsubishi2(0xF82, kMitsubishiBits, 2);
EXPECT_EQ(
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500"
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500"
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500", irsend.outputStr());
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500"
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500"
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500",
irsend.outputStr());
}
// Tests for decodeMitsubishi2().
@@ -778,7 +1063,7 @@ TEST(TestDecodeMitsubishi2, DecodeSyntheticExamples) {
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MITSUBISHI2, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
EXPECT_EQ(0xF82, irsend.capture.value);
EXPECT_EQ(0xF, irsend.capture.address);
EXPECT_EQ(0x82, irsend.capture.command);
@@ -788,7 +1073,7 @@ TEST(TestDecodeMitsubishi2, DecodeSyntheticExamples) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MITSUBISHI2, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -798,7 +1083,7 @@ TEST(TestDecodeMitsubishi2, DecodeSyntheticExamples) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MITSUBISHI2, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
EXPECT_EQ(0x1234, irsend.capture.value);
EXPECT_EQ(0x12, irsend.capture.address);
EXPECT_EQ(0x34, irsend.capture.command);
@@ -813,21 +1098,20 @@ TEST(TestDecodeMitsubishi2, DecodeRealExample) {
irsend.reset();
// Mitsubishi Projector "Power On" (16-bit).
uint16_t rawData[75] = {
8402, 4172, 554, 490, 562, 484, 560, 514, 532, 512, 534, 1566,
526, 1572, 526, 1542, 560, 1568, 532, 4192,
534, 1564, 532, 484, 560, 512, 532, 512, 532, 514, 530, 514,
526, 1570, 524, 520, 526, 28506,
8454, 4170, 560, 514, 528, 516, 526, 520, 524, 490, 556, 1572,
534, 1534, 560, 1568, 530, 1538, 558, 4166,
560, 1538, 558, 490, 560, 512, 530, 514, 532, 484, 558, 514,
532, 1566, 530, 486, 554}; // UNKNOWN 96A1512F
8402, 4172, 554, 490, 562, 484, 560, 514, 532, 512, 534,
1566, 526, 1572, 526, 1542, 560, 1568, 532, 4192, 534, 1564,
532, 484, 560, 512, 532, 512, 532, 514, 530, 514, 526,
1570, 524, 520, 526, 28506, 8454, 4170, 560, 514, 528, 516,
526, 520, 524, 490, 556, 1572, 534, 1534, 560, 1568, 530,
1538, 558, 4166, 560, 1538, 558, 490, 560, 512, 530, 514,
532, 484, 558, 514, 532, 1566, 530, 486, 554}; // UNKNOWN 96A1512F
irsend.sendRaw(rawData, 75, 33);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MITSUBISHI2, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
EXPECT_EQ(0xF82, irsend.capture.value);
EXPECT_EQ(0xF, irsend.capture.address);
EXPECT_EQ(0x82, irsend.capture.command);
+79 -68
View File
@@ -11,18 +11,21 @@ TEST(TestSendNEC, SendDataOnly) {
IRsendTest irsend(4);
irsend.begin();
irsend.sendNEC(0);
EXPECT_EQ("m8960s4480m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s58240", irsend.outputStr());
EXPECT_EQ(
"m8960s4480m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s58240",
irsend.outputStr());
irsend.sendNEC(0xAA00FF55);
EXPECT_EQ("m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s560m560s1680m560s560m560s1680"
"m560s560m560s1680m560s560m560s1680m560s40320",
irsend.outputStr());
EXPECT_EQ(
"m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s560m560s1680m560s560m560s1680"
"m560s560m560s1680m560s560m560s1680m560s40320",
irsend.outputStr());
}
// Test sending different bit lengths.
@@ -33,19 +36,23 @@ TEST(TestSendNEC, SendSmallData) {
EXPECT_EQ("m8960s4480m560s1680m560s560m560s1680m560s560m560s87360",
irsend.outputStr());
irsend.sendNEC(0, 8); // Send only 8 data bits.
EXPECT_EQ("m8960s4480m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s85120", irsend.outputStr());
EXPECT_EQ(
"m8960s4480m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s85120",
irsend.outputStr());
irsend.sendNEC(0x1234567890ABCDEF, 64); // Send 64 data bits.
EXPECT_EQ("m8960s4480m560s560m560s560m560s560m560s1680m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s1680m560s1680m560s560"
"m560s1680m560s560m560s560m560s560m560s1680m560s560m560s1680"
"m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s560m560s560m560s560m560s1680m560s560"
"m560s1680m560s560m560s1680m560s560m560s1680m560s1680m560s1680"
"m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680"
"m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s1680"
"m560s1680m560s22400", irsend.outputStr());
EXPECT_EQ(
"m8960s4480m560s560m560s560m560s560m560s1680m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s1680m560s1680m560s560"
"m560s1680m560s560m560s560m560s560m560s1680m560s560m560s1680"
"m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s560m560s560m560s560m560s1680m560s560"
"m560s1680m560s560m560s1680m560s560m560s1680m560s1680m560s1680"
"m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680"
"m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s1680"
"m560s1680m560s22400",
irsend.outputStr());
}
// Test sending with repeats.
@@ -53,20 +60,24 @@ TEST(TestSendNEC, SendWithRepeats) {
IRsendTest irsend(4);
irsend.begin();
irsend.sendNEC(0, 8, 0); // Send a command with 0 repeats.
EXPECT_EQ("m8960s4480m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s85120", irsend.outputStr());
EXPECT_EQ(
"m8960s4480m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s85120",
irsend.outputStr());
irsend.sendNEC(0xAA, 8, 1); // Send a command with 1 repeat.
EXPECT_EQ("m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s80640"
"m8960s2240m560s96320",
irsend.outputStr());
EXPECT_EQ(
"m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s80640"
"m8960s2240m560s96320",
irsend.outputStr());
irsend.sendNEC(0xAA, 8, 3); // Send a command with 3 repeats.
EXPECT_EQ("m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s80640"
"m8960s2240m560s96320"
"m8960s2240m560s96320"
"m8960s2240m560s96320",
irsend.outputStr());
EXPECT_EQ(
"m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s80640"
"m8960s2240m560s96320"
"m8960s2240m560s96320"
"m8960s2240m560s96320",
irsend.outputStr());
}
// Tests for encodeNEC().
@@ -101,7 +112,7 @@ TEST(TestDecodeNEC, NormalNECDecodeWithStrict) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x807F40BF, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x2, irsend.capture.command);
@@ -112,7 +123,7 @@ TEST(TestDecodeNEC, NormalNECDecodeWithStrict) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0xC1A28877, irsend.capture.value);
EXPECT_EQ(0x4583, irsend.capture.address);
EXPECT_EQ(0x11, irsend.capture.command);
@@ -129,7 +140,7 @@ TEST(TestDecodeNEC, NormalNECDecodeWithStrict) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x807F40BF, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x2, irsend.capture.command);
@@ -146,7 +157,7 @@ TEST(TestDecodeNEC, NormalNECDecodeWithoutStrict) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture, 32, false));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0, irsend.capture.value);
EXPECT_EQ(0, irsend.capture.address);
EXPECT_EQ(0, irsend.capture.command);
@@ -156,7 +167,7 @@ TEST(TestDecodeNEC, NormalNECDecodeWithoutStrict) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture, 32, false));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x12345678, irsend.capture.value);
EXPECT_EQ(0x2C48, irsend.capture.address);
EXPECT_EQ(0, irsend.capture.command);
@@ -225,18 +236,18 @@ TEST(TestDecodeNEC, NoTrailingGap_Issue243) {
irsend.begin();
irsend.reset();
uint16_t rawData[67] = {9000, 4500, 650, 550, 650, 1650, 600, 550, 650, 550,
600, 1650, 650, 550, 600, 1650, 650, 1650, 650, 1650,
600, 550, 650, 1650, 650, 1650, 650, 550, 600, 1650,
650, 1650, 650, 550, 650, 550, 650, 1650, 650, 550,
650, 550, 650, 550, 600, 550, 650, 550, 650, 550,
650, 1650, 600, 550, 650, 1650, 650, 1650, 650, 1650,
650, 1650, 650, 1650, 650, 1650, 600};
uint16_t rawData[67] = {
9000, 4500, 650, 550, 650, 1650, 600, 550, 650, 550, 600, 1650,
650, 550, 600, 1650, 650, 1650, 650, 1650, 600, 550, 650, 1650,
650, 1650, 650, 550, 600, 1650, 650, 1650, 650, 550, 650, 550,
650, 1650, 650, 550, 650, 550, 650, 550, 600, 550, 650, 550,
650, 550, 650, 1650, 600, 550, 650, 1650, 650, 1650, 650, 1650,
650, 1650, 650, 1650, 650, 1650, 600};
irsend.sendRaw(rawData, 67, 38);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x4BB640BF, irsend.capture.value);
EXPECT_EQ(0x6DD2, irsend.capture.address);
EXPECT_EQ(0x2, irsend.capture.command);
@@ -246,7 +257,7 @@ TEST(TestDecodeNEC, NoTrailingGap_Issue243) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x4BB640BF, irsend.capture.value);
// Add a zero length space to the message to test how it handles that as
@@ -255,7 +266,7 @@ TEST(TestDecodeNEC, NoTrailingGap_Issue243) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x4BB640BF, irsend.capture.value);
}
@@ -270,18 +281,18 @@ TEST(TestDecodeNEC, NonStrictNECDecode_Issue264) {
irsend.reset();
// Slightly modified example than reported due to poor timings that are too
// far out of spec.
uint16_t rawData[67] = {9150, 4650, 550, 600, 550, 1800, 600, 1750, 600, 1800,
550, 600, 550, 1800, 550, 1750, 600, 1750, 600, 1750,
600, 1750, 600, 1700, 600, 600, 600, 600, 550, 600,
600, 600, 600, 1750, 600, 1750, 600, 600, 550, 1800,
600, 600, 600, 600, 600, 600, 500, 600, 600, 600,
600, 600, 600, 1750, 600, 600, 600, 550, 600, 600,
600, 600, 600, 600, 600, 550, 600};
uint16_t rawData[67] = {
9150, 4650, 550, 600, 550, 1800, 600, 1750, 600, 1800, 550, 600,
550, 1800, 550, 1750, 600, 1750, 600, 1750, 600, 1750, 600, 1700,
600, 600, 600, 600, 550, 600, 600, 600, 600, 1750, 600, 1750,
600, 600, 550, 1800, 600, 600, 600, 600, 600, 600, 500, 600,
600, 600, 600, 600, 600, 1750, 600, 600, 600, 550, 600, 600,
600, 600, 600, 600, 600, 550, 600};
irsend.sendRaw(rawData, 67, 38);
irsend.makeDecodeResult();
EXPECT_FALSE(irrecv.decodeNEC(&irsend.capture)); // Not strictly NEC
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture, NEC_BITS, false));
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture, kNECBits, false));
EXPECT_EQ(0x77E1A040, irsend.capture.value);
// Do it all again, but with a normal decode.
@@ -290,7 +301,7 @@ TEST(TestDecodeNEC, NonStrictNECDecode_Issue264) {
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NEC_LIKE, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x77E1A040, irsend.capture.value);
}
@@ -303,18 +314,18 @@ TEST(TestDecodeNEC, AutoReceiveCalibration) {
// Data from Issue #264, for a remote that is slightly off spec.
// Should be matched as a NEC-like message however without self-calibrating
// the timings of the short spaces is out.
uint16_t rawData[67] = {9150, 4600, 650, 600, 650, 1650, 650, 1700, 650, 1750,
650, 600, 650, 1700, 650, 1750, 650, 1750, 650, 1700,
650, 1700, 650, 1700, 650, 600, 650, 600, 650, 600,
600, 600, 650, 1750, 650, 1750, 650, 600, 650, 1700,
600, 600, 700, 550, 650, 550, 650, 600, 650, 600,
650, 600, 650, 1750, 600, 600, 650, 600, 650, 550,
650, 600, 650, 600, 650, 600, 600};
uint16_t rawData[67] = {
9150, 4600, 650, 600, 650, 1650, 650, 1700, 650, 1750, 650, 600,
650, 1700, 650, 1750, 650, 1750, 650, 1700, 650, 1700, 650, 1700,
650, 600, 650, 600, 650, 600, 600, 600, 650, 1750, 650, 1750,
650, 600, 650, 1700, 600, 600, 700, 550, 650, 550, 650, 600,
650, 600, 650, 600, 650, 1750, 600, 600, 650, 600, 650, 550,
650, 600, 650, 600, 650, 600, 600};
irsend.sendRaw(rawData, 67, 38);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture, NEC_BITS, false));
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture, kNECBits, false));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x77E1A040, irsend.capture.value);
}
+73 -71
View File
@@ -12,12 +12,13 @@ TEST(TestSendNikai, SendDataOnly) {
irsend.reset();
irsend.sendNikai(0xD5F2A); // Nikai TV Power Off.
EXPECT_EQ("m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500",
irsend.outputStr());
EXPECT_EQ(
"m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500",
irsend.outputStr());
irsend.reset();
}
@@ -28,35 +29,37 @@ TEST(TestSendNikai, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendNikai(0xD5F2A, NIKAI_BITS, 1); // 1 repeat.
EXPECT_EQ("m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500"
"m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500",
irsend.outputStr());
irsend.sendNikai(0xD5F2A, NIKAI_BITS, 2); // 2 repeat.
EXPECT_EQ("m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500"
"m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500"
"m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500",
irsend.outputStr());
irsend.sendNikai(0xD5F2A, kNikaiBits, 1); // 1 repeat.
EXPECT_EQ(
"m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500"
"m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500",
irsend.outputStr());
irsend.sendNikai(0xD5F2A, kNikaiBits, 2); // 2 repeat.
EXPECT_EQ(
"m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500"
"m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500"
"m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500",
irsend.outputStr());
}
// Tests for decodeNikai().
@@ -71,17 +74,17 @@ TEST(TestDecodeNikai, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendNikai(0x123456);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, true));
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, kNikaiBits, true));
EXPECT_EQ(NIKAI, irsend.capture.decode_type);
EXPECT_EQ(NIKAI_BITS, irsend.capture.bits);
EXPECT_EQ(kNikaiBits, irsend.capture.bits);
EXPECT_EQ(0x123456, irsend.capture.value);
irsend.reset();
irsend.sendNikai(0x101);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, true));
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, kNikaiBits, true));
EXPECT_EQ(NIKAI, irsend.capture.decode_type);
EXPECT_EQ(NIKAI_BITS, irsend.capture.bits);
EXPECT_EQ(kNikaiBits, irsend.capture.bits);
EXPECT_EQ(0x101, irsend.capture.value);
}
@@ -93,11 +96,11 @@ TEST(TestDecodeNikai, NormalDecodeWithRepeatAndStrict) {
// Normal Nikai 24-bit message.
irsend.reset();
irsend.sendNikai(0xD5F2A, NIKAI_BITS, 2);
irsend.sendNikai(0xD5F2A, kNikaiBits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, true));
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, kNikaiBits, true));
EXPECT_EQ(NIKAI, irsend.capture.decode_type);
EXPECT_EQ(NIKAI_BITS, irsend.capture.bits);
EXPECT_EQ(kNikaiBits, irsend.capture.bits);
EXPECT_EQ(0xD5F2A, irsend.capture.value);
}
@@ -111,9 +114,9 @@ TEST(TestDecodeNikai, NormalDecodeWithNonStrict) {
irsend.sendNikai(0x0, 16);
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, true));
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, kNikaiBits, true));
// And it should fail when we expect more bits.
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, false));
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, kNikaiBits, false));
// Should pass if strict off if we ask for correct nr. of bits sent.
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, 16, false));
@@ -136,7 +139,7 @@ TEST(TestDecodeNikai, Decode64BitMessages) {
// Illegal size Nikai 64-bit message.
irsend.sendNikai(0xFFFFFFFFFFFFFFFF, 64);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, true));
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, kNikaiBits, true));
// Should work with a 'normal' match (not strict)
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, 64, false));
EXPECT_EQ(NIKAI, irsend.capture.decode_type);
@@ -152,32 +155,31 @@ TEST(TestDecodeNikai, DecodeExamples) {
irsend.reset();
// Nikai TV Power Off from Issue #309
uint16_t rawdata_off[100] = {4060, 3918,
508, 2004, 508, 2002, 510, 2002, 508, 2004, 506, 1050, 508, 1048,
510, 2004, 508, 1048, 508, 2002, 510, 1050, 508, 2004, 510, 1048,
508, 1050, 508, 1048, 508, 1050, 508, 1050, 508, 2004, 508, 2002,
510, 1048, 508, 2004, 508, 1050, 506, 2004, 508, 1048, 510, 2002,
456, 8446,
3956, 3998,
508, 2004, 508, 2002, 508, 2004, 508, 1978, 532, 1050, 508, 1050,
508, 2002, 508, 1050, 508, 2004, 508, 1050, 508, 2002, 510, 1050,
508, 1050, 508, 1048, 508, 1050, 508, 1050, 508, 2002, 510, 2002,
508, 1050, 508, 2002, 510, 1050, 508, 2002, 508};
uint16_t rawdata_off[100] = {
4060, 3918, 508, 2004, 508, 2002, 510, 2002, 508, 2004, 506,
1050, 508, 1048, 510, 2004, 508, 1048, 508, 2002, 510, 1050,
508, 2004, 510, 1048, 508, 1050, 508, 1048, 508, 1050, 508,
1050, 508, 2004, 508, 2002, 510, 1048, 508, 2004, 508, 1050,
506, 2004, 508, 1048, 510, 2002, 456, 8446, 3956, 3998, 508,
2004, 508, 2002, 508, 2004, 508, 1978, 532, 1050, 508, 1050,
508, 2002, 508, 1050, 508, 2004, 508, 1050, 508, 2002, 510,
1050, 508, 1050, 508, 1048, 508, 1050, 508, 1050, 508, 2002,
510, 2002, 508, 1050, 508, 2002, 510, 1050, 508, 2002, 508};
irsend.sendRaw(rawdata_off, 100, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NIKAI, irsend.capture.decode_type);
EXPECT_EQ(NIKAI_BITS, irsend.capture.bits);
EXPECT_EQ(kNikaiBits, irsend.capture.bits);
EXPECT_EQ(0xD5F2A, irsend.capture.value);
// Nikai TV Volume Up from Issue #309
uint16_t rawdata_volup[52] = {3972, 4002,
504, 1982, 526, 2010, 502, 2010, 502, 2010, 500, 1056, 502, 1056,
502, 2010, 500, 1056, 502, 2010, 502, 2010, 500, 2010, 502, 2010,
502, 1056, 502, 1056, 502, 1056, 500, 1056, 502, 2010, 502, 2010,
500, 1056, 502, 2008, 502, 1054, 504, 1054, 504, 1054, 500, 1056,
450};
uint16_t rawdata_volup[52] = {
3972, 4002, 504, 1982, 526, 2010, 502, 2010, 502, 2010, 500,
1056, 502, 1056, 502, 2010, 500, 1056, 502, 2010, 502, 2010,
500, 2010, 502, 2010, 502, 1056, 502, 1056, 502, 1056, 500,
1056, 502, 2010, 502, 2010, 500, 1056, 502, 2008, 502, 1054,
504, 1054, 504, 1054, 500, 1056, 450};
irsend.reset();
irsend.sendRaw(rawdata_volup, 52, 38);
@@ -185,7 +187,7 @@ TEST(TestDecodeNikai, DecodeExamples) {
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NIKAI, irsend.capture.decode_type);
EXPECT_EQ(NIKAI_BITS, irsend.capture.bits);
EXPECT_EQ(kNikaiBits, irsend.capture.bits);
EXPECT_EQ(0xD0F2F, irsend.capture.value);
}
@@ -196,15 +198,15 @@ TEST(TestDecodeNikai, FailToDecodeNonNikaiExample) {
irsend.begin();
irsend.reset();
uint16_t gc_test[71] = {38000, 1, 1, 172, 172, 22, 64, 22, 64, 22, 64, 22, 21,
22, 21, 22, 21, 22, 11, 22, 21, 22, 128, 22, 64, 22,
64, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 64,
22, 21, 22, 21, 22, 64, 22, 64, 22, 21, 22, 21, 22,
64, 22, 21, 22, 64, 22, 64, 22, 21, 22, 21, 22, 64,
22, 64, 22, 21, 22, 1820};
uint16_t gc_test[71] = {38000, 1, 1, 172, 172, 22, 64, 22, 64, 22, 64, 22,
21, 22, 21, 22, 21, 22, 11, 22, 21, 22, 128, 22,
64, 22, 64, 22, 21, 22, 21, 22, 21, 22, 21, 22,
21, 22, 64, 22, 21, 22, 21, 22, 64, 22, 64, 22,
21, 22, 21, 22, 64, 22, 21, 22, 64, 22, 64, 22,
21, 22, 21, 22, 64, 22, 64, 22, 21, 22, 1820};
irsend.sendGC(gc_test, 71);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture));
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, false));
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, kNikaiBits, false));
}
+744 -66
View File
@@ -1,7 +1,11 @@
// Copyright 2017 David Conran
// Copyright 2017, 2018 David Conran
#include "ir_Panasonic.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "IRutils.h"
#include "gtest/gtest.h"
// Tests for encodePanasonic().
@@ -18,7 +22,6 @@ TEST(TestEncodePanasonic, General) {
EXPECT_EQ(0x40040190ED7C, irsend.encodePanasonic(0x4004, 0x01, 0x90, 0xED));
}
// Tests for sendPanasonic64().
// Test sending typical data only.
@@ -36,7 +39,8 @@ TEST(TestSendPanasonic64, SendDataOnly) {
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s116208", irsend.outputStr());
"m432s116208",
irsend.outputStr());
irsend.reset();
irsend.sendPanasonic64(0x40040190ED7C);
@@ -48,7 +52,8 @@ TEST(TestSendPanasonic64, SendDataOnly) {
"m432s1296m432s432m432s432m432s1296m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s102384", irsend.outputStr());
"m432s102384",
irsend.outputStr());
irsend.reset();
irsend.sendPanasonic64(0xFFFFFFFFFFFF);
@@ -60,7 +65,8 @@ TEST(TestSendPanasonic64, SendDataOnly) {
"m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296"
"m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296"
"m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296"
"m432s74736", irsend.outputStr());
"m432s74736",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -69,7 +75,7 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendPanasonic64(0x40040190ED7C, PANASONIC_BITS, 0); // 0 repeats.
irsend.sendPanasonic64(0x40040190ED7C, kPanasonicBits, 0); // 0 repeats.
EXPECT_EQ(
"m3456s1728"
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
@@ -78,10 +84,11 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
"m432s1296m432s432m432s432m432s1296m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s102384", irsend.outputStr());
"m432s102384",
irsend.outputStr());
irsend.reset();
irsend.sendPanasonic64(0x40040190ED7C, PANASONIC_BITS, 1); // 1 repeat.
irsend.sendPanasonic64(0x40040190ED7C, kPanasonicBits, 1); // 1 repeat.
EXPECT_EQ(
"m3456s1728"
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
@@ -98,9 +105,10 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
"m432s1296m432s432m432s432m432s1296m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s102384", irsend.outputStr());
"m432s102384",
irsend.outputStr());
irsend.sendPanasonic64(0x40040190ED7C, PANASONIC_BITS, 2); // 2 repeats.
irsend.sendPanasonic64(0x40040190ED7C, kPanasonicBits, 2); // 2 repeats.
EXPECT_EQ(
"m3456s1728"
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
@@ -125,7 +133,8 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
"m432s1296m432s432m432s432m432s1296m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s102384", irsend.outputStr());
"m432s102384",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -138,7 +147,8 @@ TEST(TestSendPanasonic64, SendUnusualSize) {
EXPECT_EQ(
"m3456s1728"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s150768", irsend.outputStr());
"m432s150768",
irsend.outputStr());
irsend.reset();
irsend.sendPanasonic64(0x1234567890ABCDEF, 64);
@@ -152,7 +162,8 @@ TEST(TestSendPanasonic64, SendUnusualSize) {
"m432s1296m432s432m432s1296m432s432m432s1296m432s432m432s1296m432s1296"
"m432s1296m432s1296m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s1296m432s1296"
"m432s74736", irsend.outputStr());
"m432s74736",
irsend.outputStr());
}
// Tests for sendPanasonic().
@@ -183,8 +194,8 @@ TEST(TestSendPanasonic, CompareToSendPanasonic64) {
panasonic64.sendPanasonic64(0x1234567890AB, 64);
EXPECT_EQ(panasonic64.outputStr(), panasonic.outputStr());
panasonic.sendPanasonic(0x1234, 0x567890AB, PANASONIC_BITS, 2);
panasonic64.sendPanasonic64(0x1234567890AB, PANASONIC_BITS, 2);
panasonic.sendPanasonic(0x1234, 0x567890AB, kPanasonicBits, 2);
panasonic64.sendPanasonic64(0x1234567890AB, kPanasonicBits, 2);
EXPECT_EQ(panasonic64.outputStr(), panasonic.outputStr());
}
@@ -200,9 +211,9 @@ TEST(TestDecodePanasonic, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendPanasonic64(0x40040190ED7C);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x40040190ED7C, irsend.capture.value);
EXPECT_EQ(0x4004, irsend.capture.address);
EXPECT_EQ(0x0190ED7C, irsend.capture.command);
@@ -212,9 +223,9 @@ TEST(TestDecodePanasonic, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendPanasonic64(irsend.encodePanasonic(0x4004, 0x12, 0x34, 0x56));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x400412345670, irsend.capture.value);
EXPECT_EQ(0x4004, irsend.capture.address);
EXPECT_EQ(0x12345670, irsend.capture.command);
@@ -224,9 +235,9 @@ TEST(TestDecodePanasonic, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendPanasonic64(irsend.encodePanasonic(0x4004, 0x1, 0x1, 0x1));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x400401010101, irsend.capture.value);
EXPECT_EQ(0x4004, irsend.capture.address);
EXPECT_EQ(0x1010101, irsend.capture.command);
@@ -241,26 +252,26 @@ TEST(TestDecodePanasonic, NormalDecodeWithRepeatAndStrict) {
// Normal Panasonic 48-bit message with 2 repeats.
irsend.reset();
irsend.sendPanasonic64(0x40040190ED7C, PANASONIC_BITS, 2);
irsend.sendPanasonic64(0x40040190ED7C, kPanasonicBits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x40040190ED7C, irsend.capture.value);
EXPECT_EQ(0x4004, irsend.capture.address);
EXPECT_EQ(0x190ED7C, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
irsend.makeDecodeResult(2 * PANASONIC_BITS + 4);
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
irsend.makeDecodeResult(2 * kPanasonicBits + 4);
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x40040190ED7C, irsend.capture.value);
irsend.makeDecodeResult(2 * (2 * PANASONIC_BITS + 4));
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
irsend.makeDecodeResult(2 * (2 * kPanasonicBits + 4));
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x40040190ED7C, irsend.capture.value);
}
@@ -274,11 +285,11 @@ TEST(TestDecodePanasonic, DecodeWithNonStrictValues) {
irsend.sendPanasonic64(0x0); // Illegal value Panasonic 48-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, false));
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, false));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -288,11 +299,11 @@ TEST(TestDecodePanasonic, DecodeWithNonStrictValues) {
irsend.sendPanasonic64(irsend.encodePanasonic(0, 1, 2, 3));
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, false));
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, false));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x1020300, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x1020300, irsend.capture.command);
@@ -308,7 +319,7 @@ TEST(TestDecodePanasonic, DecodeWithNonStrictSize) {
irsend.sendPanasonic64(0x12345678, 32); // Illegal size Panasonic message.
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
irsend.makeDecodeResult();
// Should fail with strict when we ask for the wrong bit size.
@@ -326,9 +337,9 @@ TEST(TestDecodePanasonic, DecodeWithNonStrictSize) {
irsend.sendPanasonic64(irsend.encodePanasonic(0x4004, 1, 2, 3), 56);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
// Shouldn't pass if strict off and wrong bit size.
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, false));
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, false));
// Re-decode with correct bit size.
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, 56, true));
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, 56, false));
@@ -367,20 +378,20 @@ TEST(TestDecodePanasonic, DecodeGlobalCacheExample) {
irsend.reset();
// Panasonic code from Global Cache.
uint16_t gc_test[103] = {37000, 1, 1, 126, 64, 16, 17, 16, 49, 15, 16, 16, 16,
16, 16, 16, 17, 15, 17, 15, 17, 15, 17, 15, 16, 16,
16, 16, 16, 16, 17, 15, 49, 16, 16, 16, 16, 16, 17,
15, 17, 15, 17, 15, 17, 15, 16, 16, 16, 16, 16, 16,
49, 15, 49, 16, 17, 15, 17, 15, 49, 16, 16, 16, 17,
16, 17, 15, 17, 15, 49, 16, 49, 15, 49, 16, 17, 16,
49, 15, 49, 16, 17, 15, 48, 16, 16, 16, 49, 15, 48,
16, 49, 15, 49, 16, 49, 15, 17, 15, 16, 16, 2721};
uint16_t gc_test[103] = {
37000, 1, 1, 126, 64, 16, 17, 16, 49, 15, 16, 16, 16, 16, 16,
16, 17, 15, 17, 15, 17, 15, 17, 15, 16, 16, 16, 16, 16, 16,
17, 15, 49, 16, 16, 16, 16, 16, 17, 15, 17, 15, 17, 15, 17,
15, 16, 16, 16, 16, 16, 16, 49, 15, 49, 16, 17, 15, 17, 15,
49, 16, 16, 16, 17, 16, 17, 15, 17, 15, 49, 16, 49, 15, 49,
16, 17, 16, 49, 15, 49, 16, 17, 15, 48, 16, 16, 16, 49, 15,
48, 16, 49, 15, 49, 16, 49, 15, 17, 15, 16, 16, 2721};
irsend.sendGC(gc_test, 103);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, true));
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x40040190ED7C, irsend.capture.value);
EXPECT_EQ(0x4004, irsend.capture.address);
EXPECT_EQ(0x0190ED7C, irsend.capture.command);
@@ -388,7 +399,7 @@ TEST(TestDecodePanasonic, DecodeGlobalCacheExample) {
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x40040190ED7C, irsend.capture.value);
EXPECT_EQ(0x4004, irsend.capture.address);
EXPECT_EQ(0x0190ED7C, irsend.capture.command);
@@ -403,14 +414,15 @@ TEST(TestDecodePanasonic, FailToDecodeNonPanasonicExample) {
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};
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.decodePanasonic(&irsend.capture));
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, PANASONIC_BITS, false));
ASSERT_FALSE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, false));
}
// Failing to decode Panasonic in Issue #245
@@ -421,23 +433,23 @@ TEST(TestDecodePanasonic, DecodeIssue245) {
irsend.reset();
uint16_t rawData[100] = {3550, 1750, 500, 450, 500, 1300, 500, 450, 500, 450,
500, 450, 500, 450, 500, 450, 500, 450, 500, 450,
500, 450, 500, 450, 500, 450, 500, 450, 500, 1300,
500, 450, 500, 450, 500, 450, 500, 450, 500, 450,
500, 450, 500, 450, 500, 450, 500, 450, 500, 1300,
500, 450, 500, 450, 500, 450, 500, 450, 500, 450,
500, 450, 500, 450, 500, 450, 500, 1300, 500, 450,
500, 1300, 500, 1300, 500, 1300, 500, 1300, 500, 450,
500, 450, 500, 1300, 500, 450, 500, 1300, 500, 1300,
500, 1300, 500, 1300, 500, 450, 500, 1300, 500, 5000};
uint16_t rawData[100] = {
3550, 1750, 500, 450, 500, 1300, 500, 450, 500, 450, 500, 450,
500, 450, 500, 450, 500, 450, 500, 450, 500, 450, 500, 450,
500, 450, 500, 450, 500, 1300, 500, 450, 500, 450, 500, 450,
500, 450, 500, 450, 500, 450, 500, 450, 500, 450, 500, 450,
500, 1300, 500, 450, 500, 450, 500, 450, 500, 450, 500, 450,
500, 450, 500, 450, 500, 450, 500, 1300, 500, 450, 500, 1300,
500, 1300, 500, 1300, 500, 1300, 500, 450, 500, 450, 500, 1300,
500, 450, 500, 1300, 500, 1300, 500, 1300, 500, 1300, 500, 450,
500, 1300, 500, 5000};
irsend.sendRaw(rawData, 100, 37);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x40040100BCBD, irsend.capture.value);
EXPECT_EQ(0x4004, irsend.capture.address);
EXPECT_EQ(0x100BCBD, irsend.capture.command);
@@ -449,9 +461,675 @@ TEST(TestDecodePanasonic, DecodeIssue245) {
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x40040100BCBD, irsend.capture.value);
EXPECT_EQ(0x4004, irsend.capture.address);
EXPECT_EQ(0x100BCBD, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
}
// Tests for sendPanasonicAC().
// Test sending typical data only.
TEST(TestSendPanasonicAC, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
irsend.reset();
uint8_t state[kPanasonicAcStateLength] = {
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
0x20, 0xE0, 0x04, 0x00, 0x30, 0x32, 0x80, 0xAF, 0x00,
0x00, 0x06, 0x60, 0x00, 0x00, 0x80, 0x00, 0x06, 0x83};
irsend.sendPanasonicAC(state);
EXPECT_EQ(
"m3456s1728"
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s1296m432s1296"
"m432s432m432s432m432s1296m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s1296m432s1296m432s432m432s432m432s432m432s432m432s432"
"m432s10000"
"m3456s1728"
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s1296m432s1296"
"m432s432m432s432m432s1296m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s1296m432s1296m432s432m432s432"
"m432s432m432s1296m432s432m432s432m432s1296m432s1296m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s1296"
"m432s1296m432s1296m432s1296m432s1296m432s432m432s1296m432s432m432s1296"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s1296m432s1296m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s1296m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s1296"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s1296m432s1296m432s432m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s432m432s432m432s432m432s432m432s432m432s1296"
"m432s100000",
irsend.outputStr());
}
// Tests for the IRPanasonicAc class.
TEST(TestIRPanasonicAcClass, ChecksumCalculation) {
IRPanasonicAc pana(0);
const uint8_t originalstate[kPanasonicAcStateLength] = {
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
0x20, 0xE0, 0x04, 0x00, 0x30, 0x32, 0x80, 0xAF, 0x00,
0x00, 0x06, 0x60, 0x00, 0x00, 0x80, 0x00, 0x06, 0x83};
uint8_t examplestate[kPanasonicAcStateLength] = {
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
0x20, 0xE0, 0x04, 0x00, 0x30, 0x32, 0x80, 0xAF, 0x00,
0x00, 0x06, 0x60, 0x00, 0x00, 0x80, 0x00, 0x06, 0x83};
EXPECT_TRUE(IRPanasonicAc::validChecksum(examplestate));
EXPECT_EQ(0x83, IRPanasonicAc::calcChecksum(examplestate));
examplestate[kPanasonicAcStateLength - 1] = 0x0; // Set incoorect checksum.
EXPECT_FALSE(IRPanasonicAc::validChecksum(examplestate));
EXPECT_EQ(0x83, IRPanasonicAc::calcChecksum(examplestate));
pana.setRaw(examplestate);
// Extracting the state from the object should have a correct checksum.
EXPECT_TRUE(IRPanasonicAc::validChecksum(pana.getRaw()));
EXPECT_STATE_EQ(originalstate, pana.getRaw(), kPanasonicAcBits);
examplestate[kPanasonicAcStateLength - 1] = 0x83; // Restore old checksum.
// Change the state to force a different checksum.
examplestate[6] = 0x01; // Should increase checksum by 1.
EXPECT_FALSE(IRPanasonicAc::validChecksum(examplestate));
EXPECT_EQ(0x84, IRPanasonicAc::calcChecksum(examplestate));
}
TEST(TestIRPanasonicAcClass, SetAndGetPower) {
IRPanasonicAc pana(0);
pana.on();
EXPECT_TRUE(pana.getPower());
pana.off();
EXPECT_FALSE(pana.getPower());
pana.setPower(true);
EXPECT_TRUE(pana.getPower());
pana.setPower(false);
EXPECT_FALSE(pana.getPower());
}
TEST(TestIRPanasonicAcClass, SetAndGetModel) {
IRPanasonicAc pana(0);
EXPECT_EQ(kPanasonicJke, pana.getModel());
pana.setModel(kPanasonicDke);
EXPECT_EQ(kPanasonicDke, pana.getModel());
pana.setModel(kPanasonicLke);
EXPECT_EQ(kPanasonicLke, pana.getModel());
pana.setModel(kPanasonicNke);
EXPECT_EQ(kPanasonicNke, pana.getModel());
pana.setModel(kPanasonicUnknown); // shouldn't change.
EXPECT_EQ(kPanasonicNke, pana.getModel());
pana.setModel((panasonic_ac_remote_model_t)255); // shouldn't change.
EXPECT_EQ(kPanasonicNke, pana.getModel());
pana.setModel(kPanasonicJke);
EXPECT_EQ(kPanasonicJke, pana.getModel());
// This state tickled a bug in getModel(). Should read as a JKE.
uint8_t jkeState[27] = {0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
0x20, 0xE0, 0x04, 0x00, 0x32, 0x2E, 0x80, 0xA2, 0x00,
0x00, 0x06, 0x60, 0x00, 0x00, 0x80, 0x00, 0x06, 0x74};
pana.setModel(kPanasonicDke); // Make sure it isn't somehow set to JKE
pana.setRaw(jkeState);
EXPECT_EQ(kPanasonicJke, pana.getModel());
EXPECT_STATE_EQ(jkeState, pana.getRaw(), kPanasonicAcBits);
// This state tickled a bug in getModel(). Should read as CKP.
uint8_t ckpState[27] = {0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
0x20, 0xE0, 0x04, 0x00, 0x67, 0x2E, 0x80, 0xAF, 0x00,
0xC0, 0x6B, 0x98, 0x10, 0x00, 0x81, 0x64, 0x05, 0x87};
pana.setModel(kPanasonicDke); // Make sure it isn't somehow set to CKP
pana.setRaw(ckpState);
EXPECT_EQ(kPanasonicCkp, pana.getModel());
EXPECT_STATE_EQ(ckpState, pana.getRaw(), kPanasonicAcBits);
}
TEST(TestIRPanasonicAcClass, SetAndGetMode) {
IRPanasonicAc pana(0);
pana.setMode(kPanasonicAcCool);
pana.setTemp(21);
EXPECT_EQ(kPanasonicAcCool, pana.getMode());
pana.setMode(kPanasonicAcHeat);
EXPECT_EQ(kPanasonicAcHeat, pana.getMode());
pana.setMode(kPanasonicAcAuto);
EXPECT_EQ(kPanasonicAcAuto, pana.getMode());
pana.setMode(kPanasonicAcDry);
EXPECT_EQ(kPanasonicAcDry, pana.getMode());
EXPECT_EQ(21, pana.getTemp()); // Temp should be unchanged.
pana.setMode(kPanasonicAcFan);
EXPECT_EQ(kPanasonicAcFan, pana.getMode());
EXPECT_EQ(kPanasonicAcFanModeTemp, pana.getTemp()); // Temp should change.
pana.setMode(kPanasonicAcCool);
EXPECT_EQ(kPanasonicAcCool, pana.getMode());
// Temp should be unchanged from the last manual change.
EXPECT_EQ(21, pana.getTemp());
}
TEST(TestIRPanasonicAcClass, SetAndGetTemp) {
IRPanasonicAc pana(0);
pana.setTemp(25);
EXPECT_EQ(25, pana.getTemp());
pana.setTemp(kPanasonicAcMinTemp);
EXPECT_EQ(kPanasonicAcMinTemp, pana.getTemp());
pana.setTemp(kPanasonicAcMinTemp - 1);
EXPECT_EQ(kPanasonicAcMinTemp, pana.getTemp());
pana.setTemp(kPanasonicAcMaxTemp);
EXPECT_EQ(kPanasonicAcMaxTemp, pana.getTemp());
pana.setTemp(kPanasonicAcMaxTemp + 1);
EXPECT_EQ(kPanasonicAcMaxTemp, pana.getTemp());
}
TEST(TestIRPanasonicAcClass, SetAndGetFan) {
IRPanasonicAc pana(0);
pana.setFan(kPanasonicAcFanAuto);
EXPECT_EQ(kPanasonicAcFanAuto, pana.getFan());
pana.setFan(kPanasonicAcFanMin);
EXPECT_EQ(kPanasonicAcFanMin, pana.getFan());
pana.setFan(kPanasonicAcFanMin - 1);
EXPECT_EQ(kPanasonicAcFanMin, pana.getFan());
pana.setFan(kPanasonicAcFanMin + 1);
EXPECT_EQ(kPanasonicAcFanMin + 1, pana.getFan());
pana.setFan(kPanasonicAcFanMax);
EXPECT_EQ(kPanasonicAcFanMax, pana.getFan());
pana.setFan(kPanasonicAcFanMax + 1);
EXPECT_EQ(kPanasonicAcFanMax, pana.getFan());
pana.setFan(kPanasonicAcFanMax - 1);
EXPECT_EQ(kPanasonicAcFanMax - 1, pana.getFan());
}
TEST(TestIRPanasonicAcClass, SetAndGetSwings) {
IRPanasonicAc pana(0);
// Vertical
pana.setSwingVertical(kPanasonicAcSwingVAuto);
EXPECT_EQ(kPanasonicAcSwingVAuto, pana.getSwingVertical());
pana.setSwingVertical(kPanasonicAcSwingVUp);
EXPECT_EQ(kPanasonicAcSwingVUp, pana.getSwingVertical());
pana.setSwingVertical(kPanasonicAcSwingVUp - 1);
EXPECT_EQ(kPanasonicAcSwingVUp, pana.getSwingVertical());
pana.setSwingVertical(kPanasonicAcSwingVUp + 1);
EXPECT_EQ(kPanasonicAcSwingVUp + 1, pana.getSwingVertical());
pana.setSwingVertical(kPanasonicAcSwingVDown);
EXPECT_EQ(kPanasonicAcSwingVDown, pana.getSwingVertical());
pana.setSwingVertical(kPanasonicAcSwingVDown + 1);
EXPECT_EQ(kPanasonicAcSwingVDown, pana.getSwingVertical());
pana.setSwingVertical(kPanasonicAcSwingVDown - 1);
EXPECT_EQ(kPanasonicAcSwingVDown - 1, pana.getSwingVertical());
pana.setSwingVertical(kPanasonicAcSwingVAuto);
EXPECT_EQ(kPanasonicAcSwingVAuto, pana.getSwingVertical());
// Horizontal is model dependant.
pana.setModel(kPanasonicNke); // NKE is always fixed in the middle.
EXPECT_EQ(kPanasonicAcSwingHMiddle, pana.getSwingHorizontal());
pana.setSwingHorizontal(kPanasonicAcSwingHAuto);
EXPECT_EQ(kPanasonicAcSwingHMiddle, pana.getSwingHorizontal());
pana.setModel(kPanasonicJke); // JKE has no H swing.
EXPECT_EQ(0, pana.getSwingHorizontal());
pana.setSwingHorizontal(kPanasonicAcSwingHMiddle);
EXPECT_EQ(0, pana.getSwingHorizontal());
pana.setModel(kPanasonicLke); // LKE is always fixed in the middle.
EXPECT_EQ(kPanasonicAcSwingHMiddle, pana.getSwingHorizontal());
pana.setSwingHorizontal(kPanasonicAcSwingHAuto);
EXPECT_EQ(kPanasonicAcSwingHMiddle, pana.getSwingHorizontal());
pana.setModel(kPanasonicDke); // DKE has full control.
ASSERT_EQ(kPanasonicDke, pana.getModel());
// Auto was last requested.
EXPECT_EQ(kPanasonicAcSwingHAuto, pana.getSwingHorizontal());
pana.setSwingHorizontal(kPanasonicAcSwingHLeft);
EXPECT_EQ(kPanasonicAcSwingHLeft, pana.getSwingHorizontal());
// Changing models from DKE to something else, then back should not change
// the intended swing.
pana.setModel(kPanasonicLke);
EXPECT_EQ(kPanasonicAcSwingHMiddle, pana.getSwingHorizontal());
pana.setModel(kPanasonicDke);
EXPECT_EQ(kPanasonicAcSwingHLeft, pana.getSwingHorizontal());
}
TEST(TestIRPanasonicAcClass, QuietAndPowerful) {
IRPanasonicAc pana(0);
pana.setQuiet(false);
EXPECT_FALSE(pana.getQuiet());
pana.setQuiet(true);
EXPECT_TRUE(pana.getQuiet());
EXPECT_FALSE(pana.getPowerful());
pana.setPowerful(false);
EXPECT_FALSE(pana.getPowerful());
EXPECT_TRUE(pana.getQuiet());
pana.setPowerful(true);
EXPECT_TRUE(pana.getPowerful());
EXPECT_FALSE(pana.getQuiet());
pana.setPowerful(false);
EXPECT_FALSE(pana.getPowerful());
EXPECT_FALSE(pana.getQuiet());
pana.setPowerful(true);
pana.setQuiet(true);
EXPECT_TRUE(pana.getQuiet());
EXPECT_FALSE(pana.getPowerful());
}
TEST(TestIRPanasonicAcClass, HumanReadable) {
IRPanasonicAc pana(0);
EXPECT_EQ(
"Model: 4 (JKE), Power: Off, Mode: 0 (AUTO), Temp: 0C, "
"Fan: 253 (UNKNOWN), Swing (Vertical): 0 (UNKNOWN), Quiet: Off, "
"Powerful: Off, Clock: 0:00, On Timer: Off, Off Timer: Off",
pana.toString());
pana.setPower(true);
pana.setTemp(kPanasonicAcMaxTemp);
pana.setMode(kPanasonicAcHeat);
pana.setFan(kPanasonicAcFanMax);
pana.setSwingVertical(kPanasonicAcSwingVAuto);
pana.setPowerful(true);
EXPECT_EQ(
"Model: 4 (JKE), Power: On, Mode: 4 (HEAT), Temp: 30C, "
"Fan: 4 (MAX), Swing (Vertical): 15 (AUTO), Quiet: Off, "
"Powerful: On, Clock: 0:00, On Timer: Off, Off Timer: Off",
pana.toString());
pana.setQuiet(true);
pana.setModel(kPanasonicLke);
EXPECT_EQ(
"Model: 1 (LKE), Power: Off, Mode: 4 (HEAT), Temp: 30C, "
"Fan: 4 (MAX), Swing (Vertical): 15 (AUTO), "
"Swing (Horizontal): 6 (Middle), Quiet: On, Powerful: Off, "
"Clock: 0:00, On Timer: 0:00, Off Timer: Off",
pana.toString());
pana.setModel(kPanasonicDke);
pana.setSwingHorizontal(kPanasonicAcSwingHRight);
EXPECT_EQ(
"Model: 3 (DKE), Power: Off, Mode: 4 (HEAT), Temp: 30C, "
"Fan: 4 (MAX), Swing (Vertical): 15 (AUTO), "
"Swing (Horizontal): 11 (Right), Quiet: On, Powerful: Off, "
"Clock: 0:00, On Timer: Off, Off Timer: Off",
pana.toString());
}
// Tests for decodePanasonicAC().
// Decode normal Panasonic AC messages.
TEST(TestDecodePanasonicAC, RealExample) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
// Data from Issue #525
uint16_t rawData[439] = {
3582, 1686, 488, 378, 488, 1238, 488, 378, 488, 378, 488, 378,
488, 378, 488, 378, 488, 384, 488, 378, 488, 378, 488, 378,
488, 378, 488, 378, 488, 1242, 486, 378, 488, 384, 488, 378,
488, 378, 488, 380, 486, 382, 484, 382, 484, 1264, 464, 1266,
460, 1272, 462, 378, 488, 406, 460, 1266, 462, 380, 488, 382,
484, 388, 478, 406, 462, 410, 462, 404, 462, 406, 462, 396,
470, 406, 462, 404, 462, 406, 460, 404, 462, 410, 462, 404,
462, 404, 462, 406, 464, 406, 462, 404, 462, 406, 462, 404,
462, 410, 462, 404, 462, 406, 462, 404, 462, 404, 462, 404,
462, 406, 460, 406, 462, 410, 462, 404, 462, 1264, 484, 1244,
486, 382, 482, 382, 486, 382, 486, 378, 486, 382, 488, 9924,
3554, 1686, 488, 378, 490, 1240, 486, 378, 488, 378, 488, 378,
488, 378, 488, 382, 484, 386, 486, 378, 488, 382, 486, 378,
488, 382, 486, 382, 484, 1242, 486, 380, 488, 386, 484, 382,
486, 380, 486, 382, 486, 380, 486, 380, 486, 1242, 486, 1242,
484, 1248, 484, 380, 488, 382, 484, 1242, 486, 382, 484, 382,
484, 382, 484, 382, 486, 386, 484, 382, 486, 382, 484, 382,
486, 382, 486, 380, 484, 382, 486, 382, 488, 380, 486, 382,
484, 380, 462, 406, 488, 376, 484, 1246, 482, 1246, 460, 404,
480, 392, 484, 386, 482, 1244, 484, 382, 484, 382, 484, 1242,
482, 1244, 484, 382, 464, 410, 460, 404, 462, 406, 462, 404,
462, 404, 470, 396, 462, 406, 462, 404, 462, 1286, 460, 1268,
458, 1268, 460, 1266, 460, 1266, 460, 406, 460, 1266, 462, 406,
460, 1272, 462, 406, 460, 406, 460, 406, 460, 406, 462, 404,
462, 406, 460, 406, 462, 410, 462, 404, 462, 406, 460, 406,
460, 406, 462, 404, 462, 406, 460, 406, 460, 410, 462, 406,
460, 1268, 460, 1266, 460, 404, 460, 406, 462, 406, 460, 406,
460, 412, 456, 410, 460, 410, 438, 428, 460, 410, 456, 410,
456, 1272, 436, 1288, 438, 434, 438, 428, 438, 428, 438, 428,
438, 428, 438, 428, 438, 428, 438, 428, 438, 434, 438, 428,
438, 428, 438, 428, 438, 428, 438, 428, 440, 428, 438, 428,
438, 432, 438, 428, 438, 428, 438, 428, 438, 428, 438, 428,
438, 428, 438, 430, 438, 1294, 438, 428, 438, 428, 438, 428,
438, 428, 438, 428, 438, 428, 438, 428, 438, 434, 438, 428,
438, 1288, 438, 1290, 438, 428, 438, 428, 438, 428, 438, 428,
438, 432, 438, 1288, 438, 1290, 438, 430, 438, 428, 438, 428,
438, 428, 438, 428, 438, 1292, 438};
uint8_t expectedState[kPanasonicAcStateLength] = {
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
0x20, 0xE0, 0x04, 0x00, 0x30, 0x32, 0x80, 0xAF, 0x00,
0x00, 0x06, 0x60, 0x00, 0x00, 0x80, 0x00, 0x06, 0x83};
irsend.sendRaw(rawData, 439, kPanasonicFreq);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(PANASONIC_AC, irsend.capture.decode_type);
EXPECT_EQ(kPanasonicAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
}
// Decode synthetic Panasonic AC message.
TEST(TestDecodePanasonicAC, SyntheticExample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Data from Issue #525
uint8_t expectedState[kPanasonicAcStateLength] = {
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
0x20, 0xE0, 0x04, 0x00, 0x30, 0x32, 0x80, 0xAF, 0x00,
0x00, 0x06, 0x60, 0x00, 0x00, 0x80, 0x00, 0x06, 0x83};
irsend.sendPanasonicAC(expectedState);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(PANASONIC_AC, irsend.capture.decode_type);
EXPECT_EQ(kPanasonicAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
IRPanasonicAc pana(0);
pana.setRaw(irsend.capture.state);
EXPECT_EQ(
"Model: 4 (JKE), Power: Off, Mode: 3 (COOL), Temp: 25C, "
"Fan: 7 (AUTO), Swing (Vertical): 15 (AUTO), Quiet: Off, "
"Powerful: Off, Clock: 0:00, On Timer: Off, Off Timer: Off",
pana.toString());
}
// Tests for general utility functions.
TEST(TestGeneralPanasonic, hasACState) {
EXPECT_TRUE(hasACState(PANASONIC_AC));
ASSERT_FALSE(hasACState(PANASONIC));
}
TEST(TestGeneralPanasonic, typeToString) {
EXPECT_EQ("PANASONIC_AC", typeToString(PANASONIC_AC));
EXPECT_EQ("PANASONIC", typeToString(PANASONIC));
}
// Decode a problematic Panasonic AC message
TEST(TestDecodePanasonicAC, Issue540) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Data from Issue #540
uint16_t rawData[439] = {
3512, 1714, 466, 408, 466, 1280, 470, 408, 466, 412, 466, 408,
466, 412, 462, 412, 466, 414, 466, 408, 466, 412, 462, 412,
466, 412, 466, 408, 466, 1280, 466, 412, 462, 416, 462, 412,
466, 408, 466, 412, 462, 416, 462, 412, 462, 1282, 462, 1284,
462, 1288, 466, 412, 462, 412, 462, 1284, 462, 416, 440, 438,
462, 412, 462, 412, 462, 416, 466, 412, 462, 412, 462, 412,
440, 442, 462, 412, 462, 412, 460, 418, 462, 416, 462, 412,
462, 418, 462, 412, 462, 416, 462, 412, 436, 442, 462, 412,
460, 418, 462, 416, 462, 412, 460, 412, 462, 420, 436, 438,
462, 412, 462, 416, 432, 448, 436, 438, 436, 1310, 436, 1310,
462, 420, 432, 442, 436, 438, 462, 416, 432, 444, 432, 10008,
3480, 1744, 492, 382, 492, 1254, 492, 386, 488, 390, 492, 382,
492, 386, 488, 386, 492, 386, 492, 386, 488, 386, 488, 386,
492, 386, 492, 382, 492, 1258, 488, 386, 488, 390, 492, 386,
488, 386, 488, 386, 492, 390, 488, 386, 488, 1256, 488, 1258,
488, 1262, 488, 390, 488, 386, 488, 1258, 488, 390, 488, 392,
488, 386, 488, 386, 488, 394, 488, 386, 488, 386, 488, 390,
488, 390, 488, 386, 488, 390, 462, 412, 488, 390, 462, 1282,
488, 390, 456, 416, 458, 1292, 456, 1288, 488, 1258, 488, 392,
456, 422, 488, 390, 484, 392, 484, 1262, 458, 420, 484, 1262,
482, 1262, 488, 392, 484, 394, 484, 416, 436, 442, 458, 416,
458, 422, 430, 448, 432, 442, 458, 416, 458, 1296, 432, 1314,
458, 1288, 432, 1312, 432, 1322, 428, 446, 428, 1318, 432, 442,
432, 1318, 432, 1318, 428, 446, 428, 1318, 428, 1322, 430, 448,
426, 448, 428, 452, 426, 452, 426, 448, 428, 472, 400, 478,
402, 478, 402, 472, 402, 476, 402, 472, 402, 478, 402, 472,
402, 1348, 398, 1348, 398, 1352, 398, 508, 370, 478, 398, 476,
398, 512, 366, 508, 370, 502, 372, 508, 340, 538, 372, 504,
344, 1400, 344, 1400, 346, 1434, 314, 560, 316, 588, 290, 560,
314, 564, 396, 400, 474, 400, 480, 394, 480, 404, 474, 400,
454, 446, 454, 426, 448, 430, 424, 450, 428, 452, 448, 426,
426, 452, 424, 1322, 454, 426, 450, 424, 426, 452, 428, 452,
450, 424, 428, 446, 426, 1322, 454, 426, 422, 450, 454, 426,
448, 430, 454, 426, 448, 426, 428, 446, 454, 430, 454, 422,
452, 424, 424, 452, 452, 430, 424, 452, 452, 426, 448, 426,
426, 456, 448, 426, 448, 1296, 424, 1322, 426, 1326, 450, 1270,
478, 422, 454, 424, 424, 450, 454};
uint8_t expectedState[kPanasonicAcStateLength] = {
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
0x20, 0xE0, 0x04, 0x00, 0x39, 0x34, 0x80, 0xAF, 0x0D,
0x00, 0x0E, 0xE0, 0x00, 0x00, 0x81, 0x00, 0x00, 0x1E};
irsend.sendRaw(rawData, 439, kPanasonicFreq);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(PANASONIC_AC, irsend.capture.decode_type);
EXPECT_EQ(kPanasonicAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
IRPanasonicAc pana(0);
pana.setRaw(irsend.capture.state);
// TODO(crankyoldgit): Try to figure out what model this should be.
EXPECT_EQ(
"Model: 0 (UNKNOWN), Power: On, Mode: 3 (COOL), Temp: 26C, "
"Fan: 7 (AUTO), Swing (Vertical): 15 (AUTO), "
"Swing (Horizontal): 13 (AUTO), Quiet: Off, Powerful: Off, "
"Clock: 0:00, On Timer: Off, Off Timer: Off",
pana.toString());
}
TEST(TestIRPanasonicAcClass, TimeBasics) {
EXPECT_EQ(0x186, IRPanasonicAc::encodeTime(6, 30));
EXPECT_EQ(0x3CA, IRPanasonicAc::encodeTime(16, 10));
EXPECT_EQ(0x448, IRPanasonicAc::encodeTime(18, 16));
EXPECT_EQ(0, IRPanasonicAc::encodeTime(0, 0));
EXPECT_EQ(kPanasonicAcTimeMax, IRPanasonicAc::encodeTime(23, 59));
EXPECT_EQ("16:10",
IRPanasonicAc::timeToString(IRPanasonicAc::encodeTime(16, 10)));
EXPECT_EQ("6:30",
IRPanasonicAc::timeToString(IRPanasonicAc::encodeTime(6, 30)));
EXPECT_EQ("18:16",
IRPanasonicAc::timeToString(IRPanasonicAc::encodeTime(18, 16)));
EXPECT_EQ("1:01",
IRPanasonicAc::timeToString(IRPanasonicAc::encodeTime(1, 1)));
EXPECT_EQ(kPanasonicAcTimeMax, IRPanasonicAc::encodeTime(23, 59));
EXPECT_EQ(kPanasonicAcTimeMax, IRPanasonicAc::encodeTime(25, 72));
EXPECT_EQ(59, IRPanasonicAc::encodeTime(0, 72));
EXPECT_EQ(23 * 60, IRPanasonicAc::encodeTime(27, 0));
EXPECT_EQ("0:00", IRPanasonicAc::timeToString(0));
EXPECT_EQ("23:59", IRPanasonicAc::timeToString(kPanasonicAcTimeMax));
}
TEST(TestIRPanasonicAcClass, TimersAndClock) {
IRPanasonicAc pana(0);
// Data from Issue #544
uint8_t state[27] = {0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
0x20, 0xE0, 0x04, 0x00, 0x4E, 0x2E, 0x80, 0xAF, 0x00,
0xCA, 0x6B, 0x98, 0x10, 0x00, 0x01, 0x48, 0x04, 0xDB};
pana.setRaw(state);
EXPECT_TRUE(pana.isOnTimerEnabled());
EXPECT_EQ(0x3CA, pana.getOnTimer());
EXPECT_TRUE(pana.isOffTimerEnabled());
EXPECT_EQ(0x186, pana.getOffTimer());
EXPECT_EQ(0x448, pana.getClock());
pana.cancelOnTimer();
EXPECT_FALSE(pana.isOnTimerEnabled());
EXPECT_EQ(0, pana.getOnTimer());
EXPECT_TRUE(pana.isOffTimerEnabled());
EXPECT_EQ(0x186, pana.getOffTimer());
EXPECT_EQ(0x448, pana.getClock());
pana.cancelOffTimer();
EXPECT_FALSE(pana.isOnTimerEnabled());
EXPECT_EQ(0, pana.getOnTimer());
EXPECT_FALSE(pana.isOffTimerEnabled());
EXPECT_EQ(0, pana.getOffTimer());
EXPECT_EQ(0x448, pana.getClock());
pana.setOnTimer(7 * 60 + 50);
EXPECT_TRUE(pana.isOnTimerEnabled());
EXPECT_EQ(7 * 60 + 50, pana.getOnTimer());
EXPECT_FALSE(pana.isOffTimerEnabled());
EXPECT_EQ(0, pana.getOffTimer());
EXPECT_EQ(0x448, pana.getClock());
pana.setOnTimer(7 * 60 + 57); // It should round down.
EXPECT_EQ(7 * 60 + 50, pana.getOnTimer());
pana.setOnTimer(28 * 60); // It should round down.
EXPECT_EQ(kPanasonicAcTimeMax - 9, pana.getOnTimer());
pana.setOnTimer(kPanasonicAcTimeSpecial);
EXPECT_EQ(0, pana.getOnTimer());
pana.setOnTimer(7 * 60 + 50);
pana.setOffTimer(19 * 60 + 30);
EXPECT_TRUE(pana.isOnTimerEnabled());
EXPECT_EQ(7 * 60 + 50, pana.getOnTimer());
EXPECT_TRUE(pana.isOffTimerEnabled());
EXPECT_EQ(19 * 60 + 30, pana.getOffTimer());
EXPECT_EQ(0x448, pana.getClock());
pana.setOffTimer(19 * 60 + 57); // It should round down.
EXPECT_EQ(19 * 60 + 50, pana.getOffTimer());
pana.setOffTimer(28 * 60); // It should round down.
EXPECT_EQ(kPanasonicAcTimeMax - 9, pana.getOffTimer());
pana.setOffTimer(kPanasonicAcTimeSpecial);
EXPECT_EQ(0, pana.getOffTimer());
pana.setClock(0);
EXPECT_EQ(0, pana.getClock());
pana.setClock(kPanasonicAcTimeMax);
EXPECT_EQ(kPanasonicAcTimeMax, pana.getClock());
pana.setClock(kPanasonicAcTimeMax - 1);
EXPECT_EQ(kPanasonicAcTimeMax - 1, pana.getClock());
pana.setClock(kPanasonicAcTimeMax + 1);
EXPECT_EQ(kPanasonicAcTimeMax, pana.getClock());
pana.setClock(kPanasonicAcTimeSpecial);
EXPECT_EQ(0, pana.getClock());
}
// Decode a real short Panasonic AC message
TEST(TestDecodePanasonicAC, RealExampleOfShortMessage) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Data from Issue #544 (Odour Wash)
uint16_t rawData[263] = {
3496, 1734, 506, 366, 448, 1294, 504, 368, 498, 374, 452, 418,
448, 424, 444, 428, 450, 422, 446, 426, 450, 420, 448, 424,
452, 418, 448, 422, 444, 1300, 498, 374, 504, 368, 448, 424,
452, 418, 448, 424, 444, 428, 450, 422, 446, 1296, 500, 1242,
502, 1242, 504, 368, 498, 374, 452, 1292, 504, 366, 450, 422,
444, 426, 450, 420, 446, 424, 452, 418, 448, 424, 444, 428,
450, 422, 444, 426, 450, 420, 446, 424, 452, 418, 448, 422,
444, 428, 450, 422, 446, 426, 452, 420, 446, 426, 452, 418,
448, 424, 442, 428, 448, 422, 444, 426, 450, 420, 446, 426,
452, 418, 448, 424, 444, 428, 450, 422, 444, 1298, 500, 1244,
500, 372, 444, 428, 450, 422, 446, 426, 452, 418, 448, 10020,
3500, 1732, 498, 372, 452, 1290, 506, 366, 450, 422, 446, 426,
452, 420, 448, 424, 452, 418, 448, 422, 444, 426, 450, 420,
446, 426, 452, 420, 446, 1296, 500, 370, 444, 428, 450, 422,
446, 426, 452, 420, 446, 424, 442, 428, 448, 1294, 502, 1240,
504, 1238, 506, 366, 448, 422, 444, 1298, 498, 374, 452, 418,
448, 424, 444, 428, 450, 422, 446, 426, 450, 420, 446, 424,
452, 418, 448, 422, 444, 428, 450, 420, 446, 1298, 498, 1244,
500, 1242, 502, 368, 446, 1298, 500, 1244, 500, 372, 444, 428,
450, 1292, 504, 368, 446, 1296, 502, 370, 444, 426, 452, 1290,
504, 1238, 506, 366, 450, 422, 446, 1298, 498, 1246, 500, 372,
444, 428, 450, 1294, 452, 420, 446, 1296, 448, 422, 444}; // UNKNOWN
// 1FB51F79
uint8_t expectedState[kPanasonicAcStateShortLength] = {
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06,
0x02, 0x20, 0xE0, 0x04, 0x80, 0x9B, 0x32, 0x53};
irsend.sendRaw(rawData, 263, kPanasonicFreq);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(PANASONIC_AC, irsend.capture.decode_type);
EXPECT_EQ(kPanasonicAcShortBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
}
// Create and decode a short Panasonic AC message
TEST(TestDecodePanasonicAC, SyntheticShortMessage) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
uint8_t odourWash[kPanasonicAcStateShortLength] = {
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06,
0x02, 0x20, 0xE0, 0x04, 0x80, 0x9B, 0x32, 0x53};
irsend.sendPanasonicAC(odourWash, kPanasonicAcStateShortLength);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(PANASONIC_AC, irsend.capture.decode_type);
EXPECT_EQ(kPanasonicAcShortBits, irsend.capture.bits);
EXPECT_STATE_EQ(odourWash, irsend.capture.state, irsend.capture.bits);
}
//
// Test for CKP model / see issue #544
TEST(TestDecodePanasonicAC, CkpModelSpecifics) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Data from Issue #544
uint8_t ckpPowerfulOn[kPanasonicAcStateLength] = {
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
0x20, 0xE0, 0x04, 0x00, 0x4E, 0x2E, 0x80, 0xAF, 0x00,
0x00, 0x0E, 0xE0, 0x11, 0x00, 0x01, 0x00, 0x06, 0xB7};
uint8_t ckpQuietOn[kPanasonicAcStateLength] = {
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
0x20, 0xE0, 0x04, 0x00, 0x4E, 0x2E, 0x80, 0xAF, 0x00,
0x00, 0x0E, 0xE0, 0x30, 0x00, 0x01, 0x00, 0x06, 0xD6};
irsend.sendPanasonicAC(ckpPowerfulOn);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(PANASONIC_AC, irsend.capture.decode_type);
EXPECT_EQ(kPanasonicAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(ckpPowerfulOn, irsend.capture.state, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
IRPanasonicAc pana(0);
pana.setRaw(irsend.capture.state);
EXPECT_EQ(
"Model: 5 (CKP), Power: Off, Mode: 4 (HEAT), Temp: 23C, "
"Fan: 7 (AUTO), Swing (Vertical): 15 (AUTO), Quiet: Off, "
"Powerful: On, Clock: 0:00, On Timer: 0:00, Off Timer: 0:00",
pana.toString());
pana.setQuiet(true);
EXPECT_FALSE(pana.getPowerful());
EXPECT_TRUE(pana.getQuiet());
EXPECT_EQ(kPanasonicCkp, pana.getModel());
EXPECT_STATE_EQ(ckpQuietOn, pana.getRaw(), kPanasonicAcBits);
pana.setPowerful(true);
EXPECT_TRUE(pana.getPowerful());
EXPECT_FALSE(pana.getQuiet());
EXPECT_EQ(kPanasonicCkp, pana.getModel());
EXPECT_STATE_EQ(ckpPowerfulOn, pana.getRaw(), kPanasonicAcBits);
}
@@ -0,0 +1,152 @@
// Copyright 2018 David Conran
#include "IRsend.h"
#include "IRsend_test.h"
#include "IRutils.h"
#include "gtest/gtest.h"
// Tests for sendPioneer().
// Test sending typical data only.
TEST(TestSendPioneer, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
irsend.sendPioneer(0);
EXPECT_EQ(
"m8960s4480"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s58240"
"m8960s4480"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s58240",
irsend.outputStr());
irsend.sendPioneer(0x55FF00AAAA00FF55);
EXPECT_EQ(
"m8960s4480"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s40320"
"m8960s4480"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s40320",
irsend.outputStr());
}
// Tests for IRutils.
TEST(TestIRUtils, TypeToString) { EXPECT_EQ("PIONEER", typeToString(PIONEER)); }
// Tests for encodePioneer().
TEST(TestEncodePioneer, SimpleEncoding) {
IRsendTest irsend(0);
IRrecv irrecv(0);
// Spotify button (A556+AF20)
// via
// https://www.pioneerelectronics.com/StaticFiles/PUSA/Files/Home%20Custom%20Install/2015%20Pioneer%20&%20Elite%20AVR%20IR%20with%20Hex_1.xls
EXPECT_EQ(0xA55A6A95F50A04FB, irsend.encodePioneer(0xA556, 0xAF20));
// "Source" from
// https://github.com/markszabo/IRremoteESP8266/pull/547#issuecomment-429616582
EXPECT_EQ(0x659A05FAF50AC53A, irsend.encodePioneer(0xA6A0, 0xAFA3));
}
// Tests for decodePioneer().
// Synthesised Normal Pioneer message.
TEST(TestDecodePioneer, SyntheticPioneerDecode) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
irsend.sendPioneer(0x659A05FAF50AC53A);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(PIONEER, irsend.capture.decode_type);
EXPECT_EQ(kPioneerBits, irsend.capture.bits);
EXPECT_EQ(0x659A05FAF50AC53A, irsend.capture.value);
EXPECT_EQ(0xA6A0, irsend.capture.address);
EXPECT_EQ(0xAFA3, irsend.capture.command);
}
// Real long Pioneer message.
TEST(TestDecodePioneer, RealExampleLongDecodeSourceButton) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
// "Source" button.
// https://github.com/markszabo/IRremoteESP8266/pull/547#issuecomment-429616582
uint16_t rawData[135] = {
8552, 4184, 596, 472, 592, 1524, 594, 1524, 594, 472, 592, 472,
598, 1520, 596, 472, 594, 1524, 592, 1524, 592, 472, 592, 472,
596, 1520, 598, 1520, 596, 472, 592, 1524, 592, 472, 592, 476,
592, 472, 592, 472, 592, 476, 592, 472, 592, 1524, 592, 472,
598, 1518, 598, 1520, 596, 1520, 596, 1520, 596, 1520, 596, 1520,
596, 472, 592, 1524, 592, 472, 598, 25282, 8552, 4182, 596, 1520,
598, 1518, 598, 1520, 596, 1520, 596, 472, 592, 1524, 592, 472,
598, 1520, 596, 472, 594, 472, 592, 472, 596, 472, 592, 1524,
592, 472, 592, 1524, 596, 472, 594, 1520, 596, 1520, 598, 472,
592, 472, 598, 472, 594, 1522, 594, 472, 592, 1524, 594, 472,
596, 472, 594, 1524, 592, 1524, 592, 1524, 592, 472, 594, 1524,
598, 472, 592};
irsend.sendRaw(rawData, 135, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(PIONEER, irsend.capture.decode_type);
EXPECT_EQ(kPioneerBits, irsend.capture.bits);
EXPECT_EQ(0x659A05FAF50AC53A, irsend.capture.value);
EXPECT_EQ(0xA6A0, irsend.capture.address);
EXPECT_EQ(0xAFA3, irsend.capture.command);
}
// Synthetic Pioneer message.
// For:
// https://github.com/markszabo/IRremoteESP8266/pull/547#issuecomment-430800734
TEST(TestDecodePioneer, SyntheticPioneerMessage) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
irsend.sendPioneer(0x659A857AF50A3DC2, 64, 0);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(PIONEER, irsend.capture.decode_type);
EXPECT_EQ(kPioneerBits, irsend.capture.bits);
EXPECT_EQ(0x659A857AF50A3DC2, irsend.capture.value);
EXPECT_EQ(0xA6A1, irsend.capture.address);
EXPECT_EQ(0xAFBC, irsend.capture.command);
irsend.reset();
irsend.sendPioneer(0x659A857AF50A3DC2, 64, 0);
EXPECT_EQ(
"m8960s4480"
"m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s1680m560s560m560s1680"
"m560s560m560s1680m560s1680m560s1680m560s1680m560s560m560s1680m560s560"
"m560s40320"
"m8960s4480"
"m560s1680m560s1680m560s1680m560s1680m560s560m560s1680m560s560m560s1680"
"m560s560m560s560m560s560m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s560m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s1680m560s560"
"m560s40320",
irsend.outputStr());
}
+64 -64
View File
@@ -79,8 +79,8 @@ TEST(TestSendPronto, MoreDataThanNeededInBoth) {
irsend.reset();
// We should handle when we are given more data than needed. (repeat seq.)
uint16_t pronto_test[10] = {0x0000, 0x0067, 0x0001, 0x0001,
0x0001, 0x0002, 0x0003, 0x0004, 0x5, 0x6};
uint16_t pronto_test[10] = {0x0000, 0x0067, 0x0001, 0x0001, 0x0001,
0x0002, 0x0003, 0x0004, 0x5, 0x6};
irsend.sendPronto(pronto_test, 10);
EXPECT_EQ("m25s50", irsend.outputStr()); // Only send the data required.
irsend.sendPronto(pronto_test, 10, 1);
@@ -110,20 +110,18 @@ TEST(TestSendPronto, NonRepeatingCode) {
// It was an example of a poor Pronto code.
// It turned out to be a 4 copies of a Sony 12-bit code. Who knew!?!
uint16_t pronto_test[108] = {
0x0000, 0x0067, 0x0034, 0x0000,
0x0060, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0030, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0452, 0x0060, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0030, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0452, 0x0060, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0030, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0452, 0x0060, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0030, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018};
0x0000, 0x0067, 0x0034, 0x0000, 0x0060, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0030, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0452, 0x0060, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0030, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0452, 0x0060, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0030, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0452, 0x0060, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0030,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018};
// Send the Pronto code without any repeats set.
irsend.reset();
@@ -131,7 +129,7 @@ TEST(TestSendPronto, NonRepeatingCode) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_12_BITS, irsend.capture.bits);
EXPECT_EQ(kSony12Bits, irsend.capture.bits);
EXPECT_EQ(0x10, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -147,7 +145,8 @@ TEST(TestSendPronto, NonRepeatingCode) {
"m600s600m600s600m600s600m600s27650"
"m2400s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m600s600m600s600", irsend.outputStr());
"m600s600m600s600m600s600m600s600",
irsend.outputStr());
// Now try repeating it.
// As it has no repeat sequence, we shouldn't repeat it. (I think)
@@ -156,7 +155,7 @@ TEST(TestSendPronto, NonRepeatingCode) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_12_BITS, irsend.capture.bits);
EXPECT_EQ(kSony12Bits, irsend.capture.bits);
EXPECT_EQ(0x10, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -172,7 +171,8 @@ TEST(TestSendPronto, NonRepeatingCode) {
"m600s600m600s600m600s600m600s27650"
"m2400s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m600s600m600s600", irsend.outputStr());
"m600s600m600s600m600s600m600s600",
irsend.outputStr());
}
// Test sending a Pronto code that only has a repeat sequence (Sony).
@@ -183,13 +183,12 @@ TEST(TestSendPronto, RepeatSequenceOnlyForSony) {
// Sony 20-bit command.
uint16_t pronto_test[46] = {
0x0000, 0x0067, 0x0000, 0x0015,
0x0060, 0x0018, 0x0018, 0x0018, 0x0030, 0x0018, 0x0030, 0x0018,
0x0030, 0x0018, 0x0018, 0x0018, 0x0030, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0030, 0x0018, 0x0018, 0x0018, 0x0030, 0x0018,
0x0030, 0x0018, 0x0030, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0000, 0x0067, 0x0000, 0x0015, 0x0060, 0x0018, 0x0018, 0x0018,
0x0030, 0x0018, 0x0030, 0x0018, 0x0030, 0x0018, 0x0018, 0x0018,
0x0030, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0030, 0x0018,
0x0018, 0x03f6};
0x0018, 0x0018, 0x0030, 0x0018, 0x0030, 0x0018, 0x0030, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0030, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0030, 0x0018, 0x0018, 0x03f6};
// Send the Pronto code without any repeats set.
irsend.reset();
@@ -197,7 +196,7 @@ TEST(TestSendPronto, RepeatSequenceOnlyForSony) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_20_BITS, irsend.capture.bits);
EXPECT_EQ(kSony20Bits, irsend.capture.bits);
EXPECT_EQ(0x74B92, irsend.capture.value);
EXPECT_EQ(0x1A, irsend.capture.address);
EXPECT_EQ(0x24AE, irsend.capture.command);
@@ -205,15 +204,16 @@ TEST(TestSendPronto, RepeatSequenceOnlyForSony) {
"m2400s600"
"m600s600m1200s600m1200s600m1200s600m600s600m1200s600m600s600m600s600"
"m1200s600m600s600m1200s600m1200s600m1200s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s25350", irsend.outputStr());
"m600s600m600s600m1200s600m600s25350",
irsend.outputStr());
// Send the Pronto code with 2 repeats.
irsend.reset();
irsend.sendPronto(pronto_test, 46, SONY_MIN_REPEAT);
irsend.sendPronto(pronto_test, 46, kSonyMinRepeat);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_20_BITS, irsend.capture.bits);
EXPECT_EQ(kSony20Bits, irsend.capture.bits);
EXPECT_EQ(0x74B92, irsend.capture.value);
EXPECT_EQ(0x1A, irsend.capture.address);
EXPECT_EQ(0x24AE, irsend.capture.command);
@@ -229,7 +229,8 @@ TEST(TestSendPronto, RepeatSequenceOnlyForSony) {
"m2400s600"
"m600s600m1200s600m1200s600m1200s600m600s600m1200s600m600s600m600s600"
"m1200s600m600s600m1200s600m1200s600m1200s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s25350", irsend.outputStr());
"m600s600m600s600m1200s600m600s25350",
irsend.outputStr());
}
// Test sending a Pronto code that only has a repeat sequence (Panasonic).
@@ -240,20 +241,18 @@ TEST(TestSendPronto, RepeatSequenceOnlyForPanasonic) {
// Panasonic Plasma TV Descrete code (Power On).
uint16_t pronto_test[104] = {
0x0000, 0x0071, 0x0000, 0x0032,
0x0080, 0x003F, 0x0010, 0x0010, 0x0010, 0x0030, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0030, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0030, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0030, 0x0010, 0x0030,
0x0010, 0x0030, 0x0010, 0x0030, 0x0010, 0x0030, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0030, 0x0010, 0x0030,
0x0010, 0x0030, 0x0010, 0x0030, 0x0010, 0x0030, 0x0010, 0x0010,
0x0010, 0x0030, 0x0010, 0x0A98};
0x0000, 0x0071, 0x0000, 0x0032, 0x0080, 0x003F, 0x0010, 0x0010, 0x0010,
0x0030, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0030, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0030,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0030, 0x0010, 0x0030, 0x0010, 0x0030, 0x0010, 0x0030, 0x0010,
0x0030, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0030,
0x0010, 0x0030, 0x0010, 0x0030, 0x0010, 0x0030, 0x0010, 0x0030, 0x0010,
0x0010, 0x0010, 0x0030, 0x0010, 0x0A98};
// Send the Pronto code without any repeats set.
irsend.reset();
@@ -261,7 +260,7 @@ TEST(TestSendPronto, RepeatSequenceOnlyForPanasonic) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
EXPECT_EQ(0x400401007C7D, irsend.capture.value);
EXPECT_EQ(0x4004, irsend.capture.address);
EXPECT_EQ(0x1007C7D, irsend.capture.command);
@@ -273,10 +272,10 @@ TEST(TestSendPronto, RepeatSequenceOnlyForPanasonic) {
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s1296"
"m432s73224", irsend.outputStr());
"m432s73224",
irsend.outputStr());
}
// Test sending a Pronto code that has a normal & arepeat sequence (NEC).
TEST(TestSendPronto, NormalPlusRepeatSequence) {
IRsendTest irsend(4);
@@ -285,16 +284,14 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
// NEC 32 bit power on command.
uint16_t pronto_test[76] = {
0x0000, 0x006D, 0x0022, 0x0002,
0x0156, 0x00AB, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015,
0x0015, 0x0040, 0x0015, 0x0040, 0x0015, 0x0015, 0x0015, 0x0015,
0x0015, 0x0015, 0x0015, 0x0040, 0x0015, 0x0040, 0x0015, 0x0040,
0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0040, 0x0015, 0x0040,
0x0015, 0x0040, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015,
0x0015, 0x0040, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015,
0x0015, 0x0015, 0x0015, 0x0040, 0x0015, 0x0040, 0x0015, 0x0040,
0x0015, 0x0015, 0x0015, 0x0040, 0x0015, 0x0040, 0x0015, 0x0040,
0x0015, 0x0040, 0x0015, 0x05FD,
0x0000, 0x006D, 0x0022, 0x0002, 0x0156, 0x00AB, 0x0015, 0x0015, 0x0015,
0x0015, 0x0015, 0x0015, 0x0015, 0x0040, 0x0015, 0x0040, 0x0015, 0x0015,
0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0040, 0x0015, 0x0040, 0x0015,
0x0040, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0040, 0x0015, 0x0040,
0x0015, 0x0040, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015,
0x0040, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015,
0x0015, 0x0040, 0x0015, 0x0040, 0x0015, 0x0040, 0x0015, 0x0015, 0x0015,
0x0040, 0x0015, 0x0040, 0x0015, 0x0040, 0x0015, 0x0040, 0x0015, 0x05FD,
0x0156, 0x0055, 0x0015, 0x0E4E};
// Send the Pronto code without any repeats set.
@@ -303,7 +300,7 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x18E710EF, irsend.capture.value);
EXPECT_EQ(0x18, irsend.capture.address);
EXPECT_EQ(0x8, irsend.capture.command);
@@ -313,7 +310,8 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
"m546s1664m546s1664m546s1664m546s546m546s546m546s1664m546s1664m546s1664"
"m546s546m546s546m546s546m546s1664m546s546m546s546m546s546m546s546"
"m546s1664m546s1664m546s1664m546s546m546s1664m546s1664m546s1664m546s1664"
"m546s39858", irsend.outputStr());
"m546s39858",
irsend.outputStr());
// Send it again with a single repeat.
irsend.reset();
@@ -321,7 +319,7 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x18E710EF, irsend.capture.value);
EXPECT_EQ(0x18, irsend.capture.address);
EXPECT_EQ(0x8, irsend.capture.command);
@@ -332,7 +330,8 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
"m546s546m546s546m546s546m546s1664m546s546m546s546m546s546m546s546"
"m546s1664m546s1664m546s1664m546s546m546s1664m546s1664m546s1664m546s1664"
"m546s39858"
"m8892s2210m546s95212", irsend.outputStr());
"m8892s2210m546s95212",
irsend.outputStr());
// Send it again with a two repeats.
irsend.reset();
@@ -340,7 +339,7 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0x18E710EF, irsend.capture.value);
EXPECT_EQ(0x18, irsend.capture.address);
EXPECT_EQ(0x8, irsend.capture.command);
@@ -352,5 +351,6 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
"m546s1664m546s1664m546s1664m546s546m546s1664m546s1664m546s1664m546s1664"
"m546s39858"
"m8892s2210m546s95212"
"m8892s2210m546s95212", irsend.outputStr());
"m8892s2210m546s95212",
irsend.outputStr());
}
+172 -149
View File
@@ -77,52 +77,56 @@ TEST(TestSendRC5, SendDataOnly) {
irsend.begin();
irsend.reset();
irsend.sendRC5(0x0, RC5_BITS);
irsend.sendRC5(0x0, kRC5Bits);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s889m889s889m889s889m889"
"s889m889s889m889s889m889s889m889s889m889s889m889s90664",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x1AAA, RC5_BITS);
irsend.sendRC5(0x1AAA, kRC5Bits);
EXPECT_EQ(
"m889s889m889s889m1778s1778m1778s1778m1778s1778"
"m1778s1778m1778s1778m1778s90664", irsend.outputStr());
"m1778s1778m1778s1778m1778s90664",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x175, RC5_BITS);
irsend.sendRC5(0x175, kRC5Bits);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s89775", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s89775",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x3FFF, RC5_BITS);
irsend.sendRC5(0x3FFF, kRC5Bits);
EXPECT_EQ(
"m889s889m889s889m889s889m889s889m889s889m889s889m889s889"
"m889s889m889s889m889s889m889s889m889s889m889s889m889s89775",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x0, RC5X_BITS);
irsend.sendRC5(0x0, kRC5XBits);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s889m889s889m889s889m889"
"s889m889s889m889s889m889s889m889s889m889s889m889s90664",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x1AAA, RC5X_BITS);
irsend.sendRC5(0x1AAA, kRC5XBits);
EXPECT_EQ(
"m1778s1778m1778s1778m1778s1778m1778"
"s1778m1778s1778m1778s1778m1778s90664", irsend.outputStr());
"s1778m1778s1778m1778s1778m1778s90664",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x175, RC5X_BITS);
irsend.sendRC5(0x175, kRC5XBits);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s89775", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s89775",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x3FFF, RC5X_BITS);
irsend.sendRC5(0x3FFF, kRC5XBits);
EXPECT_EQ(
"m1778s1778m889s889m889s889m889s889m889s889m889s889m889"
"s889m889s889m889s889m889s889m889s889m889s889m889s89775",
@@ -135,40 +139,44 @@ TEST(TestSendRC5, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendRC5(0x175, RC5_BITS, 1);
irsend.sendRC5(0x175, kRC5Bits, 1);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s90664"
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s88886", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s88886",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x175, RC5_BITS, 2);
irsend.sendRC5(0x175, kRC5Bits, 2);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s90664"
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s89775"
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s88886", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s88886",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x175, RC5X_BITS, 1);
irsend.sendRC5(0x175, kRC5XBits, 1);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s90664"
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s88886", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s88886",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x1175, RC5X_BITS, 2);
irsend.sendRC5(0x1175, kRC5XBits, 2);
EXPECT_EQ(
"m1778s889m889s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s90664"
"m1778s889m889s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s89775"
"m1778s889m889s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s88886", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s88886",
irsend.outputStr());
}
// Tests for decodeRC5().
@@ -182,9 +190,9 @@ TEST(TestDecodeRC5, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendRC5(0x175);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, RC5_BITS, true));
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, kRC5Bits, true));
EXPECT_EQ(RC5, irsend.capture.decode_type);
EXPECT_EQ(RC5_BITS, irsend.capture.bits);
EXPECT_EQ(kRC5Bits, irsend.capture.bits);
EXPECT_EQ(0x175, irsend.capture.value);
EXPECT_EQ(0x05, irsend.capture.address);
EXPECT_EQ(0x35, irsend.capture.command);
@@ -194,9 +202,9 @@ TEST(TestDecodeRC5, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendRC5(0x175);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, RC5X_BITS, true));
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, kRC5XBits, true));
EXPECT_EQ(RC5, irsend.capture.decode_type);
EXPECT_EQ(RC5_BITS, irsend.capture.bits);
EXPECT_EQ(kRC5Bits, irsend.capture.bits);
EXPECT_EQ(0x175, irsend.capture.value);
EXPECT_EQ(0x05, irsend.capture.address);
EXPECT_EQ(0x35, irsend.capture.command);
@@ -205,11 +213,11 @@ TEST(TestDecodeRC5, NormalDecodeWithStrict) {
// A RC-5X 13-bit message but with a value that is valid for RC-5 decoded
// as RC5-X.
irsend.reset();
irsend.sendRC5(0x175, RC5X_BITS);
irsend.sendRC5(0x175, kRC5XBits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, RC5X_BITS, true));
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, kRC5XBits, true));
EXPECT_EQ(RC5, irsend.capture.decode_type);
EXPECT_EQ(RC5_BITS, irsend.capture.bits);
EXPECT_EQ(kRC5Bits, irsend.capture.bits);
EXPECT_EQ(0x175, irsend.capture.value);
EXPECT_EQ(0x05, irsend.capture.address);
EXPECT_EQ(0x35, irsend.capture.command);
@@ -219,9 +227,9 @@ TEST(TestDecodeRC5, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendRC5(irsend.encodeRC5(0x00, 0x0B, true));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, RC5_BITS, true));
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, kRC5Bits, true));
EXPECT_EQ(RC5, irsend.capture.decode_type);
EXPECT_EQ(RC5_BITS, irsend.capture.bits);
EXPECT_EQ(kRC5Bits, irsend.capture.bits);
EXPECT_EQ(0x80B, irsend.capture.value);
EXPECT_EQ(0x00, irsend.capture.address);
EXPECT_EQ(0x0B, irsend.capture.command);
@@ -229,11 +237,11 @@ TEST(TestDecodeRC5, NormalDecodeWithStrict) {
// Synthesised Normal RC-5X 13-bit message.
irsend.reset();
irsend.sendRC5(irsend.encodeRC5X(0x02, 0x41, true), RC5X_BITS);
irsend.sendRC5(irsend.encodeRC5X(0x02, 0x41, true), kRC5XBits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, RC5X_BITS, true));
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, kRC5XBits, true));
EXPECT_EQ(RC5X, irsend.capture.decode_type);
EXPECT_EQ(RC5X_BITS, irsend.capture.bits);
EXPECT_EQ(kRC5XBits, irsend.capture.bits);
EXPECT_EQ(0x1881, irsend.capture.value);
EXPECT_EQ(0x02, irsend.capture.address);
EXPECT_EQ(0x41, irsend.capture.command);
@@ -242,9 +250,9 @@ TEST(TestDecodeRC5, NormalDecodeWithStrict) {
// Synthesised Normal RC-5X 13-bit message should fail at being decoded
// as a normal RC-5 (12 bit) message.
irsend.reset();
irsend.sendRC5(irsend.encodeRC5X(0x02, 0x41, true), RC5X_BITS);
irsend.sendRC5(irsend.encodeRC5X(0x02, 0x41, true), kRC5XBits);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, RC5_BITS, true));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, kRC5Bits, true));
}
// Decode normal repeated RC5 messages.
@@ -255,33 +263,33 @@ TEST(TestDecodeRC5, NormalDecodeWithRepeatAndStrict) {
// Normal RC-5 12-bit (even) message with one repeat.
irsend.reset();
irsend.sendRC5(0x174, RC5_BITS, 1);
irsend.sendRC5(0x174, kRC5Bits, 1);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, RC5_BITS, true));
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, kRC5Bits, true));
EXPECT_EQ(RC5, irsend.capture.decode_type);
EXPECT_EQ(RC5_BITS, irsend.capture.bits);
EXPECT_EQ(kRC5Bits, irsend.capture.bits);
EXPECT_EQ(0x174, irsend.capture.value);
EXPECT_EQ(0x05, irsend.capture.address);
EXPECT_EQ(0x34, irsend.capture.command);
// Normal RC-5 12-bit (odd) message with one repeat.
irsend.reset();
irsend.sendRC5(0x175, RC5_BITS, 1);
irsend.sendRC5(0x175, kRC5Bits, 1);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, RC5_BITS, true));
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, kRC5Bits, true));
EXPECT_EQ(RC5, irsend.capture.decode_type);
EXPECT_EQ(RC5_BITS, irsend.capture.bits);
EXPECT_EQ(kRC5Bits, irsend.capture.bits);
EXPECT_EQ(0x175, irsend.capture.value);
EXPECT_EQ(0x05, irsend.capture.address);
EXPECT_EQ(0x35, irsend.capture.command);
// Synthesised Normal RC-5X 13-bit message with 2 repeats.
irsend.reset();
irsend.sendRC5(irsend.encodeRC5X(0x02, 0x41, true), RC5X_BITS, 2);
irsend.sendRC5(irsend.encodeRC5X(0x02, 0x41, true), kRC5XBits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, RC5X_BITS, true));
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, kRC5XBits, true));
EXPECT_EQ(RC5X, irsend.capture.decode_type);
EXPECT_EQ(RC5X_BITS, irsend.capture.bits);
EXPECT_EQ(kRC5XBits, irsend.capture.bits);
EXPECT_EQ(0x1881, irsend.capture.value);
EXPECT_EQ(0x02, irsend.capture.address);
EXPECT_EQ(0x41, irsend.capture.command);
@@ -297,8 +305,8 @@ TEST(TestDecodeRC5, DecodeWithNonStrictValues) {
irsend.sendRC5(0xFA, 8); // Illegal value RC5 8-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, RC5_BITS, true));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, RC5X_BITS, true));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, kRC5Bits, true));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, kRC5XBits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeRC5(&irsend.capture, 8, false));
EXPECT_EQ(RC5, irsend.capture.decode_type);
@@ -311,8 +319,8 @@ TEST(TestDecodeRC5, DecodeWithNonStrictValues) {
irsend.sendRC5(0x12345678, 32); // Illegal size RC5 32-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, RC5_BITS, true));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, RC5X_BITS, true));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, kRC5Bits, true));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, kRC5XBits, true));
irsend.makeDecodeResult();
// Should fail with strict when we ask for the wrong bit size.
@@ -327,8 +335,8 @@ TEST(TestDecodeRC5, DecodeWithNonStrictValues) {
irsend.sendRC5(0x87654321, 32); // Illegal size RC5 32-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, RC5_BITS, true));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, RC5X_BITS, true));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, kRC5Bits, true));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, kRC5XBits, true));
irsend.makeDecodeResult();
// Should fail with strict when we ask for the wrong bit size.
@@ -364,14 +372,15 @@ TEST(TestDecodeRC5, FailToDecodeNonRC5Example) {
irsend.begin();
irsend.reset();
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};
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.decodeRC5(&irsend.capture));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, RC5_BITS, false));
ASSERT_FALSE(irrecv.decodeRC5(&irsend.capture, kRC5Bits, false));
}
// RRRRRR CCCCC 666
@@ -383,24 +392,24 @@ TEST(TestDecodeRC5, FailToDecodeNonRC5Example) {
// Tests for encodeRC6().
TEST(TestEncodeRC6, Mode0Encoding) {
IRsendTest irsend(4);
EXPECT_EQ(0x0, irsend.encodeRC6(0, 0, RC6_MODE0_BITS));
EXPECT_EQ(0x1234, irsend.encodeRC6(0x12, 0x34, RC6_MODE0_BITS));
EXPECT_EQ(0x12345, irsend.encodeRC6(0x123, 0x45, RC6_MODE0_BITS));
EXPECT_EQ(0xFFFFF, irsend.encodeRC6(0xFFF, 0xFF, RC6_MODE0_BITS));
EXPECT_EQ(0xFFF00, irsend.encodeRC6(0xFFFF, 0x00, RC6_MODE0_BITS));
EXPECT_EQ(0xFF, irsend.encodeRC6(0x00, 0xFF, RC6_MODE0_BITS));
EXPECT_EQ(0x0, irsend.encodeRC6(0, 0, kRC6Mode0Bits));
EXPECT_EQ(0x1234, irsend.encodeRC6(0x12, 0x34, kRC6Mode0Bits));
EXPECT_EQ(0x12345, irsend.encodeRC6(0x123, 0x45, kRC6Mode0Bits));
EXPECT_EQ(0xFFFFF, irsend.encodeRC6(0xFFF, 0xFF, kRC6Mode0Bits));
EXPECT_EQ(0xFFF00, irsend.encodeRC6(0xFFFF, 0x00, kRC6Mode0Bits));
EXPECT_EQ(0xFF, irsend.encodeRC6(0x00, 0xFF, kRC6Mode0Bits));
}
TEST(TestEncodeRC6, 36BitEncoding) {
IRsendTest irsend(4);
EXPECT_EQ(0x0, irsend.encodeRC6(0, 0, RC6_36_BITS));
EXPECT_EQ(0x1234, irsend.encodeRC6(0x12, 0x34, RC6_36_BITS));
EXPECT_EQ(0x123456789, irsend.encodeRC6(0x1234567, 0x89, RC6_36_BITS));
EXPECT_EQ(0xFFFFFFFFF, irsend.encodeRC6(0xFFFFFFF, 0xFF, RC6_36_BITS));
EXPECT_EQ(0xFFFFFFFFF, irsend.encodeRC6(0xFFFFFFFF, 0xFF, RC6_36_BITS));
EXPECT_EQ(0xFFFFFFF00, irsend.encodeRC6(0xFFFFFFF, 0x00, RC6_36_BITS));
EXPECT_EQ(0xFF, irsend.encodeRC6(0x0, 0xFF, RC6_36_BITS));
EXPECT_EQ(0xFFFFFFFFF, irsend.encodeRC6(0xFFFFFFFF, 0xFF, RC6_36_BITS));
EXPECT_EQ(0x0, irsend.encodeRC6(0, 0, kRC6_36Bits));
EXPECT_EQ(0x1234, irsend.encodeRC6(0x12, 0x34, kRC6_36Bits));
EXPECT_EQ(0x123456789, irsend.encodeRC6(0x1234567, 0x89, kRC6_36Bits));
EXPECT_EQ(0xFFFFFFFFF, irsend.encodeRC6(0xFFFFFFF, 0xFF, kRC6_36Bits));
EXPECT_EQ(0xFFFFFFFFF, irsend.encodeRC6(0xFFFFFFFF, 0xFF, kRC6_36Bits));
EXPECT_EQ(0xFFFFFFF00, irsend.encodeRC6(0xFFFFFFF, 0x00, kRC6_36Bits));
EXPECT_EQ(0xFF, irsend.encodeRC6(0x0, 0xFF, kRC6_36Bits));
EXPECT_EQ(0xFFFFFFFFF, irsend.encodeRC6(0xFFFFFFFF, 0xFF, kRC6_36Bits));
}
// Tests for toggleRC6().
@@ -410,7 +419,7 @@ TEST(TestToggleRC6, Mode0) {
IRsendTest irsend(4);
EXPECT_EQ(0x10000, irsend.toggleRC6(0x0));
EXPECT_EQ(irsend.toggleRC6(0x0), irsend.toggleRC6(0x0, RC6_MODE0_BITS));
EXPECT_EQ(irsend.toggleRC6(0x0), irsend.toggleRC6(0x0, kRC6Mode0Bits));
EXPECT_EQ(0x0, irsend.toggleRC6(0x10000));
EXPECT_EQ(0x0, irsend.toggleRC6(irsend.toggleRC6(0x0)));
}
@@ -419,10 +428,10 @@ TEST(TestToggleRC6, Mode0) {
TEST(TestToggleRC6, 36BitUse) {
IRsendTest irsend(4);
EXPECT_EQ(0x8000, irsend.toggleRC6(0x0, RC6_36_BITS));
EXPECT_EQ(0x0, irsend.toggleRC6(0x8000, RC6_36_BITS));
EXPECT_EQ(0x0, irsend.toggleRC6(irsend.toggleRC6(0x0, RC6_36_BITS),
RC6_36_BITS));
EXPECT_EQ(0x8000, irsend.toggleRC6(0x0, kRC6_36Bits));
EXPECT_EQ(0x0, irsend.toggleRC6(0x8000, kRC6_36Bits));
EXPECT_EQ(0x0,
irsend.toggleRC6(irsend.toggleRC6(0x0, kRC6_36Bits), kRC6_36Bits));
}
// Tests for sendRC6().
@@ -439,7 +448,8 @@ TEST(TestSendRC6, SendMode0DataOnly) {
"m444s888m444s444m444s444m444s888m888s444m444s444m444s444"
"m444s444m444s444m444s444m444s444m444s444m444s444m444s444"
"m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s83028", irsend.outputStr());
"s83028",
irsend.outputStr());
irsend.reset();
irsend.sendRC6(0x1FFFF);
@@ -448,7 +458,8 @@ TEST(TestSendRC6, SendMode0DataOnly) {
"m444s888m444s444m444s444m1332s888m444s444m444s444m444s444"
"m444s444m444s444m444s444m444s444m444s444m444s444m444s444"
"m444s444m444s444m444s444m444s444m444s444m444"
"s83472", irsend.outputStr());
"s83472",
irsend.outputStr());
irsend.reset();
irsend.sendRC6(0x15555);
@@ -456,7 +467,8 @@ TEST(TestSendRC6, SendMode0DataOnly) {
"m2664s888"
"m444s888m444s444m444s444m1332s1332m888s888m888s888"
"m888s888m888s888m888s888m888s888m888s888m888"
"s83472", irsend.outputStr());
"s83472",
irsend.outputStr());
}
// Test sending typical RC-6 36-bit data only.
@@ -465,7 +477,7 @@ TEST(TestSendRC6, Send36BitDataOnly) {
irsend.begin();
irsend.reset();
irsend.sendRC6(0x0, RC6_36_BITS);
irsend.sendRC6(0x0, kRC6_36Bits);
EXPECT_EQ(
"m2664s888"
"m444s888m444s444m444s444m444"
@@ -474,10 +486,11 @@ TEST(TestSendRC6, Send36BitDataOnly) {
"s444m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s444m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s444m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s83028", irsend.outputStr());
"s83028",
irsend.outputStr());
irsend.reset();
irsend.sendRC6(0xFFFFFFFFF, RC6_36_BITS);
irsend.sendRC6(0xFFFFFFFFF, kRC6_36Bits);
EXPECT_EQ(
"m2664s888"
"m444s444m444s444m444s444m444s444"
@@ -486,10 +499,11 @@ TEST(TestSendRC6, Send36BitDataOnly) {
"m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444s444"
"m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444s444"
"m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s83472", irsend.outputStr());
"s83472",
irsend.outputStr());
irsend.reset();
irsend.sendRC6(0xAAAAAAAAAA, RC6_36_BITS);
irsend.sendRC6(0xAAAAAAAAAA, kRC6_36Bits);
EXPECT_EQ(
"m2664s888m444s444m444s888m888"
"s1332m1332"
@@ -498,7 +512,7 @@ TEST(TestSendRC6, Send36BitDataOnly) {
irsend.outputStr());
irsend.reset();
irsend.sendRC6(0xC800F740C, RC6_36_BITS); // Xbox 360 OnOff code
irsend.sendRC6(0xC800F740C, kRC6_36Bits); // Xbox 360 OnOff code
EXPECT_EQ(
"m2664s888"
"m444s444m444s444m444s888m444"
@@ -506,10 +520,11 @@ TEST(TestSendRC6, Send36BitDataOnly) {
"s888m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s444m444s444m444s444m888s444m444s444m444s444m444s888m888s444m444"
"s444m444s888m888s888m444s444m444s444m444s444m444s444m444s444m888"
"s444m444s888m444s444m444s83028", irsend.outputStr());
"s444m444s888m444s444m444s83028",
irsend.outputStr());
irsend.reset();
irsend.sendRC6(irsend.toggleRC6(0xC800F740C, RC6_36_BITS),
RC6_36_BITS); // Xbox 360 OnOff code (toggled)
irsend.sendRC6(irsend.toggleRC6(0xC800F740C, kRC6_36Bits),
kRC6_36Bits); // Xbox 360 OnOff code (toggled)
EXPECT_EQ(
"m2664s888"
"m444s444m444s444m444s888m444"
@@ -517,7 +532,8 @@ TEST(TestSendRC6, Send36BitDataOnly) {
"s888m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s444m444s444m444s444m888s444m444s444m444s444m444s444m444s444m444"
"s444m444s444m444s888m888s888m444s444m444s444m444s444m444s444m444"
"s444m888s444m444s888m444s444m444s83028", irsend.outputStr());
"s444m888s444m444s888m444s444m444s83028",
irsend.outputStr());
}
// Test sending RC-6 Mode 0 with different repeats.
@@ -526,16 +542,17 @@ TEST(TestSendRC6, SendMode0WithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendRC6(0x175, RC6_MODE0_BITS, 0);
irsend.sendRC6(0x175, kRC6Mode0Bits, 0);
EXPECT_EQ(
"m2664s888"
"m444s888m444s444m444s444m444"
"s888m888"
"s444m444s444m444s444m444s444m444s444m444s444m444s444m888s888m888"
"s444m444s444m444s888m888s888m888s83472", irsend.outputStr());
"s444m444s444m444s888m888s888m888s83472",
irsend.outputStr());
irsend.reset();
irsend.sendRC6(0x175, RC6_MODE0_BITS, 1);
irsend.sendRC6(0x175, kRC6Mode0Bits, 1);
EXPECT_EQ(
"m2664s888"
"m444s888m444s444m444s444m444"
@@ -546,10 +563,11 @@ TEST(TestSendRC6, SendMode0WithRepeats) {
"m444s888m444s444m444s444m444"
"s888m888"
"s444m444s444m444s444m444s444m444s444m444s444m444s444m888s888m888"
"s444m444s444m444s888m888s888m888s83472", irsend.outputStr());
"s444m444s444m444s888m888s888m888s83472",
irsend.outputStr());
irsend.reset();
irsend.sendRC6(0x175, RC6_MODE0_BITS, 2);
irsend.sendRC6(0x175, kRC6Mode0Bits, 2);
EXPECT_EQ(
"m2664s888"
"m444s888m444s444m444s444m444"
@@ -565,7 +583,8 @@ TEST(TestSendRC6, SendMode0WithRepeats) {
"m444s888m444s444m444s444m444"
"s888m888"
"s444m444s444m444s444m444s444m444s444m444s444m444s444m888s888m888"
"s444m444s444m444s888m888s888m888s83472", irsend.outputStr());
"s444m444s444m444s888m888s888m888s83472",
irsend.outputStr());
}
// Test sending RC-6 36-bit with different repeats.
@@ -574,7 +593,7 @@ TEST(TestSendRC6, Send36BitWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendRC6(0x175, RC6_36_BITS, 0);
irsend.sendRC6(0x175, kRC6_36Bits, 0);
EXPECT_EQ(
"m2664s888"
"m444s888m444s444m444s444m444"
@@ -582,10 +601,11 @@ TEST(TestSendRC6, Send36BitWithRepeats) {
"s444m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s444m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s444m444s444m444s444m444s444m444s444m444s444m444s444m888s888m888"
"s444m444s444m444s888m888s888m888s83472", irsend.outputStr());
"s444m444s444m444s888m888s888m888s83472",
irsend.outputStr());
irsend.reset();
irsend.sendRC6(0x175, RC6_36_BITS, 1);
irsend.sendRC6(0x175, kRC6_36Bits, 1);
EXPECT_EQ(
"m2664s888"
"m444s888m444s444m444s444m444"
@@ -600,10 +620,11 @@ TEST(TestSendRC6, Send36BitWithRepeats) {
"s444m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s444m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s444m444s444m444s444m444s444m444s444m444s444m444s444m888s888m888"
"s444m444s444m444s888m888s888m888s83472", irsend.outputStr());
"s444m444s444m444s888m888s888m888s83472",
irsend.outputStr());
irsend.reset();
irsend.sendRC6(0x175, RC6_36_BITS, 2);
irsend.sendRC6(0x175, kRC6_36Bits, 2);
EXPECT_EQ(
"m2664s888"
"m444s888m444s444m444s444m444"
@@ -625,7 +646,8 @@ TEST(TestSendRC6, Send36BitWithRepeats) {
"s444m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s444m444s444m444s444m444s444m444s444m444s444m444s444m444s444m444"
"s444m444s444m444s444m444s444m444s444m444s444m444s444m888s888m888"
"s444m444s444m444s888m888s888m888s83472", irsend.outputStr());
"s444m444s444m444s888m888s888m888s83472",
irsend.outputStr());
}
// Tests for decodeRC6().
@@ -640,9 +662,9 @@ TEST(TestDecodeRC6, NormalMode0DecodeWithStrict) {
irsend.reset();
irsend.sendRC6(0x175);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, RC6_MODE0_BITS, true));
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, kRC6Mode0Bits, true));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_MODE0_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6Mode0Bits, irsend.capture.bits);
EXPECT_EQ(0x175, irsend.capture.value);
EXPECT_EQ(0x01, irsend.capture.address);
EXPECT_EQ(0x75, irsend.capture.command);
@@ -650,11 +672,11 @@ TEST(TestDecodeRC6, NormalMode0DecodeWithStrict) {
// Normal Synthesised RC-6 Mode 0 (20-bit) message.
irsend.reset();
irsend.sendRC6(irsend.encodeRC6(0x1234567, 0x89, RC6_MODE0_BITS));
irsend.sendRC6(irsend.encodeRC6(0x1234567, 0x89, kRC6Mode0Bits));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, RC6_MODE0_BITS, true));
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, kRC6Mode0Bits, true));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_MODE0_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6Mode0Bits, irsend.capture.bits);
EXPECT_EQ(0x56789, irsend.capture.value);
EXPECT_EQ(0x567, irsend.capture.address);
EXPECT_EQ(0x89, irsend.capture.command);
@@ -662,11 +684,11 @@ TEST(TestDecodeRC6, NormalMode0DecodeWithStrict) {
// Same again, but encoded manually.
irsend.reset();
irsend.sendRC6(0x123456789, RC6_MODE0_BITS);
irsend.sendRC6(0x123456789, kRC6Mode0Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, RC6_MODE0_BITS, true));
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, kRC6Mode0Bits, true));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_MODE0_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6Mode0Bits, irsend.capture.bits);
EXPECT_EQ(0x56789, irsend.capture.value);
EXPECT_EQ(0x567, irsend.capture.address);
EXPECT_EQ(0x89, irsend.capture.command);
@@ -681,11 +703,11 @@ TEST(TestDecodeRC6, Normal36BitDecodeWithStrict) {
// Normal RC-6 36-bit message.
irsend.reset();
irsend.sendRC6(0x175, RC6_36_BITS);
irsend.sendRC6(0x175, kRC6_36Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, RC6_36_BITS, true));
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, kRC6_36Bits, true));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_36_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6_36Bits, irsend.capture.bits);
EXPECT_EQ(0x175, irsend.capture.value);
EXPECT_EQ(0x01, irsend.capture.address);
EXPECT_EQ(0x75, irsend.capture.command);
@@ -693,11 +715,11 @@ TEST(TestDecodeRC6, Normal36BitDecodeWithStrict) {
// Normal Synthesised RC-6 36-bit message.
irsend.reset();
irsend.sendRC6(irsend.encodeRC6(0x1234567, 0x89, RC6_36_BITS), RC6_36_BITS);
irsend.sendRC6(irsend.encodeRC6(0x1234567, 0x89, kRC6_36Bits), kRC6_36Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, RC6_36_BITS, true));
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, kRC6_36Bits, true));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_36_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6_36Bits, irsend.capture.bits);
EXPECT_EQ(0x123456789, irsend.capture.value);
EXPECT_EQ(0x1234567, irsend.capture.address);
EXPECT_EQ(0x89, irsend.capture.command);
@@ -712,22 +734,22 @@ TEST(TestDecodeRC6, NormalMode0DecodeWithRepeatAndStrict) {
// Normal RC-6 Mode 0 (20-bit) even message with one repeat.
irsend.reset();
irsend.sendRC6(0x174, RC6_MODE0_BITS, 1);
irsend.sendRC6(0x174, kRC6Mode0Bits, 1);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, RC6_MODE0_BITS, true));
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, kRC6Mode0Bits, true));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_MODE0_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6Mode0Bits, irsend.capture.bits);
EXPECT_EQ(0x174, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x74, irsend.capture.command);
// Normal RC-6 Mode 0 (20-bit) odd message with one repeat.
irsend.reset();
irsend.sendRC6(0x175, RC6_MODE0_BITS, 1);
irsend.sendRC6(0x175, kRC6Mode0Bits, 1);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, RC6_MODE0_BITS, true));
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, kRC6Mode0Bits, true));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_MODE0_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6Mode0Bits, irsend.capture.bits);
EXPECT_EQ(0x175, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x75, irsend.capture.command);
@@ -741,22 +763,22 @@ TEST(TestDecodeRC6, Normal36BitDecodeWithRepeatAndStrict) {
// Normal RC-6 36-bit odd message with one repeat.
irsend.reset();
irsend.sendRC6(0x175, RC6_36_BITS, 1);
irsend.sendRC6(0x175, kRC6_36Bits, 1);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, RC6_36_BITS, true));
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, kRC6_36Bits, true));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_36_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6_36Bits, irsend.capture.bits);
EXPECT_EQ(0x175, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x75, irsend.capture.command);
// Normal RC-6 36-bit even message with one repeat.
irsend.reset();
irsend.sendRC6(0x174, RC6_36_BITS, 1);
irsend.sendRC6(0x174, kRC6_36Bits, 1);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, RC6_36_BITS, true));
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, kRC6_36Bits, true));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_36_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6_36Bits, irsend.capture.bits);
EXPECT_EQ(0x174, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x74, irsend.capture.command);
@@ -770,11 +792,11 @@ TEST(TestDecodeRC6, NormalDecodeWithoutStrict) {
// Normal RC-6 Mode 0 (20-bit) message.
irsend.reset();
irsend.sendRC6(0x175, RC6_MODE0_BITS);
irsend.sendRC6(0x175, kRC6Mode0Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_MODE0_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6Mode0Bits, irsend.capture.bits);
EXPECT_EQ(0x175, irsend.capture.value);
EXPECT_EQ(0x01, irsend.capture.address);
EXPECT_EQ(0x75, irsend.capture.command);
@@ -782,11 +804,11 @@ TEST(TestDecodeRC6, NormalDecodeWithoutStrict) {
// Normal RC-6 Mode 0 (20-bit) message.
irsend.reset();
irsend.sendRC6(0x174, RC6_MODE0_BITS);
irsend.sendRC6(0x174, kRC6Mode0Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_MODE0_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6Mode0Bits, irsend.capture.bits);
EXPECT_EQ(0x174, irsend.capture.value);
EXPECT_EQ(0x01, irsend.capture.address);
EXPECT_EQ(0x74, irsend.capture.command);
@@ -794,11 +816,11 @@ TEST(TestDecodeRC6, NormalDecodeWithoutStrict) {
// Normal RC-6 36-bit message.
irsend.reset();
irsend.sendRC6(0x174, RC6_36_BITS);
irsend.sendRC6(0x174, kRC6_36Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_36_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6_36Bits, irsend.capture.bits);
EXPECT_EQ(0x174, irsend.capture.value);
EXPECT_EQ(0x01, irsend.capture.address);
EXPECT_EQ(0x74, irsend.capture.command);
@@ -806,11 +828,11 @@ TEST(TestDecodeRC6, NormalDecodeWithoutStrict) {
// Normal Synthesised RC-6 36-bit message.
irsend.reset();
irsend.sendRC6(irsend.encodeRC6(0x1234567, 0x89, RC6_36_BITS), RC6_36_BITS);
irsend.sendRC6(irsend.encodeRC6(0x1234567, 0x89, kRC6_36Bits), kRC6_36Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_36_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6_36Bits, irsend.capture.bits);
EXPECT_EQ(0x123456789, irsend.capture.value);
EXPECT_EQ(0x1234567, irsend.capture.address);
EXPECT_EQ(0x89, irsend.capture.command);
@@ -825,17 +847,17 @@ TEST(TestDecodeRC6, Decode36BitGlobalCacheExample) {
irsend.reset();
// Xbox-360 Power On from Global Cache.
uint16_t gc_test[65] = {36000, 1, 1, 96, 32, 16, 16, 16, 16, 16, 32, 16, 32,
48, 32, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 32, 16, 16, 16,
16, 16, 16, 32, 32, 16, 16, 16, 16, 32, 32, 32, 16,
16, 16, 16, 16, 16, 32, 32, 32, 32, 32, 32, 16, 2476};
uint16_t gc_test[65] = {
36000, 1, 1, 96, 32, 16, 16, 16, 16, 16, 32, 16, 32, 48, 32, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 32, 16, 16, 16, 16, 16, 16, 32, 32, 16, 16, 16, 16, 32, 32, 32,
16, 16, 16, 16, 16, 16, 32, 32, 32, 32, 32, 32, 16, 2476};
irsend.sendGC(gc_test, 65);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, RC6_36_BITS));
ASSERT_TRUE(irrecv.decodeRC6(&irsend.capture, kRC6_36Bits));
EXPECT_EQ(RC6, irsend.capture.decode_type);
EXPECT_EQ(RC6_36_BITS, irsend.capture.bits);
EXPECT_EQ(kRC6_36Bits, irsend.capture.bits);
EXPECT_EQ(0xC800F742A, irsend.capture.value);
EXPECT_EQ(0xC800F74, irsend.capture.address);
EXPECT_EQ(0x2A, irsend.capture.command);
@@ -849,25 +871,26 @@ TEST(TestDecodeRC5, FailToDecodeNonRC6Example) {
irsend.begin();
irsend.reset();
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};
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.decodeRC6(&irsend.capture));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, RC6_MODE0_BITS, true));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, RC6_MODE0_BITS, false));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, RC6_36_BITS, true));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, RC6_36_BITS, false));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, kRC6Mode0Bits, true));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, kRC6Mode0Bits, false));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, kRC6_36Bits, true));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, kRC6_36Bits, false));
irsend.reset();
irsend.sendRC5(0x0);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, RC6_MODE0_BITS, true));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, RC6_MODE0_BITS, false));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, RC6_36_BITS, true));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, RC6_36_BITS, false));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, kRC6Mode0Bits, true));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, kRC6Mode0Bits, false));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, kRC6_36Bits, true));
ASSERT_FALSE(irrecv.decodeRC6(&irsend.capture, kRC6_36Bits, false));
}
+50 -38
View File
@@ -13,16 +13,20 @@ TEST(TestSendRCMM, SendDataOnly) {
irsend.reset();
irsend.sendRCMM(0xe0a600);
EXPECT_EQ("m416s277"
"m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s19600", irsend.outputStr());
EXPECT_EQ(
"m416s277"
"m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s19600",
irsend.outputStr());
irsend.reset();
irsend.sendRCMM(0x28e0a600UL, 32);
EXPECT_EQ("m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s17160", irsend.outputStr());
EXPECT_EQ(
"m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s17160",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -32,18 +36,20 @@ TEST(TestSendRCMM, SendWithRepeats) {
irsend.reset();
irsend.sendRCMM(0x28e0a600, 32, 2); // 2 repeats.
EXPECT_EQ("m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s17160"
"m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s17160"
"m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s17160", irsend.outputStr());
EXPECT_EQ(
"m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s17160"
"m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s17160"
"m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s17160",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -53,15 +59,19 @@ TEST(TestSendRCMM, SendUnusualSize) {
irsend.reset();
irsend.sendRCMM(0xE0, 8);
EXPECT_EQ("m416s277"
"m166s777m166s611m166s277m166s277"
"m166s24313", irsend.outputStr());
EXPECT_EQ(
"m416s277"
"m166s777m166s611m166s277m166s277"
"m166s24313",
irsend.outputStr());
irsend.reset();
irsend.sendRCMM(0x28e0a60000UL, 40);
EXPECT_EQ("m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s277m166s277m166s277m166s277m166s15388", irsend.outputStr());
EXPECT_EQ(
"m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s277m166s277m166s277m166s277m166s15388",
irsend.outputStr());
}
// Tests for decodeRCMM().
@@ -76,9 +86,9 @@ TEST(TestDecodeRCMM, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendRCMM(0xe0a600);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeRCMM(&irsend.capture, RCMM_BITS, true));
ASSERT_TRUE(irrecv.decodeRCMM(&irsend.capture, kRCMMBits, true));
EXPECT_EQ(RCMM, irsend.capture.decode_type);
EXPECT_EQ(RCMM_BITS, irsend.capture.bits);
EXPECT_EQ(kRCMMBits, irsend.capture.bits);
EXPECT_EQ(0xe0a600, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -203,14 +213,15 @@ TEST(TestDecodeRCMM, FailToDecodeNonRCMMExample) {
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};
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.decodeRCMM(&irsend.capture));
ASSERT_FALSE(irrecv.decodeRCMM(&irsend.capture, RCMM_BITS, false));
ASSERT_FALSE(irrecv.decodeRCMM(&irsend.capture, kRCMMBits, false));
}
// Issue 281 Debugging
@@ -220,11 +231,12 @@ TEST(TestDecodeRCMM, DebugIssue281) {
irsend.begin();
// Data from Issue #281 (shortened version)
uint16_t rawData[36] = {448, 276, 150, 285, 164, 613, 163, 447, 162, 613,
164, 445, 164, 776, 167, 278, 163, 280, 163, 280,
162, 611, 168, 444, 163, 612, 164, 277, 168, 447,
157, 282, 165, 276,
165, 65535}; // Last value modified from 89729
uint16_t
rawData[36] = {448, 276, 150, 285, 164, 613, 163, 447, 162, 613,
164, 445, 164, 776, 167, 278, 163, 280, 163, 280,
162, 611, 168, 444, 163, 612, 164, 277, 168, 447,
157, 282, 165, 276, 165, 65535}; // Last value modified
// from 89729
irsend.reset();
irsend.sendRaw(rawData, 36, 36);
+777 -75
View File
@@ -1,5 +1,8 @@
// Copyright 2017 David Conran
#include "ir_Samsung.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
@@ -13,13 +16,14 @@ TEST(TestSendSamsung, SendDataOnly) {
irsend.reset();
irsend.sendSAMSUNG(0xE0E09966); // Samsung TV Power On.
EXPECT_EQ("m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040",
irsend.outputStr());
EXPECT_EQ(
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040",
irsend.outputStr());
irsend.reset();
}
@@ -30,40 +34,42 @@ TEST(TestSendSamsung, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendSAMSUNG(0xE0E09966, SAMSUNG_BITS, 1); // 1 repeat.
EXPECT_EQ("m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040"
, irsend.outputStr());
irsend.sendSAMSUNG(0xE0E09966, SAMSUNG_BITS, 2); // 2 repeats.
EXPECT_EQ("m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040"
, irsend.outputStr());
irsend.sendSAMSUNG(0xE0E09966, kSamsungBits, 1); // 1 repeat.
EXPECT_EQ(
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040",
irsend.outputStr());
irsend.sendSAMSUNG(0xE0E09966, kSamsungBits, 2); // 2 repeats.
EXPECT_EQ(
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s47040",
irsend.outputStr());
}
// Tests for encodeSAMSUNG().
@@ -90,9 +96,9 @@ TEST(TestDecodeSamsung, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendSAMSUNG(0xE0E09966);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, true));
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, true));
EXPECT_EQ(SAMSUNG, irsend.capture.decode_type);
EXPECT_EQ(SAMSUNG_BITS, irsend.capture.bits);
EXPECT_EQ(kSamsungBits, irsend.capture.bits);
EXPECT_EQ(0xE0E09966, irsend.capture.value);
EXPECT_EQ(0x07, irsend.capture.address);
EXPECT_EQ(0x99, irsend.capture.command);
@@ -101,9 +107,9 @@ TEST(TestDecodeSamsung, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendSAMSUNG(irsend.encodeSAMSUNG(0x07, 0x99));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, true));
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, true));
EXPECT_EQ(SAMSUNG, irsend.capture.decode_type);
EXPECT_EQ(SAMSUNG_BITS, irsend.capture.bits);
EXPECT_EQ(kSamsungBits, irsend.capture.bits);
EXPECT_EQ(0xE0E09966, irsend.capture.value);
EXPECT_EQ(0x07, irsend.capture.address);
EXPECT_EQ(0x99, irsend.capture.command);
@@ -112,9 +118,9 @@ TEST(TestDecodeSamsung, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendSAMSUNG(irsend.encodeSAMSUNG(0x1, 0x1));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, true));
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, true));
EXPECT_EQ(SAMSUNG, irsend.capture.decode_type);
EXPECT_EQ(SAMSUNG_BITS, irsend.capture.bits);
EXPECT_EQ(kSamsungBits, irsend.capture.bits);
EXPECT_EQ(0x8080807F, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x1, irsend.capture.command);
@@ -128,11 +134,11 @@ TEST(TestDecodeSamsung, NormalDecodeWithRepeatAndStrict) {
// Normal Samsung 32-bit message.
irsend.reset();
irsend.sendSAMSUNG(0xE0E09966, SAMSUNG_BITS, 2);
irsend.sendSAMSUNG(0xE0E09966, kSamsungBits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, true));
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, true));
EXPECT_EQ(SAMSUNG, irsend.capture.decode_type);
EXPECT_EQ(SAMSUNG_BITS, irsend.capture.bits);
EXPECT_EQ(kSamsungBits, irsend.capture.bits);
EXPECT_EQ(0xE0E09966, irsend.capture.value);
EXPECT_EQ(0x07, irsend.capture.address);
EXPECT_EQ(0x99, irsend.capture.command);
@@ -148,11 +154,11 @@ TEST(TestDecodeSamsung, DecodeWithNonStrictValues) {
irsend.sendSAMSUNG(0x0); // Illegal value Samsung 32-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, true));
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, false));
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, false));
EXPECT_EQ(SAMSUNG, irsend.capture.decode_type);
EXPECT_EQ(SAMSUNG_BITS, irsend.capture.bits);
EXPECT_EQ(kSamsungBits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -161,11 +167,11 @@ TEST(TestDecodeSamsung, DecodeWithNonStrictValues) {
irsend.sendSAMSUNG(0x12345678); // Illegal value Samsung 32-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, true));
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, false));
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, false));
EXPECT_EQ(SAMSUNG, irsend.capture.decode_type);
EXPECT_EQ(SAMSUNG_BITS, irsend.capture.bits);
EXPECT_EQ(kSamsungBits, irsend.capture.bits);
EXPECT_EQ(0x12345678, irsend.capture.value);
EXPECT_EQ(0x48, irsend.capture.address);
EXPECT_EQ(0x6A, irsend.capture.command);
@@ -175,9 +181,9 @@ TEST(TestDecodeSamsung, DecodeWithNonStrictValues) {
irsend.sendSAMSUNG(irsend.encodeSAMSUNG(0, 0), 36);
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, true));
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, true));
// Shouldn't pass if strict off and wrong expected bit size.
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, false));
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, false));
// Re-decode with correct bit size.
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, 36, true));
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, 36, false));
@@ -192,9 +198,9 @@ TEST(TestDecodeSamsung, DecodeWithNonStrictValues) {
irsend.sendSAMSUNG(irsend.encodeSAMSUNG(0x0, 0x0), 16);
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, true));
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, true));
// And it should fail when we expect more bits.
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, false));
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, false));
// Should pass if strict off if we ask for correct nr. of bits sent.
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, 16, false));
@@ -219,7 +225,7 @@ TEST(TestDecodeSamsung, Decode64BitMessages) {
// Illegal value & size Samsung 64-bit message.
irsend.sendSAMSUNG(0xFFFFFFFFFFFFFFFF, 64);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, true));
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, true));
// Should work with a 'normal' match (not strict)
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture, 64, false));
EXPECT_EQ(SAMSUNG, irsend.capture.decode_type);
@@ -237,18 +243,18 @@ TEST(TestDecodeSamsung, DecodeGlobalCacheExample) {
irsend.reset();
// Samsung TV Power On from Global Cache.
uint16_t gc_test[71] = {38000, 1, 1, 172, 172, 22, 64, 22, 64, 22, 64, 22, 21,
22, 21, 22, 21, 22, 21, 22, 21, 22, 64, 22, 64, 22,
64, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 64,
22, 21, 22, 21, 22, 64, 22, 64, 22, 21, 22, 21, 22,
64, 22, 21, 22, 64, 22, 64, 22, 21, 22, 21, 22, 64,
22, 64, 22, 21, 22, 1820};
uint16_t gc_test[71] = {38000, 1, 1, 172, 172, 22, 64, 22, 64, 22, 64, 22,
21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 64, 22,
64, 22, 64, 22, 21, 22, 21, 22, 21, 22, 21, 22,
21, 22, 64, 22, 21, 22, 21, 22, 64, 22, 64, 22,
21, 22, 21, 22, 64, 22, 21, 22, 64, 22, 64, 22,
21, 22, 21, 22, 64, 22, 64, 22, 21, 22, 1820};
irsend.sendGC(gc_test, 71);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSAMSUNG(&irsend.capture));
EXPECT_EQ(SAMSUNG, irsend.capture.decode_type);
EXPECT_EQ(SAMSUNG_BITS, irsend.capture.bits);
EXPECT_EQ(kSamsungBits, irsend.capture.bits);
EXPECT_EQ(0xE0E09966, irsend.capture.value);
EXPECT_EQ(0x07, irsend.capture.address);
EXPECT_EQ(0x99, irsend.capture.command);
@@ -262,15 +268,711 @@ TEST(TestDecodeSamsung, FailToDecodeNonSamsungExample) {
irsend.reset();
// Modified a few entries to unexpected values, based on previous test case.
uint16_t gc_test[71] = {38000, 1, 1, 172, 172, 22, 64, 22, 64, 22, 64, 22, 21,
22, 21, 22, 21, 22, 11, 22, 21, 22, 128, 22, 64, 22,
64, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 64,
22, 21, 22, 21, 22, 64, 22, 64, 22, 21, 22, 21, 22,
64, 22, 21, 22, 64, 22, 64, 22, 21, 22, 21, 22, 64,
22, 64, 22, 21, 22, 1820};
uint16_t gc_test[71] = {38000, 1, 1, 172, 172, 22, 64, 22, 64, 22, 64, 22,
21, 22, 21, 22, 21, 22, 11, 22, 21, 22, 128, 22,
64, 22, 64, 22, 21, 22, 21, 22, 21, 22, 21, 22,
21, 22, 64, 22, 21, 22, 21, 22, 64, 22, 64, 22,
21, 22, 21, 22, 64, 22, 21, 22, 64, 22, 64, 22,
21, 22, 21, 22, 64, 22, 64, 22, 21, 22, 1820};
irsend.sendGC(gc_test, 71);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture));
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, SAMSUNG_BITS, false));
ASSERT_FALSE(irrecv.decodeSAMSUNG(&irsend.capture, kSamsungBits, false));
}
// Tests for sendSamsungAC().
// Test sending typical data only.
TEST(TestSendSamsungAC, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
uint8_t data[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0x02, 0xAF, 0x71, 0x00, 0x15, 0xF0};
irsend.sendSamsungAC(data);
EXPECT_EQ(
"m690s17844"
"m3086s8864"
"m586s436m586s1432m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s1432m586s436m586s436m586s1432m586s436m586s436m586s1432"
"m586s1432m586s1432m586s1432m586s1432m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s1432"
"m586s2886"
"m3086s8864"
"m586s1432m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s1432m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s1432m586s1432m586s1432m586s1432m586s436m586s1432m586s436m586s1432"
"m586s1432m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s1432m586s436m586s1432m586s436m586s1432m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s1432"
"m586s100000",
irsend.outputStr());
}
// Test sending extended data.
TEST(TestSendSamsungAC, SendExtendedData) {
IRsendTest irsend(0);
irsend.begin();
// "Off" message.
uint8_t data[kSamsungAcExtendedStateLength] = {
0x02, 0xB2, 0x0F, 0x00, 0x00, 0x00, 0xC0,
0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x01, 0x02, 0xFF, 0x71, 0x80, 0x11, 0xC0};
irsend.sendSamsungAC(data, kSamsungAcExtendedStateLength);
EXPECT_EQ(
"m690s17844"
"m3086s8864"
"m586s436m586s1432m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s1432m586s436m586s436m586s1432m586s1432m586s436m586s1432"
"m586s1432m586s1432m586s1432m586s1432m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s1432m586s1432"
"m586s2886"
"m3086s8864"
"m586s1432m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s1432m586s436m586s436m586s1432m586s436m586s1432m586s1432"
"m586s1432m586s1432m586s1432m586s1432m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s2886"
"m3086s8864"
"m586s1432m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s436m586s1432m586s436m586s436m586s436m586s436m586s436m586s436"
"m586s1432m586s1432m586s1432m586s1432m586s1432m586s1432m586s1432m586s1432"
"m586s1432m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s1432"
"m586s1432m586s436m586s436m586s436m586s1432m586s436m586s436m586s436"
"m586s436m586s436m586s436m586s436m586s436m586s436m586s1432m586s1432"
"m586s100000",
irsend.outputStr());
}
// Tests for IRSamsungAc class.
TEST(TestIRSamsungAcClass, SetAndGetRaw) {
uint8_t expectedState[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0xE2, 0xFE, 0x71, 0x40, 0x11, 0xF0};
IRSamsungAc samsung(0);
samsung.setRaw(expectedState);
EXPECT_STATE_EQ(expectedState, samsung.getRaw(), kSamsungAcBits);
uint8_t extendedState[kSamsungAcExtendedStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x01, 0xE2, 0xFE, 0x71, 0x40, 0x11, 0xF0};
samsung.setRaw(extendedState, kSamsungAcExtendedStateLength);
// We should NOT get the extended state back.
EXPECT_STATE_EQ(expectedState, samsung.getRaw(), kSamsungAcBits);
}
TEST(TestIRSamsungAcClass, SetAndGetPower) {
IRSamsungAc samsung(0);
samsung.on();
EXPECT_TRUE(samsung.getPower());
samsung.off();
EXPECT_FALSE(samsung.getPower());
samsung.setPower(true);
EXPECT_TRUE(samsung.getPower());
samsung.setPower(false);
EXPECT_FALSE(samsung.getPower());
}
TEST(TestIRSamsungAcClass, SetAndGetSwing) {
IRSamsungAc samsung(0);
samsung.setSwing(true);
EXPECT_TRUE(samsung.getSwing());
samsung.setSwing(false);
EXPECT_FALSE(samsung.getSwing());
samsung.setSwing(true);
EXPECT_TRUE(samsung.getSwing());
// Real examples from:
// https://github.com/markszabo/IRremoteESP8266/issues/505#issuecomment-424036602
// TODO(Hollako): Explain why state[9] lowest bit changes between on and off.
const uint8_t expected_off[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0xE2, 0xFE, 0x71, 0x80, 0x11, 0xF0};
samsung.setRaw(expected_off);
EXPECT_FALSE(samsung.getSwing());
const uint8_t expected_on[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0x02, 0xAF, 0x71, 0x80, 0x11, 0xF0};
samsung.setRaw(expected_on);
EXPECT_TRUE(samsung.getSwing());
}
TEST(TestIRSamsungAcClass, SetAndGetClean) {
IRSamsungAc samsung(0);
samsung.setClean(true);
EXPECT_TRUE(samsung.getClean());
samsung.setClean(false);
EXPECT_FALSE(samsung.getClean());
samsung.setClean(true);
EXPECT_TRUE(samsung.getClean());
}
TEST(TestIRSamsungAcClass, SetAndGetBeep) {
IRSamsungAc samsung(0);
samsung.setBeep(false);
EXPECT_FALSE(samsung.getBeep());
samsung.setBeep(true);
EXPECT_TRUE(samsung.getBeep());
samsung.setBeep(false);
EXPECT_FALSE(samsung.getBeep());
samsung.setBeep(true);
EXPECT_TRUE(samsung.getBeep());
}
TEST(TestIRSamsungAcClass, SetAndGetTemp) {
IRSamsungAc samsung(0);
samsung.setTemp(25);
EXPECT_EQ(25, samsung.getTemp());
samsung.setTemp(kSamsungAcMinTemp);
EXPECT_EQ(kSamsungAcMinTemp, samsung.getTemp());
samsung.setTemp(kSamsungAcMinTemp - 1);
EXPECT_EQ(kSamsungAcMinTemp, samsung.getTemp());
samsung.setTemp(kSamsungAcMaxTemp);
EXPECT_EQ(kSamsungAcMaxTemp, samsung.getTemp());
samsung.setTemp(kSamsungAcMaxTemp + 1);
EXPECT_EQ(kSamsungAcMaxTemp, samsung.getTemp());
}
TEST(TestIRSamsungAcClass, SetAndGetMode) {
IRSamsungAc samsung(0);
samsung.setMode(kSamsungAcCool);
EXPECT_EQ(kSamsungAcCool, samsung.getMode());
EXPECT_NE(kSamsungAcFanAuto2, samsung.getFan());
samsung.setMode(kSamsungAcHeat);
EXPECT_EQ(kSamsungAcHeat, samsung.getMode());
EXPECT_NE(kSamsungAcFanAuto2, samsung.getFan());
samsung.setMode(kSamsungAcAuto);
EXPECT_EQ(kSamsungAcAuto, samsung.getMode());
EXPECT_EQ(kSamsungAcFanAuto2, samsung.getFan());
samsung.setMode(kSamsungAcDry);
EXPECT_EQ(kSamsungAcDry, samsung.getMode());
EXPECT_NE(kSamsungAcFanAuto2, samsung.getFan());
}
TEST(TestIRSamsungAcClass, SetAndGetFan) {
IRSamsungAc samsung(0);
samsung.setMode(kSamsungAcCool); // Most fan modes avail in this setting.
samsung.setFan(kSamsungAcFanAuto);
EXPECT_EQ(kSamsungAcFanAuto, samsung.getFan());
samsung.setFan(kSamsungAcFanLow);
EXPECT_EQ(kSamsungAcFanLow, samsung.getFan());
samsung.setFan(kSamsungAcFanAuto2); // Not available in Cool mode.
EXPECT_EQ(kSamsungAcFanLow, samsung.getFan()); // Shouldn't change.
samsung.setMode(kSamsungAcAuto); // Has special fan setting.
EXPECT_EQ(kSamsungAcFanAuto2, samsung.getFan());
samsung.setFan(kSamsungAcFanLow); // Shouldn't be available in Auto mode.
EXPECT_EQ(kSamsungAcFanAuto2, samsung.getFan());
samsung.setMode(kSamsungAcHeat); // Most fan modes avail in this setting.
samsung.setFan(kSamsungAcFanHigh);
EXPECT_EQ(kSamsungAcFanHigh, samsung.getFan());
}
TEST(TestIRSamsungAcClass, SetAndGetQuiet) {
IRSamsungAc samsung(0);
samsung.setQuiet(false);
EXPECT_FALSE(samsung.getQuiet());
samsung.setFan(kSamsungAcFanHigh);
samsung.setQuiet(true);
EXPECT_TRUE(samsung.getQuiet());
EXPECT_EQ(kSamsungAcFanAuto, samsung.getFan());
samsung.setQuiet(false);
EXPECT_FALSE(samsung.getQuiet());
}
TEST(TestIRSamsungAcClass, ChecksumCalculation) {
IRSamsungAc samsung(0);
const uint8_t originalstate[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0x02, 0xAF, 0x71, 0x00, 0x15, 0xF0};
uint8_t examplestate[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0x02, 0xAF, 0x71, 0x00, 0x15, 0xF0};
const uint8_t extendedstate[kSamsungAcExtendedStateLength] = {
0x02, 0xA9, 0x0F, 0x00, 0x00, 0x00, 0xC0,
0x01, 0xC9, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x01, 0xF9, 0xCE, 0x71, 0xE0, 0x41, 0xC0};
EXPECT_TRUE(IRSamsungAc::validChecksum(examplestate));
EXPECT_EQ(0, IRSamsungAc::calcChecksum(examplestate));
examplestate[8] = 0x12; // Set an incoorect checksum.
EXPECT_FALSE(IRSamsungAc::validChecksum(examplestate));
EXPECT_EQ(0, IRSamsungAc::calcChecksum(examplestate));
samsung.setRaw(examplestate);
// Extracting the state from the object should have a correct checksum.
EXPECT_TRUE(IRSamsungAc::validChecksum(samsung.getRaw()));
EXPECT_STATE_EQ(originalstate, samsung.getRaw(), kSamsungAcBits);
examplestate[8] = 0x02; // Restore old checksum value.
// Change the state to force a different checksum.
examplestate[11] = 0x01;
EXPECT_FALSE(IRSamsungAc::validChecksum(examplestate));
EXPECT_EQ(0xF, IRSamsungAc::calcChecksum(examplestate));
// Check an extended state is valid.
EXPECT_TRUE(IRSamsungAc::validChecksum(extendedstate, 21));
}
TEST(TestIRSamsungAcClass, HumanReadable) {
IRSamsungAc samsung(0);
EXPECT_EQ(
"Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 2 (LOW), Swing: On, "
"Beep: Off, Clean: Off, Quiet: Off",
samsung.toString());
samsung.setTemp(kSamsungAcMaxTemp);
samsung.setMode(kSamsungAcHeat);
samsung.off();
samsung.setFan(kSamsungAcFanHigh);
samsung.setSwing(false);
samsung.setBeep(true);
samsung.setClean(true);
EXPECT_EQ(
"Power: Off, Mode: 4 (HEAT), Temp: 30C, Fan: 5 (HIGH), Swing: Off, "
"Beep: On, Clean: On, Quiet: Off",
samsung.toString());
samsung.setQuiet(true);
EXPECT_EQ(
"Power: Off, Mode: 4 (HEAT), Temp: 30C, Fan: 0 (AUTO), Swing: Off, "
"Beep: On, Clean: On, Quiet: On",
samsung.toString());
}
TEST(TestIRSamsungAcClass, GeneralConstruction) {
IRSamsungAc samsung(0);
uint8_t OnCoolFAutoBOffCOffQOffT20Soff[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0xE2, 0xFE, 0x71, 0x40, 0x11, 0xF0};
samsung.setPower(true);
samsung.setMode(kSamsungAcCool);
samsung.setFan(kSamsungAcFanAuto);
samsung.setSwing(false);
samsung.setBeep(false);
samsung.setClean(false);
samsung.setQuiet(false);
samsung.setTemp(20);
EXPECT_STATE_EQ(OnCoolFAutoBOffCOffQOffT20Soff, samsung.getRaw(),
kSamsungAcBits);
/* Disabled until we understand why LSB bit of the swing byte changes.
// TODO(Hollako): Explain why sometimes the LSB of state[9] is a 1.
// e.g. 0xAE or 0XAF for swing move.
uint8_t OnHeatFAutoBOffCOffQOffT17Son[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0x02, 0xAF, 0x71, 0x10, 0x41, 0xF0};
samsung.setPower(true);
samsung.setMode(kSamsungAcHeat);
samsung.setFan(kSamsungAcFanAuto);
samsung.setSwing(true);
samsung.setBeep(false);
samsung.setClean(false);
samsung.setQuiet(false);
samsung.setTemp(17);
EXPECT_STATE_EQ(OnHeatFAutoBOffCOffQOffT17Son, samsung.getRaw(),
kSamsungAcBits);
*/
}
// Tests for decodeSamsungAC().
// Decode normal SamsungAC messages.
TEST(TestDecodeSamsungAC, SyntheticDecode) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
uint8_t expectedState[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0x02, 0xAF, 0x71, 0x00, 0x15, 0xF0};
// Synthesised Normal Samsung A/C message.
irsend.sendSamsungAC(expectedState);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SAMSUNG_AC, irsend.capture.decode_type);
EXPECT_EQ(kSamsungAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
}
// Decode a real Samsung A/C example from Issue #505
TEST(TestDecodeSamsungAC, DecodeRealExample) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
// Samsung A/C example from Issue #505
uint16_t rawData[233] = {
690, 17844, 3084, 8864, 606, 406, 586, 1410, 580, 436, 570, 424,
570, 426, 570, 404, 596, 418, 580, 416, 584, 410, 586, 1402,
588, 408, 586, 410, 584, 1380, 610, 408, 586, 408, 586, 1404,
586, 1404, 586, 1408, 594, 1396, 596, 1394, 602, 418, 582, 410,
586, 408, 584, 408, 586, 408, 586, 410, 586, 408, 586, 410,
586, 408, 586, 408, 586, 408, 586, 408, 586, 410, 584, 436,
558, 436, 570, 424, 570, 424, 574, 420, 578, 416, 582, 412,
586, 410, 586, 408, 584, 410, 586, 408, 586, 410, 584, 410,
584, 408, 586, 408, 586, 410, 586, 408, 586, 412, 584, 436,
556, 1410, 592, 1396, 602, 1390, 608, 1384, 608, 2886, 3086, 8858,
610, 1380, 610, 410, 586, 408, 586, 410, 586, 408, 586, 410,
586, 408, 586, 436, 558, 436, 554, 1410, 594, 426, 572, 422,
578, 418, 582, 412, 586, 410, 584, 410, 586, 1380, 610, 1382,
608, 1404, 586, 1404, 586, 408, 586, 1432, 558, 436, 554, 1414,
590, 1398, 602, 418, 580, 414, 586, 410, 584, 1382, 606, 1382,
608, 1382, 608, 408, 586, 408, 586, 408, 586, 408, 586, 410,
584, 436, 560, 434, 570, 426, 566, 430, 568, 1400, 600, 416,
584, 1406, 586, 410, 584, 1384, 606, 410, 586, 410, 584, 408,
586, 408, 586, 408, 586, 408, 588, 410, 584, 1408, 590, 1400,
592, 1398, 602, 1388, 612};
uint8_t expectedState[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0x02, 0xAF, 0x71, 0x00, 0x15, 0xF0};
irsend.sendRaw(rawData, 233, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(SAMSUNG_AC, irsend.capture.decode_type);
EXPECT_EQ(kSamsungAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRSamsungAc samsung(0);
samsung.setRaw(irsend.capture.state);
EXPECT_EQ(
"Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 2 (LOW), Swing: On, "
"Beep: Off, Clean: Off, Quiet: Off",
samsung.toString());
}
// Decode a real Samsung A/C example from Issue #505
TEST(TestDecodeSamsungAC, DecodeRealExample2) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
// Samsung A/C example from Issue #505
uint16_t rawData[233] = {
668, 17834, 3092, 8862, 608, 410, 586, 1378, 612, 410, 584, 410,
586, 410, 584, 410, 586, 408, 586, 408, 586, 410, 586, 1404,
588, 436, 558, 436, 570, 1398, 592, 424, 576, 420, 578, 1388,
608, 1382, 610, 1382, 608, 1380, 610, 1384, 606, 408, 586, 408,
588, 408, 588, 408, 586, 436, 558, 436, 570, 424, 570, 426,
572, 422, 578, 418, 582, 412, 586, 408, 586, 410, 584, 410,
584, 410, 584, 410, 586, 410, 586, 408, 586, 408, 586, 408,
586, 408, 586, 408, 586, 438, 558, 436, 568, 426, 570, 424,
574, 422, 576, 418, 582, 414, 584, 410, 586, 410, 584, 410,
586, 1380, 610, 1382, 608, 1404, 586, 1404, 602, 2872, 3096, 8878,
582, 1432, 570, 426, 568, 426, 574, 420, 578, 416, 582, 412,
586, 410, 584, 410, 586, 410, 586, 1382, 608, 410, 586, 410,
586, 408, 586, 1404, 586, 1408, 582, 1410, 590, 428, 568, 1400,
598, 1394, 606, 1382, 610, 1382, 608, 1378, 612, 1382, 608, 1384,
606, 1404, 586, 408, 586, 414, 582, 436, 558, 1410, 590, 1422,
576, 1390, 608, 410, 586, 410, 586, 410, 584, 410, 584, 410,
586, 410, 586, 410, 584, 410, 586, 1404, 586, 1404, 588, 436,
560, 436, 486, 510, 566, 1400, 598, 420, 576, 418, 582, 414,
586, 410, 584, 410, 584, 410, 586, 410, 584, 1382, 608, 1384,
606, 1384, 606, 1408, 600};
uint8_t expectedState[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0xE2, 0xFE, 0x71, 0x80, 0x11, 0xF0};
irsend.sendRaw(rawData, 233, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(SAMSUNG_AC, irsend.capture.decode_type);
EXPECT_EQ(kSamsungAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRSamsungAc samsung(0);
samsung.setRaw(irsend.capture.state);
EXPECT_EQ(
"Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 0 (AUTO), Swing: Off, "
"Beep: Off, Clean: Off, Quiet: Off",
samsung.toString());
}
// Decode a real Samsung A/C example from:
// https://github.com/markszabo/IRremoteESP8266/issues/505#issuecomment-424036602
TEST(TestDecodeSamsungAC, DecodePowerOnSample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
uint16_t rawData[349] = {
662, 17870, 3026, 8966, 540, 484, 514, 1482, 518, 482, 514, 482,
518, 482, 516, 510, 490, 508, 490, 508, 572, 428, 576, 1398,
542, 482, 514, 484, 514, 1460, 540, 482, 518, 482, 516, 1456,
544, 1480, 518, 1480, 518, 1480, 518, 1484, 514, 510, 566, 432,
576, 424, 574, 426, 540, 458, 516, 482, 516, 482, 516, 482,
518, 480, 518, 482, 518, 482, 518, 482, 516, 482, 518, 482,
516, 482, 518, 480, 516, 508, 492, 508, 490, 508, 572, 428,
576, 422, 572, 428, 542, 456, 514, 484, 518, 480, 518, 480,
518, 480, 516, 482, 516, 482, 520, 478, 518, 482, 518, 480,
518, 1480, 518, 1480, 516, 1484, 594, 1428, 518, 2964, 3032, 8964,
540, 1458, 542, 480, 518, 480, 520, 480, 518, 482, 520, 480,
520, 478, 518, 480, 520, 478, 520, 1478, 522, 478, 518, 506,
494, 1484, 594, 426, 574, 1400, 564, 1434, 540, 1454, 544, 1478,
520, 1454, 544, 1458, 540, 480, 520, 480, 518, 480, 520, 480,
518, 508, 490, 506, 568, 432, 572, 426, 576, 424, 544, 454,
518, 480, 516, 482, 520, 478, 520, 478, 522, 478, 518, 480,
520, 478, 520, 478, 520, 478, 520, 478, 520, 478, 518, 478,
522, 506, 494, 504, 566, 432, 576, 424, 576, 424, 570, 428,
518, 482, 518, 480, 518, 482, 520, 478, 520, 478, 520, 480,
520, 478, 520, 478, 520, 2964, 3032, 8986, 520, 1478, 520, 506,
492, 506, 492, 506, 568, 430, 574, 424, 546, 454, 516, 482,
518, 482, 518, 1456, 544, 478, 546, 452, 520, 478, 544, 1432,
542, 1478, 520, 1478, 520, 478, 520, 1482, 586, 1412, 598, 1400,
564, 1432, 540, 1458, 544, 1454, 544, 1454, 544, 1456, 542, 480,
518, 480, 520, 480, 520, 1462, 536, 1482, 588, 1410, 598, 424,
572, 426, 542, 456, 518, 482, 520, 478, 520, 478, 522, 478,
520, 478, 520, 1456, 542, 1458, 540, 478, 520, 478, 520, 478,
520, 1482, 540, 482, 568, 430, 576, 424, 570, 428, 542, 458,
518, 480, 520, 480, 520, 1454, 568, 1430, 566, 1432, 566, 1454,
594};
uint8_t expectedState[kSamsungAcExtendedStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x01, 0xE2, 0xFE, 0x71, 0x80, 0x11, 0xF0};
irsend.sendRaw(rawData, 349, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(SAMSUNG_AC, irsend.capture.decode_type);
EXPECT_EQ(kSamsungAcExtendedBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRSamsungAc samsung(0);
samsung.setRaw(irsend.capture.state, kSamsungAcExtendedStateLength);
EXPECT_EQ(
"Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 0 (AUTO), Swing: Off, "
"Beep: Off, Clean: Off, Quiet: Off",
samsung.toString());
}
// Decode a real Samsung A/C example from:
// https://github.com/markszabo/IRremoteESP8266/issues/505#issuecomment-424036602
TEST(TestDecodeSamsungAC, DecodePowerOffSample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
uint16_t rawData[349] = {
670, 17802, 3096, 8898, 602, 420, 580, 1418, 582, 418, 582, 416,
582, 416, 584, 442, 550, 448, 568, 430, 570, 430, 576, 1396,
600, 424, 546, 452, 578, 1394, 604, 1396, 600, 420, 580, 1398,
602, 1416, 586, 1412, 582, 1420, 576, 1422, 592, 428, 574, 424,
576, 422, 578, 420, 548, 452, 578, 420, 578, 420, 584, 416,
580, 418, 580, 418, 582, 418, 580, 418, 582, 414, 584, 414,
584, 416, 582, 418, 584, 442, 558, 442, 568, 430, 576, 424,
578, 420, 576, 424, 576, 422, 580, 420, 584, 414, 584, 416,
584, 414, 582, 418, 580, 418, 582, 416, 582, 416, 584, 414,
584, 414, 586, 442, 554, 1420, 570, 1452, 578, 2884, 3120, 8898,
596, 1400, 602, 422, 582, 418, 584, 414, 582, 416, 584, 414,
584, 416, 582, 416, 584, 416, 584, 1410, 586, 414, 582, 444,
556, 1420, 590, 432, 572, 1402, 602, 1396, 600, 1398, 606, 1414,
582, 1394, 604, 1394, 604, 414, 584, 414, 586, 412, 586, 410,
586, 442, 556, 440, 544, 456, 568, 430, 576, 424, 578, 420,
578, 420, 576, 424, 584, 412, 586, 412, 586, 412, 584, 414,
586, 412, 584, 414, 586, 412, 586, 412, 586, 414, 586, 412,
584, 442, 558, 442, 558, 440, 566, 432, 574, 424, 578, 422,
576, 422, 578, 420, 586, 414, 586, 414, 586, 412, 584, 414,
586, 414, 586, 414, 586, 2902, 3096, 8900, 600, 1416, 586, 442,
556, 442, 558, 440, 564, 434, 572, 428, 578, 420, 580, 420,
578, 420, 584, 1392, 608, 414, 586, 414, 582, 414, 586, 412,
586, 412, 586, 414, 584, 1394, 606, 1416, 580, 1418, 568, 1432,
594, 1402, 602, 1398, 606, 1392, 606, 1390, 608, 1390, 608, 414,
584, 414, 586, 414, 584, 1412, 586, 1398, 600, 1418, 590, 430,
566, 432, 576, 422, 578, 420, 578, 422, 582, 416, 586, 414,
586, 412, 584, 1390, 606, 1392, 608, 414, 586, 412, 584, 412,
588, 1410, 586, 442, 558, 440, 568, 430, 566, 434, 574, 426,
578, 420, 578, 420, 582, 416, 586, 412, 586, 1390, 608, 1390,
608};
uint8_t expectedState[kSamsungAcExtendedStateLength] = {
0x02, 0xB2, 0x0F, 0x00, 0x00, 0x00, 0xC0,
0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x01, 0x02, 0xFF, 0x71, 0x80, 0x11, 0xC0};
irsend.sendRaw(rawData, 349, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(SAMSUNG_AC, irsend.capture.decode_type);
EXPECT_EQ(kSamsungAcExtendedBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRSamsungAc samsung(0);
samsung.setRaw(irsend.capture.state, kSamsungAcExtendedStateLength);
EXPECT_EQ(
"Power: Off, Mode: 1 (COOL), Temp: 24C, Fan: 0 (AUTO), Swing: Off, "
"Beep: Off, Clean: Off, Quiet: Off",
samsung.toString());
}
TEST(TestDecodeSamsungAC, DecodeHeatSample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
uint16_t rawData[233] = {
650, 16260, 3014, 8934, 534, 486, 508, 1478, 514, 484, 510, 486,
508, 512, 484, 510, 562, 432, 572, 422, 540, 454, 514, 1452,
534, 486, 510, 484, 510, 1456, 536, 484, 510, 484, 510, 1454,
536, 1478, 512, 1476, 514, 1482, 508, 1482, 592, 428, 570, 424,
538, 456, 508, 486, 510, 484, 512, 484, 510, 486, 510, 484,
510, 484, 510, 486, 510, 484, 510, 484, 510, 484, 510, 484,
510, 484, 510, 486, 508, 510, 484, 510, 568, 428, 570, 424,
538, 458, 512, 482, 510, 486, 510, 484, 510, 484, 510, 484,
510, 484, 510, 484, 510, 484, 510, 484, 510, 484, 510, 484,
510, 1474, 516, 1502, 534, 1432, 594, 1398, 536, 2954, 3018, 8932,
536, 1458, 532, 484, 510, 484, 512, 484, 510, 484, 510, 484,
510, 484, 512, 484, 510, 484, 510, 1480, 508, 510, 530, 464,
568, 426, 568, 426, 514, 480, 508, 486, 508, 1456, 534, 1478,
514, 1452, 538, 1478, 512, 484, 510, 1456, 534, 486, 510, 1478,
512, 1480, 570, 450, 570, 424, 540, 454, 512, 1452, 534, 1458,
534, 1454, 536, 484, 512, 482, 512, 484, 512, 484, 512, 482,
512, 1474, 514, 484, 512, 510, 486, 508, 534, 1430, 594, 426,
512, 482, 512, 482, 510, 484, 512, 482, 512, 1452, 538, 482,
512, 482, 512, 482, 510, 484, 510, 484, 510, 1478, 512, 1504,
488, 1480, 560, 1454, 514};
uint8_t expectedState[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0x02, 0xAF, 0x71, 0x10, 0x41, 0xF0};
irsend.sendRaw(rawData, 233, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(SAMSUNG_AC, irsend.capture.decode_type);
EXPECT_EQ(kSamsungAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRSamsungAc samsung(0);
samsung.setRaw(irsend.capture.state);
EXPECT_EQ(
"Power: On, Mode: 4 (HEAT), Temp: 17C, Fan: 0 (AUTO), Swing: On, "
"Beep: Off, Clean: Off, Quiet: Off",
samsung.toString());
}
TEST(TestDecodeSamsungAC, DecodeCoolSample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
uint16_t rawData[233] = {
690, 17854, 3086, 8862, 610, 410, 584, 1382, 610, 410, 586, 408,
586, 408, 586, 408, 588, 410, 584, 436, 558, 436, 570, 1396,
598, 422, 576, 418, 580, 1384, 612, 410, 586, 410, 584, 1380,
612, 1382, 608, 1384, 606, 1404, 586, 1404, 586, 436, 558, 438,
566, 428, 568, 426, 570, 424, 576, 418, 578, 416, 584, 410,
586, 408, 584, 410, 586, 408, 586, 408, 586, 410, 586, 408,
586, 408, 588, 408, 586, 408, 588, 408, 586, 438, 558, 436,
568, 426, 568, 428, 568, 426, 576, 418, 578, 416, 584, 412,
584, 410, 586, 408, 586, 410, 586, 410, 584, 410, 586, 408,
586, 1384, 606, 1402, 588, 1410, 580, 1410, 608, 2864, 3108, 8864,
594, 1394, 604, 416, 584, 410, 586, 410, 586, 410, 586, 410,
584, 410, 586, 410, 586, 408, 586, 1404, 588, 408, 586, 408,
586, 436, 560, 1408, 592, 1400, 596, 1396, 600, 416, 584, 1382,
608, 1380, 610, 1404, 586, 1384, 608, 1384, 606, 1402, 588, 1408,
582, 1410, 564, 452, 568, 428, 572, 424, 576, 1414, 582, 1386,
608, 1382, 608, 410, 584, 410, 584, 410, 586, 408, 586, 408,
586, 408, 586, 408, 588, 1408, 582, 436, 540, 1426, 590, 428,
574, 420, 578, 418, 580, 1384, 610, 410, 584, 410, 584, 410,
584, 412, 584, 408, 586, 410, 586, 408, 586, 1404, 586, 1408,
582, 1410, 562, 1426, 610};
uint8_t expectedState[kSamsungAcStateLength] = {
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
0x01, 0xE2, 0xFE, 0x71, 0x40, 0x11, 0xF0};
irsend.sendRaw(rawData, 233, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(SAMSUNG_AC, irsend.capture.decode_type);
EXPECT_EQ(kSamsungAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRSamsungAc samsung(0);
samsung.setRaw(irsend.capture.state);
EXPECT_EQ(
"Power: On, Mode: 1 (COOL), Temp: 20C, Fan: 0 (AUTO), Swing: Off, "
"Beep: Off, Clean: Off, Quiet: Off",
samsung.toString());
}
TEST(TestDecodeSamsungAC, Issue604DecodeExtended) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
uint16_t sendOff[349] = {
642, 17730, 3056, 8916, 542, 448, 552, 1440, 552, 444, 552, 444,
552, 444, 552, 440, 556, 440, 556, 440, 556, 1436, 552, 444,
552, 444, 552, 1440, 548, 470, 526, 1464, 470, 526, 516, 1470,
552, 1440, 552, 1440, 550, 1436, 556, 1434, 552, 444, 552, 444,
552, 444, 552, 442, 552, 444, 546, 470, 526, 470, 526, 470,
470, 524, 518, 474, 548, 448, 552, 444, 552, 442, 552, 444,
550, 444, 552, 440, 556, 440, 556, 438, 556, 440, 552, 442,
552, 444, 552, 442, 552, 444, 550, 470, 526, 466, 524, 470,
470, 524, 470, 524, 518, 476, 548, 444, 552, 444, 556, 440,
552, 442, 552, 444, 550, 1436, 556, 1436, 552, 2946, 3026, 8918,
550, 1440, 552, 444, 548, 468, 526, 468, 470, 526, 470, 526,
542, 452, 548, 444, 552, 1440, 550, 444, 552, 444, 552, 1436,
556, 438, 552, 442, 552, 1440, 552, 1440, 552, 1460, 526, 1464,
470, 1516, 548, 1444, 552, 444, 552, 442, 552, 444, 552, 438,
556, 440, 556, 440, 552, 444, 552, 444, 552, 444, 552, 444,
552, 444, 548, 448, 546, 470, 526, 468, 526, 470, 470, 524,
520, 470, 548, 448, 552, 444, 552, 444, 552, 444, 552, 444,
552, 438, 556, 440, 556, 438, 552, 444, 552, 442, 552, 444,
552, 444, 552, 444, 552, 470, 526, 466, 526, 470, 470, 524,
518, 478, 546, 448, 552, 2920, 3052, 8916, 552, 1434, 556, 440,
556, 438, 552, 444, 552, 442, 552, 442, 552, 442, 552, 444,
548, 1444, 548, 470, 526, 470, 522, 1466, 470, 1520, 548, 1438,
556, 1436, 552, 1440, 552, 442, 552, 1436, 552, 1440, 552, 1440,
552, 442, 552, 470, 522, 1466, 526, 1466, 470, 1516, 552, 444,
552, 442, 552, 444, 552, 1436, 556, 1436, 552, 1440, 550, 444,
552, 444, 552, 444, 548, 448, 546, 448, 548, 470, 526, 1462,
474, 1518, 548, 1440, 552, 1438, 556, 440, 550, 444, 552, 444,
552, 444, 552, 440, 556, 1436, 552, 444, 552, 444, 552, 444,
550, 470, 522, 470, 524, 470, 470, 524, 518, 1474, 548, 1440,
556};
uint8_t expectedState[kSamsungAcExtendedStateLength] = {
0x02, 0xA9, 0x0F, 0x00, 0x00, 0x00, 0xC0,
0x01, 0xC9, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x01, 0xF9, 0xCE, 0x71, 0xE0, 0x41, 0xC0};
irsend.sendRaw(sendOff, 349, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(SAMSUNG_AC, irsend.capture.decode_type);
EXPECT_EQ(kSamsungAcExtendedBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRSamsungAc samsung(0);
samsung.setRaw(irsend.capture.state, irsend.capture.bits / 8);
EXPECT_EQ(
"Power: Off, Mode: 4 (HEAT), Temp: 30C, Fan: 0 (AUTO), Swing: Off, "
"Beep: Off, Clean: Off, Quiet: Off",
samsung.toString());
}
+62 -62
View File
@@ -4,7 +4,6 @@
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for encodeSanyoLC7461().
TEST(TestEncodeSanyoLC7461, NormalEncoding) {
@@ -34,7 +33,8 @@ TEST(TestEncodeSanyoLC7461, SendDataOnly) {
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s23520", irsend.outputStr());
"m560s1680m560s1680m560s23520",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -43,7 +43,7 @@ TEST(TestEncodeSanyoLC7461, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendSanyoLC7461(0x1D8113F00FF, SANYO_LC7461_BITS, 1); // 1 repeat.
irsend.sendSanyoLC7461(0x1D8113F00FF, kSanyoLC7461Bits, 1); // 1 repeat.
EXPECT_EQ(
"m8960s4480"
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
@@ -52,7 +52,8 @@ TEST(TestEncodeSanyoLC7461, SendWithRepeats) {
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s23520"
"m8960s2240m560s96320", irsend.outputStr());
"m8960s2240m560s96320",
irsend.outputStr());
}
// Tests for decodeSanyoLC7461().
@@ -67,10 +68,10 @@ TEST(TestDecodeSanyoLC7461, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendSanyoLC7461(0x1D8113F00FF);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSanyoLC7461(&irsend.capture, SANYO_LC7461_BITS,
true));
ASSERT_TRUE(
irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
EXPECT_EQ(SANYO_LC7461_BITS, irsend.capture.bits);
EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
EXPECT_EQ(0x1D8113F00FF, irsend.capture.value);
EXPECT_EQ(0xEC0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -80,10 +81,10 @@ TEST(TestDecodeSanyoLC7461, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendSanyoLC7461(irsend.encodeSanyoLC7461(0x1234, 0x56));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSanyoLC7461(&irsend.capture, SANYO_LC7461_BITS,
true));
ASSERT_TRUE(
irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
EXPECT_EQ(SANYO_LC7461_BITS, irsend.capture.bits);
EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
EXPECT_EQ(0x2468DCB56A9, irsend.capture.value);
EXPECT_EQ(0x1234, irsend.capture.address);
EXPECT_EQ(0x56, irsend.capture.command);
@@ -93,10 +94,10 @@ TEST(TestDecodeSanyoLC7461, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendSanyoLC7461(irsend.encodeSanyoLC7461(0x1, 0x1));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSanyoLC7461(&irsend.capture, SANYO_LC7461_BITS,
true));
ASSERT_TRUE(
irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
EXPECT_EQ(SANYO_LC7461_BITS, irsend.capture.bits);
EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
EXPECT_EQ(0x3FFE01FE, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x1, irsend.capture.command);
@@ -111,12 +112,12 @@ TEST(TestDecodeSanyoLC7461, NormalDecodeWithRepeatAndStrict) {
// Normal Sanyo LC7461 16-bit message with 1 repeat.
irsend.reset();
irsend.sendSanyoLC7461(0x3FFE01FE, SANYO_LC7461_BITS, 1);
irsend.sendSanyoLC7461(0x3FFE01FE, kSanyoLC7461Bits, 1);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSanyoLC7461(&irsend.capture, SANYO_LC7461_BITS,
true));
ASSERT_TRUE(
irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
EXPECT_EQ(SANYO_LC7461_BITS, irsend.capture.bits);
EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
EXPECT_EQ(0x3FFE01FE, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x1, irsend.capture.command);
@@ -133,13 +134,13 @@ TEST(TestDecodeSanyoLC7461, DecodeWithNonStrictValues) {
irsend.sendSanyoLC7461(0x0); // Illegal value Sanyo LC7461 message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture, SANYO_LC7461_BITS,
true));
ASSERT_FALSE(
irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeSanyoLC7461(&irsend.capture, SANYO_LC7461_BITS,
false));
ASSERT_TRUE(
irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, false));
EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
EXPECT_EQ(SANYO_LC7461_BITS, irsend.capture.bits);
EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -148,22 +149,20 @@ TEST(TestDecodeSanyoLC7461, DecodeWithNonStrictValues) {
// Illegal value Sanyo LC7461 42-bit message.
irsend.sendSanyoLC7461(0x1234567890A);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture, SANYO_LC7461_BITS,
true));
ASSERT_FALSE(
irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
// Should fail with strict when we ask for the wrong bit size.
ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture, 32,
true));
ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture, 64,
true));
ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture, 32, true));
ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture, 64, true));
// And should fail for a bad value.
ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture, SANYO_LC7461_BITS,
true));
ASSERT_FALSE(
irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeSanyoLC7461(&irsend.capture, SANYO_LC7461_BITS,
false));
ASSERT_TRUE(
irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, false));
EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
EXPECT_EQ(SANYO_LC7461_BITS, irsend.capture.bits);
EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
EXPECT_EQ(0x1234567890A, irsend.capture.value);
EXPECT_EQ(0x91A, irsend.capture.address);
EXPECT_EQ(0x89, irsend.capture.command);
@@ -193,33 +192,33 @@ TEST(TestDecodeSanyoLC7461, Decode64BitMessages) {
// Decode a 'real' example via GlobalCache
TEST(TestDecodeSanyoLC7461, DecodeGlobalCacheExample) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
uint16_t gc_test[95] = {38000, 1, 89, 342, 171, 21, 21, 21, 64, 21, 64,
21, 64, 21, 21, 21, 64, 21, 64, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 64, 21, 21,
21, 21, 21, 21, 21, 64, 21, 21, 21, 21, 21, 64,
21, 64, 21, 64, 21, 64, 21, 64, 21, 64, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 64, 21, 64, 21, 64, 21, 64, 21, 64,
21, 64, 21, 64, 21, 64, 21, 875, 342, 171, 21, 3565};
irsend.sendGC(gc_test, 95);
irsend.makeDecodeResult();
irsend.reset();
uint16_t gc_test[95] = {
38000, 1, 89, 342, 171, 21, 21, 21, 64, 21, 64, 21, 64, 21, 21, 21,
64, 21, 64, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
64, 21, 21, 21, 21, 21, 21, 21, 64, 21, 21, 21, 21, 21, 64, 21,
64, 21, 64, 21, 64, 21, 64, 21, 64, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 64, 21, 64, 21, 64, 21,
64, 21, 64, 21, 64, 21, 64, 21, 64, 21, 875, 342, 171, 21, 3565};
irsend.sendGC(gc_test, 95);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSanyoLC7461(&irsend.capture, SANYO_LC7461_BITS, true));
EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
EXPECT_EQ(SANYO_LC7461_BITS, irsend.capture.bits);
EXPECT_EQ(0x1D8113F00FF, irsend.capture.value);
EXPECT_EQ(0xEC0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
ASSERT_TRUE(
irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
EXPECT_EQ(0x1D8113F00FF, irsend.capture.value);
EXPECT_EQ(0xEC0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
// Confirm what the 42-bit NEC decode is.
ASSERT_TRUE(irrecv.decodeNEC(&irsend.capture, 42, false));
EXPECT_EQ(0x1D8113F00FF, irsend.capture.value);
// Confirm what the 42-bit NEC decode is.
ASSERT_TRUE(irrecv.decodeNEC(&irsend.capture, 42, false));
EXPECT_EQ(0x1D8113F00FF, irsend.capture.value);
}
// Fail to decode a non-Sanyo LC7461 example via GlobalCache
@@ -230,13 +229,14 @@ TEST(TestDecodeSanyoLC7461, FailToDecodeNonSanyoLC7461Example) {
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};
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.decodeSanyoLC7461(&irsend.capture));
ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture, SANYO_LC7461_BITS,
false));
ASSERT_FALSE(
irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, false));
}
+48 -51
View File
@@ -37,7 +37,6 @@ TEST(TestEncodeSharp, AdvancedEncoding) {
EXPECT_EQ(0x454A, irsend.encodeSharp(0x11, 0x52, 1, 0, true));
}
// Tests for sendSharp().
// Test sending typical data only.
@@ -53,7 +52,8 @@ TEST(TestSendSharp, SendDataOnly) {
"m260s43602"
"m260s1820m260s780m260s780m260s780m260s1820m260s1820m260s780m260s1820"
"m260s780m260s1820m260s1820m260s780m260s1820m260s780m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -62,7 +62,7 @@ TEST(TestSendSharp, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendSharp(0x11, 0x52, SHARP_BITS, 1); // 1 repeat.
irsend.sendSharp(0x11, 0x52, kSharpBits, 1); // 1 repeat.
EXPECT_EQ(
"m260s1820m260s780m260s780m260s780m260s1820m260s780m260s1820m260s780"
"m260s1820m260s780m260s780m260s1820m260s780m260s1820m260s780"
@@ -75,7 +75,8 @@ TEST(TestSendSharp, SendWithRepeats) {
"m260s43602"
"m260s1820m260s780m260s780m260s780m260s1820m260s1820m260s780m260s1820"
"m260s780m260s1820m260s1820m260s780m260s1820m260s780m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -89,7 +90,8 @@ TEST(TestSendSharp, SendUnusualSize) {
"m260s780m260s780m260s780m260s780m260s780m260s780m260s1820m260s780"
"m260s43602"
"m260s1820m260s1820m260s1820m260s1820m260s1820m260s1820m260s780m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
irsend.reset();
irsend.sendSharp(0x0, 0x0, 16);
@@ -99,7 +101,8 @@ TEST(TestSendSharp, SendUnusualSize) {
"m260s43602"
"m260s780m260s780m260s780m260s780m260s780m260s780m260s1820m260s1820"
"m260s1820m260s1820m260s1820m260s1820m260s1820m260s1820m260s780m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
}
// Tests for sendSharpRaw().
@@ -117,7 +120,8 @@ TEST(TestSendSharpRaw, SendDataOnly) {
"m260s43602"
"m260s1820m260s780m260s780m260s780m260s1820m260s1820m260s780m260s1820"
"m260s780m260s1820m260s1820m260s780m260s1820m260s780m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -126,7 +130,7 @@ TEST(TestSendSharpRaw, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendSharpRaw(0x454A, SHARP_BITS, 1); // 1 repeat.
irsend.sendSharpRaw(0x454A, kSharpBits, 1); // 1 repeat.
EXPECT_EQ(
"m260s1820m260s780m260s780m260s780m260s1820m260s780m260s1820m260s780"
"m260s1820m260s780m260s780m260s1820m260s780m260s1820m260s780"
@@ -139,7 +143,8 @@ TEST(TestSendSharpRaw, SendWithRepeats) {
"m260s43602"
"m260s1820m260s780m260s780m260s780m260s1820m260s1820m260s780m260s1820"
"m260s780m260s1820m260s1820m260s780m260s1820m260s780m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -153,7 +158,8 @@ TEST(TestSendSharpRaw, SendUnusualSize) {
"m260s780m260s780m260s780m260s780m260s780m260s780m260s1820m260s780"
"m260s43602"
"m260s1820m260s1820m260s1820m260s1820m260s1820m260s1820m260s780m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
irsend.reset();
irsend.sendSharpRaw(0x2, 16);
@@ -163,7 +169,8 @@ TEST(TestSendSharpRaw, SendUnusualSize) {
"m260s43602"
"m260s780m260s780m260s780m260s780m260s780m260s780m260s1820m260s1820"
"m260s1820m260s1820m260s1820m260s1820m260s1820m260s1820m260s780m260s1820"
"m260s43602", irsend.outputStr());
"m260s43602",
irsend.outputStr());
}
// Tests for decodeSharp().
@@ -178,9 +185,9 @@ TEST(TestDecodeSharp, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendSharpRaw(0x454A);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture, SHARP_BITS, true));
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture, kSharpBits, true));
EXPECT_EQ(SHARP, irsend.capture.decode_type);
EXPECT_EQ(SHARP_BITS, irsend.capture.bits);
EXPECT_EQ(kSharpBits, irsend.capture.bits);
EXPECT_EQ(0x454A, irsend.capture.value);
EXPECT_EQ(0x11, irsend.capture.address);
EXPECT_EQ(0x4A, irsend.capture.command);
@@ -190,9 +197,9 @@ TEST(TestDecodeSharp, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendSharpRaw(irsend.encodeSharp(0x07, 0x99));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture, SHARP_BITS, true));
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture, kSharpBits, true));
EXPECT_EQ(SHARP, irsend.capture.decode_type);
EXPECT_EQ(SHARP_BITS, irsend.capture.bits);
EXPECT_EQ(kSharpBits, irsend.capture.bits);
EXPECT_EQ(0x7266, irsend.capture.value);
EXPECT_EQ(0x07, irsend.capture.address);
EXPECT_EQ(0x99, irsend.capture.command);
@@ -202,9 +209,9 @@ TEST(TestDecodeSharp, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendSharpRaw(irsend.encodeSharp(0x1, 0x1));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture, SHARP_BITS, true));
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture, kSharpBits, true));
EXPECT_EQ(SHARP, irsend.capture.decode_type);
EXPECT_EQ(SHARP_BITS, irsend.capture.bits);
EXPECT_EQ(kSharpBits, irsend.capture.bits);
EXPECT_EQ(0x4202, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x1, irsend.capture.command);
@@ -219,19 +226,19 @@ TEST(TestDecodeSharp, NormalDecodeWithRepeatAndStrict) {
// Normal Sharp 15-bit message with 1 repeat.
irsend.reset();
irsend.sendSharpRaw(0x7266, SHARP_BITS, 1);
irsend.sendSharpRaw(0x7266, kSharpBits, 1);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture, SHARP_BITS, true));
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture, kSharpBits, true));
EXPECT_EQ(SHARP, irsend.capture.decode_type);
EXPECT_EQ(SHARP_BITS, irsend.capture.bits);
EXPECT_EQ(kSharpBits, irsend.capture.bits);
EXPECT_EQ(0x7266, irsend.capture.value);
EXPECT_EQ(0x07, irsend.capture.address);
EXPECT_EQ(0x99, irsend.capture.command);
irsend.makeDecodeResult(2 * (2 * SHARP_BITS + FOOTER));
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture, SHARP_BITS, true));
irsend.makeDecodeResult(2 * (2 * kSharpBits + kFooter));
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture, kSharpBits, true));
EXPECT_EQ(SHARP, irsend.capture.decode_type);
EXPECT_EQ(SHARP_BITS, irsend.capture.bits);
EXPECT_EQ(kSharpBits, irsend.capture.bits);
EXPECT_EQ(0x7266, irsend.capture.value);
}
@@ -245,7 +252,7 @@ TEST(TestDecodeSharp, DecodeWithNonStrict) {
irsend.sendSharpRaw(0x0, 8); // Illegal length Sharp 8-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture, SHARP_BITS, true));
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture, kSharpBits, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture, 8, false));
EXPECT_EQ(SHARP, irsend.capture.decode_type);
@@ -258,7 +265,7 @@ TEST(TestDecodeSharp, DecodeWithNonStrict) {
irsend.sendSharpRaw(0x12345678, 32); // Illegal length Sharp 32-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture, SHARP_BITS, true));
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture, kSharpBits, true));
// Should fail with strict when we ask for the wrong bit size.
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture, 32, true));
@@ -298,21 +305,17 @@ TEST(TestDecodeSharp, DecodeGlobalCacheExample) {
irsend.reset();
// Sharp Power On from Global Cache.
uint16_t gc_test[67] = {38000, 1, 1,
10, 70, 10, 30, 10, 30, 10, 30, 10, 70, 10, 30,
10, 70, 10, 30, 10, 70, 10, 30, 10, 30, 10, 70,
10, 30, 10, 70, 10, 30,
10, 1657,
10, 70, 10, 30, 10, 30, 10, 30, 10, 70, 10, 70,
10, 30, 10, 70, 10, 30, 10, 70, 10, 70, 10, 30,
10, 70, 10, 30, 10, 70,
10, 1657};
uint16_t gc_test[67] = {
38000, 1, 1, 10, 70, 10, 30, 10, 30, 10, 30, 10, 70, 10, 30, 10, 70,
10, 30, 10, 70, 10, 30, 10, 30, 10, 70, 10, 30, 10, 70, 10, 30, 10,
1657, 10, 70, 10, 30, 10, 30, 10, 30, 10, 70, 10, 70, 10, 30, 10, 70,
10, 30, 10, 70, 10, 70, 10, 30, 10, 70, 10, 30, 10, 70, 10, 1657};
irsend.sendGC(gc_test, 67);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSharp(&irsend.capture));
EXPECT_EQ(SHARP, irsend.capture.decode_type);
EXPECT_EQ(SHARP_BITS, irsend.capture.bits);
EXPECT_EQ(kSharpBits, irsend.capture.bits);
EXPECT_EQ(0x454A, irsend.capture.value);
EXPECT_EQ(0x11, irsend.capture.address);
EXPECT_EQ(0x4A, irsend.capture.command);
@@ -327,31 +330,25 @@ TEST(TestDecodeSharp, FailToDecodeNonSharpExample) {
irsend.reset();
// Modified a few entries to unexpected values, based on previous test case.
uint16_t gc_test[67] = {38000, 1, 1,
10, 70, 30, 30, 10, 30, 10, 30, 10, 70, 10, 30,
10, 70, 10, 30, 10, 70, 10, 30, 10, 30, 10, 70,
10, 30, 10, 70, 10, 30,
10, 1657,
10, 70, 10, 30, 10, 30, 10, 30, 10, 70, 10, 70,
10, 30, 10, 60, 10, 30, 10, 70, 10, 70, 10, 30,
10, 10, 70, 30, 10, 70,
10, 1657};
uint16_t gc_test[67] = {
38000, 1, 1, 10, 70, 30, 30, 10, 30, 10, 30, 10, 70, 10, 30, 10, 70,
10, 30, 10, 70, 10, 30, 10, 30, 10, 70, 10, 30, 10, 70, 10, 30, 10,
1657, 10, 70, 10, 30, 10, 30, 10, 30, 10, 70, 10, 70, 10, 30, 10, 60,
10, 30, 10, 70, 10, 70, 10, 30, 10, 10, 70, 30, 10, 70, 10, 1657};
irsend.sendGC(gc_test, 67);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture));
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture, SHARP_BITS, false));
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture, kSharpBits, false));
// Test only half of a good message, as it is sent (sort of) twice.
uint16_t gc_half[35] = {38000, 1, 1,
10, 70, 10, 30, 10, 30, 10, 30, 10, 70, 10, 30,
10, 70, 10, 30, 10, 70, 10, 30, 10, 30, 10, 70,
10, 30, 10, 70, 10, 30,
10, 1657};
uint16_t gc_half[35] = {38000, 1, 1, 10, 70, 10, 30, 10, 30, 10, 30, 10,
70, 10, 30, 10, 70, 10, 30, 10, 70, 10, 30, 10,
30, 10, 70, 10, 30, 10, 70, 10, 30, 10, 1657};
irsend.sendGC(gc_half, 35);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture));
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture, SHARP_BITS, false));
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture, kSharpBits, false));
}
+26 -20
View File
@@ -13,12 +13,14 @@ TEST(TestSendSherwood, SendDataOnly) {
irsend.reset();
irsend.sendSherwood(0xC1A28877);
EXPECT_EQ("m8960s4480m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680"
"m560s1680m560s560m560s1680m560s1680m560s1680m560s42560"
"m8960s2240m560s96320", irsend.outputStr());
EXPECT_EQ(
"m8960s4480m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680"
"m560s1680m560s560m560s1680m560s1680m560s1680m560s42560"
"m8960s2240m560s96320",
irsend.outputStr());
}
// Test sending typical data with extra repeats.
@@ -28,13 +30,15 @@ TEST(TestSendSherwood, SendDataWithRepeats) {
irsend.reset();
irsend.sendSherwood(0xC1A28877, 32, 2);
EXPECT_EQ("m8960s4480m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680"
"m560s1680m560s560m560s1680m560s1680m560s1680m560s42560"
"m8960s2240m560s96320"
"m8960s2240m560s96320", irsend.outputStr());
EXPECT_EQ(
"m8960s4480m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680"
"m560s1680m560s560m560s1680m560s1680m560s1680m560s42560"
"m8960s2240m560s96320"
"m8960s2240m560s96320",
irsend.outputStr());
}
// Test sending typical data with explicit no repeats.
@@ -45,12 +49,14 @@ TEST(TestSendSherwood, SendDataWithZeroRepeats) {
irsend.reset();
irsend.sendSherwood(0xC1A28877, 32, 0);
// Should have a single NEC repeat, as we always send one.
EXPECT_EQ("m8960s4480m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680"
"m560s1680m560s560m560s1680m560s1680m560s1680m560s42560"
"m8960s2240m560s96320", irsend.outputStr());
EXPECT_EQ(
"m8960s4480m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680"
"m560s1680m560s560m560s1680m560s1680m560s1680m560s42560"
"m8960s2240m560s96320",
irsend.outputStr());
}
// Test that a typical Sherwood send decodes as the appropriate NEC value.
@@ -65,7 +71,7 @@ TEST(TestSendSherwood, DecodesAsNEC) {
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(kNECBits, irsend.capture.bits);
EXPECT_EQ(0xC1A28877, irsend.capture.value);
EXPECT_EQ(0x4583, irsend.capture.address);
EXPECT_EQ(0x11, irsend.capture.command);
+153 -119
View File
@@ -14,52 +14,59 @@ TEST(TestSendSony, SendDataOnly) {
irsend.reset();
irsend.sendSony(0);
// We expect three 20-bit commands to be sent.
EXPECT_EQ("m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s18600"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s18600"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s18600", irsend.outputStr());
EXPECT_EQ(
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s18600"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s18600"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s18600",
irsend.outputStr());
irsend.reset();
irsend.sendSony(0x240C, SONY_20_BITS);
irsend.sendSony(0x240C, kSony20Bits);
// We expect three 20-bit commands to be sent.
EXPECT_EQ("m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200", irsend.outputStr());
EXPECT_EQ(
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200",
irsend.outputStr());
irsend.reset();
irsend.sendSony(0x240C, SONY_15_BITS);
irsend.sendSony(0x240C, kSony15Bits);
// We expect three 15-bit commands to be sent.
EXPECT_EQ("m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600"
"m600s22200"
"m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600"
"m600s22200"
"m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600"
"m600s22200", irsend.outputStr());
EXPECT_EQ(
"m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600"
"m600s22200"
"m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600"
"m600s22200"
"m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600"
"m600s22200",
irsend.outputStr());
irsend.reset();
irsend.sendSony(0xA90, SONY_12_BITS);
irsend.sendSony(0xA90, kSony12Bits);
// We expect three 15-bit commands to be sent.
EXPECT_EQ("m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600"
"m600s600m1200s600m600s600m600s600m600s600m600s25800"
"m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600"
"m600s600m1200s600m600s600m600s600m600s600m600s25800"
"m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600"
"m600s600m1200s600m600s600m600s600m600s600m600s25800",
irsend.outputStr());
EXPECT_EQ(
"m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600"
"m600s600m1200s600m600s600m600s600m600s600m600s25800"
"m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600"
"m600s600m1200s600m600s600m600s600m600s600m600s25800"
"m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600"
"m600s600m1200s600m600s600m600s600m600s600m600s25800",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -68,57 +75,63 @@ TEST(TestSendSony, SendWithDiffRepeats) {
irsend.begin();
irsend.reset();
irsend.sendSony(0x240C, SONY_20_BITS, 0); // Send a command with 0 repeats.
EXPECT_EQ("m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200", irsend.outputStr());
irsend.sendSony(0x240C, SONY_20_BITS, 1); // Send a command with 1 repeat.
EXPECT_EQ("m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200", irsend.outputStr());
irsend.sendSony(0x240C, SONY_20_BITS, 3); // Send a command with 3 repeats.
EXPECT_EQ("m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200", irsend.outputStr());
irsend.sendSony(0x240C, kSony20Bits, 0); // Send a command with 0 repeats.
EXPECT_EQ(
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200",
irsend.outputStr());
irsend.sendSony(0x240C, kSony20Bits, 1); // Send a command with 1 repeat.
EXPECT_EQ(
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200",
irsend.outputStr());
irsend.sendSony(0x240C, kSony20Bits, 3); // Send a command with 3 repeats.
EXPECT_EQ(
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s16200",
irsend.outputStr());
}
// Tests for encodeSony().
TEST(TestEncodeSony, NormalSonyEncoding) {
IRsendTest irsend(4);
EXPECT_EQ(0x0, irsend.encodeSony(SONY_12_BITS, 0, 0));
EXPECT_EQ(0xA90, irsend.encodeSony(SONY_12_BITS, 21, 1));
EXPECT_EQ(0xFFF, irsend.encodeSony(SONY_12_BITS, 0x7F, 0x1F));
EXPECT_EQ(0x0, irsend.encodeSony(kSony12Bits, 0, 0));
EXPECT_EQ(0xA90, irsend.encodeSony(kSony12Bits, 21, 1));
EXPECT_EQ(0xFFF, irsend.encodeSony(kSony12Bits, 0x7F, 0x1F));
EXPECT_EQ(0x0, irsend.encodeSony(SONY_15_BITS, 0, 0));
EXPECT_EQ(0x5480, irsend.encodeSony(SONY_15_BITS, 21, 1));
EXPECT_EQ(0x5455, irsend.encodeSony(SONY_15_BITS, 21, 0xAA));
EXPECT_EQ(0x7FFF, irsend.encodeSony(SONY_15_BITS, 0x7F, 0xFF));
EXPECT_EQ(0x0, irsend.encodeSony(kSony15Bits, 0, 0));
EXPECT_EQ(0x5480, irsend.encodeSony(kSony15Bits, 21, 1));
EXPECT_EQ(0x5455, irsend.encodeSony(kSony15Bits, 21, 0xAA));
EXPECT_EQ(0x7FFF, irsend.encodeSony(kSony15Bits, 0x7F, 0xFF));
EXPECT_EQ(0x0, irsend.encodeSony(SONY_20_BITS, 0, 0, 0));
EXPECT_EQ(0x81080, irsend.encodeSony(SONY_20_BITS, 1, 1, 1));
EXPECT_EQ(0xFFFFF, irsend.encodeSony(SONY_20_BITS, 0x7F, 0x1F, 0xFF));
EXPECT_EQ(0x0, irsend.encodeSony(kSony20Bits, 0, 0, 0));
EXPECT_EQ(0x81080, irsend.encodeSony(kSony20Bits, 1, 1, 1));
EXPECT_EQ(0xFFFFF, irsend.encodeSony(kSony20Bits, 0x7F, 0x1F, 0xFF));
}
TEST(TestEncodeSony, SonyEncodingWithOversizedValues) {
IRsendTest irsend(4);
EXPECT_EQ(0xFFF, irsend.encodeSony(SONY_12_BITS, 0xFFFF, 0xFFFF));
EXPECT_EQ(0xFFF, irsend.encodeSony(kSony12Bits, 0xFFFF, 0xFFFF));
EXPECT_EQ(0x7FFF, irsend.encodeSony(SONY_15_BITS, 0xFFFF, 0xFFFF));
EXPECT_EQ(0x7FFF, irsend.encodeSony(kSony15Bits, 0xFFFF, 0xFFFF));
EXPECT_EQ(0xFFFFF, irsend.encodeSony(SONY_20_BITS, 0xFFFF, 0xFFFF, 0xFFFF));
EXPECT_EQ(0xFFFFF, irsend.encodeSony(kSony20Bits, 0xFFFF, 0xFFFF, 0xFFFF));
}
// Tests for decodeSony().
@@ -131,33 +144,33 @@ TEST(TestDecodeSony, NormalSonyDecodeWithStrict) {
// Synthesised Normal Sony 20-bit message.
irsend.reset();
irsend.sendSony(irsend.encodeSony(SONY_20_BITS, 0x1, 0x1, 0x1));
irsend.sendSony(irsend.encodeSony(kSony20Bits, 0x1, 0x1, 0x1));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, SONY_20_BITS, true));
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, kSony20Bits, true));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_20_BITS, irsend.capture.bits);
EXPECT_EQ(kSony20Bits, irsend.capture.bits);
EXPECT_EQ(0x81080, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x81, irsend.capture.command);
// Synthesised Normal Sony 15-bit message.
irsend.reset();
irsend.sendSony(irsend.encodeSony(SONY_15_BITS, 21, 1), SONY_15_BITS);
irsend.sendSony(irsend.encodeSony(kSony15Bits, 21, 1), kSony15Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, SONY_15_BITS, true));
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, kSony15Bits, true));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_15_BITS, irsend.capture.bits);
EXPECT_EQ(kSony15Bits, irsend.capture.bits);
EXPECT_EQ(0x5480, irsend.capture.value);
EXPECT_EQ(1, irsend.capture.address);
EXPECT_EQ(21, irsend.capture.command);
// Synthesised Normal Sony 12-bit message.
irsend.reset();
irsend.sendSony(irsend.encodeSony(SONY_12_BITS, 21, 1), SONY_12_BITS);
irsend.sendSony(irsend.encodeSony(kSony12Bits, 21, 1), kSony12Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, SONY_12_BITS, true));
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, kSony12Bits, true));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_12_BITS, irsend.capture.bits);
EXPECT_EQ(kSony12Bits, irsend.capture.bits);
EXPECT_EQ(0xA90, irsend.capture.value);
EXPECT_EQ(1, irsend.capture.address);
EXPECT_EQ(21, irsend.capture.command);
@@ -171,46 +184,46 @@ TEST(TestDecodeSony, SonyDecodeWithUnexpectedLegalSize) {
// Synthesised Normal Sony 20-bit message decoded when looking for 12-bits
irsend.reset();
irsend.sendSony(irsend.encodeSony(SONY_20_BITS, 0x1, 0x1, 0x1));
irsend.sendSony(irsend.encodeSony(kSony20Bits, 0x1, 0x1, 0x1));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, SONY_MIN_BITS));
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, kSonyMinBits));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_20_BITS, irsend.capture.bits);
EXPECT_EQ(kSony20Bits, irsend.capture.bits);
EXPECT_EQ(0x81080, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x81, irsend.capture.command);
// Synthesised Normal Sony 12-bit message when expecting 20-bits.
irsend.reset();
irsend.sendSony(irsend.encodeSony(SONY_12_BITS, 21, 1), SONY_12_BITS);
irsend.sendSony(irsend.encodeSony(kSony12Bits, 21, 1), kSony12Bits);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, SONY_20_BITS));
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, kSony20Bits));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_12_BITS, irsend.capture.bits);
EXPECT_EQ(kSony12Bits, irsend.capture.bits);
EXPECT_EQ(0xA90, irsend.capture.value);
EXPECT_EQ(1, irsend.capture.address);
EXPECT_EQ(21, irsend.capture.command);
// 12-bit message should be regected when using strict and a different size.
irsend.reset();
irsend.sendSony(irsend.encodeSony(SONY_12_BITS, 21, 1), SONY_12_BITS);
irsend.sendSony(irsend.encodeSony(kSony12Bits, 21, 1), kSony12Bits);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_20_BITS, true));
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_15_BITS, true));
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, kSony20Bits, true));
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, kSony15Bits, true));
// 15-bit message should be regected when using strict and a different size.
irsend.reset();
irsend.sendSony(irsend.encodeSony(SONY_15_BITS, 21, 1), SONY_15_BITS);
irsend.sendSony(irsend.encodeSony(kSony15Bits, 21, 1), kSony15Bits);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_12_BITS, true));
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_20_BITS, true));
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, kSony12Bits, true));
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, kSony20Bits, true));
// 20-bit message should be regected when using strict and a different size.
irsend.reset();
irsend.sendSony(irsend.encodeSony(SONY_20_BITS, 1, 1, 1), SONY_20_BITS);
irsend.sendSony(irsend.encodeSony(kSony20Bits, 1, 1, 1), kSony20Bits);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_12_BITS, true));
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_15_BITS, true));
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, kSony12Bits, true));
ASSERT_FALSE(irrecv.decodeSony(&irsend.capture, kSony15Bits, true));
}
// Decode unsupported Sony messages. i.e non-standard sizes.
@@ -223,10 +236,10 @@ TEST(TestDecodeSony, SonyDecodeWithIllegalSize) {
irsend.sendSony(0xFF, 8); // Illegal 8-bit Sony-like message.
irsend.makeDecodeResult();
// Should fail with strict on.
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_MIN_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_12_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_15_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_20_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSonyMinBits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony12Bits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony15Bits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony20Bits, true));
// Should work with a 'normal' match (not strict)
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
@@ -239,10 +252,10 @@ TEST(TestDecodeSony, SonyDecodeWithIllegalSize) {
irsend.sendSony(0x1FFF, 13); // Illegal 13-bit Sony-like message.
irsend.makeDecodeResult();
// Should fail with strict on.
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_MIN_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_12_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_15_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_20_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSonyMinBits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony12Bits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony15Bits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony20Bits, true));
// Should work with a 'normal' match (not strict)
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
@@ -255,10 +268,10 @@ TEST(TestDecodeSony, SonyDecodeWithIllegalSize) {
irsend.sendSony(0x1FFFF, 17); // Illegal 17-bit Sony-like message.
irsend.makeDecodeResult();
// Should fail with strict on.
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_MIN_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_12_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_15_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_20_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSonyMinBits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony12Bits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony15Bits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony20Bits, true));
// Should work with a 'normal' match (not strict)
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
@@ -271,10 +284,10 @@ TEST(TestDecodeSony, SonyDecodeWithIllegalSize) {
irsend.sendSony(0x1FFFFF, 21); // Illegal 21-bit Sony-like message.
irsend.makeDecodeResult();
// Should fail with strict on.
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_MIN_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_12_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_15_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, SONY_20_BITS, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSonyMinBits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony12Bits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony15Bits, true));
EXPECT_FALSE(irrecv.decodeSony(&irsend.capture, kSony20Bits, true));
// Should work with a 'normal' match (not strict)
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
@@ -296,7 +309,6 @@ TEST(TestDecodeSony, SonyDecodeWithIllegalSize) {
EXPECT_EQ(0x0, irsend.capture.command);
}
// Decode unsupported Sony messages. i.e non-standard sizes.
TEST(TestDecodeSony, DecodeGlobalCacheExample) {
IRsendTest irsend(4);
@@ -305,9 +317,9 @@ TEST(TestDecodeSony, DecodeGlobalCacheExample) {
irsend.reset();
// Sony "Power On" from Global Cache.
uint16_t gc_test[29] = {40000, 1, 1, 96, 24, 24, 24, 48, 24, 48, 24, 48, 24,
24, 24, 48, 24, 24, 24, 48, 24, 24, 24, 24, 24, 24,
24, 24, 1013};
uint16_t gc_test[29] = {40000, 1, 1, 96, 24, 24, 24, 48, 24, 48,
24, 48, 24, 24, 24, 48, 24, 24, 24, 48,
24, 24, 24, 24, 24, 24, 24, 24, 1013};
irsend.sendGC(gc_test, 29);
irsend.makeDecodeResult();
@@ -319,5 +331,27 @@ TEST(TestDecodeSony, DecodeGlobalCacheExample) {
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x2E, irsend.capture.command);
// With strict and correct size.
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, SONY_12_BITS, true));
ASSERT_TRUE(irrecv.decodeSony(&irsend.capture, kSony12Bits, true));
}
// Encoding & Decode 20 bit Sony messages. Issue #476
TEST(TestEncodeSony, Issue476) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
irsend.sendSony(0x6AB47, 20);
irsend.makeDecodeResult();
// Without strict.
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(20, irsend.capture.bits);
EXPECT_EQ(0x6AB47, irsend.capture.value); // 20 bits
EXPECT_EQ(0x1A, irsend.capture.address); // 5 bits
EXPECT_EQ(0x7156, irsend.capture.command); // 15 bits
EXPECT_EQ(0x56, 0x7156 & 0x7F); // command (lower 7 bits)
EXPECT_EQ(0xE2, (0x7156 >> 7) & 0xFF); // extended (top 8 of 15 bits)
EXPECT_EQ(0x6AB47, irsend.encodeSony(20, 0x56, 0x1A, 0xE2));
}
+260 -254
View File
@@ -1,9 +1,9 @@
// Copyright 2017 David Conran
#include "ir_Toshiba.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Toshiba.h"
#include "gtest/gtest.h"
// Tests for Toshiba A/C methods.
@@ -13,8 +13,8 @@ TEST(TestSendToshibaAC, SendDataOnly) {
IRsendTest irsend(4);
irsend.begin();
uint8_t toshiba_code[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00};
uint8_t toshiba_code[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
0x00, 0x00, 0x00, 0x00};
irsend.reset();
irsend.sendToshibaAC(toshiba_code);
EXPECT_EQ(
@@ -39,7 +39,8 @@ TEST(TestSendToshibaAC, SendDataOnly) {
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s7048", irsend.outputStr());
"m543s7048",
irsend.outputStr());
}
// Test sending with repeats.
@@ -48,59 +49,61 @@ TEST(TestSendToshibaAC, SendWithRepeats) {
irsend.begin();
irsend.reset();
uint8_t toshiba_code[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00};
uint8_t toshiba_code[kToshibaACStateLength] = {0xF2, 0x0D, 0x03, 0xFC, 0x01,
0x00, 0x00, 0x00, 0x00};
irsend.sendToshibaAC(toshiba_code, TOSHIBA_AC_STATE_LENGTH, 0);
irsend.sendToshibaAC(toshiba_code, kToshibaACStateLength, 0);
EXPECT_EQ(
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s7048", irsend.outputStr());
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s7048",
irsend.outputStr());
irsend.reset();
irsend.sendToshibaAC(toshiba_code, TOSHIBA_AC_STATE_LENGTH, 2);
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());
"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.
@@ -113,11 +116,11 @@ TEST(TestSendToshibaAC, SendUnexpectedSizes) {
uint8_t toshiba_long_code[10] = {0x01, 0x02, 0x03, 0x04, 0x05,
0x06, 0x07, 0x08, 0x09, 0x0A};
irsend.reset();
irsend.sendToshibaAC(toshiba_short_code, TOSHIBA_AC_STATE_LENGTH - 1);
irsend.sendToshibaAC(toshiba_short_code, kToshibaACStateLength - 1);
ASSERT_EQ("", irsend.outputStr());
irsend.reset();
irsend.sendToshibaAC(toshiba_long_code, TOSHIBA_AC_STATE_LENGTH + 1);
irsend.sendToshibaAC(toshiba_long_code, kToshibaACStateLength + 1);
ASSERT_EQ(
"m4400s4300"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
@@ -142,7 +145,8 @@ TEST(TestSendToshibaAC, SendUnexpectedSizes) {
"m543s472m543s472m543s472m543s472m543s1623m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s1623m543s472m543s1623m543s472"
"m543s7048", irsend.outputStr());
"m543s7048",
irsend.outputStr());
}
// Tests for IRToshibaAC class.
@@ -169,22 +173,22 @@ TEST(TestToshibaACClass, Temperature) {
toshiba.begin();
toshiba.setTemp(0);
EXPECT_EQ(TOSHIBA_AC_MIN_TEMP, toshiba.getTemp());
EXPECT_EQ(kToshibaAcMinTemp, toshiba.getTemp());
toshiba.setTemp(255);
EXPECT_EQ(TOSHIBA_AC_MAX_TEMP, toshiba.getTemp());
EXPECT_EQ(kToshibaAcMaxTemp, toshiba.getTemp());
toshiba.setTemp(TOSHIBA_AC_MIN_TEMP);
EXPECT_EQ(TOSHIBA_AC_MIN_TEMP, toshiba.getTemp());
toshiba.setTemp(kToshibaAcMinTemp);
EXPECT_EQ(kToshibaAcMinTemp, toshiba.getTemp());
toshiba.setTemp(TOSHIBA_AC_MAX_TEMP);
EXPECT_EQ(TOSHIBA_AC_MAX_TEMP, toshiba.getTemp());
toshiba.setTemp(kToshibaAcMaxTemp);
EXPECT_EQ(kToshibaAcMaxTemp, toshiba.getTemp());
toshiba.setTemp(TOSHIBA_AC_MIN_TEMP - 1);
EXPECT_EQ(TOSHIBA_AC_MIN_TEMP, toshiba.getTemp());
toshiba.setTemp(kToshibaAcMinTemp - 1);
EXPECT_EQ(kToshibaAcMinTemp, toshiba.getTemp());
toshiba.setTemp(TOSHIBA_AC_MAX_TEMP + 1);
EXPECT_EQ(TOSHIBA_AC_MAX_TEMP, toshiba.getTemp());
toshiba.setTemp(kToshibaAcMaxTemp + 1);
EXPECT_EQ(kToshibaAcMaxTemp, toshiba.getTemp());
toshiba.setTemp(17);
EXPECT_EQ(17, toshiba.getTemp());
@@ -203,49 +207,49 @@ TEST(TestToshibaACClass, OperatingMode) {
IRToshibaAC toshiba(0);
toshiba.begin();
toshiba.setMode(TOSHIBA_AC_AUTO);
EXPECT_EQ(TOSHIBA_AC_AUTO, toshiba.getMode());
toshiba.setMode(kToshibaAcAuto);
EXPECT_EQ(kToshibaAcAuto, toshiba.getMode());
toshiba.setMode(TOSHIBA_AC_COOL);
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
toshiba.setMode(kToshibaAcCool);
EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
toshiba.setMode(TOSHIBA_AC_HEAT);
EXPECT_EQ(TOSHIBA_AC_HEAT, toshiba.getMode());
toshiba.setMode(kToshibaAcHeat);
EXPECT_EQ(kToshibaAcHeat, toshiba.getMode());
toshiba.setMode(TOSHIBA_AC_DRY);
EXPECT_EQ(TOSHIBA_AC_DRY, toshiba.getMode());
toshiba.setMode(kToshibaAcDry);
EXPECT_EQ(kToshibaAcDry, toshiba.getMode());
toshiba.setMode(TOSHIBA_AC_HEAT + 1);
EXPECT_EQ(TOSHIBA_AC_AUTO, toshiba.getMode());
toshiba.setMode(kToshibaAcHeat + 1);
EXPECT_EQ(kToshibaAcAuto, toshiba.getMode());
toshiba.setMode(255);
EXPECT_EQ(TOSHIBA_AC_AUTO, toshiba.getMode());
EXPECT_EQ(kToshibaAcAuto, toshiba.getMode());
// Setting the power off changes the underlying mode in the state to heat.
toshiba.setPower(true);
toshiba.setMode(TOSHIBA_AC_COOL);
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode(true));
toshiba.setMode(kToshibaAcCool);
EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
EXPECT_EQ(kToshibaAcCool, toshiba.getMode(true));
toshiba.setPower(false);
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
EXPECT_EQ(TOSHIBA_AC_HEAT, toshiba.getMode(true));
EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
EXPECT_EQ(kToshibaAcHeat, toshiba.getMode(true));
}
TEST(TestToshibaACClass, FanSpeed) {
IRToshibaAC toshiba(0);
toshiba.begin();
toshiba.setFan(TOSHIBA_AC_FAN_AUTO);
EXPECT_EQ(TOSHIBA_AC_FAN_AUTO, toshiba.getFan());
toshiba.setFan(kToshibaAcFanAuto);
EXPECT_EQ(kToshibaAcFanAuto, toshiba.getFan());
toshiba.setFan(255);
EXPECT_EQ(TOSHIBA_AC_FAN_MAX, toshiba.getFan());
EXPECT_EQ(kToshibaAcFanMax, toshiba.getFan());
toshiba.setFan(TOSHIBA_AC_FAN_MAX);
EXPECT_EQ(TOSHIBA_AC_FAN_MAX, toshiba.getFan());
toshiba.setFan(kToshibaAcFanMax);
EXPECT_EQ(kToshibaAcFanMax, toshiba.getFan());
toshiba.setFan(TOSHIBA_AC_FAN_MAX - 1);
EXPECT_EQ(TOSHIBA_AC_FAN_MAX - 1, toshiba.getFan());
toshiba.setFan(kToshibaAcFanMax - 1);
EXPECT_EQ(kToshibaAcFanMax - 1, toshiba.getFan());
toshiba.setFan(1);
EXPECT_EQ(1, toshiba.getFan());
@@ -259,56 +263,56 @@ TEST(TestToshibaACClass, FanSpeed) {
toshiba.setFan(4);
EXPECT_EQ(4, toshiba.getFan());
toshiba.setFan(TOSHIBA_AC_FAN_MAX + 1);
EXPECT_EQ(TOSHIBA_AC_FAN_MAX, toshiba.getFan());
toshiba.setFan(kToshibaAcFanMax + 1);
EXPECT_EQ(kToshibaAcFanMax, toshiba.getFan());
}
TEST(TestToshibaACClass, RawState) {
IRToshibaAC toshiba(0);
toshiba.begin();
uint8_t initial_state[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x01};
uint8_t modified_state[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0xC1, 0x00, 0xC0};
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(), TOSHIBA_AC_BITS);
EXPECT_STATE_EQ(initial_state, toshiba.getRaw(), kToshibaACBits);
EXPECT_TRUE(toshiba.getPower());
EXPECT_EQ(TOSHIBA_AC_AUTO, toshiba.getMode());
EXPECT_EQ(TOSHIBA_AC_FAN_AUTO, toshiba.getFan());
EXPECT_EQ(kToshibaAcAuto, toshiba.getMode());
EXPECT_EQ(kToshibaAcFanAuto, toshiba.getFan());
// Change some settings.
toshiba.setMode(TOSHIBA_AC_COOL);
toshiba.setFan(TOSHIBA_AC_FAN_MAX);
toshiba.setTemp(TOSHIBA_AC_MIN_TEMP);
toshiba.setMode(kToshibaAcCool);
toshiba.setFan(kToshibaAcFanMax);
toshiba.setTemp(kToshibaAcMinTemp);
// Verify those were set.
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
EXPECT_EQ(TOSHIBA_AC_FAN_MAX, toshiba.getFan());
EXPECT_EQ(TOSHIBA_AC_MIN_TEMP, toshiba.getTemp());
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(), TOSHIBA_AC_BITS);
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(TOSHIBA_AC_AUTO, toshiba.getMode());
EXPECT_EQ(TOSHIBA_AC_FAN_AUTO, toshiba.getFan());
EXPECT_STATE_EQ(initial_state, toshiba.getRaw(), TOSHIBA_AC_BITS);
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[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x01};
uint8_t modified_state[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0xC1, 0x00, 0xC0};
uint8_t invalid_state[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00};
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));
@@ -316,7 +320,7 @@ TEST(TestToshibaACClass, Checksums) {
EXPECT_EQ(0x01, IRToshibaAC::calcChecksum(initial_state));
// Use different lengths.
EXPECT_EQ(0x01, IRToshibaAC::calcChecksum(initial_state,
TOSHIBA_AC_STATE_LENGTH - 1));
kToshibaACStateLength - 1));
EXPECT_EQ(0xFF, IRToshibaAC::calcChecksum(initial_state, 3));
// Minimum length that actually means anything.
EXPECT_EQ(0xF2, IRToshibaAC::calcChecksum(initial_state, 2));
@@ -338,10 +342,10 @@ TEST(TestToshibaACClass, HumanReadableOutput) {
IRToshibaAC toshiba(0);
toshiba.begin();
uint8_t initial_state[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x01};
uint8_t modified_state[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0xC1, 0x00, 0xC0};
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)",
@@ -352,9 +356,8 @@ TEST(TestToshibaACClass, HumanReadableOutput) {
toshiba.off();
toshiba.setTemp(25);
toshiba.setFan(3);
toshiba.setMode(TOSHIBA_AC_DRY);
EXPECT_EQ("Power: Off, Mode: 2 (DRY), Temp: 25C, Fan: 3",
toshiba.toString());
toshiba.setMode(kToshibaAcDry);
EXPECT_EQ("Power: Off, Mode: 2 (DRY), Temp: 25C, Fan: 3", toshiba.toString());
}
TEST(TestToshibaACClass, MessageConstuction) {
@@ -364,13 +367,13 @@ TEST(TestToshibaACClass, MessageConstuction) {
irsend.begin();
toshiba.setFan(1);
toshiba.setMode(TOSHIBA_AC_COOL);
toshiba.setMode(kToshibaAcCool);
toshiba.setTemp(27);
toshiba.on();
// Check everything for kicks.
EXPECT_EQ(1, toshiba.getFan());
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
EXPECT_EQ(27, toshiba.getTemp());
EXPECT_TRUE(toshiba.getPower());
@@ -398,13 +401,14 @@ TEST(TestToshibaACClass, MessageConstuction) {
"m543s472m543s1623m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s1623m543s1623m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s7048", irsend.outputStr());
"m543s7048",
irsend.outputStr());
// Turn off the power and re-check.
toshiba.setPower(false);
// Check everything for kicks.
EXPECT_EQ(1, toshiba.getFan());
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
EXPECT_EQ(27, toshiba.getTemp());
EXPECT_FALSE(toshiba.getPower());
@@ -432,13 +436,14 @@ TEST(TestToshibaACClass, MessageConstuction) {
"m543s472m543s1623m543s472m543s472m543s472m543s1623m543s1623m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s1623m543s472"
"m543s7048", irsend.outputStr());
"m543s7048",
irsend.outputStr());
// Turn the power back on, and check nothing changed.
toshiba.on();
EXPECT_EQ(1, toshiba.getFan());
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
EXPECT_EQ(kToshibaAcCool, toshiba.getMode());
EXPECT_EQ(27, toshiba.getTemp());
EXPECT_TRUE(toshiba.getPower());
@@ -466,7 +471,8 @@ TEST(TestToshibaACClass, MessageConstuction) {
"m543s472m543s1623m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s1623m543s1623m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s7048", irsend.outputStr());
"m543s7048",
irsend.outputStr());
}
// Decoding a message we entirely constructed based solely on a given state.
@@ -475,15 +481,15 @@ TEST(TestDecodeToshibaAC, SyntheticExample) {
IRrecv irrecv(4);
irsend.begin();
uint8_t expectedState[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x01};
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(TOSHIBA_AC_BITS, irsend.capture.bits);
ASSERT_EQ(kToshibaACBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
}
@@ -496,163 +502,163 @@ TEST(TestDecodeToshibaAC, RealExamples) {
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};
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(TOSHIBA_AC_BITS, irsend.capture.bits);
ASSERT_EQ(kToshibaACBits, irsend.capture.bits);
toshiba.setRaw(irsend.capture.state);
EXPECT_TRUE(toshiba.getPower());
EXPECT_EQ(23, toshiba.getTemp());
EXPECT_EQ(TOSHIBA_AC_FAN_AUTO, toshiba.getFan());
EXPECT_EQ(TOSHIBA_AC_AUTO, toshiba.getMode());
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};
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(TOSHIBA_AC_BITS, irsend.capture.bits);
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(TOSHIBA_AC_COOL, toshiba.getMode());
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};
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(TOSHIBA_AC_BITS, irsend.capture.bits);
ASSERT_EQ(kToshibaACBits, irsend.capture.bits);
toshiba.setRaw(irsend.capture.state);
EXPECT_TRUE(toshiba.getPower());
EXPECT_EQ(24, toshiba.getTemp());
EXPECT_EQ(TOSHIBA_AC_FAN_MAX, toshiba.getFan());
EXPECT_EQ(TOSHIBA_AC_HEAT, toshiba.getMode());
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};
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(TOSHIBA_AC_BITS, irsend.capture.bits);
toshiba.setRaw(irsend.capture.state);
EXPECT_FALSE(toshiba.getPower());
EXPECT_EQ(22, toshiba.getTemp());
EXPECT_EQ(4, toshiba.getFan());
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(TOSHIBA_AC_HEAT, toshiba.getMode());
// 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());
}
+511
View File
@@ -0,0 +1,511 @@
// Copyright 2019 David Conran
#include "ir_Vestel.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for sendVestelAC()
// Test sending typical data only.
TEST(TestSendVestelAC, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
irsend.reset();
irsend.sendVestelAC(0x0F00D9001FEF201ULL);
EXPECT_EQ(
"m3110s9066"
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
"m520s480m520s1535m520s480m520s480m520s1535m520s1535m520s1535m520s1535"
"m520s480m520s1535m520s1535m520s1535m520s1535m520s1535m520s1535m520s1535"
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
"m520s480m520s480m520s480m520s480m520s1535m520s480m520s480m520s1535"
"m520s1535m520s480m520s1535m520s1535m520s480m520s480m520s480m520s480"
"m520s480m520s480m520s480m520s480m520s1535m520s1535m520s1535m520s1535"
"m520s100000",
irsend.outputStr());
}
// Test sending typical data with repeats.
TEST(TestSendVestelAC, SendWithRepeats) {
IRsendTest irsend(0);
irsend.begin();
irsend.reset();
irsend.sendVestelAC(0x0F00D9001FEF201ULL, kVestelACBits, 2); // two repeats.
EXPECT_EQ(
"m3110s9066"
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
"m520s480m520s1535m520s480m520s480m520s1535m520s1535m520s1535m520s1535"
"m520s480m520s1535m520s1535m520s1535m520s1535m520s1535m520s1535m520s1535"
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
"m520s480m520s480m520s480m520s480m520s1535m520s480m520s480m520s1535"
"m520s1535m520s480m520s1535m520s1535m520s480m520s480m520s480m520s480"
"m520s480m520s480m520s480m520s480m520s1535m520s1535m520s1535m520s1535"
"m520s100000"
"m3110s9066"
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
"m520s480m520s1535m520s480m520s480m520s1535m520s1535m520s1535m520s1535"
"m520s480m520s1535m520s1535m520s1535m520s1535m520s1535m520s1535m520s1535"
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
"m520s480m520s480m520s480m520s480m520s1535m520s480m520s480m520s1535"
"m520s1535m520s480m520s1535m520s1535m520s480m520s480m520s480m520s480"
"m520s480m520s480m520s480m520s480m520s1535m520s1535m520s1535m520s1535"
"m520s100000"
"m3110s9066"
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
"m520s480m520s1535m520s480m520s480m520s1535m520s1535m520s1535m520s1535"
"m520s480m520s1535m520s1535m520s1535m520s1535m520s1535m520s1535m520s1535"
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
"m520s480m520s480m520s480m520s480m520s1535m520s480m520s480m520s1535"
"m520s1535m520s480m520s1535m520s1535m520s480m520s480m520s480m520s480"
"m520s480m520s480m520s480m520s480m520s1535m520s1535m520s1535m520s1535"
"m520s100000",
irsend.outputStr());
}
// Tests for IRVestelAC class.
TEST(TestVestelACClass, Power) {
IRVestelAC ac(0);
ac.begin();
ac.setPower(true);
EXPECT_TRUE(ac.getPower());
ac.setPower(false);
EXPECT_EQ(false, ac.getPower());
ac.setPower(true);
EXPECT_TRUE(ac.getPower());
ac.off();
EXPECT_EQ(false, ac.getPower());
ac.on();
EXPECT_TRUE(ac.getPower());
EXPECT_FALSE(ac.isTimeCommand());
}
TEST(TestVestelACClass, OperatingMode) {
IRVestelAC ac(0);
ac.begin();
ac.setMode(kVestelACAuto);
EXPECT_EQ(kVestelACAuto, ac.getMode());
ac.setMode(kVestelACCool);
EXPECT_EQ(kVestelACCool, ac.getMode());
ac.setMode(kVestelACHeat);
EXPECT_EQ(kVestelACHeat, ac.getMode());
ac.setMode(kVestelACFan);
EXPECT_EQ(kVestelACFan, ac.getMode());
ac.setMode(kVestelACDry);
EXPECT_EQ(kVestelACDry, ac.getMode());
ac.setMode(kVestelACAuto - 1);
EXPECT_EQ(kVestelACAuto, ac.getMode());
ac.setMode(kVestelACCool);
EXPECT_EQ(kVestelACCool, ac.getMode());
ac.setMode(kVestelACHeat + 1);
EXPECT_EQ(kVestelACAuto, ac.getMode());
ac.setMode(255);
EXPECT_EQ(kVestelACAuto, ac.getMode());
EXPECT_FALSE(ac.isTimeCommand());
}
TEST(TestVestelACClass, Temperature) {
IRVestelAC ac(0);
ac.begin();
ac.setTemp(kVestelACMinTempC);
EXPECT_EQ(kVestelACMinTempC, ac.getTemp());
ac.setTemp(kVestelACMinTempC + 1);
EXPECT_EQ(kVestelACMinTempC + 1, ac.getTemp());
ac.setTemp(kVestelACMaxTemp);
EXPECT_EQ(kVestelACMaxTemp, ac.getTemp());
ac.setTemp(kVestelACMinTempC - 1);
EXPECT_EQ(kVestelACMinTempC, ac.getTemp());
ac.setTemp(kVestelACMaxTemp + 1);
EXPECT_EQ(kVestelACMaxTemp, ac.getTemp());
ac.setTemp(23);
EXPECT_EQ(23, ac.getTemp());
ac.setTemp(0);
EXPECT_EQ(kVestelACMinTempC, ac.getTemp());
ac.setTemp(255);
EXPECT_EQ(kVestelACMaxTemp, ac.getTemp());
EXPECT_FALSE(ac.isTimeCommand());
}
TEST(TestVestelACClass, FanSpeed) {
IRVestelAC ac(0);
ac.begin();
ac.setFan(kVestelACFanLow);
ac.setFan(kVestelACFanAuto);
EXPECT_EQ(kVestelACFanAuto, ac.getFan());
ac.setFan(kVestelACFanLow);
EXPECT_EQ(kVestelACFanLow, ac.getFan());
ac.setFan(kVestelACFanMed);
EXPECT_EQ(kVestelACFanMed, ac.getFan());
ac.setFan(kVestelACFanHigh);
EXPECT_EQ(kVestelACFanHigh, ac.getFan());
ac.setFan(kVestelACFanHigh);
EXPECT_EQ(kVestelACFanHigh, ac.getFan());
EXPECT_FALSE(ac.isTimeCommand());
}
TEST(TestVestelACClass, Swing) {
IRVestelAC ac(0);
ac.begin();
ac.setSwing(true);
EXPECT_TRUE(ac.getSwing());
ac.setSwing(false);
EXPECT_EQ(false, ac.getSwing());
ac.setSwing(true);
EXPECT_TRUE(ac.getSwing());
EXPECT_FALSE(ac.isTimeCommand());
}
TEST(TestVestelACClass, Ion) {
IRVestelAC ac(0);
ac.begin();
ac.setIon(true);
EXPECT_TRUE(ac.getIon());
ac.setIon(false);
EXPECT_EQ(false, ac.getIon());
ac.setIon(true);
EXPECT_TRUE(ac.getIon());
EXPECT_FALSE(ac.isTimeCommand());
}
TEST(TestVestelACClass, Turbo) {
IRVestelAC ac(0);
ac.begin();
ac.setTurbo(true);
EXPECT_TRUE(ac.getTurbo());
ac.setTurbo(false);
EXPECT_EQ(false, ac.getTurbo());
ac.setTurbo(true);
EXPECT_TRUE(ac.getTurbo());
EXPECT_FALSE(ac.isTimeCommand());
}
TEST(TestVestelACClass, Sleep) {
IRVestelAC ac(0);
ac.begin();
ac.setSleep(true);
EXPECT_TRUE(ac.getSleep());
ac.setSleep(false);
EXPECT_EQ(false, ac.getSleep());
ac.setSleep(true);
EXPECT_TRUE(ac.getSleep());
EXPECT_FALSE(ac.isTimeCommand());
}
TEST(TestVestelACClass, Time) {
IRVestelAC ac(0);
ac.begin();
ac.setTime(0);
EXPECT_EQ(0, ac.getTime());
EXPECT_TRUE(ac.isTimeCommand());
ac.setTime(1);
EXPECT_EQ(1, ac.getTime());
ac.setTime(1234);
EXPECT_EQ(1234, ac.getTime());
ac.setTime(23 * 60 + 59);
EXPECT_EQ(23 * 60 + 59, ac.getTime());
}
TEST(TestVestelACClass, OnTimer) {
IRVestelAC ac(0);
ac.begin();
ac.setOnTimer(0);
EXPECT_EQ(0, ac.getOnTimer());
EXPECT_TRUE(ac.isTimeCommand());
ac.setOnTimer(1);
EXPECT_EQ(0, ac.getOnTimer());
ac.setOnTimer(10);
EXPECT_EQ(10, ac.getOnTimer());
ac.setOnTimer(12 * 60 + 15); // we will round down to 10 min increments.
EXPECT_EQ(12 * 60 + 10, ac.getOnTimer());
ac.setOnTimer(23 * 60 + 50);
EXPECT_EQ(23 * 60 + 50, ac.getOnTimer());
}
TEST(TestVestelACClass, OffTimer) {
IRVestelAC ac(0);
ac.begin();
ac.setOffTimer(0);
EXPECT_EQ(0, ac.getOffTimer());
EXPECT_TRUE(ac.isTimeCommand());
ac.setOffTimer(1);
EXPECT_EQ(0, ac.getOffTimer());
ac.setOffTimer(10);
EXPECT_EQ(10, ac.getOffTimer());
ac.setOffTimer(12 * 60 + 15); // we will round down to 10 min increments.
EXPECT_EQ(12 * 60 + 10, ac.getOffTimer());
ac.setOffTimer(23 * 60 + 50);
EXPECT_EQ(23 * 60 + 50, ac.getOffTimer());
}
TEST(TestVestelACClass, Timer) {
IRVestelAC ac(0);
ac.begin();
ac.setTimer(0);
EXPECT_EQ(0, ac.getTimer());
EXPECT_EQ(0, ac.getOnTimer());
EXPECT_TRUE(ac.isTimeCommand());
ac.setTimer(10);
EXPECT_EQ(10, ac.getTimer());
EXPECT_EQ(0, ac.getOnTimer());
ac.setTimer(12 * 60 + 15); // we will round down to 10 min increments.
EXPECT_EQ(12 * 60 + 10, ac.getTimer());
EXPECT_EQ(0, ac.getOnTimer());
ac.setTimer(23 * 60 + 50);
EXPECT_EQ(23 * 60 + 50, ac.getTimer());
EXPECT_EQ(0, ac.getOnTimer());
}
TEST(TestVestelACClass, MessageConstuction) {
IRVestelAC ac(0);
EXPECT_EQ(
"Power: On, Mode: 0 (AUTO), Temp: 25C, Fan: 13 (AUTO HOT), Sleep: Off, "
"Turbo: Off, Ion: Off, Swing: Off",
ac.toString());
ac.setMode(kVestelACCool);
ac.setTemp(21);
ac.setFan(kVestelACFanHigh);
EXPECT_FALSE(ac.isTimeCommand());
EXPECT_EQ(
"Power: On, Mode: 1 (COOL), Temp: 21C, Fan: 11 (HIGH), Sleep: Off, "
"Turbo: Off, Ion: Off, Swing: Off",
ac.toString());
ac.setSwing(true);
ac.setIon(true);
ac.setTurbo(true);
EXPECT_FALSE(ac.isTimeCommand());
EXPECT_EQ(
"Power: On, Mode: 1 (COOL), Temp: 21C, Fan: 11 (HIGH), Sleep: Off, "
"Turbo: On, Ion: On, Swing: On",
ac.toString());
// Now change a few already set things.
ac.setSleep(true);
ac.setMode(kVestelACHeat);
EXPECT_EQ(
"Power: On, Mode: 4 (HEAT), Temp: 21C, Fan: 11 (HIGH), Sleep: On, "
"Turbo: Off, Ion: On, Swing: On",
ac.toString());
EXPECT_FALSE(ac.isTimeCommand());
ac.setTemp(25);
ac.setPower(false);
EXPECT_EQ(
"Power: Off, Mode: 4 (HEAT), Temp: 25C, Fan: 11 (HIGH), Sleep: On, "
"Turbo: Off, Ion: On, Swing: On",
ac.toString());
EXPECT_FALSE(ac.isTimeCommand());
// Check that the checksum is valid.
EXPECT_TRUE(IRVestelAC::validChecksum(ac.getRaw()));
ac.setTime(23 * 60 + 59);
EXPECT_TRUE(ac.isTimeCommand());
EXPECT_EQ(
"Time: 23:59, Timer: Off, On Timer: Off, Off Timer: Off",
ac.toString());
ac.setTimer(8 * 60 + 0);
EXPECT_TRUE(ac.isTimeCommand());
EXPECT_EQ(
"Time: 23:59, Timer: 8:00, On Timer: Off, Off Timer: Off",
ac.toString());
ac.setOnTimer(7 * 60 + 40);
EXPECT_EQ(
"Time: 23:59, Timer: Off, On Timer: 7:40, Off Timer: Off",
ac.toString());
ac.setOffTimer(17 * 60 + 10);
EXPECT_EQ(
"Time: 23:59, Timer: Off, On Timer: 7:40, Off Timer: 17:10",
ac.toString());
ac.setTimer(8 * 60 + 0);
EXPECT_EQ(
"Time: 23:59, Timer: 8:00, On Timer: Off, Off Timer: Off",
ac.toString());
ac.setTimer(0);
EXPECT_EQ(
"Time: 23:59, Timer: Off, On Timer: Off, Off Timer: Off",
ac.toString());
ac.on();
EXPECT_FALSE(ac.isTimeCommand());
EXPECT_EQ(
"Power: On, Mode: 4 (HEAT), Temp: 25C, Fan: 11 (HIGH), Sleep: On, "
"Turbo: Off, Ion: On, Swing: On",
ac.toString());
}
// Tests for decodeVestelAC().
// Decode normal "synthetic" messages.
TEST(TestDecodeVestelAC, NormalDecodeWithStrict) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// With the specific decoder.
uint64_t expectedState = 0x0F00D9001FEF201ULL;
irsend.reset();
irsend.sendVestelAC(expectedState);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeVestelAC(&irsend.capture, kVestelACBits, true));
EXPECT_EQ(VESTEL_AC, irsend.capture.decode_type);
EXPECT_EQ(kVestelACBits, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_EQ(expectedState, irsend.capture.value);
EXPECT_EQ(0, irsend.capture.address);
EXPECT_EQ(0, irsend.capture.command);
// With the all the decoders.
irsend.reset();
irsend.sendVestelAC(expectedState);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(VESTEL_AC, irsend.capture.decode_type);
EXPECT_EQ(kVestelACBits, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_EQ(expectedState, irsend.capture.value);
EXPECT_EQ(0, irsend.capture.address);
EXPECT_EQ(0, irsend.capture.command);
IRVestelAC ac(0);
ac.begin();
ac.setRaw(irsend.capture.value);
EXPECT_EQ(
"Power: On, Mode: 0 (AUTO), Temp: 25C, Fan: 13 (AUTO HOT), Sleep: Off, "
"Turbo: Off, Ion: Off, Swing: Off",
ac.toString());
}
// Decode a real message from Raw Data.
TEST(TestDecodeVestelAC, RealNormalExample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
IRVestelAC ac(0);
irsend.begin();
uint16_t rawData[115] = {
3098, 9080, 548, 1538, 526, 492, 526, 468, 524, 468, 526, 468,
550, 466, 526, 466, 526, 504, 540, 466, 526, 1538, 526, 466,
526, 466, 552, 1540, 522, 466, 526, 492, 526, 544, 526, 1536,
526, 1536, 552, 1536, 526, 1536, 552, 1536, 552, 1536, 526, 1536,
526, 1574, 542, 1536, 526, 492, 526, 466, 526, 494, 524, 468,
524, 468, 526, 492, 526, 502, 540, 468, 524, 494, 524, 468,
526, 468, 524, 468, 526, 492, 526, 468, 524, 520, 524, 1538,
524, 468, 524, 468, 524, 468, 524, 468, 524, 468, 524, 1538,
524, 506, 538, 468, 524, 468, 524, 1538, 524, 468, 550, 1538,
550, 1538, 524, 1538, 534, 1528, 544}; // VESTEL_AC
irsend.reset();
irsend.sendRaw(rawData, 115, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(VESTEL_AC, irsend.capture.decode_type);
EXPECT_EQ(kVestelACBits, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_EQ(0xF4410001FF1201ULL, irsend.capture.value);
EXPECT_EQ(0, irsend.capture.address);
EXPECT_EQ(0, irsend.capture.command);
ac.begin();
ac.setRaw(irsend.capture.value);
EXPECT_EQ(
"Power: On, Mode: 4 (HEAT), Temp: 16C, Fan: 1 (AUTO), Sleep: Off, "
"Turbo: Off, Ion: On, Swing: Off",
ac.toString());
}
TEST(TestDecodeVestelAC, RealTimerExample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
IRVestelAC ac(0);
irsend.begin();
uint16_t rawData[115] = {
3022, 9080, 546, 1536, 526, 466, 526, 492, 526, 468, 526, 492,
524, 468, 524, 494, 524, 504, 540, 492, 524, 1538, 526, 468,
524, 492, 526, 466, 552, 1536, 526, 1536, 526, 1570, 542, 492,
524, 1538, 550, 1538, 524, 1536, 526, 494, 524, 466, 526, 468,
524, 1574, 540, 1536, 550, 1536, 526, 468, 550, 1536, 526, 492,
526, 468, 524, 492, 526, 518, 526, 1536, 552, 1536, 550, 1536,
526, 494, 550, 1538, 526, 492, 524, 1538, 526, 504, 540, 466,
526, 1536, 526, 1536, 526, 468, 550, 1538, 524, 468, 524, 1538,
550, 1574, 540, 468, 550, 1538, 526, 492, 524, 468, 526, 466,
526, 468, 524, 494, 524, 468, 546}; // VESTEL_AC 2D6570B8EE201
irsend.reset();
irsend.sendRaw(rawData, 115, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(VESTEL_AC, irsend.capture.decode_type);
EXPECT_EQ(kVestelACBits, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_EQ(0x2D6570B8EE201ULL, irsend.capture.value);
EXPECT_EQ(0, irsend.capture.address);
EXPECT_EQ(0, irsend.capture.command);
ac.begin();
ac.setRaw(irsend.capture.value);
EXPECT_EQ(
"Time: 5:45, Timer: Off, On Timer: 14:00, Off Timer: 23:00",
ac.toString());
}
// General housekeeping
TEST(TestDecodeVestelAC, Housekeeping) {
ASSERT_EQ("VESTEL_AC", typeToString(VESTEL_AC));
ASSERT_FALSE(hasACState(VESTEL_AC)); // Uses uint64_t, not uint8_t*.
}
@@ -0,0 +1,584 @@
// Copyright 2018 David Conran
#include "ir_Whirlpool.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for sendWhirlpoolAC().
// Test sending typical data only.
TEST(TestSendWhirlpoolAC, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
uint8_t data[kWhirlpoolAcStateLength] = {
0x83, 0x06, 0x10, 0x71, 0x00, 0x00, 0x91, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0xEF, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02};
irsend.sendWhirlpoolAC(data);
EXPECT_EQ(
"m8950s4484"
"m597s1649m597s1649m597s533m597s533m597s533m597s533m597s533m597s1649"
"m597s533m597s1649m597s1649m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s533m597s533m597s533m597s1649m597s533m597s533m597s533"
"m597s1649m597s533m597s533m597s533m597s1649m597s1649m597s1649m597s533"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s7920"
"m597s1649m597s533m597s533m597s533m597s1649m597s533m597s533m597s1649"
"m597s1649m597s1649m597s1649m597s1649m597s1649m597s533m597s533m597s533"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s1649m597s1649m597s1649m597s1649m597s533m597s1649m597s1649m597s1649"
"m597s7920"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s1649m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s533m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s533m597s1649m597s533m597s533m597s533m597s533m597s533m597s533"
"m597s100000",
irsend.outputStr());
}
// Tests for decodeWhirlpoolAC().
// Decode normal WhirlpoolAC messages.
TEST(TestDecodeWhirlpoolAC, SyntheticDecode) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Synthesised Normal WhirlpoolAC message.
irsend.reset();
uint8_t expectedState[kWhirlpoolAcStateLength] = {
0x83, 0x06, 0x10, 0x71, 0x00, 0x00, 0x91, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0xEF, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02};
irsend.sendWhirlpoolAC(expectedState);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(WHIRLPOOL_AC, irsend.capture.decode_type);
EXPECT_EQ(kWhirlpoolAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRWhirlpoolAc ac(0);
ac.setRaw(irsend.capture.state);
EXPECT_EQ(
"Model: 1 (DG11J13A), Power toggle: Off, Mode: 1 (AUTO), Temp: 25C, "
"Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 17:31, On Timer: Off, "
"Off Timer: Off, Sleep: Off, Super: Off, Command: 2 (TEMP)",
ac.toString());
}
TEST(TestDecodeWhirlpoolAC, Real26CFanAutoCoolingSwingOnClock1918) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
uint8_t expectedState[kWhirlpoolAcStateLength] = {
0x83, 0x06, 0x80, 0x82, 0x00, 0x00, 0x93, 0x12, 0x40, 0x00, 0x00,
0x00, 0x00, 0xC3, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07};
irsend.sendWhirlpoolAC(expectedState);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(WHIRLPOOL_AC, irsend.capture.decode_type);
EXPECT_EQ(kWhirlpoolAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRWhirlpoolAc ac(0);
ac.setRaw(irsend.capture.state);
EXPECT_EQ(
"Model: 1 (DG11J13A), Power toggle: Off, Mode: 2 (COOL), Temp: 26C, "
"Fan: 0 (AUTO), Swing: On, Light: On, Clock: 19:18, On Timer: Off, "
"Off Timer: Off, Sleep: Off, Super: Off, Command: 7 (SWING)",
ac.toString());
}
TEST(TestDecodeWhirlpoolAC, RealTimerExample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
// Dehumidify timer on 7:40 off 8:05
uint16_t rawData[343] = {
9092, 4556, 604, 1664, 604, 1674, 630, 514, 630, 518, 628, 522,
604, 550, 628, 530, 602, 1680, 630, 508, 630, 1644, 604, 1674,
604, 544, 604, 548, 630, 524, 604, 554, 620, 530, 630, 506,
602, 538, 602, 542, 604, 542, 604, 546, 630, 524, 602, 556,
628, 518, 604, 1666, 632, 1644, 604, 540, 602, 546, 604, 1680,
604, 1684, 604, 1686, 630, 520, 602, 534, 606, 538, 602, 540,
604, 544, 604, 548, 602, 552, 630, 528, 602, 546, 602, 536,
628, 510, 606, 540, 604, 544, 630, 522, 604, 554, 600, 554,
602, 528, 602, 8032, 604, 1666, 604, 1668, 602, 1676, 630, 518,
630, 520, 602, 550, 604, 554, 604, 1678, 630, 1640, 602, 1672,
602, 542, 602, 544, 628, 522, 630, 1658, 604, 554, 628, 1652,
630, 508, 602, 538, 630, 514, 630, 1652, 602, 546, 604, 550,
602, 554, 602, 546, 630, 1638, 604, 536, 630, 1646, 602, 544,
628, 522, 632, 524, 628, 528, 602, 1686, 594, 1666, 604, 1670,
602, 1674, 632, 516, 604, 546, 638, 518, 622, 534, 628, 518,
604, 532, 604, 536, 600, 550, 622, 1652, 630, 520, 602, 1684,
602, 554, 602, 544, 630, 506, 628, 512, 602, 540, 628, 518,
602, 550, 602, 552, 604, 554, 602, 544, 628, 1642, 602, 536,
632, 1646, 630, 516, 602, 1680, 630, 1656, 604, 1688, 602, 1660,
602, 8030, 604, 532, 604, 536, 604, 540, 602, 544, 628, 522,
602, 552, 602, 556, 602, 544, 602, 1666, 630, 510, 602, 1674,
604, 544, 628, 522, 602, 552, 630, 526, 628, 520, 602, 534,
630, 510, 604, 540, 602, 544, 606, 544, 604, 550, 604, 554,
602, 544, 604, 534, 602, 538, 602, 542, 604, 542, 604, 546,
604, 550, 632, 526, 604, 544, 630, 506, 604, 536, 604, 540,
628, 518, 602, 548, 604, 550, 604, 552, 630, 516, 602, 534,
604, 536, 630, 512, 604, 544, 602, 548, 630, 524, 602, 554,
602, 542, 604, 1666, 606, 532, 630, 1644, 602, 544, 630, 520,
604, 550, 604, 554, 602, 526, 598};
uint8_t expectedState[kWhirlpoolAcStateLength] = {
0x83, 0x06, 0x00, 0x73, 0x00, 0x00, 0x87, 0xA3, 0x08, 0x85, 0x07,
0x28, 0x00, 0xF5, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x05};
irsend.sendRaw(rawData, 343, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(WHIRLPOOL_AC, irsend.capture.decode_type);
EXPECT_EQ(kWhirlpoolAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRWhirlpoolAc ac(0);
ac.setRaw(irsend.capture.state);
EXPECT_EQ(
"Model: 1 (DG11J13A), Power toggle: Off, Mode: 3 (DRY), Temp: 25C, "
"Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 07:35, On Timer: 07:40, "
"Off Timer: 08:05, Sleep: Off, Super: Off, Command: 5 (ONTIMER)",
ac.toString());
}
// Decode a recorded example
TEST(TestDecodeWhirlpoolAC, RealExampleDecode) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Real WhirlpoolAC message.
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/509
uint16_t rawData[343] = {
8950, 4484, 598, 1642, 598, 1646, 594, 534, 594, 538, 602, 532,
598, 540, 600, 542, 598, 1650, 600, 522, 598, 1644, 596, 1650,
600, 532, 598, 538, 602, 536, 594, 548, 592, 538, 602, 518,
600, 524, 596, 532, 598, 532, 598, 1654, 596, 544, 596, 544,
596, 536, 594, 1644, 596, 528, 600, 528, 592, 538, 602, 1648,
602, 1654, 596, 1664, 598, 534, 594, 526, 594, 530, 598, 528,
602, 530, 600, 534, 596, 542, 598, 542, 598, 534, 596, 526,
594, 530, 600, 528, 602, 530, 600, 534, 596, 542, 598, 544,
596, 518, 602, 7916, 598, 1642, 598, 528, 600, 528, 602, 530,
600, 1652, 598, 542, 598, 544, 596, 1654, 596, 1644, 596, 1648,
602, 1644, 596, 1654, 596, 1656, 604, 536, 594, 548, 602, 528,
600, 520, 600, 524, 596, 532, 598, 532, 596, 538, 602, 536,
594, 546, 594, 538, 602, 518, 600, 524, 596, 532, 598, 532,
598, 536, 594, 544, 596, 544, 596, 536, 594, 526, 592, 530,
600, 528, 600, 530, 602, 532, 596, 542, 598, 542, 598, 534,
596, 524, 596, 528, 600, 526, 592, 538, 592, 542, 598, 540,
600, 540, 600, 530, 598, 522, 598, 526, 594, 534, 596, 534,
594, 540, 602, 536, 592, 548, 592, 538, 600, 1636, 594, 1648,
602, 1642, 598, 1652, 598, 538, 602, 1680, 570, 1662, 598, 1634,
596, 7924, 600, 520, 598, 526, 592, 534, 596, 534, 596, 540,
600, 536, 604, 538, 602, 530, 600, 520, 598, 1640, 600, 528,
600, 530, 600, 534, 594, 544, 596, 544, 596, 534, 596, 526,
594, 528, 600, 526, 594, 536, 592, 542, 598, 538, 602, 538,
602, 528, 600, 520, 600, 524, 596, 530, 600, 532, 598, 534,
596, 542, 598, 542, 598, 532, 598, 524, 596, 528, 602, 526,
594, 536, 594, 540, 600, 536, 594, 548, 592, 538, 602, 518,
602, 522, 596, 530, 600, 530, 600, 534, 596, 542, 598, 544,
596, 534, 596, 524, 594, 1644, 596, 532, 596, 534, 596, 538,
602, 536, 594, 546, 594, 520, 600};
uint8_t expectedState[kWhirlpoolAcStateLength] = {
0x83, 0x06, 0x10, 0x71, 0x00, 0x00, 0x91, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0xEF, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02};
irsend.reset();
irsend.sendRaw(rawData, 343, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(WHIRLPOOL_AC, irsend.capture.decode_type);
EXPECT_EQ(kWhirlpoolAcBits, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRWhirlpoolAc ac(0);
ac.setRaw(irsend.capture.state);
EXPECT_EQ(
"Model: 1 (DG11J13A), Power toggle: Off, Mode: 1 (AUTO), Temp: 25C, "
"Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 17:31, On Timer: Off, "
"Off Timer: Off, Sleep: Off, Super: Off, Command: 2 (TEMP)",
ac.toString());
}
// Tests for IRWhirlpoolAc class.
TEST(TestIRWhirlpoolAcClass, SetAndGetRaw) {
uint8_t expectedState[kWhirlpoolAcStateLength] = {
0x83, 0x06, 0x10, 0x71, 0x00, 0x00, 0x91, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0xEF, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02};
IRWhirlpoolAc ac(0);
ac.setRaw(expectedState);
EXPECT_STATE_EQ(expectedState, ac.getRaw(), kWhirlpoolAcBits);
}
TEST(TestIRWhirlpoolAcClass, SetAndGetTemp) {
IRWhirlpoolAc ac(0);
ac.setCommand(0); // Clear the previous command.
ac.setModel(DG11J13A);
ac.setTemp(25);
EXPECT_EQ(25, ac.getTemp());
EXPECT_EQ(kWhirlpoolAcCommandTemp, ac.getCommand());
ac.setTemp(kWhirlpoolAcMinTemp);
EXPECT_EQ(kWhirlpoolAcMinTemp, ac.getTemp());
ac.setTemp(kWhirlpoolAcMinTemp - 1);
EXPECT_EQ(kWhirlpoolAcMinTemp, ac.getTemp());
ac.setTemp(kWhirlpoolAcMaxTemp);
EXPECT_EQ(kWhirlpoolAcMaxTemp, ac.getTemp());
ac.setTemp(kWhirlpoolAcMaxTemp + 1);
EXPECT_EQ(kWhirlpoolAcMaxTemp, ac.getTemp());
ac.setModel(DG11J191); // Has a -2 offset on min/max temps.
ac.setTemp(25);
EXPECT_EQ(25, ac.getTemp());
EXPECT_EQ(kWhirlpoolAcCommandTemp, ac.getCommand());
ac.setTemp(kWhirlpoolAcMinTemp - 2);
EXPECT_EQ(kWhirlpoolAcMinTemp - 2, ac.getTemp());
ac.setTemp(kWhirlpoolAcMinTemp - 2 - 1);
EXPECT_EQ(kWhirlpoolAcMinTemp - 2 , ac.getTemp());
ac.setTemp(kWhirlpoolAcMaxTemp - 2);
EXPECT_EQ(kWhirlpoolAcMaxTemp - 2, ac.getTemp());
ac.setTemp(kWhirlpoolAcMaxTemp - 2 + 1);
EXPECT_EQ(kWhirlpoolAcMaxTemp - 2, ac.getTemp());
}
TEST(TestIRWhirlpoolAcClass, SetAndGetMode) {
IRWhirlpoolAc ac(0);
ac.setCommand(0); // Clear the previous command.
ac.setMode(kWhirlpoolAcCool);
EXPECT_EQ(kWhirlpoolAcCool, ac.getMode());
EXPECT_EQ(kWhirlpoolAcCommandMode, ac.getCommand());
ac.setMode(kWhirlpoolAcHeat);
EXPECT_EQ(kWhirlpoolAcHeat, ac.getMode());
ac.setMode(kWhirlpoolAcAuto);
EXPECT_EQ(kWhirlpoolAcAuto, ac.getMode());
EXPECT_EQ(kWhirlpoolAcCommand6thSense, ac.getCommand());
ac.setMode(kWhirlpoolAcDry);
EXPECT_EQ(kWhirlpoolAcDry, ac.getMode());
EXPECT_EQ(kWhirlpoolAcCommandMode, ac.getCommand());
}
TEST(TestIRWhirlpoolAcClass, SetAndGetFan) {
IRWhirlpoolAc ac(0);
ac.setCommand(0); // Clear the previous command.
ac.setFan(kWhirlpoolAcFanAuto);
EXPECT_EQ(kWhirlpoolAcFanAuto, ac.getFan());
EXPECT_EQ(kWhirlpoolAcCommandFanSpeed, ac.getCommand());
ac.setFan(kWhirlpoolAcFanLow);
EXPECT_EQ(kWhirlpoolAcFanLow, ac.getFan());
ac.setFan(kWhirlpoolAcFanMedium);
EXPECT_EQ(kWhirlpoolAcFanMedium, ac.getFan());
ac.setFan(kWhirlpoolAcFanHigh);
EXPECT_EQ(kWhirlpoolAcFanHigh, ac.getFan());
ac.setFan(kWhirlpoolAcFanAuto);
EXPECT_EQ(kWhirlpoolAcFanAuto, ac.getFan());
// Known state with a non-auto fan mode.
const uint8_t state[21] = {0x83, 0x06, 0x0B, 0x82, 0x00, 0x00, 0x93,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E,
0x00, 0x03, 0x00, 0x00, 0x08, 0x00, 0x0B};
ac.setRaw(state);
EXPECT_EQ(kWhirlpoolAcFanLow, ac.getFan());
}
TEST(TestIRWhirlpoolAcClass, SetAndGetSwing) {
IRWhirlpoolAc ac(0);
ac.setCommand(0); // Clear the previous command.
ac.setSwing(true);
EXPECT_TRUE(ac.getSwing());
EXPECT_EQ(kWhirlpoolAcCommandSwing, ac.getCommand());
ac.setSwing(false);
EXPECT_FALSE(ac.getSwing());
ac.setSwing(true);
EXPECT_TRUE(ac.getSwing());
}
TEST(TestIRWhirlpoolAcClass, SetAndGetLight) {
IRWhirlpoolAc ac(0);
ac.setCommand(0); // Clear the previous command.
ac.setLight(true);
EXPECT_TRUE(ac.getLight());
ac.setLight(false);
EXPECT_FALSE(ac.getLight());
ac.setLight(true);
EXPECT_TRUE(ac.getLight());
}
TEST(TestIRWhirlpoolAcClass, SetAndGetClock) {
IRWhirlpoolAc ac(0);
ac.setClock(0);
EXPECT_EQ(0, ac.getClock());
EXPECT_EQ("00:00", ac.timeToString(ac.getClock()));
ac.setClock(1);
EXPECT_EQ(1, ac.getClock());
EXPECT_EQ("00:01", ac.timeToString(ac.getClock()));
ac.setClock(12 * 60 + 34);
EXPECT_EQ(12 * 60 + 34, ac.getClock());
EXPECT_EQ("12:34", ac.timeToString(ac.getClock()));
ac.setClock(7 * 60 + 5);
EXPECT_EQ(7 * 60 + 5, ac.getClock());
EXPECT_EQ("07:05", ac.timeToString(ac.getClock()));
ac.setClock(23 * 60 + 59);
EXPECT_EQ(23 * 60 + 59, ac.getClock());
EXPECT_EQ("23:59", ac.timeToString(ac.getClock()));
ac.setClock(24 * 60 + 0);
EXPECT_EQ(0, ac.getClock());
EXPECT_EQ("00:00", ac.timeToString(ac.getClock()));
ac.setClock(25 * 60 + 23);
EXPECT_EQ(1 * 60 + 23, ac.getClock());
EXPECT_EQ("01:23", ac.timeToString(ac.getClock()));
}
TEST(TestIRWhirlpoolAcClass, OnOffTimers) {
IRWhirlpoolAc ac(0);
ac.setCommand(0); // Clear the previous command.
// On Timer
ac.enableOnTimer(false);
ac.setOnTimer(0);
EXPECT_EQ(0, ac.getOnTimer());
EXPECT_EQ("00:00", ac.timeToString(ac.getOnTimer()));
EXPECT_FALSE(ac.isOnTimerEnabled());
EXPECT_EQ(kWhirlpoolAcCommandOnTimer, ac.getCommand());
ac.setOnTimer(1);
EXPECT_EQ(1, ac.getOnTimer());
EXPECT_EQ("00:01", ac.timeToString(ac.getOnTimer()));
ac.enableOnTimer(true);
ac.setOnTimer(12 * 60 + 34);
EXPECT_EQ(12 * 60 + 34, ac.getOnTimer());
EXPECT_EQ("12:34", ac.timeToString(ac.getOnTimer()));
EXPECT_TRUE(ac.isOnTimerEnabled());
ac.setOnTimer(7 * 60 + 5);
EXPECT_EQ(7 * 60 + 5, ac.getOnTimer());
EXPECT_EQ("07:05", ac.timeToString(ac.getOnTimer()));
ac.setOnTimer(23 * 60 + 59);
EXPECT_EQ(23 * 60 + 59, ac.getOnTimer());
EXPECT_EQ("23:59", ac.timeToString(ac.getOnTimer()));
ac.setOnTimer(24 * 60 + 0);
EXPECT_EQ(0, ac.getOnTimer());
EXPECT_EQ("00:00", ac.timeToString(ac.getOnTimer()));
ac.setOnTimer(25 * 60 + 23);
EXPECT_EQ(1 * 60 + 23, ac.getOnTimer());
EXPECT_EQ("01:23", ac.timeToString(ac.getOnTimer()));
// Off Timer
ac.enableOffTimer(false);
ac.setOffTimer(0);
EXPECT_EQ(0, ac.getOffTimer());
EXPECT_EQ("00:00", ac.timeToString(ac.getOffTimer()));
EXPECT_FALSE(ac.isOffTimerEnabled());
EXPECT_EQ(kWhirlpoolAcCommandOffTimer, ac.getCommand());
ac.setOffTimer(1);
EXPECT_EQ(1, ac.getOffTimer());
EXPECT_EQ("00:01", ac.timeToString(ac.getOffTimer()));
ac.enableOffTimer(true);
ac.setOffTimer(12 * 60 + 34);
EXPECT_EQ(12 * 60 + 34, ac.getOffTimer());
EXPECT_EQ("12:34", ac.timeToString(ac.getOffTimer()));
EXPECT_TRUE(ac.isOffTimerEnabled());
ac.setOffTimer(7 * 60 + 5);
EXPECT_EQ(7 * 60 + 5, ac.getOffTimer());
EXPECT_EQ("07:05", ac.timeToString(ac.getOffTimer()));
ac.setOffTimer(23 * 60 + 59);
EXPECT_EQ(23 * 60 + 59, ac.getOffTimer());
EXPECT_EQ("23:59", ac.timeToString(ac.getOffTimer()));
ac.setOffTimer(24 * 60 + 0);
EXPECT_EQ(0, ac.getOffTimer());
EXPECT_EQ("00:00", ac.timeToString(ac.getOffTimer()));
ac.setOffTimer(25 * 60 + 23);
EXPECT_EQ(1 * 60 + 23, ac.getOffTimer());
EXPECT_EQ("01:23", ac.timeToString(ac.getOffTimer()));
}
TEST(TestIRWhirlpoolAcClass, SetAndGetCommand) {
IRWhirlpoolAc ac(0);
ac.setCommand(0);
EXPECT_EQ(0, ac.getCommand());
ac.setCommand(kWhirlpoolAcCommandFanSpeed);
EXPECT_EQ(kWhirlpoolAcCommandFanSpeed, ac.getCommand());
ac.setCommand(255);
EXPECT_EQ(255, ac.getCommand());
}
TEST(TestIRWhirlpoolAcClass, SetAndGetPowerToggle) {
IRWhirlpoolAc ac(0);
ac.setCommand(0);
ac.setPowerToggle(false);
EXPECT_FALSE(ac.getPowerToggle());
ac.setPowerToggle(true);
EXPECT_TRUE(ac.getPowerToggle());
ac.setPowerToggle(false);
EXPECT_FALSE(ac.getPowerToggle());
// Known state with a power toggle in it.
uint8_t state[21] = {0x83, 0x06, 0x07, 0x82, 0x00, 0x00, 0x93,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x09};
ac.setRaw(state);
EXPECT_TRUE(ac.getPowerToggle());
}
TEST(TestIRWhirlpoolAcClass, SetAndGetModel) {
IRWhirlpoolAc ac(0);
ac.setTemp(19);
ac.setCommand(0); // Set model shouldn't change the command setting.
ac.setModel(DG11J191);
EXPECT_EQ(DG11J191, ac.getModel());
EXPECT_EQ(19, ac.getTemp());
EXPECT_EQ(0, ac.getCommand());
ac.setModel(DG11J13A);
EXPECT_EQ(DG11J13A, ac.getModel());
EXPECT_EQ(19, ac.getTemp());
ac.setModel(DG11J191);
EXPECT_EQ(DG11J191, ac.getModel());
EXPECT_EQ(19, ac.getTemp());
EXPECT_EQ(0, ac.getCommand());
// One of the models has a lower min temp. Check that desired temp is kept.
ac.setTemp(16);
ac.setCommand(0); // Set model shouldn't change the command setting.
EXPECT_EQ(16, ac.getTemp());
EXPECT_EQ(0, ac.getCommand());
ac.setModel(DG11J13A);
EXPECT_EQ(DG11J13A, ac.getModel());
EXPECT_EQ(18, ac.getTemp());
ac.setModel(DG11J191);
EXPECT_EQ(DG11J191, ac.getModel());
EXPECT_EQ(16, ac.getTemp());
EXPECT_EQ(0, ac.getCommand());
// Known states with different models.
uint8_t state_1[21] = {0x83, 0x06, 0x01, 0x30, 0x00, 0x00, 0x92,
0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95,
0x00, 0x02, 0x00, 0x00, 0x08, 0x00, 0x0A};
uint8_t state_2[21] = {0x83, 0x06, 0x00, 0x30, 0x00, 0x00, 0x8B,
0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E,
0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02};
ac.setRaw(state_1);
EXPECT_EQ(DG11J191, ac.getModel());
ac.setRaw(state_2);
EXPECT_EQ(DG11J13A, ac.getModel());
}
TEST(TestIRWhirlpoolAcClass, SetAndGetSleep) {
IRWhirlpoolAc ac(0);
ac.setFan(kWhirlpoolAcFanAuto);
ac.setCommand(0);
ac.setSleep(false);
EXPECT_FALSE(ac.getSleep());
EXPECT_EQ(kWhirlpoolAcCommandSleep, ac.getCommand());
ac.setSleep(true);
EXPECT_TRUE(ac.getSleep());
EXPECT_EQ(kWhirlpoolAcCommandSleep, ac.getCommand());
EXPECT_EQ(kWhirlpoolAcFanLow, ac.getFan());
ac.setSleep(false);
EXPECT_FALSE(ac.getSleep());
// Known state with sleep mode in it.
uint8_t state[21] = {0x83, 0x06, 0x0B, 0x73, 0x00, 0x00, 0x90,
0x9E, 0x00, 0xA0, 0x17, 0x3A, 0x00, 0xFB,
0x00, 0x03, 0x00, 0x00, 0x08, 0x00, 0x0B};
ac.setRaw(state);
EXPECT_TRUE(ac.getSleep());
}
TEST(TestIRWhirlpoolAcClass, SetAndGetSuper) {
IRWhirlpoolAc ac(0);
ac.setFan(kWhirlpoolAcFanAuto);
ac.setMode(kWhirlpoolAcDry);
ac.setCommand(0);
ac.setSuper(false);
EXPECT_FALSE(ac.getSuper());
EXPECT_EQ(kWhirlpoolAcCommandSuper, ac.getCommand());
ac.setSuper(true);
EXPECT_TRUE(ac.getSuper());
EXPECT_EQ(kWhirlpoolAcCommandSuper, ac.getCommand());
EXPECT_EQ(kWhirlpoolAcFanHigh, ac.getFan());
EXPECT_EQ(kWhirlpoolAcCool, ac.getMode());
EXPECT_EQ(kWhirlpoolAcMinTemp, ac.getTemp());
ac.setSuper(false);
EXPECT_FALSE(ac.getSuper());
EXPECT_EQ(kWhirlpoolAcFanHigh, ac.getFan());
EXPECT_EQ(kWhirlpoolAcCool, ac.getMode());
EXPECT_EQ(kWhirlpoolAcMinTemp, ac.getTemp());
// When in heat mode, it should stay in heat mode.
ac.setFan(kWhirlpoolAcFanAuto);
ac.setMode(kWhirlpoolAcHeat);
ac.setSuper(true);
EXPECT_TRUE(ac.getSuper());
EXPECT_EQ(kWhirlpoolAcCommandSuper, ac.getCommand());
EXPECT_EQ(kWhirlpoolAcFanHigh, ac.getFan());
EXPECT_EQ(kWhirlpoolAcHeat, ac.getMode());
EXPECT_EQ(kWhirlpoolAcMaxTemp, ac.getTemp());
// Changing mode/temp/fan/power should cancel super,
ac.setMode(kWhirlpoolAcCool);
EXPECT_FALSE(ac.getSuper());
ac.setSuper(true);
ac.setTemp(25);
EXPECT_FALSE(ac.getSuper());
ac.setSuper(true);
ac.setFan(kWhirlpoolAcFanMedium);
EXPECT_FALSE(ac.getSuper());
ac.setSuper(true);
ac.setPowerToggle(true);
EXPECT_FALSE(ac.getSuper());
// Known state with Super mode in it.
uint8_t state[21] = {0x83, 0x06, 0x01, 0x02, 0x00, 0x90, 0x90,
0x9F, 0x00, 0xA0, 0x17, 0x3A, 0x00, 0x11,
0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x0C};
ac.setRaw(state);
EXPECT_TRUE(ac.getSuper());
}
// Build a known good message from scratch.
TEST(TestIRWhirlpoolAcClass, MessageConstruction) {
// Real example captured from a remote. (ref: RealTimerExample)
uint8_t expectedState[kWhirlpoolAcStateLength] = {
0x83, 0x06, 0x00, 0x73, 0x00, 0x00, 0x87, 0xA3, 0x08, 0x85, 0x07,
0x28, 0x00, 0xF5, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x05};
IRWhirlpoolAc ac(0);
ac.setModel(DG11J13A);
ac.setTemp(25);
ac.setPowerToggle(false);
ac.setMode(kWhirlpoolAcDry);
ac.setFan(kWhirlpoolAcFanAuto);
ac.setSwing(false);
ac.setLight(true);
ac.setClock(7 * 60 + 35);
ac.setOnTimer(7 * 60 + 40);
ac.setOffTimer(8 * 60 + 5);
ac.enableOffTimer(true);
ac.setSleep(false);
ac.setSuper(false);
ac.enableOnTimer(true);
EXPECT_EQ(
"Model: 1 (DG11J13A), Power toggle: Off, Mode: 3 (DRY), Temp: 25C, "
"Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 07:35, On Timer: 07:40, "
"Off Timer: 08:05, Sleep: Off, Super: Off, Command: 5 (ONTIMER)",
ac.toString());
EXPECT_STATE_EQ(expectedState, ac.getRaw(), kWhirlpoolAcBits);
}
+37 -28
View File
@@ -19,7 +19,8 @@ TEST(TestSendWhynter, SendDataOnly) {
"m750s750m750s750m750s750m750s750m750s750m750s750m750s750m750s750"
"m750s750m750s750m750s750m750s750m750s750m750s750m750s750m750s750"
"m750s750m750s750m750s750m750s750m750s750m750s750m750s750m750s750"
"m750s52050", irsend.outputStr());
"m750s52050",
irsend.outputStr());
irsend.reset();
irsend.sendWhynter(0xFFFFFFFF);
@@ -29,7 +30,8 @@ TEST(TestSendWhynter, SendDataOnly) {
"m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150"
"m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150"
"m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150"
"m750s12200", irsend.outputStr());
"m750s12200",
irsend.outputStr());
irsend.reset();
irsend.sendWhynter(0x87654321);
@@ -39,7 +41,8 @@ TEST(TestSendWhynter, SendDataOnly) {
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
"m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150"
"m750s750m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150"
"m750s33850", irsend.outputStr());
"m750s33850",
irsend.outputStr());
}
// Test sending with different repeats.
@@ -48,17 +51,18 @@ TEST(TestSendWhynter, SendWithRepeats) {
irsend.begin();
irsend.reset();
irsend.sendWhynter(0x87654321, WHYNTER_BITS, 0); // 0 repeats.
irsend.sendWhynter(0x87654321, kWhynterBits, 0); // 0 repeats.
EXPECT_EQ(
"m750s750m2850s2850"
"m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150m750s2150"
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
"m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150"
"m750s750m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150"
"m750s33850", irsend.outputStr());
"m750s33850",
irsend.outputStr());
irsend.reset();
irsend.sendWhynter(0x87654321, WHYNTER_BITS, 1); // 1 repeat.
irsend.sendWhynter(0x87654321, kWhynterBits, 1); // 1 repeat.
EXPECT_EQ(
"m750s750m2850s2850"
"m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150m750s2150"
@@ -71,10 +75,11 @@ TEST(TestSendWhynter, SendWithRepeats) {
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
"m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150"
"m750s750m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150"
"m750s33850", irsend.outputStr());
"m750s33850",
irsend.outputStr());
irsend.reset();
irsend.sendWhynter(0x87654321, WHYNTER_BITS, 2); // 2 repeats.
irsend.sendWhynter(0x87654321, kWhynterBits, 2); // 2 repeats.
EXPECT_EQ(
"m750s750m2850s2850"
"m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150m750s2150"
@@ -93,7 +98,8 @@ TEST(TestSendWhynter, SendWithRepeats) {
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
"m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150"
"m750s750m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150"
"m750s33850", irsend.outputStr());
"m750s33850",
irsend.outputStr());
}
// Test sending an atypical data size.
@@ -106,7 +112,8 @@ TEST(TestSendWhynter, SendUnusualSize) {
EXPECT_EQ(
"m750s750m2850s2850"
"m750s750m750s750m750s750m750s750m750s750m750s750m750s750m750s750"
"m750s88050", irsend.outputStr());
"m750s88050",
irsend.outputStr());
irsend.reset();
irsend.sendWhynter(0x1234567890ABCDEF, 64);
@@ -120,7 +127,8 @@ TEST(TestSendWhynter, SendUnusualSize) {
"m750s2150m750s750m750s2150m750s750m750s2150m750s750m750s2150m750s2150"
"m750s2150m750s2150m750s750m750s750m750s2150m750s2150m750s750m750s2150"
"m750s2150m750s2150m750s2150m750s750m750s2150m750s2150m750s2150m750s2150"
"m750s12200", irsend.outputStr());
"m750s12200",
irsend.outputStr());
}
// Tests for decodeWhynter().
@@ -135,9 +143,9 @@ TEST(TestDecodeWhynter, NormalDecodeWithStrict) {
irsend.reset();
irsend.sendWhynter(0x87654321);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeWhynter(&irsend.capture, WHYNTER_BITS, true));
ASSERT_TRUE(irrecv.decodeWhynter(&irsend.capture, kWhynterBits, true));
EXPECT_EQ(WHYNTER, irsend.capture.decode_type);
EXPECT_EQ(WHYNTER_BITS, irsend.capture.bits);
EXPECT_EQ(kWhynterBits, irsend.capture.bits);
EXPECT_EQ(0x87654321, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
@@ -152,24 +160,24 @@ TEST(TestDecodeWhynter, NormalDecodeWithRepeatAndStrict) {
// Normal Whynter 32-bit message with 2 repeats.
irsend.reset();
irsend.sendWhynter(0x87654321, WHYNTER_BITS, 2);
irsend.sendWhynter(0x87654321, kWhynterBits, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeWhynter(&irsend.capture, WHYNTER_BITS, true));
ASSERT_TRUE(irrecv.decodeWhynter(&irsend.capture, kWhynterBits, true));
EXPECT_EQ(WHYNTER, irsend.capture.decode_type);
EXPECT_EQ(WHYNTER_BITS, irsend.capture.bits);
EXPECT_EQ(kWhynterBits, irsend.capture.bits);
EXPECT_EQ(0x87654321, irsend.capture.value);
EXPECT_FALSE(irsend.capture.repeat);
irsend.makeDecodeResult(2 * WHYNTER_BITS + 6);
ASSERT_TRUE(irrecv.decodeWhynter(&irsend.capture, WHYNTER_BITS, true));
irsend.makeDecodeResult(2 * kWhynterBits + 6);
ASSERT_TRUE(irrecv.decodeWhynter(&irsend.capture, kWhynterBits, true));
EXPECT_EQ(WHYNTER, irsend.capture.decode_type);
EXPECT_EQ(WHYNTER_BITS, irsend.capture.bits);
EXPECT_EQ(kWhynterBits, irsend.capture.bits);
EXPECT_EQ(0x87654321, irsend.capture.value);
irsend.makeDecodeResult(2 * (2 * WHYNTER_BITS + 6));
ASSERT_TRUE(irrecv.decodeWhynter(&irsend.capture, WHYNTER_BITS, true));
irsend.makeDecodeResult(2 * (2 * kWhynterBits + 6));
ASSERT_TRUE(irrecv.decodeWhynter(&irsend.capture, kWhynterBits, true));
EXPECT_EQ(WHYNTER, irsend.capture.decode_type);
EXPECT_EQ(WHYNTER_BITS, irsend.capture.bits);
EXPECT_EQ(kWhynterBits, irsend.capture.bits);
EXPECT_EQ(0x87654321, irsend.capture.value);
}
@@ -183,7 +191,7 @@ TEST(TestDecodeWhynter, DecodeWithNonStrictSizes) {
irsend.sendWhynter(0x12, 8); // Illegal sized Whynter 8-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeWhynter(&irsend.capture, WHYNTER_BITS, true));
ASSERT_FALSE(irrecv.decodeWhynter(&irsend.capture, kWhynterBits, true));
ASSERT_FALSE(irrecv.decodeWhynter(&irsend.capture, 8, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeWhynter(&irsend.capture, 8, false));
@@ -197,7 +205,7 @@ TEST(TestDecodeWhynter, DecodeWithNonStrictSizes) {
irsend.sendWhynter(0x1234567890, 40); // Illegal size Whynter 40-bit message.
irsend.makeDecodeResult();
// Shouldn't pass with strict when we ask for less bits than we got.
ASSERT_FALSE(irrecv.decodeWhynter(&irsend.capture, WHYNTER_BITS, true));
ASSERT_FALSE(irrecv.decodeWhynter(&irsend.capture, kWhynterBits, true));
irsend.makeDecodeResult();
// Should fail with strict when we ask for the wrong bit size.
@@ -238,12 +246,13 @@ TEST(TestDecodeWhynter, FailToDecodeNonWhynterExample) {
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};
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.decodeWhynter(&irsend.capture));
ASSERT_FALSE(irrecv.decodeWhynter(&irsend.capture, WHYNTER_BITS, false));
ASSERT_FALSE(irrecv.decodeWhynter(&irsend.capture, kWhynterBits, false));
}