Ir esp8266 lib update and code impacts (#235)

* integrate new IRremoteESP8266 lib 2.4.2 and add new protocols

IR_RC6
IR_MITSUBISHI
IR_GICABLE
IR_MITSUBISHI2
IR_LASERTAG
IR_CARRIER_AC
IR_MIDEA
IR_NIKAI
IR_SHERWOOD
IR_DENON
IR_AIWA_RC_T501
IR_JVC
This commit is contained in:
Florian authored and GitHub committed 2018-07-22 16:44:10 +02:00
1 parent 9b258723a8
commit b12ee19979
130 files changed
+16548 -1693

No files matched your search

+126
View File
@@ -1,5 +1,6 @@
// Copyright 2017 David Conran
#include "IRrecv_test.h"
#include "IRremoteESP8266.h"
#include "IRrecv.h"
#include "IRsend.h"
@@ -446,3 +447,128 @@ TEST(TestDecode, DecodeAiwa) {
EXPECT_EQ(AIWA_RC_T501_BITS, irsend.capture.bits);
EXPECT_EQ(0x7F, irsend.capture.value);
}
// Test matchData() on space encoded data.
TEST(TestMatchData, SpaceEncoded) {
IRsendTest irsend(0);
IRrecv irrecv(1);
irsend.begin();
uint16_t space_encoded_raw[11] = {
500, 500,
500, 1500,
499, 499,
501, 1501,
499, 1490,
500
};
match_result_t result;
irsend.reset();
irsend.sendRaw(space_encoded_raw, 11, 38000);
irsend.makeDecodeResult();
result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 500, 1500, 500, 500);
ASSERT_TRUE(result.success);
EXPECT_EQ(0b01011, result.data);
EXPECT_EQ(10, result.used);
irsend.reset();
irsend.sendRaw(space_encoded_raw, 11, 38000);
irsend.makeDecodeResult();
result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 500, 1000, 500, 500);
ASSERT_FALSE(result.success);
}
// Test matchData() on mark encoded data.
TEST(TestMatchData, MarkEncoded) {
IRsendTest irsend(0);
IRrecv irrecv(1);
irsend.begin();
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();
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);
irsend.reset();
irsend.sendRaw(mark_encoded_raw, 11, 38000);
irsend.makeDecodeResult();
result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1000, 500, 500, 500);
ASSERT_FALSE(result.success);
}
// Test matchData() on "equal total bit time" encoded data.
TEST(TestMatchData, EqualTotalBitTimeEncoded) {
IRsendTest irsend(0);
IRrecv irrecv(1);
irsend.begin();
uint16_t equal_encoded_raw[11] = {
500, 1500,
1500, 500,
499, 1499,
1501, 501,
1499, 490,
500
};
match_result_t result;
irsend.reset();
irsend.sendRaw(equal_encoded_raw, 11, 38000);
irsend.makeDecodeResult();
result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1500, 500, 500, 1500);
ASSERT_TRUE(result.success);
EXPECT_EQ(0b01011, result.data);
EXPECT_EQ(10, result.used);
irsend.reset();
irsend.sendRaw(equal_encoded_raw, 11, 38000);
irsend.makeDecodeResult();
result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1000, 500, 500, 1000);
ASSERT_FALSE(result.success);
}
// Test matchData() on arbitrary encoded data.
TEST(TestMatchData, ArbitraryEncoded) {
IRsendTest irsend(0);
IRrecv irrecv(1);
irsend.begin();
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);
ASSERT_TRUE(result.success);
EXPECT_EQ(0b01011, result.data);
EXPECT_EQ(10, result.used);
irsend.reset();
irsend.sendRaw(arbitrary_encoded_raw, 11, 38000);
irsend.makeDecodeResult();
result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1000, 500, 500, 1000);
ASSERT_FALSE(result.success);
}
+14
View File
@@ -0,0 +1,14 @@
// Copyright 2017 David Conran
#ifndef TEST_IRRECV_TEST_H_
#define TEST_IRRECV_TEST_H_
#include <iostream>
#include <sstream>
#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); }
#endif // TEST_IRRECV_TEST_H_
+151 -4
View File
@@ -101,6 +101,10 @@ TEST(TestSendRaw, GeneralUse) {
irsend.reset();
irsend.sendRaw(rawData, 67, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeNEC(&irsend.capture, NEC_BITS, false));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(32, irsend.capture.bits);
EXPECT_EQ(0xC3E0E0E8, irsend.capture.value);
EXPECT_EQ(
"m8950s4500"
"m550s1650m600s1650m550s550m600s500m600s550m550s550m600s1650m550s1650"
@@ -108,10 +112,6 @@ TEST(TestSendRaw, GeneralUse) {
"m550s1650m600s1650m600s1650m550s550m600s500m600s500m600s550m550s550"
"m600s1650m550s1650m600s1650m600s500m650s1600m600s500m600s550m550s550"
"m600", irsend.outputStr());
ASSERT_TRUE(irrecv.decodeNEC(&irsend.capture, NEC_BITS, false));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(32, irsend.capture.bits);
EXPECT_EQ(0xC3E0E0E8, irsend.capture.value);
}
// Incorrect handling of decodes from Raw. i.e. There is no gap recorded at
@@ -137,3 +137,150 @@ TEST(TestSendRaw, NoTrailingGap) {
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
}
TEST(TestLowLevelSend, MarkFrequencyModulationAt38kHz) {
IRsendLowLevelTest irsend(0);
irsend.begin();
irsend.reset();
irsend.enableIROut(38000, 50);
EXPECT_EQ(5, irsend.mark(100));
EXPECT_EQ(
"[On]10usecs[Off]11usecs[On]10usecs[Off]11usecs[On]10usecs[Off]11usecs"
"[On]10usecs[Off]11usecs[On]10usecs[Off]6usecs",
irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(38000, 33);
EXPECT_EQ(5, irsend.mark(100));
EXPECT_EQ(
"[On]6usecs[Off]15usecs[On]6usecs[Off]15usecs[On]6usecs[Off]15usecs"
"[On]6usecs[Off]15usecs[On]6usecs[Off]10usecs",
irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(38000, 100);
EXPECT_EQ(1, irsend.mark(1000));
EXPECT_EQ("[On]1000usecs[Off]", irsend.low_level_sequence);
}
TEST(TestLowLevelSend, MarkFrequencyModulationAt36_7kHz) {
IRsendLowLevelTest irsend(0);
irsend.begin();
irsend.reset();
irsend.enableIROut(36700, 50);
EXPECT_EQ(5, irsend.mark(100));
EXPECT_EQ(
"[On]11usecs[Off]11usecs[On]11usecs[Off]11usecs[On]11usecs[Off]11usecs"
"[On]11usecs[Off]11usecs[On]11usecs[Off]1usecs",
irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(36700, 33);
EXPECT_EQ(5, irsend.mark(100));
EXPECT_EQ(
"[On]7usecs[Off]15usecs[On]7usecs[Off]15usecs[On]7usecs[Off]15usecs"
"[On]7usecs[Off]15usecs[On]7usecs[Off]5usecs",
irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(36700, 100);
EXPECT_EQ(1, irsend.mark(1000));
EXPECT_EQ("[On]1000usecs[Off]", irsend.low_level_sequence);
}
TEST(TestLowLevelSend, MarkFrequencyModulationAt40kHz) {
IRsendLowLevelTest irsend(0);
irsend.begin();
irsend.reset();
irsend.enableIROut(40000, 50);
EXPECT_EQ(5, irsend.mark(100));
EXPECT_EQ(
"[On]10usecs[Off]10usecs[On]10usecs[Off]10usecs[On]10usecs[Off]10usecs"
"[On]10usecs[Off]10usecs[On]10usecs[Off]10usecs",
irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(40000, 33);
EXPECT_EQ(5, irsend.mark(100));
EXPECT_EQ(
"[On]6usecs[Off]14usecs[On]6usecs[Off]14usecs[On]6usecs[Off]14usecs"
"[On]6usecs[Off]14usecs[On]6usecs[Off]14usecs",
irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(40000, 100);
EXPECT_EQ(1, irsend.mark(1000));
EXPECT_EQ("[On]1000usecs[Off]", irsend.low_level_sequence);
}
TEST(TestLowLevelSend, MarkNoModulation) {
IRsendLowLevelTest irsend(0, false, false);
irsend.begin();
irsend.reset();
irsend.enableIROut(38000, 50);
EXPECT_EQ(1, irsend.mark(1000));
EXPECT_EQ("[On]1000usecs[Off]", irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(36700, 25);
EXPECT_EQ(1, irsend.mark(1000));
EXPECT_EQ("[On]1000usecs[Off]", irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(40000, 75);
EXPECT_EQ(1, irsend.mark(1000));
EXPECT_EQ("[On]1000usecs[Off]", irsend.low_level_sequence);
}
TEST(TestLowLevelSend, SpaceFrequencyModulation) {
IRsendLowLevelTest irsend(0);
irsend.reset();
irsend.enableIROut(38000);
irsend.space(1000);
EXPECT_EQ("[Off]1000usecs", irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(40000, 75);
irsend.space(1000);
EXPECT_EQ("[Off]1000usecs", irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(38000, 100);
irsend.space(1000);
EXPECT_EQ("[Off]1000usecs", irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(38000, 33);
irsend.space(1000);
EXPECT_EQ("[Off]1000usecs", irsend.low_level_sequence);
}
TEST(TestLowLevelSend, SpaceNoModulation) {
IRsendLowLevelTest irsend(0, false, false);
irsend.begin();
irsend.reset();
irsend.enableIROut(38000, 50);
irsend.space(1000);
EXPECT_EQ("[Off]1000usecs", irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(36700, 25);
irsend.space(1000);
EXPECT_EQ("[Off]1000usecs", irsend.low_level_sequence);
irsend.reset();
irsend.enableIROut(40000, 75);
irsend.space(1000);
EXPECT_EQ("[Off]1000usecs", irsend.low_level_sequence);
}
+61 -13
View File
@@ -10,9 +10,16 @@
#include <string>
#include "IRrecv.h"
#include "IRsend.h"
#include "IRtimer.h"
#define OUTPUT_BUF 10000U
#define RAW_BUF 10000U
#ifdef UNIT_TEST
// Used to help simulate elapsed time in unit tests.
uint32_t _IRtimer_unittest_now = 0;
#endif // UNIT_TEST
#define OUTPUT_BUF 1000U
#define RAW_BUF 1000U
class IRsendTest: public IRsend {
public:
uint32_t output[OUTPUT_BUF];
@@ -20,13 +27,17 @@ class IRsendTest: public IRsend {
uint16_t rawbuf[RAW_BUF];
decode_results capture;
explicit IRsendTest(uint16_t x, bool i = false) : IRsend(x, i) {
explicit IRsendTest(uint16_t x, bool i = false, bool j = true) :
IRsend(x, i, j) {
reset();
}
void reset() {
last = 0;
output[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;
}
std::string outputStr() {
@@ -47,7 +58,7 @@ class IRsendTest: public IRsend {
void makeDecodeResult(uint16_t offset = 0) {
capture.decode_type = UNKNOWN;
capture.bits = 0;
capture.rawlen = last + 1 - offset;
capture.rawlen = last + 2 - offset;
capture.overflow = (last - offset >= (int16_t) RAW_BUF);
capture.repeat = false;
capture.address = 0;
@@ -64,16 +75,18 @@ class IRsendTest: public IRsend {
}
void dumpRawResult() {
std::cout << "uint16_t rawbuf["<< capture.rawlen << "] =\n";
for (uint16_t i = 0; i < capture.rawlen; i++) {
std::cout << std::dec;
if (capture.rawlen == 0) return;
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);
std::cout << "(";
std::cout << capture.rawbuf[i];
std::cout << "), ";
if (i % 8 == 7)
std::cout << "\n";
// std::cout << "(" << capture.rawbuf[i] << ")";
if (i < capture.rawlen - 1)
std::cout << ", ";
}
std::cout << "\n";
std::cout << "};" << std::endl;
}
void addGap(uint32_t usecs) {
@@ -82,6 +95,7 @@ class IRsendTest: public IRsend {
protected:
uint16_t mark(uint16_t usec) {
IRtimer::add(usec);
if (last >= OUTPUT_BUF)
return 0;
if (last & 1) // Is odd? (i.e. last call was a space())
@@ -92,6 +106,7 @@ class IRsendTest: public IRsend {
}
void space(uint32_t time) {
IRtimer::add(time);
if (last >= OUTPUT_BUF)
return;
if (last & 1) { // Is odd? (i.e. last call was a space())
@@ -101,4 +116,37 @@ class IRsendTest: public IRsend {
}
}
};
#ifdef UNIT_TEST
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) {
reset();
}
void reset() {
low_level_sequence = "";
}
protected:
void _delayMicroseconds(uint32_t usec) {
_IRtimer_unittest_now += usec;
std::ostringstream Convert;
Convert << usec;
low_level_sequence += Convert.str() + "usecs";
}
void ledOff() {
low_level_sequence += "[Off]";
}
void ledOn() {
low_level_sequence += "[On]";
}
};
#endif // UNIT_TEST
#endif // TEST_IRSEND_TEST_H_
+310
View File
@@ -1,6 +1,10 @@
// Copyright 2017 David Conran
#include "IRutils.h"
#include <stdint.h>
#include "IRrecv.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests reverseBits().
@@ -33,3 +37,309 @@ TEST(ReverseBitsTest, LessBitsReversedThanInputHasSet) {
EXPECT_EQ(0xF5, reverseBits(0xFA, 4));
EXPECT_EQ(0x12345678FFFF0000, reverseBits(0x123456780000FFFF, 32));
}
// 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, 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("3", uint64ToString(3, 10)); // Base-10
EXPECT_EQ("4", uint64ToString(4, 16)); // Base-16
}
TEST(TestUint64ToString, NormalUse) {
EXPECT_EQ("12345", uint64ToString(12345));
EXPECT_EQ("100", uint64ToString(4, 2));
EXPECT_EQ("3039", uint64ToString(12345, 16));
EXPECT_EQ("123456", uint64ToString(123456));
EXPECT_EQ("1E240", uint64ToString(123456, 16));
EXPECT_EQ("FEEDDEADBEEF", uint64ToString(0xfeeddeadbeef, 16));
}
TEST(TestUint64ToString, Max64Bit) {
EXPECT_EQ("18446744073709551615", uint64ToString(UINT64_MAX)); // Default
EXPECT_EQ("1111111111111111111111111111111111111111111111111111111111111111",
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
}
TEST(TestUint64ToString, Max32Bit) {
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
}
TEST(TestUint64ToString, InterestingCases) {
// Previous hacky-code didn't handle leading zeros in the lower 32 bits.
EXPECT_EQ("100000000", uint64ToString(0x100000000, 16));
EXPECT_EQ("100000001", uint64ToString(0x100000001, 16));
}
TEST(TestUint64ToString, SillyBases) {
// If we are given a silly base, we should defer to Base-10.
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.
}
TEST(TestGetCorrectedRawLength, NoLargeValues) {
IRsendTest irsend(0);
IRrecv irrecv(1);
uint16_t test_data[7] = {1, 2, 3, 4, 5, 6, 7};
irsend.begin();
irsend.reset();
irsend.sendRaw(test_data, 7, 38000);
irsend.makeDecodeResult();
irrecv.decode(&irsend.capture);
EXPECT_EQ(7, getCorrectedRawLength(&irsend.capture));
}
TEST(TestGetCorrectedRawLength, WithLargeValues) {
IRsendTest irsend(0);
IRrecv irrecv(1);
uint16_t test_data[7] = {10, 20, 30, 40, 50, 60, 70};
irsend.begin();
irsend.reset();
irsend.sendRaw(test_data, 7, 38000);
irsend.makeDecodeResult();
irrecv.decode(&irsend.capture);
irsend.capture.rawbuf[3] = 60000;
ASSERT_EQ(2, RAWTICK); // The following values rely on RAWTICK being 2.
EXPECT_EQ(7 + 2, getCorrectedRawLength(&irsend.capture));
irsend.capture.rawbuf[4] = UINT16_MAX - 1;
EXPECT_EQ(7 + 2 * 2, getCorrectedRawLength(&irsend.capture));
irsend.capture.rawbuf[4] = UINT16_MAX;
EXPECT_EQ(7 + 2 * 2, getCorrectedRawLength(&irsend.capture));
}
TEST(TestResultToSourceCode, SimpleTests) {
IRsendTest irsend(0);
IRrecv irrecv(1);
uint16_t test_data[7] = {10, 20, 30, 40, 50, 60, 70};
irsend.begin();
irsend.reset();
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));
// 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));
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));
// Reset and put the large value in a space location.
irsend.reset();
irsend.sendRaw(test_data, 7, 38000);
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));
}
TEST(TestResultToSourceCode, SimpleProtocols) {
IRsendTest irsend(0);
IRrecv irrecv(1);
irsend.begin();
// Generate a code which has address & command values.
irsend.reset();
irsend.sendNEC(irsend.encodeNEC(0x10, 0x20));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(NEC, irsend.capture.decode_type);
ASSERT_EQ(NEC_BITS, 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, "
"560, 1680, 560, 1680, 560, 1680, 560, 560, 560, 1680, 560, 1680, "
"560, 1680, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, "
"560, 1680, 560, 560, 560, 560, 560, 1680, 560, 1680, 560, 1680, "
"560, 1680, 560, 1680, 560, 560, 560, 1680, 560, 1680, 560, 40320 "
"}; // NEC 8F704FB\n"
"uint32_t address = 0x10;\n"
"uint32_t command = 0x20;\n"
"uint64_t data = 0x8F704FB;\n", resultToSourceCode(&irsend.capture));
// Generate a code which DOESN'T have address & command values.
irsend.reset();
irsend.sendNikai(0xD0F2F);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(NIKAI, irsend.capture.decode_type);
ASSERT_EQ(NIKAI_BITS, 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, "
"500, 2000, 500, 2000, 500, 2000, 500, 2000, 500, 1000, 500, 1000, "
"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));
}
TEST(TestResultToSourceCode, ComplexProtocols) {
IRsendTest irsend(0);
IRrecv irrecv(1);
irsend.begin();
uint8_t state[TOSHIBA_AC_STATE_LENGTH] = {
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);
EXPECT_EQ(
"uint16_t rawData[296] = {4400, 4300, 542, 1622, 542, 1622, "
"542, 1622, 542, 1622, 542, 472, 542, 472, 542, 1622, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 1622, 542, 1622, "
"542, 472, 542, 1622, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 1622, 542, 1622, 542, 1622, 542, 1622, "
"542, 1622, 542, 1622, 542, 1622, 542, 1622, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 472, 542, 1622, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 1622, 542, 7048, 4400, 4300, "
"542, 1622, 542, 1622, 542, 1622, 542, 1622, 542, 472, 542, 472, "
"542, 1622, 542, 472, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 1622, 542, 1622, 542, 472, 542, 1622, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 1622, 542, 1622, "
"542, 1622, 542, 1622, 542, 1622, 542, 1622, 542, 1622, 542, 1622, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 1622, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 472, 542, 472, "
"542, 472, 542, 472, 542, 472, 542, 472, 542, 472, 542, 472, "
"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));
}
TEST(TestResultToTimingInfo, General) {
IRsendTest irsend(0);
IRrecv irrecv(1);
irsend.begin();
irsend.reset();
irsend.sendNEC(irsend.encodeNEC(0x10, 0x20));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(NEC, irsend.capture.decode_type);
ASSERT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(
"Raw Timing[68]:\n"
" + 8960, - 4480, + 560, - 560, + 560, - 560,"
" + 560, - 560, \n"
" + 560, - 560, + 560, - 1680, + 560, - 560,"
" + 560, - 560, \n"
" + 560, - 560, + 560, - 1680, + 560, - 1680,"
" + 560, - 1680, \n"
" + 560, - 1680, + 560, - 560, + 560, - 1680,"
" + 560, - 1680, \n"
" + 560, - 1680, + 560, - 560, + 560, - 560,"
" + 560, - 560, \n"
" + 560, - 560, + 560, - 560, + 560, - 1680,"
" + 560, - 560, \n"
" + 560, - 560, + 560, - 1680, + 560, - 1680,"
" + 560, - 1680, \n"
" + 560, - 1680, + 560, - 1680, + 560, - 560,"
" + 560, - 1680, \n"
" + 560, - 1680, + 560, - 40320\n",
resultToTimingInfo(&irsend.capture));
irsend.reset();
uint16_t rawData[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90};
irsend.sendRaw(rawData, 9, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(
"Raw Timing[9]:\n"
" + 10, - 20, + 30, - 40, + 50, - 60,"
" + 70, - 80, \n"
" + 90\n",
resultToTimingInfo(&irsend.capture));
}
TEST(TestResultToHumanReadableBasic, SimpleCodes) {
IRsendTest irsend(0);
IRrecv irrecv(1);
irsend.begin();
irsend.reset();
irsend.sendNEC(irsend.encodeNEC(0x10, 0x20));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(NEC, irsend.capture.decode_type);
ASSERT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(
"Encoding : NEC\n"
"Code : 8F704FB (32 bits)\n",
resultToHumanReadableBasic(&irsend.capture));
}
TEST(TestResultToHumanReadableBasic, ComplexCodes) {
IRsendTest irsend(0);
IRrecv irrecv(1);
irsend.begin();
uint8_t state[TOSHIBA_AC_STATE_LENGTH] = {
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);
EXPECT_EQ(
"Encoding : TOSHIBA_AC\n"
"Code : F20D03FC0100000001 (72 bits)\n",
resultToHumanReadableBasic(&irsend.capture));
}
TEST(TestInvertBits, Normal) {
ASSERT_EQ(0xAAAA5555AAAA5555, invertBits(0x5555AAAA5555AAAA, 64));
ASSERT_EQ(0xAAAA5555, invertBits(0x5555AAAA, 32));
ASSERT_EQ(0xFFFFFFFFFFFFFFFF, invertBits(0x0, 64));
ASSERT_EQ(0x0, invertBits(invertBits(0x0, 64), 64));
ASSERT_EQ(0x2, invertBits(0x1, 2));
}
TEST(TestInvertBits, ZeroBits) {
ASSERT_EQ(0xAAAA5555AAAA5555, invertBits(0xAAAA5555AAAA5555, 0));
ASSERT_EQ(0x0, invertBits(0x0, 0));
ASSERT_EQ(0x1, invertBits(0x1, 0));
}
TEST(TestInvertBits, MoreThan64Bits) {
ASSERT_EQ(0xAAAA5555AAAA5555, invertBits(0x5555AAAA5555AAAA, 70));
ASSERT_EQ(0xFFFFFFFFFFFFFFFF, invertBits(0x0, 128));
}
+103 -13
View File
@@ -1,8 +1,10 @@
# SYNOPSIS:
#
# make [all] - makes everything.
# make TARGET - makes the given target.
# make clean - removes all files generated by make.
# make [all] - makes everything.
# make TARGET - makes the given target.
# make run - makes everything and runs all the tests.
# make clean - removes all files generated by make.
# make install-googletest - install the googletest code suite
# Please tweak the following variable definitions as needed by your
# project, except GTEST_HEADERS, which you can use in your own targets
@@ -30,7 +32,9 @@ TESTS = IRutils_test IRsend_test ir_NEC_test ir_GlobalCache_test \
ir_JVC_test ir_RCMM_test ir_LG_test ir_Mitsubishi_test ir_Sharp_test \
ir_RC5_RC6_test ir_Panasonic_test ir_Dish_test ir_Whynter_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_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
# All Google Test headers. Usually you shouldn't change this
# definition.
@@ -56,6 +60,8 @@ run : all
echo "PASS: \o/ \o/ All unit tests passed. \o/ \o/"; \
fi
run_tests : run
install-googletest :
git clone https://github.com/google/googletest.git ../lib/googletest
@@ -67,9 +73,12 @@ 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_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
# Common object files
COMMON_OBJ = IRutils.o IRtimer.o IRsend.o IRrecv.o ir_GlobalCache.o \
$(PROTOCOLS) gtest_main.a
@@ -77,7 +86,7 @@ COMMON_OBJ = IRutils.o IRtimer.o IRsend.o IRrecv.o ir_GlobalCache.o \
COMMON_DEPS = $(USER_DIR)/IRrecv.h $(USER_DIR)/IRsend.h $(USER_DIR)/IRtimer.h \
$(USER_DIR)/IRutils.h $(USER_DIR)/IRremoteESP8266.h
# Common test dependencies
COMMON_TEST_DEPS = $(COMMON_DEPS) IRsend_test.h
COMMON_TEST_DEPS = $(COMMON_DEPS) IRrecv_test.h IRsend_test.h
# For simplicity and to avoid depending on Google Test's
# implementation details, the dependencies specified below are
@@ -97,17 +106,17 @@ gtest.a : gtest-all.o
gtest_main.a : gtest-all.o gtest_main.o
$(AR) $(ARFLAGS) $@ $^
# Builds a our test. A test should link with either gtest.a or
# Builds our test. A test should link with either gtest.a or
# gtest_main.a, depending on whether it defines its own main()
# function.
IRutils.o : $(USER_DIR)/IRutils.cpp $(USER_DIR)/IRutils.h
IRutils.o : $(USER_DIR)/IRutils.cpp $(USER_DIR)/IRutils.h $(USER_DIR)/IRremoteESP8266.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/IRutils.cpp
IRutils_test.o : IRutils_test.cpp $(USER_DIR)/IRutils.h $(GTEST_HEADERS)
IRutils_test.o : IRutils_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c IRutils_test.cpp
IRutils_test : IRutils.o IRutils_test.o gtest_main.a
IRutils_test : IRutils_test.o ir_NEC.o ir_Nikai.o ir_Toshiba.o $(COMMON_OBJ) gtest_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
IRtimer.o : $(USER_DIR)/IRtimer.cpp $(USER_DIR)/IRtimer.h
@@ -326,7 +335,7 @@ ir_Gree.o : $(USER_DIR)/ir_Gree.cpp $(GTEST_HEADERS)
ir_Gree_test.o : ir_Gree_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Gree_test.cpp
ir_Gree_test : $(COMMON_OBJ) ir_Gree_test.o
ir_Gree_test : $(COMMON_OBJ) ir_Gree_test.o ir_Kelvinator.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Pronto.o : $(USER_DIR)/ir_Pronto.cpp $(GTEST_HEADERS)
@@ -337,3 +346,84 @@ ir_Pronto_test.o : ir_Pronto_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
ir_Pronto_test : $(COMMON_OBJ) ir_Pronto_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Nikai.o : $(USER_DIR)/ir_Nikai.cpp $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Nikai.cpp
ir_Nikai_test.o : ir_Nikai_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Nikai_test.cpp
ir_Nikai_test : $(COMMON_OBJ) ir_Nikai_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Toshiba.o : $(USER_DIR)/ir_Toshiba.cpp $(USER_DIR)/ir_Toshiba.h $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Toshiba.cpp
ir_Toshiba_test.o : ir_Toshiba_test.cpp $(USER_DIR)/ir_Toshiba.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Toshiba_test.cpp
ir_Toshiba_test : $(COMMON_OBJ) ir_Toshiba_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Midea.o : $(USER_DIR)/ir_Midea.cpp $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Midea.cpp
ir_Midea_test.o : ir_Midea_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Midea_test.cpp
ir_Midea_test : $(COMMON_OBJ) ir_Midea_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Magiquest.o : $(USER_DIR)/ir_Magiquest.cpp $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Magiquest.cpp
ir_Magiquest_test.o : ir_Magiquest_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Magiquest_test.cpp
ir_Magiquest_test : $(COMMON_OBJ) ir_Magiquest_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Lasertag.o : $(USER_DIR)/ir_Lasertag.cpp $(USER_DIR)/ir_RC5_RC6.cpp $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Lasertag.cpp
ir_Lasertag_test.o : ir_Lasertag_test.cpp $(USER_DIR)/ir_RC5_RC6.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Lasertag_test.cpp
ir_Lasertag_test : $(COMMON_OBJ) ir_Lasertag_test.o ir_RC5_RC6.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Carrier.o : $(USER_DIR)/ir_Carrier.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Carrier.cpp
ir_Carrier_test.o : ir_Carrier_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Carrier_test.cpp
ir_Carrier_test : $(COMMON_OBJ) ir_Carrier_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Haier.o : $(USER_DIR)/ir_Haier.cpp $(USER_DIR)/ir_Haier.h $(COMMON_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Haier.cpp
ir_Haier_test.o : ir_Haier_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Haier_test.cpp
ir_Haier_test : $(COMMON_OBJ) ir_Haier_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_Hitachi.o : $(USER_DIR)/ir_Hitachi.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Hitachi.cpp
ir_Hitachi_test.o : ir_Hitachi_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Hitachi_test.cpp
ir_Hitachi_test : $(COMMON_OBJ) ir_Hitachi_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
ir_GICable.o : $(USER_DIR)/ir_GICable.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_GICable.cpp
ir_GICable_test.o : ir_GICable_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_GICable_test.cpp
ir_GICable_test : $(COMMON_OBJ) ir_GICable_test.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
+13 -13
View File
@@ -20,8 +20,8 @@ TEST(TestSendAiwa, SendDataOnly) {
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s108080"
"m8960s2240m560s108080", irsend.outputStr());
"m560s1680m560s1680m560s23520"
"m8960s2240m560s96320", irsend.outputStr());
}
// Test sending oversized data.
@@ -48,7 +48,7 @@ TEST(TestSendAiwa, SendWithRepeats) {
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s108080", irsend.outputStr());
"m560s1680m560s1680m560s23520", irsend.outputStr());
irsend.reset();
irsend.sendAiwaRCT501(0x7F, AIWA_RC_T501_BITS, 1); // 1 repeat.
EXPECT_EQ(
@@ -58,8 +58,8 @@ TEST(TestSendAiwa, SendWithRepeats) {
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s108080"
"m8960s2240m560s108080", irsend.outputStr());
"m560s1680m560s1680m560s23520"
"m8960s2240m560s96320", irsend.outputStr());
irsend.reset();
irsend.sendAiwaRCT501(0x7F, AIWA_RC_T501_BITS, 2); // 2 repeats.
EXPECT_EQ(
@@ -69,13 +69,13 @@ TEST(TestSendAiwa, SendWithRepeats) {
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s108080"
"m8960s2240m560s108080"
"m8960s2240m560s108080", irsend.outputStr());
"m560s1680m560s1680m560s23520"
"m8960s2240m560s96320"
"m8960s2240m560s96320", irsend.outputStr());
}
// Test sending an atypical data size.
TEST(TestSendAiwa, SendUsualSize) {
TEST(TestSendAiwa, SendUnusualSize) {
IRsendTest irsend(4);
irsend.begin();
@@ -87,8 +87,8 @@ TEST(TestSendAiwa, SendUsualSize) {
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s1680m560s560m560s560"
"m560s1680m560s560m560s1680m560s108080"
"m8960s2240m560s108080", irsend.outputStr());
"m560s1680m560s560m560s1680m560s36960"
"m8960s2240m560s96320", irsend.outputStr());
irsend.reset();
irsend.sendAiwaRCT501(0x1234567890, 37);
@@ -102,8 +102,8 @@ TEST(TestSendAiwa, SendUsualSize) {
"m560s1680m560s560m560s1680m560s560m560s1680m560s1680m560s560m560s560"
"m560s1680m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s1680"
"m560s560m560s560m560s1680m560s560m560s560m560s560m560s560m560s1680"
"m560s108080"
"m8960s2240m560s108080", irsend.outputStr());
"m560s22400"
"m8960s2240m560s96320", irsend.outputStr());
}
// Tests for decodeAiwaRCT501().
@@ -0,0 +1,219 @@
// Copyright 2018 David Conran
#include "IRrecv.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for sendCarrierAC()
// Test sending typical data only.
TEST(TestSendCarrierAC, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
irsend.reset();
irsend.sendCarrierAC(0x0);
EXPECT_EQ(
"m8532s4228"
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320"
"m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320"
"m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320"
"m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320m628s1320"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
"m628s20000", irsend.outputStr());
irsend.reset();
irsend.sendCarrierAC(0x12345678);
EXPECT_EQ(
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000"
"m8532s4228"
"m628s1320m628s1320m628s1320m628s532m628s1320m628s1320m628s532m628s1320"
"m628s1320m628s1320m628s532m628s532m628s1320m628s532m628s1320m628s1320"
"m628s1320m628s532m628s1320m628s532m628s1320m628s532m628s532m628s1320"
"m628s1320m628s532m628s532m628s532m628s532m628s1320m628s1320m628s1320"
"m628s20000"
"m8532s4228"
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320m628s532"
"m628s532m628s1320m628s1320m628s1320m628s1320m628s532m628s532m628s532"
"m628s20000", irsend.outputStr());
irsend.reset();
irsend.sendCarrierAC(0x4CCA541D);
EXPECT_EQ(
"m8532s4228"
"m628s532m628s1320m628s532m628s532m628s1320m628s1320m628s532m628s532"
"m628s1320m628s1320m628s532m628s532m628s1320m628s532m628s1320m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s532m628s532m628s1320m628s1320m628s1320m628s532m628s1320"
"m628s20000"
"m8532s4228"
"m628s1320m628s532m628s1320m628s1320m628s532m628s532m628s1320m628s1320"
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s1320"
"m628s1320m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s1320"
"m628s1320m628s1320m628s1320m628s532m628s532m628s532m628s1320m628s532"
"m628s20000"
"m8532s4228"
"m628s532m628s1320m628s532m628s532m628s1320m628s1320m628s532m628s532"
"m628s1320m628s1320m628s532m628s532m628s1320m628s532m628s1320m628s532"
"m628s532m628s1320m628s532m628s1320m628s532m628s1320m628s532m628s532"
"m628s532m628s532m628s532m628s1320m628s1320m628s1320m628s532m628s1320"
"m628s20000", irsend.outputStr());
}
// Test sending typical data only.
TEST(TestSendCarrierAC, SendWithRepeats) {
IRsendTest irsend(0);
irsend.begin();
irsend.reset();
irsend.sendCarrierAC(0x12345678, CARRIER_AC_BITS, 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());
}
// Tests for decodeCarrierAC().
// Decode normal "synthetic" messages.
TEST(TestDecodeCarrierAC, NormalDecodeWithStrict) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
irsend.sendCarrierAC(0x0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeCarrierAC(&irsend.capture, CARRIER_AC_BITS, true));
EXPECT_EQ(CARRIER_AC, irsend.capture.decode_type);
EXPECT_EQ(CARRIER_AC_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);
irsend.reset();
irsend.sendCarrierAC(0xB335ABE2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeCarrierAC(&irsend.capture, CARRIER_AC_BITS, true));
EXPECT_EQ(CARRIER_AC, irsend.capture.decode_type);
EXPECT_EQ(CARRIER_AC_BITS, irsend.capture.bits);
EXPECT_EQ(0xB335ABE2, irsend.capture.value);
EXPECT_EQ(0xB335, irsend.capture.address);
EXPECT_EQ(0xABE2, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
// Do the last one again, & use the full decoder, not just protocol specific.
irsend.reset();
irsend.sendCarrierAC(0xB335ABE2);
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(0xB335ABE2, irsend.capture.value);
}
// Decode a "real" example message.
TEST(TestDecodeCarrierAC, RealExamples) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
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};
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(0xB335ABE2, irsend.capture.value);
EXPECT_EQ(0xB335, irsend.capture.address);
EXPECT_EQ(0xABE2, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
}
+1 -1
View File
@@ -101,7 +101,7 @@ TEST(TestSendCoolix, SendWithRepeats) {
}
// Test sending an atypical data size.
TEST(TestSendCoolix, SendUsualSize) {
TEST(TestSendCoolix, SendUnusualSize) {
IRsendTest irsend(4);
irsend.begin();
+494 -81
View File
@@ -1,5 +1,6 @@
// Copyright 2017 David Conran
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Daikin.h"
@@ -20,7 +21,17 @@ TEST(TestSendDaikin, SendDataOnly) {
irsend.reset();
irsend.sendDaikin(daikin_code);
EXPECT_EQ(
"m3650s1623"
"m428s428m428s428m428s428m428s428m428s428"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s428m428s1280m428s428m428s428m428s428m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s1280m428s1280m428s428m428s1280m428s428m428s1280m428s1280"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
@@ -29,8 +40,7 @@ TEST(TestSendDaikin, SendDataOnly) {
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s1280m428s428m428s428"
"m428s29428"
"m3650s1623"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
@@ -67,68 +77,86 @@ TEST(TestSendDaikin, SendWithRepeats) {
irsend.sendDaikin(daikin_code, DAIKIN_COMMAND_LENGTH, 1);
EXPECT_EQ(
"m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s1280m428s1280m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s1280m428s428m428s428"
"m428s29428"
"m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s428m428s428m428s428m428s428m428s428m428s1280m428s428"
"m428s428m428s1280m428s1280m428s1280m428s1280m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s1280m428s428m428s428m428s428m428s1280m428s1280m428s1280"
"m428s29428"
"m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s1280m428s1280m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s1280m428s428m428s428"
"m428s29428"
"m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s428m428s428m428s428m428s428m428s428m428s1280m428s428"
"m428s428m428s1280m428s1280m428s1280m428s1280m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s1280m428s428m428s428m428s428m428s1280m428s1280m428s1280"
"m428s29428", irsend.outputStr());
"m428s428m428s428m428s428m428s428m428s428"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s428m428s1280m428s428m428s428m428s428m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s1280m428s1280m428s428m428s1280m428s428m428s1280m428s1280"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s1280m428s1280m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s1280m428s428m428s428"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s428m428s428m428s428m428s428m428s428m428s1280m428s428"
"m428s428m428s1280m428s1280m428s1280m428s1280m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s1280m428s428m428s428m428s428m428s1280m428s1280m428s1280"
"m428s29428"
"m428s428m428s428m428s428m428s428m428s428"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s428m428s1280m428s428m428s428m428s428m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s1280m428s1280m428s428m428s1280m428s428m428s1280m428s1280"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s1280m428s1280m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s1280m428s428m428s428"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s428m428s428m428s428m428s428m428s428m428s1280m428s428"
"m428s428m428s1280m428s1280m428s1280m428s1280m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s1280m428s428m428s428m428s428m428s1280m428s1280m428s1280"
"m428s29428", irsend.outputStr());
}
// Test sending atypical sizes.
@@ -152,7 +180,17 @@ TEST(TestSendDaikin, SendUnexpectedSizes) {
irsend.reset();
irsend.sendDaikin(daikin_long_code, DAIKIN_COMMAND_LENGTH + 1);
ASSERT_EQ(
"m3650s1623"
"m428s428m428s428m428s428m428s428m428s428"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s428m428s1280m428s428m428s428m428s428m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s1280m428s1280m428s428m428s1280m428s428m428s1280m428s1280"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
@@ -161,8 +199,7 @@ TEST(TestSendDaikin, SendUnexpectedSizes) {
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s1280m428s428m428s428"
"m428s29428"
"m3650s1623"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
@@ -306,6 +343,13 @@ TEST(TestDaikinClass, QuietMode) {
irdaikin.setQuiet(true);
EXPECT_TRUE(irdaikin.getQuiet());
// Setting Econo mode should NOT change out of quiet mode.
irdaikin.setEcono(true);
EXPECT_TRUE(irdaikin.getQuiet());
irdaikin.setEcono(false);
EXPECT_TRUE(irdaikin.getQuiet());
// But setting Powerful mode should exit out of quiet mode.
irdaikin.setPowerful(true);
EXPECT_FALSE(irdaikin.getQuiet());
}
@@ -325,23 +369,54 @@ TEST(TestDaikinClass, PowerfulMode) {
irdaikin.setQuiet(true);
EXPECT_FALSE(irdaikin.getPowerful());
irdaikin.setPowerful(true);
irdaikin.setEcono(true);
EXPECT_FALSE(irdaikin.getPowerful());
}
TEST(TestDaikinClass, EconoMode) {
IRDaikinESP irdaikin(0);
irdaikin.begin();
irdaikin.setEcono(true);
EXPECT_TRUE(irdaikin.getEcono());
irdaikin.setEcono(false);
EXPECT_FALSE(irdaikin.getEcono());
irdaikin.setEcono(true);
EXPECT_TRUE(irdaikin.getEcono());
// Setting Quiet mode should NOT change out of Econo mode.
irdaikin.setQuiet(true);
EXPECT_TRUE(irdaikin.getEcono());
irdaikin.setQuiet(false);
EXPECT_TRUE(irdaikin.getEcono());
// But setting Powerful mode should exit out of Econo mode.
irdaikin.setPowerful(true);
EXPECT_FALSE(irdaikin.getEcono());
}
TEST(TestDaikinClass, FanSpeed) {
IRDaikinESP irdaikin(0);
irdaikin.begin();
// Unexpected value should default to Auto.
irdaikin.setFan(0);
EXPECT_EQ(0, irdaikin.getFan());
EXPECT_EQ(DAIKIN_FAN_AUTO, irdaikin.getFan());
// Unexpected value should default to Auto.
irdaikin.setFan(255);
EXPECT_EQ(DAIKIN_FAN_MAX, irdaikin.getFan());
EXPECT_EQ(DAIKIN_FAN_AUTO, irdaikin.getFan());
irdaikin.setFan(DAIKIN_FAN_MAX);
EXPECT_EQ(DAIKIN_FAN_MAX, irdaikin.getFan());
// Beyond Max should default to Auto.
irdaikin.setFan(DAIKIN_FAN_MAX + 1);
EXPECT_EQ(DAIKIN_FAN_MAX, irdaikin.getFan());
EXPECT_EQ(DAIKIN_FAN_AUTO, irdaikin.getFan());
irdaikin.setFan(DAIKIN_FAN_MAX - 1);
EXPECT_EQ(DAIKIN_FAN_MAX - 1, irdaikin.getFan());
@@ -352,13 +427,248 @@ TEST(TestDaikinClass, FanSpeed) {
irdaikin.setFan(DAIKIN_FAN_MIN + 1);
EXPECT_EQ(DAIKIN_FAN_MIN + 1, irdaikin.getFan());
// Beyond Min should default to Auto.
irdaikin.setFan(DAIKIN_FAN_MIN - 1);
EXPECT_EQ(DAIKIN_FAN_AUTO, irdaikin.getFan());
irdaikin.setFan(3);
EXPECT_EQ(3, irdaikin.getFan());
irdaikin.setFan(DAIKIN_FAN_AUTO);
EXPECT_EQ(DAIKIN_FAN_AUTO, irdaikin.getFan());
irdaikin.setFan(DAIKIN_FAN_QUIET);
EXPECT_EQ(DAIKIN_FAN_QUIET, irdaikin.getFan());
}
TEST(TestDaikinClass, CurrentTime) {
IRDaikinESP irdaikin(0);
irdaikin.begin();
irdaikin.setCurrentTime(0); // 00:00
EXPECT_EQ(0, irdaikin.getCurrentTime());
irdaikin.setCurrentTime(754); // 12:34
EXPECT_EQ(754, irdaikin.getCurrentTime());
irdaikin.setCurrentTime(1439); // 23:59
EXPECT_EQ(1439, irdaikin.getCurrentTime());
}
TEST(TestDaikinClass, OnOffTimers) {
IRDaikinESP irdaikin(0);
irdaikin.begin();
// Both timers turned off.
irdaikin.disableOnTimer();
irdaikin.disableOffTimer();
EXPECT_FALSE(irdaikin.getOnTimerEnabled());
EXPECT_EQ(0x600, irdaikin.getOnTime());
EXPECT_FALSE(irdaikin.getOffTimerEnabled());
EXPECT_EQ(0x600, irdaikin.getOffTime());
// Turn on just the On Timer.
irdaikin.enableOnTimer(123);
EXPECT_TRUE(irdaikin.getOnTimerEnabled());
EXPECT_EQ(123, irdaikin.getOnTime());
EXPECT_FALSE(irdaikin.getOffTimerEnabled());
EXPECT_EQ(0x600, irdaikin.getOffTime());
// Now turn on the Off Timer.
irdaikin.enableOffTimer(754);
EXPECT_TRUE(irdaikin.getOffTimerEnabled());
EXPECT_EQ(754, irdaikin.getOffTime());
EXPECT_TRUE(irdaikin.getOnTimerEnabled());
EXPECT_EQ(123, irdaikin.getOnTime());
// Turn off the just the On Timer.
irdaikin.disableOnTimer();
EXPECT_FALSE(irdaikin.getOnTimerEnabled());
EXPECT_EQ(0x600, irdaikin.getOnTime());
EXPECT_TRUE(irdaikin.getOffTimerEnabled());
EXPECT_EQ(754, irdaikin.getOffTime());
// Now turn off the Off Timer.
irdaikin.disableOffTimer();
EXPECT_FALSE(irdaikin.getOffTimerEnabled());
EXPECT_EQ(0x600, irdaikin.getOffTime());
EXPECT_FALSE(irdaikin.getOnTimerEnabled());
EXPECT_EQ(0x600, irdaikin.getOnTime());
// Use some canary values around the timers to ensure no accidental
// bit flips happen. i.e. Neighbouring bytes in the state.
// (Found some during testing on systems with different endian-ness)
// Tests here to make sure it never happens again.
irdaikin.setSwingHorizontal(true);
irdaikin.setPowerful(true);
irdaikin.disableOffTimer();
irdaikin.disableOnTimer();
ASSERT_TRUE(irdaikin.getSwingHorizontal());
ASSERT_TRUE(irdaikin.getPowerful());
irdaikin.enableOnTimer(123);
irdaikin.enableOffTimer(456);
ASSERT_TRUE(irdaikin.getSwingHorizontal());
ASSERT_TRUE(irdaikin.getPowerful());
irdaikin.disableOffTimer();
irdaikin.disableOnTimer();
ASSERT_TRUE(irdaikin.getSwingHorizontal());
ASSERT_TRUE(irdaikin.getPowerful());
irdaikin.setSwingHorizontal(false);
irdaikin.setPowerful(false);
irdaikin.disableOffTimer();
irdaikin.disableOnTimer();
ASSERT_FALSE(irdaikin.getSwingHorizontal());
ASSERT_FALSE(irdaikin.getPowerful());
irdaikin.enableOnTimer(123);
irdaikin.enableOffTimer(456);
ASSERT_FALSE(irdaikin.getSwingHorizontal());
ASSERT_FALSE(irdaikin.getPowerful());
irdaikin.disableOffTimer();
irdaikin.disableOnTimer();
ASSERT_FALSE(irdaikin.getSwingHorizontal());
ASSERT_FALSE(irdaikin.getPowerful());
}
// Test Eye mode.
TEST(TestDaikinClass, EyeSetting) {
IRDaikinESP irdaikin(0);
irdaikin.begin();
// The Eye setting is stored in the same byte as Econo mode.
// Econo mode tests are there to make sure it isn't harmed and vice-versa.
irdaikin.setEcono(false);
irdaikin.setEye(false);
ASSERT_FALSE(irdaikin.getEye());
EXPECT_FALSE(irdaikin.getEcono());
irdaikin.setEye(true);
ASSERT_TRUE(irdaikin.getEye());
EXPECT_FALSE(irdaikin.getEcono());
irdaikin.setEcono(false);
ASSERT_TRUE(irdaikin.getEye());
EXPECT_FALSE(irdaikin.getEcono());
irdaikin.setEcono(true);
ASSERT_TRUE(irdaikin.getEye());
EXPECT_TRUE(irdaikin.getEcono());
irdaikin.setEye(false);
ASSERT_FALSE(irdaikin.getEye());
EXPECT_TRUE(irdaikin.getEcono());
}
// Test Mold mode.
TEST(TestDaikinClass, MoldSetting) {
IRDaikinESP irdaikin(0);
irdaikin.begin();
irdaikin.setMold(false);
ASSERT_FALSE(irdaikin.getMold());
irdaikin.setMold(true);
ASSERT_TRUE(irdaikin.getMold());
irdaikin.setMold(false);
ASSERT_FALSE(irdaikin.getMold());
}
// Test Sensor mode.
TEST(TestDaikinClass, SensorSetting) {
IRDaikinESP irdaikin(0);
irdaikin.begin();
irdaikin.setSensor(false);
ASSERT_FALSE(irdaikin.getSensor());
irdaikin.setSensor(true);
ASSERT_TRUE(irdaikin.getSensor());
irdaikin.setSensor(false);
ASSERT_FALSE(irdaikin.getSensor());
}
TEST(TestDaikinClass, RenderTime) {
EXPECT_EQ("0:00", IRDaikinESP::renderTime(0));
EXPECT_EQ("0:10", IRDaikinESP::renderTime(10));
EXPECT_EQ("1:00", IRDaikinESP::renderTime(1 * 60 + 0));
EXPECT_EQ("23:59", IRDaikinESP::renderTime(23 * 60 + 59));
}
TEST(TestDaikinClass, SetAndGetRaw) {
IRDaikinESP irdaikin(0);
uint8_t initialState[DAIKIN_COMMAND_LENGTH] = {
0x11, 0xDA, 0x27, 0x00, 0x42, 0x00, 0x00, 0x54,
0x11, 0xDA, 0x27, 0x00, 0x00, 0x49, 0x1E, 0x00,
0xB0, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x4F};
uint8_t expectedState[DAIKIN_COMMAND_LENGTH] = {
0x11, 0xDA, 0x27, 0x00, 0x42, 0x00, 0x00, 0x54,
0x11, 0xDA, 0x27, 0x00, 0x00, 0x48, 0x2A, 0x00,
0xB0, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0xC0, 0x00, 0x02, 0x5A};
EXPECT_STATE_EQ(initialState, irdaikin.getRaw(), DAIKIN_BITS);
// toggle the power state.
irdaikin.setPower(!irdaikin.getPower());
irdaikin.setTemp(21);
irdaikin.setMold(true);
EXPECT_STATE_EQ(expectedState, irdaikin.getRaw(), DAIKIN_BITS);
irdaikin.setRaw(initialState);
EXPECT_STATE_EQ(initialState, irdaikin.getRaw(), DAIKIN_BITS);
}
TEST(TestDaikinClass, ChecksumValidation) {
uint8_t daikin_code[DAIKIN_COMMAND_LENGTH] = {
0x11, 0xDA, 0x27, 0xF0, 0x00, 0x00, 0x00, 0x02,
0x11, 0xDA, 0x27, 0x00, 0x00, 0x41, 0x1E, 0x00,
0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xE1};
EXPECT_TRUE(IRDaikinESP::validChecksum(daikin_code));
// Change the array so the checksum is invalid.
daikin_code[0] ^= 0xFF;
EXPECT_FALSE(IRDaikinESP::validChecksum(daikin_code));
// Restore the previous change, and change another byte.
daikin_code[0] ^= 0xFF;
daikin_code[4] ^= 0xFF;
EXPECT_FALSE(IRDaikinESP::validChecksum(daikin_code));
daikin_code[4] ^= 0xFF;
// Change something in the 2nd block.
daikin_code[10] ^= 0xFF;
EXPECT_FALSE(IRDaikinESP::validChecksum(daikin_code));
daikin_code[10] ^= 0xFF;
EXPECT_TRUE(IRDaikinESP::validChecksum(daikin_code));
}
// Test human readable output.
TEST(TestDaikinClass, HumanReadable) {
IRDaikinESP irdaikin(0);
EXPECT_EQ("Power: On, Mode: 4 (HEAT), Temp: 15C, Fan: 11 (QUIET), "
"Powerful: Off, Quiet: Off, Sensor: Off, Eye: Off, Mold: Off, "
"Swing (Horizontal): Off, Swing (Vertical): Off, "
"Current Time: 0:00, On Time: Off, Off Time: Off",
irdaikin.toString());
irdaikin.setMode(DAIKIN_AUTO);
irdaikin.setTemp(25);
irdaikin.setFan(DAIKIN_FAN_AUTO);
irdaikin.setQuiet(true);
irdaikin.setSensor(true);
irdaikin.setEye(true);
irdaikin.setMold(true);
irdaikin.setSwingVertical(true);
irdaikin.setSwingHorizontal(true);
irdaikin.setCurrentTime(9 * 60 + 15);
irdaikin.enableOnTimer(8 * 60 + 0);
irdaikin.enableOffTimer(17 * 60 + 30);
irdaikin.off();
EXPECT_EQ("Power: Off, Mode: 0 (AUTO), Temp: 25C, Fan: 10 (AUTO), "
"Powerful: Off, Quiet: On, Sensor: On, Eye: On, Mold: On, "
"Swing (Horizontal): On, Swing (Vertical): On, "
"Current Time: 9:15, On Time: 8:00, Off Time: 17:30",
irdaikin.toString());
}
// Test general message construction after tweaking some settings.
TEST(TestDaikinClass, MessageConstuction) {
IRDaikinESP irdaikin(0);
IRsendTest irsend(4);
@@ -385,35 +695,138 @@ TEST(TestDaikinClass, MessageConstuction) {
irsend.reset();
irsend.sendDaikin(irdaikin.getRaw());
EXPECT_EQ(
"m3650s1623"
"m428s428m428s428m428s428m428s428m428s428"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s1280m428s1280m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s428m428s1280m428s428m428s428m428s428m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s1280m428s1280m428s428m428s1280m428s428m428s1280m428s1280"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s29428"
"m3650s1623"
"m428s428m428s1280m428s428m428s428m428s428m428s428m428s1280m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s1280m428s428m428s1280m428s428m428s1280m428s428"
"m428s29428m3650s1623"
"m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
"m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
"m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s1280m428s428m428s428m428s428m428s1280m428s1280m428s428m428s428"
"m428s1280m428s428m428s428m428s1280m428s1280m428s1280m428s428m428s428"
"m428s428m428s1280m428s1280m428s428m428s1280m428s1280m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428m428s428"
"m428s1280m428s1280m428s1280m428s1280m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s1280m428s1280m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
"m428s428m428s428m428s428m428s1280m428s1280m428s1280m428s1280m428s428"
"m428s428m428s1280m428s1280m428s428m428s428m428s1280m428s1280m428s1280"
"m428s29428", irsend.outputStr());
}
// Tests for decodeDaikin().
// Test decoding a message captured from a real IR remote.
TEST(TestDecodeDaikin, RealExample) {
IRDaikinESP irdaikin(0);
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
uint8_t expectedState[DAIKIN_COMMAND_LENGTH] = {
0x11, 0xDA, 0x27, 0x00, 0x42, 0x3A, 0x05, 0x93, 0x11, 0xDA, 0x27, 0x00,
0x00, 0x3F, 0x3A, 0x00, 0xA0, 0x00, 0x0A, 0x25, 0x17, 0x01, 0x00, 0xC0,
0x00, 0x00, 0x32};
uint16_t rawData[DAIKIN_RAW_BITS] = {
416, 446, 416, 446, 416, 446, 418, 446, 416, 446, 416, 25434,
3436, 1768, 390, 1336, 390, 446, 416, 446, 416, 446, 416, 1336,
390, 446, 416, 446, 416, 446, 416, 446, 416, 1336, 390, 448,
416, 1336, 390, 1336, 390, 448, 416, 1336, 390, 1336, 390, 1338,
388, 1338, 390, 1336, 390, 446, 416, 446, 416, 1336, 390, 446,
416, 446, 416, 446, 416, 446, 416, 446, 416, 446, 416, 448,
416, 446, 416, 446, 416, 446, 416, 1336, 390, 446, 416, 1336,
390, 448, 416, 446, 416, 446, 416, 1336, 390, 1336, 390, 446,
416, 446, 416, 446, 416, 446, 416, 446, 416, 446, 416, 446,
416, 446, 416, 446, 416, 448, 416, 446, 416, 446, 416, 446,
416, 448, 414, 448, 416, 448, 416, 1336, 390, 1336, 390, 1336,
390, 446, 414, 1336, 390, 448, 414, 1336, 390, 1336, 390, 34878,
3436, 1768, 390, 1336, 390, 446, 416, 448, 416, 446, 416, 1336,
390, 446, 416, 448, 416, 446, 416, 446, 416, 1336, 390, 446,
416, 1336, 390, 1336, 390, 446, 416, 1336, 390, 1336, 390, 1336,
390, 1336, 390, 1336, 392, 446, 414, 448, 416, 1336, 390, 446,
416, 446, 416, 446, 416, 446, 414, 448, 416, 446, 416, 448,
414, 448, 416, 446, 416, 446, 416, 446, 414, 1336, 390, 448,
416, 446, 416, 446, 416, 448, 416, 1336, 390, 446, 416, 446,
416, 1336, 390, 446, 416, 1336, 390, 1336, 390, 1336, 390, 446,
416, 446, 414, 1338, 390, 446, 416, 1336, 390, 446, 416, 446,
416, 446, 416, 446, 416, 446, 416, 1336, 390, 1336, 390, 446,
416, 446, 416, 1336, 390, 446, 416, 446, 416, 1336, 390, 34876,
3436, 1768, 388, 1336, 390, 446, 416, 446, 416, 448, 416, 1336,
390, 446, 416, 446, 416, 446, 416, 448, 416, 1336, 390, 448,
414, 1336, 390, 1336, 390, 446, 416, 1336, 388, 1338, 388, 1336,
390, 1336, 390, 1336, 390, 446, 416, 446, 416, 1336, 390, 446,
420, 442, 416, 446, 416, 446, 416, 446, 416, 446, 416, 446,
416, 446, 416, 446, 416, 446, 416, 446, 416, 446, 416, 448,
416, 446, 416, 448, 416, 446, 416, 448, 416, 446, 416, 1336,
390, 1336, 390, 1336, 388, 1338, 390, 1336, 390, 1336, 392, 446,
416, 446, 416, 448, 416, 1334, 390, 446, 416, 1338, 388, 1336,
390, 1336, 390, 446, 416, 446, 416, 448, 414, 446, 416, 446,
416, 446, 416, 448, 416, 446, 416, 446, 416, 446, 416, 446,
416, 446, 416, 446, 416, 446, 416, 446, 416, 1336, 390, 446,
416, 1336, 390, 446, 414, 448, 416, 446, 416, 446, 416, 446,
416, 448, 416, 446, 416, 446, 416, 446, 416, 1336, 390, 446,
416, 1336, 390, 446, 416, 446, 416, 446, 416, 448, 416, 1338,
390, 444, 418, 1336, 390, 448, 416, 446, 416, 1336, 390, 446,
416, 446, 416, 1336, 390, 1336, 388, 1336, 390, 446, 416, 1336,
390, 448, 414, 448, 414, 448, 416, 1334, 390, 446, 416, 446,
416, 446, 416, 448, 416, 446, 416, 446, 416, 448, 416, 446,
416, 446, 416, 446, 416, 446, 416, 446, 416, 446, 416, 446,
416, 446, 416, 446, 416, 446, 416, 446, 416, 446, 416, 446,
416, 448, 416, 1336, 390, 1336, 390, 446, 416, 446, 416, 446,
416, 446, 414, 446, 416, 448, 416, 446, 416, 448, 414, 446,
418, 446, 416, 446, 416, 448, 416, 446, 416, 448, 416, 446,
416, 448, 416, 446, 416, 1336, 390, 446, 416, 446, 416, 1338,
390, 1336, 390, 446, 416, 446, 416}; // Captured by @sillyfrog
irsend.reset();
irsend.sendRaw(rawData, DAIKIN_RAW_BITS, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(DAIKIN, irsend.capture.decode_type);
ASSERT_EQ(DAIKIN_BITS, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
}
// Decoding a message we entirely constructed based solely on a given state.
TEST(TestDecodeDaikin, SyntheticExample) {
IRDaikinESP irdaikin(0);
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
uint8_t expectedState[DAIKIN_COMMAND_LENGTH] = {
0x11, 0xDA, 0x27, 0x00, 0x42, 0x3A, 0x05, 0x93, 0x11, 0xDA, 0x27, 0x00,
0x00, 0x3F, 0x3A, 0x00, 0xA0, 0x00, 0x0A, 0x25, 0x17, 0x01, 0x00, 0xC0,
0x00, 0x00, 0x32};
irsend.reset();
irsend.sendDaikin(expectedState);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(DAIKIN, irsend.capture.decode_type);
ASSERT_EQ(DAIKIN_BITS, irsend.capture.bits);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
}
+7 -7
View File
@@ -32,7 +32,7 @@ TEST(TestSendDenon, SendDataOnly) {
"m432s1296m432s432m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s432m432s432m432s1296m432s1296"
"m432s129600", irsend.outputStr());
"m432s98928", irsend.outputStr());
}
// Test sending with different repeats.
@@ -91,7 +91,7 @@ TEST(TestSendDenon, Send48BitWithRepeats) {
"m432s1296m432s432m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s432m432s432m432s1296m432s1296"
"m432s129600"
"m432s98928"
"m3456s1728"
"m432s432m432s432m432s1296m432s432m432s1296m432s432m432s1296m432s432"
"m432s432m432s1296m432s432m432s432m432s1296m432s1296m432s432m432s432"
@@ -99,7 +99,7 @@ TEST(TestSendDenon, Send48BitWithRepeats) {
"m432s1296m432s432m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s432m432s432m432s1296m432s1296"
"m432s129600", irsend.outputStr());
"m432s98928", irsend.outputStr());
irsend.sendDenon(0x2A4C028D6CE3, DENON_48_BITS, 2); // 2 repeats.
EXPECT_EQ(
"m3456s1728"
@@ -109,7 +109,7 @@ TEST(TestSendDenon, Send48BitWithRepeats) {
"m432s1296m432s432m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s432m432s432m432s1296m432s1296"
"m432s129600"
"m432s98928"
"m3456s1728"
"m432s432m432s432m432s1296m432s432m432s1296m432s432m432s1296m432s432"
"m432s432m432s1296m432s432m432s432m432s1296m432s1296m432s432m432s432"
@@ -117,7 +117,7 @@ TEST(TestSendDenon, Send48BitWithRepeats) {
"m432s1296m432s432m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s432m432s432m432s1296m432s1296"
"m432s129600"
"m432s98928"
"m3456s1728"
"m432s432m432s432m432s1296m432s432m432s1296m432s432m432s1296m432s432"
"m432s432m432s1296m432s432m432s432m432s1296m432s1296m432s432m432s432"
@@ -125,7 +125,7 @@ TEST(TestSendDenon, Send48BitWithRepeats) {
"m432s1296m432s432m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s432m432s432m432s1296m432s1296"
"m432s129600", irsend.outputStr());
"m432s98928", irsend.outputStr());
}
// Test sending an atypical data size.
@@ -153,7 +153,7 @@ TEST(TestSendDenon, SendUnusualSize) {
"m432s1296m432s432m432s1296m432s432m432s1296m432s432m432s1296m432s1296"
"m432s1296m432s1296m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s1296m432s1296"
"m432s129600", irsend.outputStr());
"m432s74736", irsend.outputStr());
}
// Tests for decodeDenon().
+442 -97
View File
@@ -1,5 +1,6 @@
// Copyright 2017 Jonny Graham
// Copyright 2017 Jonny Graham, David Conran
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Fujitsu.h"
@@ -17,156 +18,239 @@ template<typename T, size_t size>
<< "] (" << std::hex << e << std::dec << ")";
}
}
return ::testing::AssertionSuccess();
}
// Tests for Mitsubishi A/C methods.
// Tests for Fujitsu A/C methods.
// Test sending typical data only.
TEST(TestSendFujitsuAC, GetRawDefault) {
IRFujitsuAC fujitsuACSender = IRFujitsuAC(4);
fujitsuACSender.setCmd(FUJITSU_AC_CMD_TURN_ON);
fujitsuACSender.setSwing(FUJITSU_AC_SWING_BOTH);
fujitsuACSender.setMode(FUJITSU_AC_MODE_COOL);
fujitsuACSender.setFanSpeed(FUJITSU_AC_FAN_HIGH);
fujitsuACSender.setTemp(24);
uint8_t expected[16] = {0x14, 0x63, 0x0, 0x10, 0x10, 0xFE, 0x9, 0x30,
0x81, 0x1, 0x31, 0x0, 0x0, 0x0, 0x20, 0xFD};
EXPECT_TRUE(ArraysMatch(expected, fujitsuACSender.getRaw()));
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.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("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
uint8_t expected_ardb1[15] = {
0x14, 0x63, 0x00, 0x10, 0x10, 0xFC, 0x08, 0x30,
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("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
}
TEST(TestSendFujitsuAC, GetRawTurnOff) {
IRFujitsuAC fujitsuACSender = IRFujitsuAC(4);
fujitsuACSender.off();
uint8_t expected[7] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02, 0xFD};
EXPECT_TRUE(ArraysMatch(expected, fujitsuACSender.getRaw()));
TEST(TestIRFujitsuACClass, GetRawTurnOff) {
IRFujitsuAC fujitsu = IRFujitsuAC(4);
fujitsu.setModel(ARRAH2E);
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("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("Power: Off, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
}
TEST(TestSendFujitsuAC, GetRawStepHoriz) {
IRFujitsuAC fujitsuACSender = IRFujitsuAC(4);
fujitsuACSender.stepHoriz();
TEST(TestIRFujitsuACClass, GetRawStepHoriz) {
IRFujitsuAC fujitsu = IRFujitsuAC(4);
fujitsu.stepHoriz();
uint8_t expected[7] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x79, 0x86};
EXPECT_TRUE(ArraysMatch(expected, fujitsuACSender.getRaw()));
}
TEST(TestSendFujitsuAC, GetRawStepVert) {
IRFujitsuAC fujitsuACSender = IRFujitsuAC(4);
fujitsuACSender.stepVert();
uint8_t expected[7] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x6C, 0x93};
EXPECT_TRUE(ArraysMatch(expected, fujitsuACSender.getRaw()));
EXPECT_TRUE(ArraysMatch(expected, fujitsu.getRaw()));
EXPECT_EQ(FUJITSU_AC_STATE_LENGTH_SHORT, fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: Step vane horizontally",
fujitsu.toString());
}
TEST(TestSendFujitsuAC, GetRawWithSwingHoriz) {
IRFujitsuAC fujitsuACSender = IRFujitsuAC(4);
fujitsuACSender.setCmd(FUJITSU_AC_CMD_STAY_ON);
fujitsuACSender.setSwing(FUJITSU_AC_SWING_HORIZ);
fujitsuACSender.setMode(FUJITSU_AC_MODE_COOL);
fujitsuACSender.setFanSpeed(FUJITSU_AC_FAN_QUIET);
fujitsuACSender.setTemp(25);
TEST(TestIRFujitsuACClass, GetRawStepVert) {
IRFujitsuAC fujitsu = IRFujitsuAC(4);
fujitsu.setModel(ARRAH2E);
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("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: Step vane vertically",
fujitsu.toString());
fujitsu.setModel(ARDB1);
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,
fujitsu.getStateLength());
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"Swing: Vert + Horiz, Command: Step vane vertically",
fujitsu.toString());
}
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.setTemp(25);
uint8_t expected[16] = {0x14, 0x63, 0x0, 0x10, 0x10, 0xFE, 0x9, 0x30,
0x90, 0x1, 0x24, 0x0, 0x0, 0x0, 0x20, 0xFB};
EXPECT_TRUE(ArraysMatch(expected, fujitsuACSender.getRaw()));
EXPECT_TRUE(ArraysMatch(expected, fujitsu.getRaw()));
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 25C, Fan: 4 (QUIET), "
"Swing: Horiz, Command: N/A",
fujitsu.toString());
}
TEST(TestSendFujitsuAC, GetRawWithFan) {
IRFujitsuAC fujitsuACSender = IRFujitsuAC(4);
fujitsuACSender.setCmd(FUJITSU_AC_CMD_STAY_ON);
fujitsuACSender.setSwing(FUJITSU_AC_SWING_HORIZ);
fujitsuACSender.setMode(FUJITSU_AC_MODE_FAN);
fujitsuACSender.setFanSpeed(FUJITSU_AC_FAN_MED);
fujitsuACSender.setTemp(20); // temp doesn't matter for fan
// but it is sent by the RC anyway
uint8_t expected[16] = {0x14, 0x63, 0x0, 0x10, 0x10, 0xFE, 0x9, 0x30,
0x40, 0x3, 0x22, 0x0, 0x0, 0x0, 0x20, 0x4B};
EXPECT_TRUE(ArraysMatch(expected, fujitsuACSender.getRaw()));
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.setTemp(20); // temp doesn't matter for fan
// but it is sent by the RC anyway
fujitsu.setModel(ARRAH2E);
uint8_t expected_arrah2e[16] = {
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("Power: On, Mode: 3 (FAN), Temp: 20C, Fan: 2 (MED), Swing: Horiz, "
"Command: N/A", fujitsu.toString());
fujitsu.setModel(ARDB1);
uint8_t expected_ardb1[15] = {
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("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] = {
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30,
0x81, 0x01, 0x31, 0x00, 0x00, 0x00, 0x20, 0xFD};
EXPECT_TRUE(ArraysMatch(expected_default_arrah2e, fujitsu.getRaw()));
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
"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] = {
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());
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());
}
TEST(TestSendFujitsuAC, GenerateMessage) {
IRFujitsuAC fujitsuACSender = IRFujitsuAC(4);
IRFujitsuAC fujitsu = IRFujitsuAC(4);
IRsendTest irsend(4);
fujitsuACSender.begin();
fujitsu.begin();
irsend.begin();
fujitsuACSender.setCmd(FUJITSU_AC_CMD_STAY_ON);
fujitsuACSender.setSwing(FUJITSU_AC_SWING_BOTH);
fujitsuACSender.setMode(FUJITSU_AC_MODE_COOL);
fujitsuACSender.setFanSpeed(FUJITSU_AC_FAN_HIGH);
fujitsuACSender.setTemp(24);
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.setTemp(24);
EXPECT_EQ(FUJITSU_AC_FAN_HIGH, fujitsuACSender.getFanSpeed());
EXPECT_EQ(FUJITSU_AC_MODE_COOL, fujitsuACSender.getMode());
EXPECT_EQ(24, fujitsuACSender.getTemp());
EXPECT_EQ(FUJITSU_AC_SWING_BOTH, fujitsuACSender.getSwing());
EXPECT_EQ(FUJITSU_AC_CMD_STAY_ON, fujitsuACSender.getCmd());
EXPECT_EQ(FUJITSU_AC_FAN_HIGH, fujitsu.getFanSpeed());
EXPECT_EQ(FUJITSU_AC_MODE_COOL, fujitsu.getMode());
EXPECT_EQ(24, fujitsu.getTemp());
EXPECT_EQ(FUJITSU_AC_SWING_BOTH, fujitsu.getSwing());
EXPECT_EQ(FUJITSU_AC_CMD_STAY_ON, fujitsu.getCmd());
irsend.reset();
irsend.sendFujitsuAC(fujitsuACSender.getRaw(), FUJITSU_AC_STATE_LENGTH);
irsend.sendFujitsuAC(fujitsu.getRaw(), FUJITSU_AC_STATE_LENGTH);
EXPECT_EQ(
"m3224s1574m448s367m448s367m448s1182m448s367m448s1182m448s367m448s367m448"
"s367m448s1182m448s1182m448s367m448s367m448s367m448s1182m448s1182m448s367"
"m448s367m448s367m448s367m448s367m448s367m448s367m448s367m448s367m448"
"s367m448s367m448s367m448s367m448s1182m448s367m448s367m448s367m448s367m448"
"s367m448s367m448s367m448s1182m448s367m448s367m448s367m448s367m448s1182"
"m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s367"
"m448s367m448s1182m448s367m448s367m448s367m448s367m448s367m448s367m448s367"
"m448s367m448s1182m448s1182m448s367m448s367m448s367m448s367m448s367m448s367"
"m448s367m448s367m448s367m448s1182m448s1182m448s367m448s367m448s367m448"
"s367m448s367m448s367m448s367m448s1182m448s367m448s367m448s367m448s1182m448"
"s1182m448s367m448s367m448s367m448s367m448s367m448s367m448s367m448s367m448"
"s367m448s367m448s367m448s367m448s367m448s367m448s367m448s367m448s367m448"
"s367m448s367m448s367m448s367m448s367m448s367m448s367m448s367m448s367m448"
"s367m448s367m448s367m448s367m448s367m448s1182m448s367m448s367m448s367m448"
"m3324s1574m448s390m448s390m448s1182m448s390m448s1182m448s390m448s390m448"
"s390m448s1182m448s1182m448s390m448s390m448s390m448s1182m448s1182m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s1182m448s390m448s390m448s390m448s390m448s1182"
"m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s390"
"m448s390m448s1182m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s1182m448s1182m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s1182m448s1182m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390m448s1182m448"
"s1182m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448"
"s390m448s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390m448"
"s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s8100",
irsend.outputStr());
}
TEST(TestSendFujitsuAC, GenerateShortMessage) {
IRFujitsuAC fujitsuACSender = IRFujitsuAC(4);
IRFujitsuAC fujitsu = IRFujitsuAC(4);
IRsendTest irsend(4);
fujitsuACSender.begin();
fujitsu.begin();
irsend.begin();
fujitsuACSender.off();
fujitsu.off();
EXPECT_EQ(FUJITSU_AC_CMD_TURN_OFF, fujitsuACSender.getCmd());
EXPECT_EQ(FUJITSU_AC_CMD_TURN_OFF, fujitsu.getCmd());
irsend.reset();
irsend.sendFujitsuAC(fujitsuACSender.getRaw(), FUJITSU_AC_STATE_LENGTH_SHORT);
irsend.sendFujitsuAC(fujitsu.getRaw(), FUJITSU_AC_STATE_LENGTH_SHORT);
EXPECT_EQ(
"m3224s1574m448s367m448s367m448s1182m448s367m448s1182m448s367m448s367m448"
"s367m448s1182m448s1182m448s367m448s367m448s367m448s1182m448s1182m448s367"
"m448s367m448s367m448s367m448s367m448s367m448s367m448s367m448s367m448s367"
"m448s367m448s367m448s367m448s1182m448s367m448s367m448s367m448s367m448s367"
"m448s367m448s367m448s1182m448s367m448s367m448s367m448s367m448s1182m448s367"
"m448s367m448s367m448s367m448s367m448s367m448s1182m448s367m448s1182m448"
"m3324s1574m448s390m448s390m448s1182m448s390m448s1182m448s390m448s390m448"
"s390m448s1182m448s1182m448s390m448s390m448s390m448s1182m448s1182m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s1182m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s1182m448s390m448s390m448s390m448s390m448s1182m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s1182m448s390m448s1182m448"
"s1182m448s1182m448s1182m448s1182m448s1182m448s8100",
irsend.outputStr());
}
// Issue #275
TEST(TestSendFujitsuAC, Issue275) {
IRFujitsuAC fujitsuACSender = IRFujitsuAC(4);
IRFujitsuAC fujitsu = IRFujitsuAC(4);
IRsendTest irsend(4);
fujitsuACSender.begin();
fujitsu.begin();
irsend.begin();
irsend.reset();
fujitsuACSender.setCmd(FUJITSU_AC_CMD_TURN_OFF);
irsend.sendFujitsuAC(fujitsuACSender.getRaw(), FUJITSU_AC_STATE_LENGTH_SHORT);
fujitsu.setCmd(FUJITSU_AC_CMD_TURN_OFF);
irsend.sendFujitsuAC(fujitsu.getRaw(), FUJITSU_AC_STATE_LENGTH_SHORT);
EXPECT_EQ(
// Header
"m3224s1574"
"m3324s1574"
// 0 0 1 0 1 0 0 0 (0x28)
"m448s367m448s367m448s1182m448s367m448s1182m448s367m448s367m448s367"
"m448s390m448s390m448s1182m448s390m448s1182m448s390m448s390m448s390"
// 1 1 0 0 0 1 1 0 (0xC6)
"m448s1182m448s1182m448s367m448s367m448s367m448s1182m448s1182m448s367"
"m448s1182m448s1182m448s390m448s390m448s390m448s1182m448s1182m448s390"
// 0 0 0 0 0 0 0 0 (0x00)
"m448s367m448s367m448s367m448s367m448s367m448s367m448s367m448s367"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
// 0 0 0 0 1 0 0 0 (0x08)
"m448s367m448s367m448s367m448s367m448s1182m448s367m448s367m448s367"
"m448s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390"
// 0 0 0 0 1 0 0 0 (0x08)
"m448s367m448s367m448s367m448s367m448s1182m448s367m448s367m448s367"
"m448s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390"
// 0 1 0 0 0 0 0 0 (0x40)
"m448s367m448s1182m448s367m448s367m448s367m448s367m448s367m448s367"
"m448s390m448s1182m448s390m448s390m448s390m448s390m448s390m448s390"
// 1 0 1 1 1 1 1 1 (0xBF)
"m448s1182m448s367m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182"
"m448s1182m448s390m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182"
// Footer
"m448s8100", irsend.outputStr());
@@ -205,3 +289,264 @@ TEST(TestSendFujitsuAC, Issue275) {
"m450",
irsend.outputStr());
}
TEST(TestDecodeFujitsuAC, SyntheticShortMessages) {
IRsendTest irsend(0);
IRFujitsuAC fujitsu = IRFujitsuAC(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
fujitsu.setModel(ARRAH2E);
fujitsu.setCmd(FUJITSU_AC_CMD_TURN_OFF);
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);
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);
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);
uint8_t expected_ardb1[6] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02};
EXPECT_TRUE(ArraysMatch(expected_ardb1, irsend.capture.state));
}
TEST(TestDecodeFujitsuAC, SyntheticLongMessages) {
IRsendTest irsend(0);
IRFujitsuAC fujitsu = IRFujitsuAC(0);
IRrecv irrecv(0);
irsend.begin();
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.setTemp(18);
irsend.sendFujitsuAC(fujitsu.getRaw(), fujitsu.getStateLength());
ASSERT_EQ(FUJITSU_AC_STATE_LENGTH, 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] = {
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("Power: On, Mode: 1 (COOL), Temp: 18C, Fan: 4 (QUIET), "
"Swing: Vert, Command: N/A", fujitsu.toString());
irsend.reset();
fujitsu.setModel(ARDB1);
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_BITS - 8, irsend.capture.bits);
uint8_t expected_ardb1[FUJITSU_AC_STATE_LENGTH - 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("Power: On, Mode: 1 (COOL), Temp: 18C, Fan: 4 (QUIET), "
"Swing: Vert, Command: N/A", fujitsu.toString());
}
TEST(TestDecodeFujitsuAC, RealShortARDB1OffExample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
IRFujitsuAC fujitsu = IRFujitsuAC(0);
irsend.begin();
irsend.reset();
// "Off" Message recorded from an AR-DB1 remote.
uint16_t rawData[99] = {
3310, 1636, 440, 386, 440, 394, 442, 1210, 442, 390, 414, 1220,
444, 390, 446, 380, 446, 380, 436, 1216, 438, 1214, 438, 388,
438, 386, 438, 396, 410, 1222, 440, 1220, 442, 384, 442, 384,
442, 384, 442, 382, 444, 382, 442, 382, 444, 380, 446, 380,
446, 380, 444, 380, 436, 390, 436, 388, 436, 388, 438, 1214,
438, 386, 438, 388, 438, 386, 440, 386, 440, 384, 442, 384,
442, 384, 442, 1210, 444, 382, 444, 382, 444, 382, 444, 380,
446, 1206, 436, 390, 436, 388, 436, 388, 438, 388, 438, 396,
420, 388, 436};
irsend.sendRaw(rawData, 99, 38000);
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);
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("Power: Off, Mode: 0 (AUTO), Temp: 16C, Fan: 0 (AUTO), "
"Swing: Off, Command: N/A", fujitsu.toString());
}
TEST(TestDecodeFujitsuAC, RealLongARDB1Example) {
IRsendTest irsend(0);
IRrecv irrecv(0);
IRFujitsuAC fujitsu = IRFujitsuAC(0);
irsend.begin();
irsend.reset();
uint16_t rawData1[243] = {
3316, 1632, 444, 390, 438, 388, 436, 1216, 438, 388, 438, 1214,
438, 388, 438, 386, 440, 386, 440, 1212, 440, 1210, 442, 392,
412, 396, 442, 392, 444, 1208, 444, 1208, 444, 380, 444, 380,
446, 380, 436, 390, 436, 390, 436, 390, 436, 388, 438, 388,
438, 388, 438, 388, 438, 386, 438, 386, 440, 384, 440, 1210,
442, 384, 442, 382, 442, 384, 442, 384, 442, 382, 442, 382,
444, 382, 444, 1208, 444, 382, 444, 380, 446, 380, 436, 390,
436, 390, 436, 1214, 438, 1214, 438, 1212, 440, 1212, 440, 1220,
412, 1222, 440, 394, 442, 382, 442, 382, 444, 1208, 444, 382,
444, 380, 446, 380, 446, 380, 434, 390, 436, 388, 438, 388,
438, 388, 438, 1214, 438, 1212, 440, 386, 440, 394, 412, 1222,
440, 394, 442, 384, 442, 384, 442, 382, 442, 1208, 444, 390,
414, 394, 442, 1216, 446, 380, 436, 390, 436, 390, 436, 388,
436, 390, 436, 388, 438, 386, 440, 386, 440, 386, 438, 1212,
440, 386, 440, 384, 440, 384, 442, 392, 412, 396, 440, 394,
442, 382, 444, 382, 444, 382, 444, 380, 444, 380, 444, 382,
444, 380, 446, 380, 436, 388, 436, 390, 436, 388, 438, 388,
438, 388, 438, 388, 438, 386, 440, 386, 440, 386, 442, 384,
440, 386, 442, 384, 440, 384, 442, 384, 442, 382, 442, 382,
444, 1208, 444, 382, 444, 1208, 444, 380, 446, 1206, 436, 390,
436, 1216, 436};
irsend.sendRaw(rawData1, 243, 38000);
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] = {
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("Power: On, Mode: 1 (COOL), Temp: 18C, Fan: 4 (QUIET), "
"Swing: Off, Command: N/A", fujitsu.toString());
irsend.reset();
uint16_t rawData2[243] = {
3316, 1630, 436, 398, 438, 386, 438, 1212, 440, 384, 440, 1212,
442, 384, 442, 392, 414, 394, 442, 1218, 446, 1206, 436, 390,
436, 388, 438, 388, 438, 1214, 440, 1212, 440, 384, 442, 384,
442, 384, 442, 382, 444, 382, 444, 382, 444, 380, 446, 380,
444, 380, 436, 390, 436, 388, 438, 396, 418, 388, 438, 1232,
410, 396, 440, 394, 442, 384, 442, 384, 442, 382, 442, 392,
414, 392, 444, 1216, 446, 380, 436, 390, 436, 396, 418, 390,
436, 398, 438, 1214, 440, 1212, 440, 1210, 442, 1208, 444, 1216,
416, 1218, 444, 388, 436, 390, 436, 388, 438, 1214, 440, 386,
438, 386, 440, 386, 440, 384, 442, 384, 442, 384, 442, 382,
444, 382, 444, 1206, 446, 1206, 436, 390, 436, 388, 438, 388,
438, 386, 440, 394, 410, 396, 440, 1220, 442, 1210, 442, 392,
414, 394, 442, 1218, 446, 406, 410, 388, 436, 390, 436, 390,
436, 388, 438, 386, 440, 386, 440, 386, 440, 386, 440, 384,
442, 384, 442, 384, 442, 382, 444, 382, 444, 380, 446, 380,
446, 380, 436, 390, 436, 390, 436, 388, 438, 386, 438, 388,
438, 386, 440, 386, 440, 384, 442, 384, 442, 384, 442, 384,
442, 382, 444, 382, 444, 380, 446, 380, 446, 380, 436, 390,
436, 388, 436, 388, 438, 386, 438, 386, 440, 386, 440, 1212,
440, 1210, 442, 1210, 442, 1208, 444, 1208, 436, 390, 436, 388,
436, 1214, 440};
irsend.sendRaw(rawData2, 243, 38000);
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] = {
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("Power: On, Mode: 1 (COOL), Temp: 19C, Fan: 0 (AUTO), "
"Swing: Off, Command: N/A", fujitsu.toString());
}
TEST(TestDecodeFujitsuAC, Issue414) {
IRsendTest irsend(0);
IRrecv irrecv(0);
IRFujitsuAC fujitsu = IRFujitsuAC(0);
// Capture as supplied by arpmota
uint16_t rawData[259] = {3352, 1574, 480, 350, 480, 346, 480, 1190, 458, 346,
508, 1140, 480, 346, 506, 346, 458, 346, 480, 1168, 480, 1192, 452, 374,
458, 346, 480, 346, 508, 1168, 480, 1140, 480, 346, 506, 346, 458, 346,
480, 346, 480, 346, 480, 346, 484, 372, 454, 374, 456, 346, 508, 318,
480, 374, 458, 374, 480, 318, 480, 1196, 452, 346, 480, 346, 484, 342,
484, 346, 480, 374, 458, 346, 506, 318, 508, 1170, 452, 346, 480, 374,
458, 346, 506, 318, 480, 1196, 452, 1190, 458, 1162, 480, 1196, 452,
1170, 480, 1190, 458, 1164, 480, 1196, 480, 318, 508, 346, 456, 1192,
480, 346, 456, 374, 452, 346, 480, 374, 458, 342, 484, 346, 508, 346,
456, 342, 512, 1164, 458, 1164, 508, 346, 456, 346, 480, 1190, 456, 342,
484, 346, 506, 346, 456, 374, 452, 346, 508, 346, 458, 1164, 508, 346,
458, 374, 452, 1168, 480, 374, 480, 318, 480, 374, 456, 346, 508, 318,
480, 346, 484, 374, 480, 318, 484, 342, 484, 374, 480, 318, 484, 342,
484, 346, 508, 318, 508, 346, 458, 346, 506, 318, 480, 374, 458, 346,
506, 318, 480, 346, 484, 374, 480, 318, 482, 372, 456, 346, 508, 318,
506, 348, 456, 342, 484, 346, 508, 318, 484, 374, 480, 318, 508, 318,
484, 346, 508, 318, 480, 374, 456, 346, 508, 346, 480, 318, 480, 346,
484, 374, 480, 320, 484, 1164, 508, 346, 458, 342, 512, 1164, 458, 1190,
454, 346, 484, 1164, 508, 346, 458, 1164, 480, 350, 480, 374, 480};
uint8_t state[16] = {
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30, 0x81, 0x04, 0x00, 0x00,
0x00, 0x00, 0x20, 0x2B};
irsend.begin();
irsend.reset();
irsend.sendRaw(rawData, 259, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
ASSERT_EQ(FUJITSU_AC_BITS, 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("Power: On, Mode: 4 (HEAT), Temp: 24C, Fan: 0 (AUTO), "
"Swing: Off, Command: N/A", fujitsu.toString());
// Resend it using the state this time.
irsend.reset();
irsend.sendFujitsuAC(state, 16);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
ASSERT_EQ(FUJITSU_AC_BITS, irsend.capture.bits);
EXPECT_TRUE(ArraysMatch(state, irsend.capture.state));
EXPECT_EQ(
"m3324s1574"
"m448s390m448s390m448s1182m448s390m448s1182m448s390m448s390m448s390"
"m448s1182m448s1182m448s390m448s390m448s390m448s1182m448s1182m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s1182m448s390m448s390m448s390"
"m448s390m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182m448s1182"
"m448s1182m448s390m448s390m448s1182m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s1182m448s1182m448s390m448s390"
"m448s1182m448s390m448s390m448s390m448s390m448s390m448s390m448s1182"
"m448s390m448s390m448s1182m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
"m448s390m448s390m448s390m448s390m448s390m448s1182m448s390m448s390"
"m448s1182m448s1182m448s390m448s1182m448s390m448s1182m448s390m448s390"
"m448s8100", irsend.outputStr());
}
@@ -0,0 +1,152 @@
// Copyright 2018 David Conran
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for sendGICable().
// Test sending typical data only.
TEST(TestSendGICable, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
irsend.sendGICable(0);
EXPECT_EQ(
"m9000s4400"
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200"
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200"
"m550s41650"
"m9000s2200m550s87850", irsend.outputStr());
irsend.sendGICable(0x8807);
EXPECT_EQ(
"m9000s4400"
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
"m550s30650"
"m9000s2200m550s87850", irsend.outputStr());
irsend.sendGICable(0xFFFF);
EXPECT_EQ(
"m9000s4400"
"m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400"
"m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400"
"m550s6450"
"m9000s2200m550s87850", irsend.outputStr());
}
// Test sending with repeats.
TEST(TestSendGICable, SendWithRepeats) {
IRsendTest irsend(0);
irsend.begin();
// Send a command with 0 repeats.
irsend.sendGICable(0x8807, GICABLE_BITS, 0);
EXPECT_EQ(
"m9000s4400"
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
"m550s30650", irsend.outputStr());
// Send a command with 1 repeat.
irsend.sendGICable(0x8807, GICABLE_BITS, 1);
EXPECT_EQ(
"m9000s4400"
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
"m550s30650"
"m9000s2200m550s87850", irsend.outputStr());
// Send a command with 3 repeats.
irsend.sendGICable(0x8807, GICABLE_BITS, 3);
EXPECT_EQ(
"m9000s4400"
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
"m550s30650"
"m9000s2200m550s87850"
"m9000s2200m550s87850"
"m9000s2200m550s87850", irsend.outputStr());
}
// Tests for decodeGICable().
// Decode normal GICable messages.
TEST(TestDecodeGICable, SyntheticDecode) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Synthesised Normal GICable message.
irsend.reset();
irsend.sendGICable(0x8807);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(GICABLE, irsend.capture.decode_type);
EXPECT_EQ(GICABLE_BITS, irsend.capture.bits);
EXPECT_EQ(0x8807, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
}
// Decode a recorded example
TEST(TestDecodeGICable, RealExampleDecodeOK) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// 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};
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(0x8807, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
}
TEST(TestDecodeGICable, RealExampleDecodeLEFT) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// 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};
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(0x6C0E, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
}
TEST(TestDecodeGICable, RealExampleDecodeZEROKey) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// 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};
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(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
}
@@ -22,18 +22,18 @@ TEST(TestSendGlobalCache, NonRepeatingCode) {
21, 22, 21, 65, 21, 1519};
irsend.sendGC(gc_test, 71);
irsend.makeDecodeResult();
EXPECT_EQ("m8892s4472m546s572m546s546m546s1690m546s546m546s572m546s572"
"m546s546m546s572m546s1690m546s1690m546s572m546s1690m546s1690"
"m546s1690m546s1690m546s1690m546s1690m546s572m546s572m546s546"
"m546s572m546s572m546s1690m546s572m546s546m546s1690m546s1690"
"m546s1690m546s1664m572s1690m546s572m546s1690m546s39494",
irsend.outputStr());
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, 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());
}
// Test sending typical command with repeats.
@@ -52,6 +52,12 @@ TEST(TestSendGlobalCache, RepeatCode) {
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(0xC1A28877, irsend.capture.value);
EXPECT_EQ(0x4583, irsend.capture.address);
EXPECT_EQ(0x11, irsend.capture.command);
EXPECT_EQ("m8866s4446m546s1664m546s1664m546s546m546s546m546s546m546s546"
"m546s546m546s1664m546s1664m546s546m546s1664m546s546m546s546"
"m546s546m546s1664m546s546m546s1664m546s546m546s546m546s546"
@@ -59,10 +65,4 @@ TEST(TestSendGlobalCache, RepeatCode) {
"m546s1664m546s546m546s1664m546s1664m546s1664m546s41600"
"m8866s2210m546s94822"
"m8866s2210m546s94822", irsend.outputStr());
EXPECT_TRUE(irrecv.decodeNEC(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(0xC1A28877, irsend.capture.value);
EXPECT_EQ(0x4583, irsend.capture.address);
EXPECT_EQ(0x11, irsend.capture.command);
}
+324
View File
@@ -1,7 +1,11 @@
// Copyright 2017 David Conran
#include "IRremoteESP8266.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Gree.h"
#include "gtest/gtest.h"
// Tests for sendGree().
@@ -190,3 +194,323 @@ TEST(TestSendGree, CompareUint64ToCharResults) {
irsend_uint64.sendGree((uint64_t) 0x0);
ASSERT_EQ(irsend_chars.outputStr(), irsend_uint64.outputStr());
}
// Tests for IRGreeAC class.
TEST(TestGreeClass, Power) {
IRGreeAC irgree(0);
irgree.begin();
irgree.on();
EXPECT_TRUE(irgree.getPower());
irgree.off();
EXPECT_FALSE(irgree.getPower());
irgree.setPower(true);
EXPECT_TRUE(irgree.getPower());
irgree.setPower(false);
EXPECT_FALSE(irgree.getPower());
}
TEST(TestGreeClass, Temperature) {
IRGreeAC irgree(0);
irgree.begin();
irgree.setMode(GREE_COOL);
irgree.setTemp(0);
EXPECT_EQ(GREE_MIN_TEMP, irgree.getTemp());
irgree.setTemp(255);
EXPECT_EQ(GREE_MAX_TEMP, irgree.getTemp());
irgree.setTemp(GREE_MIN_TEMP);
EXPECT_EQ(GREE_MIN_TEMP, irgree.getTemp());
irgree.setTemp(GREE_MAX_TEMP);
EXPECT_EQ(GREE_MAX_TEMP, irgree.getTemp());
irgree.setTemp(GREE_MIN_TEMP - 1);
EXPECT_EQ(GREE_MIN_TEMP, irgree.getTemp());
irgree.setTemp(GREE_MAX_TEMP + 1);
EXPECT_EQ(GREE_MAX_TEMP, irgree.getTemp());
irgree.setTemp(17);
EXPECT_EQ(17, irgree.getTemp());
irgree.setTemp(21);
EXPECT_EQ(21, irgree.getTemp());
irgree.setTemp(25);
EXPECT_EQ(25, irgree.getTemp());
irgree.setTemp(29);
EXPECT_EQ(29, irgree.getTemp());
}
TEST(TestGreeClass, OperatingMode) {
IRGreeAC irgree(0);
irgree.begin();
irgree.setTemp(17);
irgree.setMode(GREE_AUTO); // Auto should lock the temp to 25C.
EXPECT_EQ(GREE_AUTO, 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(GREE_HEAT);
EXPECT_EQ(GREE_HEAT, 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());
EXPECT_EQ(1, irgree.getFan());
irgree.setFan(GREE_FAN_MAX);
EXPECT_EQ(1, irgree.getFan());
irgree.setMode(GREE_FAN);
EXPECT_EQ(GREE_FAN, irgree.getMode());
irgree.setMode(GREE_HEAT + 1);
EXPECT_EQ(GREE_AUTO, irgree.getMode());
irgree.setMode(255);
EXPECT_EQ(GREE_AUTO, irgree.getMode());
}
TEST(TestGreeClass, Light) {
IRGreeAC irgree(0);
irgree.begin();
irgree.setLight(true);
EXPECT_TRUE(irgree.getLight());
irgree.setLight(false);
EXPECT_FALSE(irgree.getLight());
irgree.setLight(true);
EXPECT_TRUE(irgree.getLight());
}
TEST(TestGreeClass, XFan) {
IRGreeAC irgree(0);
irgree.begin();
irgree.setXFan(true);
EXPECT_TRUE(irgree.getXFan());
irgree.setXFan(false);
EXPECT_FALSE(irgree.getXFan());
irgree.setXFan(true);
EXPECT_TRUE(irgree.getXFan());
}
TEST(TestGreeClass, Turbo) {
IRGreeAC irgree(0);
irgree.begin();
irgree.setTurbo(true);
EXPECT_TRUE(irgree.getTurbo());
irgree.setTurbo(false);
EXPECT_FALSE(irgree.getTurbo());
irgree.setTurbo(true);
EXPECT_TRUE(irgree.getTurbo());
}
TEST(TestGreeClass, Sleep) {
IRGreeAC irgree(0);
irgree.begin();
irgree.setSleep(true);
EXPECT_TRUE(irgree.getSleep());
irgree.setSleep(false);
EXPECT_FALSE(irgree.getSleep());
irgree.setSleep(true);
EXPECT_TRUE(irgree.getSleep());
}
TEST(TestGreeClass, FanSpeed) {
IRGreeAC irgree(0);
irgree.begin();
irgree.setFan(0);
EXPECT_EQ(0, irgree.getFan());
irgree.setFan(255);
EXPECT_EQ(GREE_FAN_MAX, irgree.getFan());
irgree.setFan(GREE_FAN_MAX);
EXPECT_EQ(GREE_FAN_MAX, irgree.getFan());
irgree.setFan(GREE_FAN_MAX + 1);
EXPECT_EQ(GREE_FAN_MAX, irgree.getFan());
irgree.setFan(GREE_FAN_MAX - 1);
EXPECT_EQ(GREE_FAN_MAX - 1, irgree.getFan());
irgree.setFan(1);
EXPECT_EQ(1, irgree.getFan());
irgree.setFan(1);
EXPECT_EQ(1, irgree.getFan());
irgree.setFan(3);
EXPECT_EQ(3, irgree.getFan());
}
TEST(TestGreeClass, VerticalSwing) {
IRGreeAC irgree(0);
irgree.begin();
EXPECT_FALSE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_LAST_POS, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(true, GREE_SWING_AUTO);
EXPECT_TRUE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_AUTO, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(false, GREE_SWING_MIDDLE);
EXPECT_FALSE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_MIDDLE, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(true, GREE_SWING_DOWN_AUTO);
EXPECT_TRUE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_DOWN_AUTO, 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_FALSE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_LAST_POS, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(true, 255);
EXPECT_TRUE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_AUTO, irgree.getSwingVerticalPosition());
irgree.setSwingVertical(true, GREE_SWING_DOWN);
EXPECT_TRUE(irgree.getSwingVerticalAuto());
EXPECT_EQ(GREE_SWING_AUTO, 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};
EXPECT_STATE_EQ(initialState, irgree.getRaw(), GREE_BITS);
// toggle the power state.
irgree.setPower(!irgree.getPower());
irgree.setMode(GREE_COOL);
irgree.setTemp(21);
irgree.setFan(2);
irgree.setLight(false);
irgree.setTurbo(true);
irgree.setSleep(true);
irgree.setXFan(true);
EXPECT_EQ(GREE_COOL, irgree.getMode());
EXPECT_EQ(21, irgree.getTemp());
EXPECT_EQ(2, irgree.getFan());
EXPECT_FALSE(irgree.getLight());
EXPECT_TRUE(irgree.getTurbo());
EXPECT_TRUE(irgree.getSleep());
EXPECT_TRUE(irgree.getXFan());
EXPECT_STATE_EQ(expectedState, irgree.getRaw(), GREE_BITS);
irgree.setRaw(initialState);
EXPECT_STATE_EQ(initialState, irgree.getRaw(), GREE_BITS);
}
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());
irgree.on();
irgree.setMode(GREE_COOL);
irgree.setTemp(GREE_MIN_TEMP);
irgree.setFan(GREE_FAN_MAX);
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());
}
// Tests for decodeGree().
// Decode a synthetic Gree message.
TEST(TestDecodeGree, NormalSynthetic) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
uint8_t gree_code[GREE_STATE_LENGTH] = {
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);
}
// Decode a synthetic Gree message.
TEST(TestDecodeGree, NormalRealExample) {
IRsendTest irsend(4);
IRrecv irrecv(4);
IRGreeAC irgree(4);
irsend.begin();
uint8_t gree_code[GREE_STATE_LENGTH] = {
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
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);
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());
}
+560
View File
@@ -0,0 +1,560 @@
// Copyright 2018 David Conran
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Haier.h"
#include "gtest/gtest.h"
// Tests for sendHaierAC()
// Test sending typical data only.
TEST(TestSendHaierAC, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
uint8_t haier_zero[HAIER_AC_STATE_LENGTH] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
irsend.reset();
irsend.sendHaierAC(haier_zero);
EXPECT_EQ(
"m3000s3000m3000s4300"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s150000", irsend.outputStr());
uint8_t haier_test[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x01, 0x20, 0x01, 0x00, 0xC0, 0x20, 0x00, 0xA7};
irsend.reset();
irsend.sendHaierAC(haier_test);
EXPECT_EQ(
"m3000s3000m3000s4300"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s1650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s1650m520s1650"
"m520s150000", irsend.outputStr());
}
// Test sending typical data with repeats.
TEST(TestSendHaierAC, SendWithRepeats) {
IRsendTest irsend(0);
irsend.begin();
irsend.reset();
uint8_t haier_test[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x01, 0x20, 0x01, 0x00, 0xC0, 0x20, 0x00, 0xA7};
irsend.reset();
irsend.sendHaierAC(haier_test, HAIER_AC_STATE_LENGTH, 2); // two repeats.
EXPECT_EQ(
"m3000s3000m3000s4300"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s1650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s1650m520s1650"
"m520s150000"
"m3000s3000m3000s4300"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s1650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s1650m520s1650"
"m520s150000"
"m3000s3000m3000s4300"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s1650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s1650m520s650m520s650m520s650m520s650m520s650"
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s1650m520s1650"
"m520s150000", irsend.outputStr());
}
// Tests for IRHaierAC class.
TEST(TestHaierACClass, Command) {
IRHaierAC haier(0);
haier.begin();
haier.setCommand(HAIER_AC_CMD_OFF);
EXPECT_EQ(HAIER_AC_CMD_OFF, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_ON);
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_MODE);
EXPECT_EQ(HAIER_AC_CMD_MODE, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_FAN);
EXPECT_EQ(HAIER_AC_CMD_FAN, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_TEMP_UP);
EXPECT_EQ(HAIER_AC_CMD_TEMP_UP, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_TEMP_DOWN);
EXPECT_EQ(HAIER_AC_CMD_TEMP_DOWN, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_SLEEP);
EXPECT_EQ(HAIER_AC_CMD_SLEEP, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_TIMER_SET);
EXPECT_EQ(HAIER_AC_CMD_TIMER_SET, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_TIMER_CANCEL);
EXPECT_EQ(HAIER_AC_CMD_TIMER_CANCEL, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_HEALTH);
EXPECT_EQ(HAIER_AC_CMD_HEALTH, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_SWING);
EXPECT_EQ(HAIER_AC_CMD_SWING, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_ON);
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
// Test unexpected values.
haier.setCommand(0b00001110);
EXPECT_EQ(HAIER_AC_CMD_OFF, haier.getCommand());
haier.setCommand(0b00001111);
EXPECT_EQ(HAIER_AC_CMD_OFF, haier.getCommand());
haier.setCommand(0b00000100);
EXPECT_EQ(HAIER_AC_CMD_OFF, haier.getCommand());
}
TEST(TestHaierACClass, OperatingMode) {
IRHaierAC haier(0);
haier.begin();
haier.setMode(HAIER_AC_AUTO);
EXPECT_EQ(HAIER_AC_AUTO, haier.getMode());
haier.setMode(HAIER_AC_COOL);
EXPECT_EQ(HAIER_AC_COOL, haier.getMode());
haier.setMode(HAIER_AC_HEAT);
EXPECT_EQ(HAIER_AC_HEAT, haier.getMode());
haier.setMode(HAIER_AC_FAN);
EXPECT_EQ(HAIER_AC_FAN, haier.getMode());
haier.setMode(HAIER_AC_DRY);
EXPECT_EQ(HAIER_AC_DRY, haier.getMode());
haier.setMode(HAIER_AC_AUTO - 1);
EXPECT_EQ(HAIER_AC_AUTO, haier.getMode());
haier.setMode(HAIER_AC_COOL);
EXPECT_EQ(HAIER_AC_COOL, haier.getMode());
haier.setMode(HAIER_AC_FAN + 1);
EXPECT_EQ(HAIER_AC_AUTO, haier.getMode());
haier.setMode(255);
EXPECT_EQ(HAIER_AC_AUTO, haier.getMode());
}
TEST(TestHaierACClass, Temperature) {
IRHaierAC haier(0);
haier.begin();
haier.setTemp(HAIER_AC_MIN_TEMP);
EXPECT_EQ(HAIER_AC_MIN_TEMP, haier.getTemp());
haier.setCommand(HAIER_AC_CMD_ON);
haier.setTemp(HAIER_AC_MIN_TEMP + 1);
EXPECT_EQ(HAIER_AC_MIN_TEMP + 1, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_UP, haier.getCommand());
haier.setTemp(HAIER_AC_MAX_TEMP);
EXPECT_EQ(HAIER_AC_MAX_TEMP, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_UP, haier.getCommand());
haier.setTemp(HAIER_AC_MIN_TEMP - 1);
EXPECT_EQ(HAIER_AC_MIN_TEMP, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_DOWN, haier.getCommand());
haier.setTemp(HAIER_AC_MAX_TEMP + 1);
EXPECT_EQ(HAIER_AC_MAX_TEMP, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_UP, haier.getCommand());
haier.setTemp(23);
EXPECT_EQ(23, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_DOWN, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_ON);
haier.setTemp(23);
EXPECT_EQ(23, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
haier.setTemp(0);
EXPECT_EQ(HAIER_AC_MIN_TEMP, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_DOWN, haier.getCommand());
haier.setTemp(255);
EXPECT_EQ(HAIER_AC_MAX_TEMP, haier.getTemp());
EXPECT_EQ(HAIER_AC_CMD_TEMP_UP, haier.getCommand());
}
TEST(TestHaierACClass, FanSpeed) {
IRHaierAC haier(0);
haier.begin();
haier.setFan(HAIER_AC_FAN_LOW);
haier.setCommand(HAIER_AC_CMD_ON);
haier.setFan(HAIER_AC_FAN_AUTO);
EXPECT_EQ(HAIER_AC_FAN_AUTO, haier.getFan());
EXPECT_EQ(HAIER_AC_CMD_FAN, haier.getCommand());
haier.setFan(HAIER_AC_FAN_LOW);
EXPECT_EQ(HAIER_AC_FAN_LOW, haier.getFan());
haier.setFan(HAIER_AC_FAN_MED);
EXPECT_EQ(HAIER_AC_FAN_MED, haier.getFan());
haier.setFan(HAIER_AC_FAN_HIGH);
EXPECT_EQ(HAIER_AC_FAN_HIGH, haier.getFan());
haier.setCommand(HAIER_AC_CMD_ON);
haier.setFan(HAIER_AC_FAN_HIGH);
EXPECT_EQ(HAIER_AC_FAN_HIGH, haier.getFan());
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
}
TEST(TestHaierACClass, Swing) {
IRHaierAC haier(0);
haier.begin();
haier.setFan(HAIER_AC_FAN_LOW);
haier.setCommand(HAIER_AC_CMD_ON);
haier.setSwing(HAIER_AC_SWING_OFF);
EXPECT_EQ(HAIER_AC_SWING_OFF, haier.getSwing());
haier.setSwing(HAIER_AC_SWING_UP);
EXPECT_EQ(HAIER_AC_SWING_UP, haier.getSwing());
EXPECT_EQ(HAIER_AC_CMD_SWING, haier.getCommand());
haier.setSwing(HAIER_AC_SWING_DOWN);
EXPECT_EQ(HAIER_AC_SWING_DOWN, haier.getSwing());
EXPECT_EQ(HAIER_AC_CMD_SWING, haier.getCommand());
haier.setSwing(HAIER_AC_SWING_CHG);
EXPECT_EQ(HAIER_AC_SWING_CHG, haier.getSwing());
EXPECT_EQ(HAIER_AC_CMD_SWING, haier.getCommand());
}
TEST(TestHaierACClass, CurrentTime) {
IRHaierAC haier(0);
haier.begin();
EXPECT_EQ(0, haier.getCurrTime());
haier.setCurrTime(1);
EXPECT_EQ(1, haier.getCurrTime());
haier.setCurrTime(60);
EXPECT_EQ(60, haier.getCurrTime());
haier.setCurrTime(61);
EXPECT_EQ(61, haier.getCurrTime());
haier.setCurrTime(18 * 60 + 34); // 18:34
EXPECT_EQ(1114, haier.getCurrTime());
haier.setCurrTime(23 * 60 + 59); // 23:59
EXPECT_EQ(HAIER_AC_MAX_TIME, haier.getCurrTime()); // 23:59
haier.setCurrTime(23 * 60 + 59 + 1); // 24:00
EXPECT_EQ(HAIER_AC_MAX_TIME, haier.getCurrTime()); // 23:59
haier.setCurrTime(UINT16_MAX);
EXPECT_EQ(HAIER_AC_MAX_TIME, haier.getCurrTime()); // 23:59
}
TEST(TestHaierACClass, Timers) {
IRHaierAC haier(0);
haier.begin();
haier.setCommand(HAIER_AC_CMD_ON);
// Off by default.
EXPECT_GT(0, haier.getOnTimer());
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
// On Timer.
haier.setOnTimer(6 * 60); // 6am
EXPECT_EQ(6 * 60, haier.getOnTimer()); // 6am
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_TIMER_SET, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_ON);
EXPECT_EQ(6 * 60, haier.getOnTimer()); // 6am
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
haier.cancelTimers();
EXPECT_GT(0, haier.getOnTimer());
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_TIMER_CANCEL, haier.getCommand());
// Off Timer.
haier.setOffTimer(18 * 60 + 30); // 6:30pm
EXPECT_GT(0, haier.getOnTimer());
EXPECT_EQ(18 * 60 + 30, haier.getOffTimer()); // 6:30pm
EXPECT_EQ(HAIER_AC_CMD_TIMER_SET, haier.getCommand());
haier.setCommand(HAIER_AC_CMD_ON);
EXPECT_GT(0, haier.getOnTimer());
EXPECT_EQ(18 * 60 + 30, haier.getOffTimer()); // 6:30pm
EXPECT_EQ(HAIER_AC_CMD_ON, haier.getCommand());
haier.cancelTimers();
EXPECT_GT(0, haier.getOnTimer());
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_TIMER_CANCEL, haier.getCommand());
// Both Timers.
haier.setOnTimer(6 * 60); // 6am
EXPECT_EQ(HAIER_AC_CMD_TIMER_SET, haier.getCommand());
haier.setOffTimer(18 * 60 + 30); // 6:30pm
EXPECT_EQ(HAIER_AC_CMD_TIMER_SET, haier.getCommand());
EXPECT_EQ(6 * 60, haier.getOnTimer()); // 6am
EXPECT_EQ(18 * 60 + 30, haier.getOffTimer()); // 6:30pm
haier.cancelTimers();
EXPECT_GT(0, haier.getOnTimer());
EXPECT_GT(0, haier.getOffTimer());
EXPECT_EQ(HAIER_AC_CMD_TIMER_CANCEL, haier.getCommand());
}
TEST(TestHaierACClass, TimeToString) {
EXPECT_EQ("00:00", IRHaierAC::timeToString(0));
EXPECT_EQ("00:01", IRHaierAC::timeToString(1));
EXPECT_EQ("00:10", IRHaierAC::timeToString(10));
EXPECT_EQ("00:59", IRHaierAC::timeToString(59));
EXPECT_EQ("01:00", IRHaierAC::timeToString(60));
EXPECT_EQ("01:01", IRHaierAC::timeToString(61));
EXPECT_EQ("01:59", IRHaierAC::timeToString(60 + 59));
EXPECT_EQ("18:59", IRHaierAC::timeToString(18 * 60 + 59));
EXPECT_EQ("23:59", IRHaierAC::timeToString(23 * 60 + 59));
}
TEST(TestHaierACClass, MessageConstuction) {
IRHaierAC haier(0);
EXPECT_EQ("Command: 1 (On), Mode: 0 (AUTO), Temp: 25C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: Off, "
"Current Time: 00:00, On Timer: Off, Off Timer: Off",
haier.toString());
haier.setMode(HAIER_AC_COOL);
haier.setTemp(21);
haier.setFan(HAIER_AC_FAN_HIGH);
EXPECT_EQ("Command: 3 (Fan), Mode: 1 (COOL), Temp: 21C, Fan: 3 (MAX), "
"Swing: 0 (Off), Sleep: Off, Health: Off, "
"Current Time: 00:00, On Timer: Off, Off Timer: Off",
haier.toString());
haier.setSwing(HAIER_AC_SWING_CHG);
haier.setHealth(true);
haier.setSleep(true);
haier.setCurrTime(615); // 10:15am
EXPECT_EQ("Command: 8 (Sleep), Mode: 3 (HEAT), Temp: 21C, Fan: 3 (MAX), "
"Swing: 3 (Chg), Sleep: On, Health: On, "
"Current Time: 10:15, On Timer: Off, Off Timer: Off",
haier.toString());
haier.setOnTimer(800); // 1:20pm
haier.setOffTimer(1125); // 6:45pm
haier.setCommand(HAIER_AC_CMD_ON);
EXPECT_EQ("Command: 1 (On), Mode: 2 (DRY), Temp: 21C, Fan: 2, "
"Swing: 3 (Chg), Sleep: On, Health: On, "
"Current Time: 10:15, On Timer: 13:20, Off Timer: 18:45",
haier.toString());
// Now change a few already set things.
haier.setMode(HAIER_AC_HEAT);
EXPECT_EQ("Command: 2 (Mode), Mode: 3 (HEAT), Temp: 21C, Fan: 2, "
"Swing: 3 (Chg), Sleep: On, Health: On, "
"Current Time: 10:15, On Timer: 13:52, Off Timer: 18:45",
haier.toString());
haier.setTemp(25);
EXPECT_EQ("Command: 6 (Temp Up), Mode: 3 (HEAT), Temp: 25C, Fan: 2, "
"Swing: 3 (Chg), Sleep: On, Health: On, "
"Current Time: 10:15, On Timer: 13:52, Off Timer: 18:45",
haier.toString());
uint8_t expectedState[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x96, 0xEA, 0xCF, 0x32, 0x2D, 0x0D, 0x74, 0xD4};
EXPECT_STATE_EQ(expectedState, haier.getRaw(), HAIER_AC_BITS);
// Check that the checksum is valid.
EXPECT_TRUE(IRHaierAC::validChecksum(haier.getRaw()));
// Now load up some random data.
uint8_t randomState[HAIER_AC_STATE_LENGTH] = {
0x52, 0x49, 0x50, 0x20, 0x54, 0x61, 0x6C, 0x69, 0x61};
EXPECT_FALSE(IRHaierAC::validChecksum(randomState));
haier.setRaw(randomState);
EXPECT_EQ("Command: 9 (Timer Set), Mode: 3 (HEAT), Temp: 20C, Fan: 2, "
"Swing: 1 (Up), Sleep: On, Health: Off, "
"Current Time: 16:32, On Timer: Off, Off Timer: Off",
haier.toString());
// getRaw() should correct the checksum.
EXPECT_TRUE(IRHaierAC::validChecksum(haier.getRaw()));
}
// Tests for decodeHaierAC().
// Decode normal "synthetic" messages.
TEST(TestDecodeHaierAC, NormalDecodeWithStrict) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
uint8_t expectedState[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x01, 0x20, 0x01, 0x00, 0xC0, 0x20, 0x00, 0xA7};
// With the specific decoder.
irsend.reset();
irsend.sendHaierAC(expectedState);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeHaierAC(&irsend.capture, HAIER_AC_BITS, true));
EXPECT_EQ(HAIER_AC, irsend.capture.decode_type);
EXPECT_EQ(HAIER_AC_BITS, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
// With the all the decoders.
irsend.reset();
irsend.sendHaierAC(expectedState);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(HAIER_AC, irsend.capture.decode_type);
EXPECT_EQ(HAIER_AC_BITS, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
}
// Decode a "real" example message.
TEST(TestDecodeHaierAC, RealExample1) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
// Data from Issue #404 captured by kuzin2006
uint16_t rawData[149] = {3030, 3044, 3030, 4304, 576, 1694, 550, 582, 552,
1704, 552, 714, 550, 582, 550, 1706, 552, 582, 550, 1836, 552, 582, 578,
568, 550, 582, 550, 714, 550, 582, 550, 582, 552, 582, 550, 1836, 552,
582, 552, 580, 580, 1692, 550, 712, 552, 582, 550, 582, 552, 580, 550,
714, 552, 582, 550, 582, 552, 582, 578, 698, 552, 580, 552, 582, 552,
582, 552, 1836, 552, 580, 552, 582, 552, 582, 550, 714, 578, 568, 550,
582, 550, 582, 552, 714, 550, 1706, 550, 1706, 550, 582, 550, 714, 552,
582, 580, 566, 552, 582, 550, 714, 552, 580, 552, 580, 552, 1706, 550,
714, 550, 582, 552, 582, 578, 568, 552, 712, 552, 582, 550, 582, 550,
582, 550, 712, 552, 582, 550, 582, 552, 582, 578, 722, 552, 1704, 550,
582, 550, 1706, 550, 736, 550, 582, 550, 1706, 550, 1704, 552, 1704, 578};
uint8_t expectedState[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x01, 0x20, 0x01, 0x00, 0xC0, 0x20, 0x00, 0xA7};
irsend.sendRaw(rawData, 149, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(HAIER_AC, irsend.capture.decode_type);
EXPECT_EQ(HAIER_AC_BITS, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRHaierAC haier(0);
haier.setRaw(irsend.capture.state);
EXPECT_EQ("Command: 1 (On), Mode: 0 (AUTO), Temp: 16C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: Off, "
"Current Time: 00:01, On Timer: Off, Off Timer: Off",
haier.toString());
}
// Decode a "real" example message.
TEST(TestDecodeHaierAC, RealExample2) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
// Data from Issue #404 captured by kuzin2006
uint16_t rawData[149] = {3028, 3046, 3028, 4304, 576, 1694, 552, 582, 550,
1704, 552, 714, 550, 582, 552, 1704, 550, 582, 550, 1836, 552, 582, 578,
1690, 552, 1704, 552, 712, 550, 582, 550, 1706, 550, 1706, 552, 712, 550,
582, 552, 582, 578, 1690, 552, 714, 552, 580, 552, 582, 552, 582, 550,
712, 552, 582, 550, 582, 550, 582, 578, 698, 552, 582, 550, 584, 550, 582,
552, 1836, 550, 582, 550, 582, 550, 582, 550, 712, 578, 568, 550, 582,
550, 582, 550, 714, 552, 1706, 550, 1706, 552, 580, 550, 714, 550, 582,
580, 568, 550, 582, 550, 714, 550, 582, 550, 582, 550, 1706, 552, 712,
550, 582, 550, 582, 580, 568, 552, 712, 550, 584, 550, 582, 550, 584, 550,
712, 550, 582, 550, 582, 550, 582, 578, 722, 550, 582, 552, 580, 552, 582,
550, 738, 550, 1706, 550, 1704, 552, 582, 550, 582, 578};
uint8_t expectedState[HAIER_AC_STATE_LENGTH] = {
0xA5, 0x66, 0x20, 0x01, 0x00, 0xC0, 0x20, 0x00, 0x0C};
irsend.sendRaw(rawData, 149, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(HAIER_AC, irsend.capture.decode_type);
EXPECT_EQ(HAIER_AC_BITS, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRHaierAC haier(0);
haier.setRaw(irsend.capture.state);
EXPECT_EQ("Command: 6 (Temp Up), Mode: 0 (AUTO), Temp: 22C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: Off, "
"Current Time: 00:01, On Timer: Off, Off Timer: Off",
haier.toString());
}
// Decode a "real" example message.
TEST(TestDecodeHaierAC, RealExample3) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
// Data from Issue #404 captured by kuzin2006
uint16_t rawData[149] = {3030, 3044, 3030, 4302, 578, 1692, 550, 582, 550,
1706, 550, 714, 550, 582, 552, 1706, 550, 582, 550, 1836, 552, 1706, 578,
1690, 552, 1704, 552, 714, 550, 1706, 552, 1706, 550, 582, 550, 714, 552,
582, 550, 582, 578, 1690, 550, 714, 552, 582, 552, 582, 550, 582, 550,
714, 550, 584, 550, 582, 550, 582, 578, 700, 552, 1706, 550, 582, 550,
582, 552, 1836, 550, 582, 550, 582, 552, 1706, 550, 714, 578, 568, 552,
582, 552, 582, 550, 714, 550, 1706, 550, 1706, 550, 582, 552, 712, 552,
582, 580, 568, 550, 582, 550, 714, 550, 582, 550, 582, 550, 1706, 550,
714, 550, 582, 550, 582, 578, 568, 552, 712, 552, 582, 550, 582, 550, 582,
550, 712, 550, 584, 550, 582, 552, 582, 578, 722, 552, 1704, 550, 582,
550, 1706, 550, 1862, 550, 1706, 550, 582, 550, 1704, 552, 582, 578};
uint8_t expectedState[HAIER_AC_STATE_LENGTH] = {
0xA5, 0xEC, 0x20, 0x09, 0x20, 0xC0, 0x20, 0x00, 0xBA};
irsend.sendRaw(rawData, 149, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(HAIER_AC, irsend.capture.decode_type);
EXPECT_EQ(HAIER_AC_BITS, irsend.capture.bits);
EXPECT_FALSE(irsend.capture.repeat);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
IRHaierAC haier(0);
haier.setRaw(irsend.capture.state);
EXPECT_EQ("Command: 12 (Health), Mode: 0 (AUTO), Temp: 30C, Fan: 0 (AUTO), "
"Swing: 0 (Off), Sleep: Off, Health: On, "
"Current Time: 00:09, On Timer: Off, Off Timer: Off",
haier.toString());
}
@@ -0,0 +1,577 @@
// Copyright 2018 David Conran
#include "IRremoteESP8266.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for sendHitachiAC().
// Test sending typical data only.
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};
irsend.reset();
irsend.sendHitachiAC(hitachi_code);
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", irsend.outputStr());
}
// Test sending with repeats.
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};
irsend.reset();
irsend.sendHitachiAC(hitachi_code, HITACHI_AC_STATE_LENGTH, 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());
}
// Test sending atypical sizes.
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};
irsend.reset();
irsend.sendHitachiAC(hitachi_short_code, HITACHI_AC_STATE_LENGTH - 1);
ASSERT_EQ("", irsend.outputStr());
irsend.reset();
irsend.sendHitachiAC(hitachi_long_code, HITACHI_AC_STATE_LENGTH + 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());
}
// Tests for decodeHitachiAC().
// Decode a synthetic HitachiAC message.
TEST(TestDecodeHitachiAC, NormalSynthetic) {
IRsendTest irsend(0);
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};
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);
}
// Decode a 'real' HitachiAC message.
TEST(TestDecodeHitachiAC, NormalRealExample1) {
IRsendTest irsend(0);
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};
// 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};
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);
}
// Decode another 'real' HitachiAC message.
TEST(TestDecodeHitachiAC, NormalRealExample2) {
IRsendTest irsend(0);
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};
// 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};
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);
}
// Tests for sendHitachiAC1().
// Test sending typical data only.
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};
irsend.reset();
irsend.sendHitachiAC1(hitachi_code);
EXPECT_EQ(
"m3400s3400"
"m400s1250m400s500m400s1250m400s1250m400s500m400s500m400s1250m400s500"
"m400s1250m400s500m400s1250m400s500m400s1250m400s1250m400s1250m400s500"
"m400s500m400s1250m400s500m400s500m400s1250m400s1250m400s500m400s1250"
"m400s500m400s1250m400s500m400s1250m400s500m400s500m400s500m400s1250"
"m400s1250m400s1250m400s1250m400s1250m400s500m400s500m400s500m400s500"
"m400s500m400s1250m400s1250m400s500m400s500m400s500m400s500m400s1250"
"m400s1250m400s500m400s500m400s500m400s500m400s1250m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s1250m400s1250m400s500m400s500m400s500m400s500"
"m400s1250m400s500m400s1250m400s1250m400s1250m400s500m400s500m400s500"
"m400s100000", irsend.outputStr());
}
// Decode a 'real' HitachiAC1 message.
TEST(TestDecodeHitachiAC1, NormalRealExample) {
IRsendTest irsend(0);
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};
// 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
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);
}
// Tests for sendHitachiAC2().
// Test sending typical data only.
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};
irsend.reset();
irsend.sendHitachiAC2(hitachi_code);
EXPECT_EQ(
"m3300s1700"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s1250m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s500m400s1250"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s1250m400s1250m400s500m400s500m400s1250m400s1250"
"m400s1250m400s1250m400s500m400s500m400s1250m400s1250m400s500m400s500"
"m400s500m400s1250m400s500m400s500m400s1250m400s500m400s500m400s1250"
"m400s1250m400s500m400s1250m400s1250m400s500m400s1250m400s1250m400s500"
"m400s500m400s500m400s1250m400s500m400s500m400s500m400s1250m400s500"
"m400s1250m400s1250m400s500m400s1250m400s1250m400s1250m400s500m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s1250"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s1250m400s1250m400s500m400s500m400s1250m400s500m400s1250m400s500"
"m400s500m400s500m400s1250m400s1250m400s500m400s1250m400s500m400s1250"
"m400s1250m400s500m400s500m400s500m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s1250m400s1250m400s1250m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s1250"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s500"
"m400s1250m400s1250m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s500m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s500m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s1250m400s500m400s500m400s500m400s1250"
"m400s1250m400s1250m400s1250m400s500m400s1250m400s1250m400s1250m400s500"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250m400s1250"
"m400s500m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
"m400s100000", irsend.outputStr());
}
// Decode a synthetic HitachiAC2 message.
TEST(TestDecodeHitachiAC2, NormalSyntheticExample) {
IRsendTest irsend(0);
IRrecv irrecv(0);
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};
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);
}
// Decode a 'real' HitachiAC2 message.
TEST(TestDecodeHitachiAC2, NormalRealExample) {
IRsendTest irsend(0);
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};
// 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};
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);
}
+9 -9
View File
@@ -17,7 +17,7 @@ TEST(TestSendJVC, SendDataOnly) {
"m8400s4200"
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
"m525s60000", irsend.outputStr());
"m525s21675", irsend.outputStr());
}
// Test sending with different repeats.
@@ -31,26 +31,26 @@ TEST(TestSendJVC, SendWithRepeats) {
"m8400s4200"
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
"m525s60000"
"m525s21675"
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
"m525s60000", irsend.outputStr());
"m525s34275", irsend.outputStr());
irsend.sendJVC(0xC2B8, JVC_BITS, 2); // 2 repeats.
EXPECT_EQ(
"m8400s4200"
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
"m525s60000"
"m525s21675"
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
"m525s60000"
"m525s34275"
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
"m525s60000", irsend.outputStr());
"m525s34275", irsend.outputStr());
}
// Test sending an atypical data size.
TEST(TestSendJVC, SendUsualSize) {
TEST(TestSendJVC, SendUnusualSize) {
IRsendTest irsend(4);
irsend.begin();
@@ -59,7 +59,7 @@ TEST(TestSendJVC, SendUsualSize) {
EXPECT_EQ(
"m8400s4200"
"m525s525m525s525m525s525m525s525m525s525m525s525m525s525m525s525"
"m525s60000", irsend.outputStr());
"m525s38475", irsend.outputStr());
irsend.reset();
irsend.sendJVC(0x1234567890ABCDEF, 64);
@@ -73,7 +73,7 @@ TEST(TestSendJVC, SendUsualSize) {
"m525s1725m525s525m525s1725m525s525m525s1725m525s525m525s1725m525s1725"
"m525s1725m525s1725m525s525m525s525m525s1725m525s1725m525s525m525s1725"
"m525s1725m525s1725m525s1725m525s525m525s1725m525s1725m525s1725m525s1725"
"m525s60000", irsend.outputStr());
"m525s10875", irsend.outputStr());
}
// Tests for encodeJVC().
+201 -120
View File
@@ -1,5 +1,8 @@
// Copyright 2017 David Conran
#include "IRremoteESP8266.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Kelvinator.h"
@@ -18,30 +21,30 @@ TEST(TestSendKelvinator, SendDataOnly) {
irsend.reset();
irsend.sendKelvinator(kelv_code);
EXPECT_EQ(
"m8990s4490"
"m675s1560m675s520m675s520m675s1560m675s1560m675s520m675s520m675s520"
"m675s1560m675s1560m675s520m675s1560m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s1560"
"m675s520m675s520m675s520m675s520m675s1560m675s520m675s1560m675s520"
"m675s520m675s1560m675s520"
"m675s19950"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560"
"m675s39900"
"m8990s4490"
"m675s1560m675s520m675s520m675s1560m675s1560m675s520m675s520m675s520"
"m675s1560m675s1560m675s520m675s1560m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s1560"
"m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560m675s520"
"m675s520m675s1560m675s520"
"m675s19950"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s1560m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560m675s1560"
"m675s39900", irsend.outputStr());
"m9010s4505"
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s1530m680s510"
"m680s510m680s1530m680s510"
"m680s19975"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530"
"m680s39950"
"m9010s4505"
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s510"
"m680s510m680s1530m680s510"
"m680s19975"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
"m680s39950", irsend.outputStr());
}
// Test sending with repeats.
@@ -57,54 +60,54 @@ TEST(TestSendKelvinator, SendWithRepeats) {
irsend.sendKelvinator(kelv_code, KELVINATOR_STATE_LENGTH, 1);
EXPECT_EQ(
"m8990s4490"
"m675s1560m675s520m675s520m675s1560m675s1560m675s520m675s520m675s520"
"m675s1560m675s1560m675s520m675s1560m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s1560"
"m675s520m675s520m675s520m675s520m675s1560m675s520m675s1560m675s520"
"m675s520m675s1560m675s520"
"m675s19950"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560"
"m675s39900"
"m8990s4490"
"m675s1560m675s520m675s520m675s1560m675s1560m675s520m675s520m675s520"
"m675s1560m675s1560m675s520m675s1560m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s1560"
"m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560m675s520"
"m675s520m675s1560m675s520"
"m675s19950"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s1560m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560m675s1560"
"m675s39900"
"m8990s4490"
"m675s1560m675s520m675s520m675s1560m675s1560m675s520m675s520m675s520"
"m675s1560m675s1560m675s520m675s1560m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s1560"
"m675s520m675s520m675s520m675s520m675s1560m675s520m675s1560m675s520"
"m675s520m675s1560m675s520"
"m675s19950"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560"
"m675s39900"
"m8990s4490"
"m675s1560m675s520m675s520m675s1560m675s1560m675s520m675s520m675s520"
"m675s1560m675s1560m675s520m675s1560m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s1560"
"m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560m675s520"
"m675s520m675s1560m675s520"
"m675s19950"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s1560m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560m675s1560"
"m675s39900", irsend.outputStr());
"m9010s4505"
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s1530m680s510"
"m680s510m680s1530m680s510"
"m680s19975"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530"
"m680s39950"
"m9010s4505"
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s510"
"m680s510m680s1530m680s510"
"m680s19975"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
"m680s39950"
"m9010s4505"
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s1530m680s510"
"m680s510m680s1530m680s510"
"m680s19975"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530"
"m680s39950"
"m9010s4505"
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s510"
"m680s510m680s1530m680s510"
"m680s19975"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
"m680s39950", irsend.outputStr());
}
// Test sending atypical sizes.
@@ -126,30 +129,30 @@ TEST(TestSendKelvinator, SendUnexpectedSizes) {
// extra data.
irsend.sendKelvinator(kelv_long_code, 17);
ASSERT_EQ(
"m8990s4490"
"m675s1560m675s520m675s520m675s1560m675s1560m675s520m675s520m675s520"
"m675s1560m675s1560m675s520m675s1560m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s1560"
"m675s520m675s520m675s520m675s520m675s1560m675s520m675s1560m675s520"
"m675s520m675s1560m675s520"
"m675s19950"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560"
"m675s39900"
"m8990s4490"
"m675s1560m675s520m675s520m675s1560m675s1560m675s520m675s520m675s520"
"m675s1560m675s1560m675s520m675s1560m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s1560"
"m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560m675s520"
"m675s520m675s1560m675s520"
"m675s19950"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s1560m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560m675s1560"
"m675s39900", irsend.outputStr());
"m9010s4505"
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s1530m680s510"
"m680s510m680s1530m680s510"
"m680s19975"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530"
"m680s39950"
"m9010s4505"
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s510"
"m680s510m680s1530m680s510"
"m680s19975"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
"m680s39950", irsend.outputStr());
}
@@ -370,6 +373,66 @@ TEST(TestKelvinatorClass, FanSpeed) {
EXPECT_EQ(3, irkelv.getFan());
}
TEST(TestKelvinatorClass, Checksums) {
uint8_t kelv_code[KELVINATOR_STATE_LENGTH] = {
0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xf0};
EXPECT_TRUE(IRKelvinatorAC::validChecksum(kelv_code));
// Change the array so the checksum is invalid.
kelv_code[0] ^= 0xFF;
EXPECT_FALSE(IRKelvinatorAC::validChecksum(kelv_code));
// Restore the previous change, and change another byte.
kelv_code[0] ^= 0xFF;
kelv_code[4] ^= 0xFF;
EXPECT_FALSE(IRKelvinatorAC::validChecksum(kelv_code));
kelv_code[4] ^= 0xFF;
// Change something in the 2nd block.
kelv_code[10] ^= 0xFF;
EXPECT_FALSE(IRKelvinatorAC::validChecksum(kelv_code));
kelv_code[10] ^= 0xFF;
EXPECT_TRUE(IRKelvinatorAC::validChecksum(kelv_code));
}
TEST(TestKelvinatorClass, SetAndGetRaw) {
IRKelvinatorAC irkelv(0);
uint8_t initialState[KELVINATOR_STATE_LENGTH] = {
0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA0,
0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xA0};
uint8_t expectedState[KELVINATOR_STATE_LENGTH] = {
0x08, 0x05, 0x20, 0x50, 0x00, 0x00, 0x00, 0x70,
0x08, 0x05, 0x20, 0x70, 0x00, 0x00, 0x00, 0x70};
EXPECT_STATE_EQ(initialState, irkelv.getRaw(), KELVINATOR_BITS);
// toggle the power state.
irkelv.setPower(!irkelv.getPower());
irkelv.setTemp(21);
irkelv.setLight(true);
EXPECT_STATE_EQ(expectedState, irkelv.getRaw(), KELVINATOR_BITS);
irkelv.setRaw(initialState);
EXPECT_STATE_EQ(initialState, irkelv.getRaw(), KELVINATOR_BITS);
}
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());
irkelv.on();
irkelv.setMode(KELVINATOR_COOL);
irkelv.setTemp(25);
irkelv.setFan(KELVINATOR_FAN_MAX);
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());
}
TEST(TestKelvinatorClass, MessageConstuction) {
IRKelvinatorAC irkelv(0);
@@ -405,28 +468,46 @@ TEST(TestKelvinatorClass, MessageConstuction) {
irsend.reset();
irsend.sendKelvinator(irkelv.getRaw());
EXPECT_EQ(
"m8990s4490"
"m675s1560m675s520m675s520m675s1560m675s1560m675s520m675s1560m675s520"
"m675s1560m675s1560m675s520m675s1560m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s1560m675s1560"
"m675s520m675s520m675s520m675s520m675s1560m675s520m675s1560m675s520"
"m675s520m675s1560m675s520"
"m675s19950"
"m675s520m675s520m675s520m675s520m675s1560m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560m675s1560"
"m675s39900"
"m8990s4490"
"m675s1560m675s520m675s520m675s1560m675s1560m675s520m675s1560m675s520"
"m675s1560m675s1560m675s520m675s1560m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s1560m675s1560"
"m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560m675s520"
"m675s520m675s1560m675s520"
"m675s19950"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s520m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s1560m675s520m675s520m675s520"
"m675s520m675s520m675s520m675s520m675s1560m675s1560m675s1560m675s1560"
"m675s39900", irsend.outputStr());
"m9010s4505"
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s1530m680s510"
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s1530m680s510"
"m680s510m680s1530m680s510"
"m680s19975"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
"m680s39950"
"m9010s4505"
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s1530m680s510"
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s510"
"m680s510m680s1530m680s510"
"m680s19975"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
"m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
"m680s39950", irsend.outputStr());
}
// Decode a synthetic Kelvinator message.
TEST(TestDecodeKelvinator, NormalSynthetic) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
uint8_t kelv_code[KELVINATOR_STATE_LENGTH] = {
0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xf0};
irsend.reset();
irsend.sendKelvinator(kelv_code);
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);
}
+12 -12
View File
@@ -35,7 +35,7 @@ TEST(TestSendLG, SendDataOnly) {
"m550s1600m550s550m550s1600m550s1600m550s550m550s1600m550s550m550s550"
"m550s1600m550s550m550s1600m550s550m550s1600m550s1600m550s1600m550s550"
"m550s550m550s1600m550s550m550s1600m550s550m550s550m550s550m550s1600"
"m550s108050", irsend.outputStr());
"m550s51050", irsend.outputStr());
irsend.reset();
irsend.sendLG(0xB4B4AE51, LG32_BITS);
@@ -45,8 +45,8 @@ TEST(TestSendLG, SendDataOnly) {
"m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s1680m560s560m560s1680m560s560m560s1680m560s1680m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560m560s1680"
"m560s108080"
"m8950s2250m550s108050", irsend.outputStr());
"m560s44800"
"m8950s2250m550s96300", irsend.outputStr());
}
// Test sending with different repeats.
@@ -62,8 +62,8 @@ TEST(TestSendLG, SendWithRepeats) {
"m550s1600m550s550m550s1600m550s1600m550s550m550s1600m550s550m550s550"
"m550s1600m550s550m550s1600m550s550m550s1600m550s1600m550s1600m550s550"
"m550s550m550s1600m550s550m550s1600m550s550m550s550m550s550m550s1600"
"m550s108050"
"m8000s2250m550s108050", irsend.outputStr());
"m550s51050"
"m8000s2250m550s97250", irsend.outputStr());
irsend.reset();
irsend.sendLG(0xB4B4AE51, LG32_BITS, 1);
@@ -73,13 +73,13 @@ TEST(TestSendLG, SendWithRepeats) {
"m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s1680m560s560m560s1680m560s560m560s1680m560s1680m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560m560s1680"
"m560s108080"
"m8950s2250m550s108050"
"m8950s2250m550s108050", irsend.outputStr());
"m560s44800"
"m8950s2250m550s96300"
"m8950s2250m550s96300", irsend.outputStr());
}
// Test sending an atypical data size.
TEST(TestSendLG, SendUsualSize) {
TEST(TestSendLG, SendUnusualSize) {
IRsendTest irsend(4);
irsend.begin();
@@ -91,7 +91,7 @@ TEST(TestSendLG, SendUsualSize) {
"m550s550m550s550m550s550m550s550m550s550m550s550m550s550m550s550"
"m550s550m550s550m550s550m550s550m550s550m550s550m550s550m550s550"
"m550s550m550s550m550s550m550s550m550s550m550s550m550s550"
"m550s108050", irsend.outputStr());
"m550s61400", irsend.outputStr());
irsend.reset();
irsend.sendLG(0x0, 64);
@@ -105,8 +105,8 @@ TEST(TestSendLG, SendUsualSize) {
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s108080"
"m8950s2250m550s108050", irsend.outputStr());
"m560s26880"
"m8950s2250m550s96300", irsend.outputStr());
}
// Tests for encodeLG().
@@ -0,0 +1,341 @@
// Copyright 2017 David Conran
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// LL AAA SSSSS EEEEEEE RRRRRR TTTTTTT AAA GGGG
// LL AAAAA SS EE RR RR TTT AAAAA GG GG
// LL AA AA SSSSS EEEEE RRRRRR TTT AA AA GG
// 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.
TEST(TestSendLasertag, SendDataOnly) {
IRsendTest irsend(4);
irsend.begin();
irsend.reset();
irsend.sendLasertag(0x1); // Red 1
EXPECT_EQ(
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333"
"s333m333s333m333s333m333s666m333s100000", irsend.outputStr());
irsend.reset();
irsend.sendLasertag(0x2); // Red 2
EXPECT_EQ(
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333"
"m333s333m333s333m333s333m333s666m666s100333", irsend.outputStr());
irsend.reset();
irsend.sendLasertag(0x51); // Green 1
// Raw: (21)
// m364s364m332s336m384s276m332s364m332s304m416s584m692s724m640s360m304s332m392s612m380,
EXPECT_EQ(
// m364s364m332s336m384s276m332s364m332s304m416s584
// m692s724m640s360m304s332m392s612m380
"m333s333m333s333m333s333m333s333m333s333m333s666"
"m666s666m666s333m333s333m333s666m333s100000", irsend.outputStr());
irsend.reset();
// Raw: (19)
// m332s308m412s280m360s336m332s304m444s248m332s644m744s612m696s692m668s636m360
irsend.sendLasertag(0x55); // Green 5
EXPECT_EQ(
// m332s308m412s280m360s336m332s304m444s248m332s644
// m744s612m696s692m668s636m360
"m333s333m333s333m333s333m333s333m333s333m333s666"
"m666s666m666s666m666s666m333s100000",
irsend.outputStr());
}
TEST(TestSendLasertag, SendDataWithRepeat) {
IRsendTest irsend(4);
irsend.begin();
irsend.reset();
irsend.sendLasertag(0x1, LASERTAG_BITS, 1); // Red 1, one repeat.
EXPECT_EQ(
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333s333"
"m333s333m333s333m333s333m333s666m333s100000"
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333s333"
"m333s333m333s333m333s333m333s666m333s100000", irsend.outputStr());
irsend.reset();
irsend.sendLasertag(0x52, LASERTAG_BITS, 2); // Green 2, two repeats.
EXPECT_EQ(
"m333s333m333s333m333s333m333s333m333s333m333s666m666s666m666s333"
"m333s666m666s100333"
"m333s333m333s333m333s333m333s333m333s333m333s666m666s666m666s333"
"m333s666m666s100333"
"m333s333m333s333m333s333m333s333m333s333m333s666m666s666m666s333"
"m333s666m666s100333", irsend.outputStr());
}
TEST(TestSendLasertag, SmallestMessageSize) {
IRsendTest irsend(4);
irsend.begin();
irsend.reset();
irsend.sendLasertag(0x1555); // Alternating bit pattern will be the smallest.
// i.e. 7 actual 'mark' pulses, which is a rawlen of 13.
EXPECT_EQ("m0s333m666s666m666s666m666s666m666s666m666s666m666s666m333s100000",
irsend.outputStr());
}
// Tests for decodeLasertag().
// Decode normal Lasertag messages.
TEST(TestDecodeLasertag, NormalSyntheticDecodeWithStrict) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Normal Lasertag 13-bit message.
irsend.reset();
irsend.sendLasertag(0x01); // Red 1
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, 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
EXPECT_FALSE(irsend.capture.repeat);
irsend.reset();
irsend.sendLasertag(0x02); // Red 2
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, 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
EXPECT_FALSE(irsend.capture.repeat);
irsend.reset();
irsend.sendLasertag(0x06); // Red 6
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, 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
EXPECT_FALSE(irsend.capture.repeat);
irsend.reset();
irsend.sendLasertag(0x51); // Green 1
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, 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
EXPECT_FALSE(irsend.capture.repeat);
irsend.reset();
irsend.sendLasertag(0x56); // Green 6
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(LASERTAG, irsend.capture.decode_type);
EXPECT_EQ(LASERTAG_BITS, irsend.capture.bits);
EXPECT_EQ(0x56, irsend.capture.value);
EXPECT_EQ(0x6, irsend.capture.address); // Unit
EXPECT_EQ(0x5, irsend.capture.command); // Team
EXPECT_FALSE(irsend.capture.repeat);
}
// Example data taken from: https://github.com/z3t0/Arduino-IRremote/issues/532
TEST(TestDecodeLasertag, RealExamples) {
IRsendTest irsend(0);
IRrecv irrecv(0);
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};
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(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};
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(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};
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(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};
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(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};
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(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};
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(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};
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(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};
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(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};
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(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};
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(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};
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(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};
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(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};
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(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};
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(0x02, irsend.capture.value);
EXPECT_EQ(0x2, irsend.capture.address); // Unit
EXPECT_EQ(0x0, irsend.capture.command); // Team
}
@@ -0,0 +1,161 @@
// Copyright 2017 David Conran
#include "IRrecv.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Magiquest.h"
#include "gtest/gtest.h"
// Tests for encodeMagiQuest()
TEST(TestEncodeMagiQuest, General) {
IRsendTest irsend(0);
EXPECT_EQ(0x0, irsend.encodeMagiQuest(0x0, 0x0));
EXPECT_EQ(0x10001, irsend.encodeMagiQuest(0x1, 0x1));
EXPECT_EQ(0x20003, irsend.encodeMagiQuest(0x2, 0x3));
EXPECT_EQ(0x123456781234, irsend.encodeMagiQuest(0x12345678, 0x1234));
EXPECT_EQ(0xFFFFFFFFFFFF, irsend.encodeMagiQuest(0xFFFFFFFF, 0xFFFF));
}
// Tests for sendMagiQuest()
// Test sending typical data only.
TEST(TestSendMagiQuest, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
irsend.reset();
irsend.sendMagiQuest(0x0);
EXPECT_EQ(
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s100850",
irsend.outputStr());
irsend.reset();
irsend.sendMagiQuest(0x123456789ABC);
EXPECT_EQ(
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
"m280s850m280s850m280s850m580s600m280s850m280s850m580s600m280s850"
"m280s850m280s850m580s600m580s600m280s850m580s600m280s850m280s850"
"m280s850m580s600m280s850m580s600m280s850m580s600m580s600m280s850"
"m280s850m580s600m580s600m580s600m580s600m280s850m280s850m280s850"
"m580s600m280s850m280s850m580s600m580s600m280s850m580s600m280s850"
"m580s600m280s850m580s600m580s600m580s600m580s600m280s850m280s100850",
irsend.outputStr());
}
// Test sending typical data only.
TEST(TestSendMagiQuest, SendWithRepeats) {
IRsendTest irsend(0);
irsend.begin();
irsend.reset();
irsend.sendMagiQuest(0x12345678ABCD, MAGIQUEST_BITS, 2); // two repeats.
EXPECT_EQ(
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
"m280s850m280s850m280s850m580s600m280s850m280s850m580s600m280s850"
"m280s850m280s850m580s600m580s600m280s850m580s600m280s850m280s850"
"m280s850m580s600m280s850m580s600m280s850m580s600m580s600m280s850"
"m280s850m580s600m580s600m580s600m580s600m280s850m280s850m280s850"
"m580s600m280s850m580s600m280s850m580s600m280s850m580s600m580s600"
"m580s600m580s600m280s850m280s850m580s600m580s600m280s850m580s100600"
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
"m280s850m280s850m280s850m580s600m280s850m280s850m580s600m280s850"
"m280s850m280s850m580s600m580s600m280s850m580s600m280s850m280s850"
"m280s850m580s600m280s850m580s600m280s850m580s600m580s600m280s850"
"m280s850m580s600m580s600m580s600m580s600m280s850m280s850m280s850"
"m580s600m280s850m580s600m280s850m580s600m280s850m580s600m580s600"
"m580s600m580s600m280s850m280s850m580s600m580s600m280s850m580s100600"
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
"m280s850m280s850m280s850m580s600m280s850m280s850m580s600m280s850"
"m280s850m280s850m580s600m580s600m280s850m580s600m280s850m280s850"
"m280s850m580s600m280s850m580s600m280s850m580s600m580s600m280s850"
"m280s850m580s600m580s600m580s600m580s600m280s850m280s850m280s850"
"m580s600m280s850m580s600m280s850m580s600m280s850m580s600m580s600"
"m580s600m580s600m280s850m280s850m580s600m580s600m280s850m580s100600",
irsend.outputStr());
}
// Tests for decodeMagiQuest().
// Decode normal "synthetic" messages.
TEST(TestDecodeMagiQuest, NormalDecodeWithStrict) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
irsend.reset();
irsend.sendMagiQuest(0x0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, MAGIQUEST_BITS, true));
EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
EXPECT_EQ(MAGIQUEST_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);
irsend.reset();
irsend.sendMagiQuest(irsend.encodeMagiQuest(0x1, 0x1));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, MAGIQUEST_BITS, true));
EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
EXPECT_EQ(MAGIQUEST_BITS, irsend.capture.bits);
EXPECT_EQ(0x10001, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x1, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
irsend.reset();
irsend.sendMagiQuest(irsend.encodeMagiQuest(0x12345678, 0xABCD));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, MAGIQUEST_BITS, true));
EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
EXPECT_EQ(MAGIQUEST_BITS, irsend.capture.bits);
EXPECT_EQ(0x12345678ABCD, irsend.capture.value);
EXPECT_EQ(0x12345678, irsend.capture.address);
EXPECT_EQ(0xABCD, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
// Do the last one again, & use the full decoder, not just protocol specific.
irsend.reset();
irsend.sendMagiQuest(irsend.encodeMagiQuest(0x12345678, 0xABCD));
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
EXPECT_EQ(MAGIQUEST_BITS, irsend.capture.bits);
EXPECT_EQ(0x12345678ABCD, irsend.capture.value);
}
// Decode a "real" example message.
TEST(TestDecodeMagiQuest, RealExamples) {
IRsendTest irsend(0);
IRrecv irrecv(0);
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
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(0x560F40020455, irsend.capture.value);
EXPECT_EQ(0x560F4002, irsend.capture.address); // Wand ID
EXPECT_EQ(0x0455, irsend.capture.command); // Magnitude
EXPECT_FALSE(irsend.capture.repeat);
}
+640
View File
@@ -0,0 +1,640 @@
// Copyright 2017 David Conran
#include "IRsend.h"
#include "IRsend_test.h"
#include "ir_Midea.h"
#include "gtest/gtest.h"
// Tests for sendMidea().
// Test sending typical data only.
TEST(TestSendMidea, SendDataOnly) {
IRsendTest irsend(4);
irsend.begin();
irsend.reset();
irsend.sendMidea(0x0);
EXPECT_EQ(
"m4480s4480"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s5600"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s5600", irsend.outputStr());
irsend.reset();
irsend.sendMidea(0x55AA55AA55AA);
EXPECT_EQ(
"m4480s4480"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s5600"
"m4480s4480"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s5600", irsend.outputStr());
irsend.reset();
irsend.sendMidea(0xFFFFFFFFFFFF);
EXPECT_EQ(
"m4480s4480"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s5600"
"m4480s4480"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s5600", irsend.outputStr());
}
// Test sending with different repeats.
TEST(TestSendMidea, SendWithRepeats) {
IRsendTest irsend(4);
irsend.begin();
irsend.reset();
irsend.sendMidea(0x55AA55AA55AA, MIDEA_BITS, 1); // 1 repeat.
EXPECT_EQ(
"m4480s4480"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s5600"
"m4480s4480"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s5600"
"m4480s4480"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s5600"
"m4480s4480"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s5600", irsend.outputStr());
irsend.sendMidea(0x55AA55AA55AA, MIDEA_BITS, 2); // 2 repeats.
EXPECT_EQ(
"m4480s4480"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s5600"
"m4480s4480"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s5600"
"m4480s4480"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s5600"
"m4480s4480"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s5600"
"m4480s4480"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s5600"
"m4480s4480"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
"m560s5600", irsend.outputStr());
}
// Test sending an atypical data size.
TEST(TestSendMidea, SendUnusualSize) {
IRsendTest irsend(4);
irsend.begin();
irsend.reset();
irsend.sendMidea(0x0, 8);
EXPECT_EQ(
"m4480s4480"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s5600"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s5600", irsend.outputStr());
irsend.reset();
irsend.sendMidea(0x1234567890ABCDEF, 64);
EXPECT_EQ(
"m4480s4480"
"m560s560m560s560m560s560m560s1680m560s560m560s560m560s1680m560s560"
"m560s560m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s1680m560s560m560s560m560s1680m560s560m560s560m560s560m560s560"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680"
"m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s5600"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560m560s1680"
"m560s1680m560s1680m560s560m560s560m560s1680m560s560m560s1680m560s1680"
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s560m560s1680"
"m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680m560s1680"
"m560s560m560s1680m560s1680m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560"
"m560s560m560s560m560s560m560s1680m560s560m560s560m560s560m560s560"
"m560s5600", irsend.outputStr());
// Bit sizes must be a multiple of 8.
irsend.reset();
irsend.sendMidea(0x0, 17);
EXPECT_EQ("" , irsend.outputStr());
}
// Tests for IRMideaAC class.
// Tests for controlling the power state.
TEST(TestMideaACClass, Power) {
IRMideaAC midea(0);
midea.begin();
midea.setRaw(0xA1026FFFFFE2); // Power off.
midea.on();
EXPECT_TRUE(midea.getPower());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
midea.off();
EXPECT_FALSE(midea.getPower());
EXPECT_EQ(0xA1026FFFFFE2, midea.getRaw());
midea.setPower(true);
EXPECT_TRUE(midea.getPower());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
midea.setPower(false);
EXPECT_FALSE(midea.getPower());
EXPECT_EQ(0xA1026FFFFFE2, midea.getRaw());
}
// Tests for the various Checksum routines.
TEST(TestMideaACClass, Checksums) {
IRMideaAC midea(0);
midea.begin();
// Known good states
EXPECT_EQ(0x62, IRMideaAC::calcChecksum(0xA1826FFFFF62));
EXPECT_EQ(0x70, IRMideaAC::calcChecksum(0xA18177FFFF70));
// Now without the checksum part.
EXPECT_EQ(0x62, IRMideaAC::calcChecksum(0xA1826FFFFF00));
EXPECT_EQ(0x70, IRMideaAC::calcChecksum(0xA18177FFFF00));
// Made up values.
EXPECT_EQ(0x00, IRMideaAC::calcChecksum(0x000000000000));
EXPECT_EQ(0xDF, IRMideaAC::calcChecksum(0x1234567890AB));
EXPECT_EQ(0xA0, IRMideaAC::calcChecksum(0xFFFFFFFFFFFF));
// Larger than expected value (full 64bit)
EXPECT_EQ(0xDF, IRMideaAC::calcChecksum(0xFF1234567890AB));
EXPECT_EQ(0xDF, IRMideaAC::calcChecksum(0x551234567890AB));
// Validity tests.
EXPECT_TRUE(IRMideaAC::validChecksum(0xA1826FFFFF62));
EXPECT_TRUE(IRMideaAC::validChecksum(0xA18177FFFF70));
EXPECT_FALSE(IRMideaAC::validChecksum(0x1234567890AB));
// Doing a setRaw() with a bad state should make a valid checksum on getRaw().
midea.setRaw(0xA1826FFFFF00);
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
}
TEST(TestMideaACClass, OperatingMode) {
IRMideaAC midea(0);
midea.begin();
midea.setRaw(0xA1826FFFFF62); // Auto mode already set.
midea.setMode(MIDEA_AC_AUTO);
EXPECT_EQ(MIDEA_AC_AUTO, midea.getMode());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw()); // State shouldn't have changed.
midea.setMode(MIDEA_AC_COOL);
EXPECT_EQ(MIDEA_AC_COOL, midea.getMode());
EXPECT_EQ(0xA1806FFFFF61, midea.getRaw());
midea.setMode(MIDEA_AC_AUTO);
EXPECT_EQ(MIDEA_AC_AUTO, midea.getMode());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
midea.setMode(MIDEA_AC_HEAT);
EXPECT_EQ(MIDEA_AC_HEAT, midea.getMode());
EXPECT_EQ(0xA1836FFFFF63, midea.getRaw());
midea.setMode(MIDEA_AC_DRY);
EXPECT_EQ(MIDEA_AC_DRY, midea.getMode());
EXPECT_EQ(0xA1816FFFFF60, midea.getRaw());
midea.setMode(MIDEA_AC_FAN);
EXPECT_EQ(MIDEA_AC_FAN, midea.getMode());
EXPECT_EQ(0xA1846FFFFF66, midea.getRaw());
midea.setMode(255);
EXPECT_EQ(MIDEA_AC_AUTO, midea.getMode());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
}
TEST(TestMideaACClass, FanSpeed) {
IRMideaAC midea(0);
midea.begin();
midea.setRaw(0xA1826FFFFF62); // Auto mode already set.
EXPECT_EQ(MIDEA_AC_FAN_AUTO, midea.getFan());
midea.setFan(MIDEA_AC_FAN_LOW);
EXPECT_EQ(MIDEA_AC_FAN_LOW, 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(0xA1826FFFFF62, midea.getRaw());
midea.setFan(MIDEA_AC_FAN_MED);
EXPECT_EQ(MIDEA_AC_FAN_MED, midea.getFan());
EXPECT_EQ(0xA1926FFFFF7C, midea.getRaw());
midea.setFan(MIDEA_AC_FAN_HI);
EXPECT_EQ(MIDEA_AC_FAN_HI, midea.getFan());
EXPECT_EQ(0xA19A6FFFFF74, midea.getRaw());
midea.setFan(MIDEA_AC_FAN_AUTO);
EXPECT_EQ(MIDEA_AC_FAN_AUTO, midea.getFan());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
}
TEST(TestMideaACClass, Temperature) {
IRMideaAC midea(0);
midea.begin();
midea.setRaw(0xA1826FFFFF62); // 77F / 25C
EXPECT_EQ(77, midea.getTemp()); // F
EXPECT_EQ(77, midea.getTemp(false)); // F
EXPECT_EQ(25, midea.getTemp(true)); // F
midea.setTemp(0);
EXPECT_EQ(MIDEA_AC_MIN_TEMP_F, midea.getTemp());
EXPECT_EQ(0xA18260FFFF6C, midea.getRaw());
midea.setTemp(255);
EXPECT_EQ(MIDEA_AC_MAX_TEMP_F, midea.getTemp());
EXPECT_EQ(0xA18278FFFF78, midea.getRaw());
midea.setTemp(0, true);
EXPECT_EQ(MIDEA_AC_MIN_TEMP_F, midea.getTemp());
EXPECT_EQ(0xA18260FFFF6C, midea.getRaw());
midea.setTemp(255, true);
EXPECT_EQ(MIDEA_AC_MAX_TEMP_F, 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(MIDEA_AC_MAX_TEMP_F);
EXPECT_EQ(MIDEA_AC_MAX_TEMP_F, midea.getTemp());
midea.setTemp(MIDEA_AC_MIN_TEMP_F - 1);
EXPECT_EQ(MIDEA_AC_MIN_TEMP_F, midea.getTemp());
midea.setTemp(MIDEA_AC_MAX_TEMP_F + 1);
EXPECT_EQ(MIDEA_AC_MAX_TEMP_F, 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(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(MIDEA_AC_MIN_TEMP_C - 1, true);
EXPECT_EQ(MIDEA_AC_MIN_TEMP_C, 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));
// General changes.
midea.setTemp(17, true); // C
EXPECT_EQ(17, midea.getTemp(true)); // C
EXPECT_EQ(63, midea.getTemp(false)); // F
midea.setTemp(21, true); // C
EXPECT_EQ(21, midea.getTemp(true)); // C
EXPECT_EQ(70, midea.getTemp(false)); // F
midea.setTemp(25, true); // C
EXPECT_EQ(25, midea.getTemp(true)); // C
EXPECT_EQ(77, midea.getTemp(false)); // F
midea.setTemp(30, true); // C
EXPECT_EQ(30, midea.getTemp(true)); // C
EXPECT_EQ(86, midea.getTemp(false)); // F
midea.setTemp(80, false); // F
EXPECT_EQ(26, midea.getTemp(true)); // C
EXPECT_EQ(80, midea.getTemp(false)); // F
midea.setTemp(70); // F
EXPECT_EQ(21, midea.getTemp(true)); // C
EXPECT_EQ(70, midea.getTemp(false)); // F
EXPECT_EQ(70, midea.getTemp()); // F
}
// Tests for controlling the sleep state.
TEST(TestMideaACClass, Sleep) {
IRMideaAC midea(0);
midea.begin();
midea.setRaw(0xA1826FFFFF62); // Sleep off.
EXPECT_FALSE(midea.getSleep());
midea.setSleep(true);
EXPECT_TRUE(midea.getSleep());
EXPECT_EQ(0xA1C26FFFFF22, midea.getRaw());
midea.setSleep(false);
EXPECT_FALSE(midea.getSleep());
EXPECT_EQ(0xA1826FFFFF62, midea.getRaw());
}
TEST(TestMideaACClass, HumanReadableOutput) {
IRMideaAC midea(0);
midea.begin();
midea.setRaw(0xA1826FFFFF62);
EXPECT_EQ("Power: On, Mode: 2 (AUTO), Temp: 25C/77F, Fan: 0 (AUTO), "
"Sleep: Off", midea.toString());
midea.off();
midea.setTemp(25);
midea.setFan(MIDEA_AC_FAN_HI);
midea.setMode(MIDEA_AC_DRY);
midea.setSleep(true);
EXPECT_EQ("Power: Off, Mode: 1 (DRY), Temp: 16C/62F, Fan: 3 (HI), Sleep: On",
midea.toString());
midea.setRaw(0xA19867FFFF7E);
EXPECT_EQ("Power: On, Mode: 0 (COOL), Temp: 20C/69F, Fan: 3 (HI), Sleep: Off",
midea.toString());
}
// Tests for decodeMidea().
// Decode normal Midea messages with strict set.
TEST(TestDecodeMidea, NormalDecodeWithStrict) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
// Normal Midea 48-bit message.
irsend.reset();
irsend.sendMidea(0x1234567890DF);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(0x1234567890DF, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
// Normal Midea 48-bit message.
irsend.reset();
irsend.sendMidea(0x0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_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);
// Normal Midea 48-bit message.
irsend.reset();
irsend.sendMidea(0xFFFFFFFFFFA0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(0xFFFFFFFFFFA0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
// Real Midea 48-bit message via just decode().
// i.e. No conficts with other decoders.
irsend.reset();
irsend.sendMidea(0xA18263FFFF6E);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
}
// Decode normal repeated Midea messages.
TEST(TestDecodeMidea, NormalDecodeWithRepeatAndStrict) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
// Normal Midea 48-bit message with 2 repeats.
irsend.reset();
irsend.sendMidea(0xA18263FFFF6E, MIDEA_BITS, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, 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));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, 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));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
}
// Decode unsupported Midea messages.
TEST(TestDecodeMidea, DecodeWithNonStrictSizes) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
irsend.sendMidea(0x12, 8); // Illegal value Midea 8-bit message.
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, 8, false));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(8, irsend.capture.bits);
EXPECT_EQ(0x12, irsend.capture.value);
irsend.reset();
irsend.sendMidea(0x12345678, 32); // Illegal value Midea 32-bit message.
irsend.makeDecodeResult();
// Shouldn't pass with strict when we ask for less bits than we got.
ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, true));
irsend.makeDecodeResult();
// Should fail with strict when we ask for the wrong bit size.
ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, 32, true));
// Should pass if strict off.
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, 32, false));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(32, irsend.capture.bits);
EXPECT_EQ(0x12345678, irsend.capture.value);
// Decode should fail if asked to decode non-multiples of 8 bits.
irsend.reset();
irsend.sendMidea(0x123456, MIDEA_BITS, 2);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, 9, false));
}
// Decode (non-standard) 64-bit messages.
TEST(TestDecodeMidea, Decode64BitMessages) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
// Illegal size Midea 64-bit message.
irsend.sendMidea(0xFFFFFFFFFFFFFFFF, 64);
irsend.makeDecodeResult();
// Should work with a 'normal' match (not strict)
ASSERT_TRUE(irrecv.decodeMidea(&irsend.capture, 64, false));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(64, irsend.capture.bits);
EXPECT_EQ(0xFFFFFFFFFFFFFFFF, irsend.capture.value);
}
// Fail to decode a non-Midea example via GlobalCache
TEST(TestDecodeMidea, FailToDecodeNonMideaExample) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
// Modified a few entries to unexpected values, based on previous test case.
uint16_t gc_test[39] = {38000, 1, 1, 322, 162, 20, 61, 20, 61, 20, 20, 20, 20,
20, 20, 20, 127, 20, 61, 9, 20, 20, 61, 20, 20, 20,
61, 20, 61, 20, 61, 20, 20, 20, 20, 20, 20, 20, 884};
irsend.sendGC(gc_test, 39);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture));
ASSERT_FALSE(irrecv.decodeMidea(&irsend.capture, MIDEA_BITS, false));
}
// Decode against a real capture reported by a user. See issue #354
TEST(TestDecodeMidea, DecodeRealExample) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
uint16_t rawData[199] = {
4366, 4470, 498, 1658, 522, 554, 498, 1658, 496, 580, 498, 580, 498, 578,
498, 580, 498, 1658, 498, 1658, 498, 578, 498, 578, 498, 580, 496, 582,
496, 578, 498, 1658, 498, 580, 498, 580, 498, 1656, 498, 1656, 500, 580,
498, 578, 502, 576, 500, 1656, 498, 1656, 500, 1654, 500, 1656, 500, 1656,
498, 1658, 498, 1656, 500, 1658, 498, 1656, 498, 1656, 500, 1656, 500,
1654, 500, 1578, 578, 1658, 498, 1656, 500, 1658, 498, 1656, 498, 1656,
500, 578, 498, 1638, 516, 1656, 500, 578, 500, 1656, 500, 1656, 498, 1658,
522, 554, 500, 5258, 4366, 4472, 498, 580, 498, 1658, 498, 580, 498, 1656,
500, 1600, 556, 1658, 500, 1656, 500, 578, 498, 578, 522, 1634, 498, 1588,
568, 1658, 498, 1656, 500, 1654, 498, 580, 498, 1658, 498, 1658, 498, 580,
496, 578, 500, 1654, 500, 1636, 518, 1656, 500, 578, 520, 558, 498, 578,
498, 580, 498, 576, 500, 578, 498, 580, 498, 578, 498, 578, 498, 580, 498,
578, 498, 580, 498, 580, 520, 556, 498, 580, 496, 580, 498, 578, 500, 578,
498, 1658, 498, 580, 498, 578, 498, 1656, 500, 578, 498, 580, 498, 580,
498, 1656, 522};
irsend.sendRaw(rawData, 199, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MIDEA, irsend.capture.decode_type);
EXPECT_EQ(MIDEA_BITS, irsend.capture.bits);
EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
}
+157 -17
View File
@@ -17,30 +17,30 @@ TEST(TestSendMitsubishi, SendDataOnly) {
EXPECT_EQ(
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s53580"
"m300s28080"
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s53580", irsend.outputStr());
"m300s28080", irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi(0x0);
EXPECT_EQ(
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
"m300s53580"
"m300s34080"
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
"m300s53580", irsend.outputStr());
"m300s34080", irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi(0x4321);
EXPECT_EQ(
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s2100"
"m300s900m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100"
"m300s53580"
"m300s28080"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s2100"
"m300s900m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100"
"m300s53580", irsend.outputStr());
"m300s28080", irsend.outputStr());
}
// Test sending with different repeats.
@@ -53,32 +53,32 @@ TEST(TestSendMitsubishi, SendWithRepeats) {
EXPECT_EQ(
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s53580", irsend.outputStr());
"m300s28080", irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi(0xE242, MITSUBISHI_BITS, 1); // 1 repeat.
EXPECT_EQ(
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s53580"
"m300s28080"
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s53580", irsend.outputStr());
"m300s28080", irsend.outputStr());
irsend.sendMitsubishi(0xE242, MITSUBISHI_BITS, 2); // 2 repeats.
EXPECT_EQ(
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s53580"
"m300s28080"
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s53580"
"m300s28080"
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
"m300s53580", irsend.outputStr());
"m300s28080", irsend.outputStr());
}
// Test sending an atypical data size.
TEST(TestSendMitsubishi, SendUsualSize) {
TEST(TestSendMitsubishi, SendUnusualSize) {
IRsendTest irsend(4);
irsend.begin();
@@ -86,9 +86,9 @@ TEST(TestSendMitsubishi, SendUsualSize) {
irsend.sendMitsubishi(0x0, 8);
EXPECT_EQ(
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
"m300s53580"
"m300s43680"
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
"m300s53580", irsend.outputStr());
"m300s43680", irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi(0x1234567890ABCDEF, 64);
@@ -101,7 +101,7 @@ TEST(TestSendMitsubishi, SendUsualSize) {
"m300s2100m300s900m300s2100m300s900m300s2100m300s900m300s2100m300s2100"
"m300s2100m300s2100m300s900m300s900m300s2100m300s2100m300s900m300s2100"
"m300s2100m300s2100m300s2100m300s900m300s2100m300s2100m300s2100m300s2100"
"m300s53580"
"m300s28080"
"m300s900m300s900m300s900m300s2100m300s900m300s900m300s2100m300s900"
"m300s900m300s900m300s2100m300s2100m300s900m300s2100m300s900m300s900"
"m300s900m300s2100m300s900m300s2100m300s900m300s2100m300s2100m300s900"
@@ -110,7 +110,7 @@ TEST(TestSendMitsubishi, SendUsualSize) {
"m300s2100m300s900m300s2100m300s900m300s2100m300s900m300s2100m300s2100"
"m300s2100m300s2100m300s900m300s900m300s2100m300s2100m300s900m300s2100"
"m300s2100m300s2100m300s2100m300s900m300s2100m300s2100m300s2100m300s2100"
"m300s53580", irsend.outputStr());
"m300s28080", irsend.outputStr());
}
// Decode normal Mitsubishi messages.
@@ -692,3 +692,143 @@ TEST(TestMitsubishiACClass, MessageConstuction) {
"m450s420m450s420m450s420m450s1300m450s420m450s420m450s1300m450s420"
"m440s17100", irsend.outputStr());
}
// Tests for sendMitsubishi2().
// Test sending typical data only.
TEST(TestSendMitsubishi2, SendDataOnly) {
IRsendTest irsend(4);
irsend.begin();
irsend.reset();
irsend.sendMitsubishi2(0xF82);
EXPECT_EQ(
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500"
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500", irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi2(0x0);
EXPECT_EQ(
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s520m560s520m560s520m560s520"
"m560s4200"
"m560s520m560s520m560s520m560s520m560s520m560s520m560s520m560s520"
"m560s28500"
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s520m560s520m560s520m560s520"
"m560s4200"
"m560s520m560s520m560s520m560s520m560s520m560s520m560s520m560s520"
"m560s28500", irsend.outputStr());
}
// Test sending odd repeats.
TEST(TestSendMitsubishi2, Repeats) {
IRsendTest irsend(4);
irsend.begin();
irsend.reset();
irsend.sendMitsubishi2(0xF82, MITSUBISHI_BITS, 0);
EXPECT_EQ(
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500", irsend.outputStr());
irsend.reset();
irsend.sendMitsubishi2(0xF82, MITSUBISHI_BITS, 2);
EXPECT_EQ(
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500"
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500"
"m8400s4200"
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
"m560s4200"
"m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
"m560s28500", irsend.outputStr());
}
// Tests for decodeMitsubishi2().
// Decode synthetic examples.
TEST(TestDecodeMitsubishi2, DecodeSyntheticExamples) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
// Mitsubishi Projector "Power On" (16-bit).
irsend.sendMitsubishi2(0xF82);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MITSUBISHI2, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(0xF82, irsend.capture.value);
EXPECT_EQ(0xF, irsend.capture.address);
EXPECT_EQ(0x82, irsend.capture.command);
irsend.reset();
irsend.sendMitsubishi2(0x0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MITSUBISHI2, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
irsend.reset();
irsend.sendMitsubishi2(0x1234);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(MITSUBISHI2, irsend.capture.decode_type);
EXPECT_EQ(MITSUBISHI_BITS, irsend.capture.bits);
EXPECT_EQ(0x1234, irsend.capture.value);
EXPECT_EQ(0x12, irsend.capture.address);
EXPECT_EQ(0x34, irsend.capture.command);
}
// Decode a 'real' example from Issue #441
TEST(TestDecodeMitsubishi2, DecodeRealExample) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
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
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(0xF82, irsend.capture.value);
EXPECT_EQ(0xF, irsend.capture.address);
EXPECT_EQ(0x82, irsend.capture.command);
}
+13 -13
View File
@@ -15,13 +15,13 @@ TEST(TestSendNEC, SendDataOnly) {
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s108080", irsend.outputStr());
"m560s560m560s58240", irsend.outputStr());
irsend.sendNEC(0xAA00FF55);
EXPECT_EQ("m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s1680m560s560m560s1680m560s560m560s1680"
"m560s560m560s1680m560s560m560s1680m560s108080",
"m560s560m560s1680m560s560m560s1680m560s40320",
irsend.outputStr());
}
@@ -30,11 +30,11 @@ TEST(TestSendNEC, SendSmallData) {
IRsendTest irsend(4);
irsend.begin();
irsend.sendNEC(0xA, 4); // Send only 4 data bits.
EXPECT_EQ("m8960s4480m560s1680m560s560m560s1680m560s560m560s108080",
EXPECT_EQ("m8960s4480m560s1680m560s560m560s1680m560s560m560s87360",
irsend.outputStr());
irsend.sendNEC(0, 8); // Send only 8 data bits.
EXPECT_EQ("m8960s4480m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s108080", irsend.outputStr());
"m560s560m560s85120", irsend.outputStr());
irsend.sendNEC(0x1234567890ABCDEF, 64); // Send 64 data bits.
EXPECT_EQ("m8960s4480m560s560m560s560m560s560m560s1680m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s1680m560s1680m560s560"
@@ -45,7 +45,7 @@ TEST(TestSendNEC, SendSmallData) {
"m560s1680m560s560m560s1680m560s560m560s1680m560s1680m560s1680"
"m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680"
"m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s1680"
"m560s1680m560s108080", irsend.outputStr());
"m560s1680m560s22400", irsend.outputStr());
}
// Test sending with repeats.
@@ -54,18 +54,18 @@ TEST(TestSendNEC, SendWithRepeats) {
irsend.begin();
irsend.sendNEC(0, 8, 0); // Send a command with 0 repeats.
EXPECT_EQ("m8960s4480m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s108080", irsend.outputStr());
"m560s560m560s85120", irsend.outputStr());
irsend.sendNEC(0xAA, 8, 1); // Send a command with 1 repeat.
EXPECT_EQ("m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s108080"
"m8960s2240m560s108080",
"m560s1680m560s560m560s80640"
"m8960s2240m560s96320",
irsend.outputStr());
irsend.sendNEC(0xAA, 8, 3); // Send a command with 3 repeats.
EXPECT_EQ("m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
"m560s1680m560s560m560s108080"
"m8960s2240m560s108080"
"m8960s2240m560s108080"
"m8960s2240m560s108080",
"m560s1680m560s560m560s80640"
"m8960s2240m560s96320"
"m8960s2240m560s96320"
"m8960s2240m560s96320",
irsend.outputStr());
}
@@ -250,7 +250,7 @@ TEST(TestDecodeNEC, NoTrailingGap_Issue243) {
EXPECT_EQ(0x4BB640BF, irsend.capture.value);
// Add a zero length space to the message to test how it handles that as
// a end of command gap.
// an end of command gap.
irsend.addGap(0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
+210
View File
@@ -0,0 +1,210 @@
// Copyright 2017 David Conran
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for sendNikai().
// Test sending typical data only.
TEST(TestSendNikai, SendDataOnly) {
IRsendTest irsend(4);
irsend.begin();
irsend.reset();
irsend.sendNikai(0xD5F2A); // Nikai TV Power Off.
EXPECT_EQ("m4000s4000"
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
"m500s1000m500s1000m500s2000m500s2000m500s1000m500s2000m500s1000"
"m500s2000m500s1000m500s2000m500s8500",
irsend.outputStr());
irsend.reset();
}
// Test sending with different repeats.
TEST(TestSendNikai, SendWithRepeats) {
IRsendTest irsend(4);
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());
}
// Tests for decodeNikai().
// Decode normal Nikai messages.
TEST(TestDecodeNikai, NormalDecodeWithStrict) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
// Normal Nikai 24-bit message.
irsend.reset();
irsend.sendNikai(0x123456);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, true));
EXPECT_EQ(NIKAI, irsend.capture.decode_type);
EXPECT_EQ(NIKAI_BITS, 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));
EXPECT_EQ(NIKAI, irsend.capture.decode_type);
EXPECT_EQ(NIKAI_BITS, irsend.capture.bits);
EXPECT_EQ(0x101, irsend.capture.value);
}
// Decode normal repeated Nikai messages.
TEST(TestDecodeNikai, NormalDecodeWithRepeatAndStrict) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
// Normal Nikai 24-bit message.
irsend.reset();
irsend.sendNikai(0xD5F2A, NIKAI_BITS, 2);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, true));
EXPECT_EQ(NIKAI, irsend.capture.decode_type);
EXPECT_EQ(NIKAI_BITS, irsend.capture.bits);
EXPECT_EQ(0xD5F2A, irsend.capture.value);
}
TEST(TestDecodeNikai, NormalDecodeWithNonStrict) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
// Illegal under length (16-bit) message
irsend.reset();
irsend.sendNikai(0x0, 16);
irsend.makeDecodeResult();
// Should fail with strict on.
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, true));
// And it should fail when we expect more bits.
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, false));
// Should pass if strict off if we ask for correct nr. of bits sent.
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, 16, false));
EXPECT_EQ(NIKAI, irsend.capture.decode_type);
EXPECT_EQ(16, irsend.capture.bits);
EXPECT_EQ(0x0, irsend.capture.value);
// Should fail as we are expecting less bits than there are.
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, 12, false));
}
// Decode (non-standard) 64-bit messages.
// Decode unsupported Nikai messages.
TEST(TestDecodeNikai, Decode64BitMessages) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
irsend.reset();
// Illegal size Nikai 64-bit message.
irsend.sendNikai(0xFFFFFFFFFFFFFFFF, 64);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, true));
// Should work with a 'normal' match (not strict)
ASSERT_TRUE(irrecv.decodeNikai(&irsend.capture, 64, false));
EXPECT_EQ(NIKAI, irsend.capture.decode_type);
EXPECT_EQ(64, irsend.capture.bits);
EXPECT_EQ(0xFFFFFFFFFFFFFFFF, irsend.capture.value);
}
// Decode real example via Issue #309
TEST(TestDecodeNikai, DecodeExamples) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
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};
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(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};
irsend.reset();
irsend.sendRaw(rawdata_volup, 52, 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(0xD0F2F, irsend.capture.value);
}
// Fail to decode a non-Nikai example via GlobalCache
TEST(TestDecodeNikai, FailToDecodeNonNikaiExample) {
IRsendTest irsend(4);
IRrecv irrecv(4);
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};
irsend.sendGC(gc_test, 71);
irsend.makeDecodeResult();
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture));
ASSERT_FALSE(irrecv.decodeNikai(&irsend.capture, NIKAI_BITS, false));
}
+11 -11
View File
@@ -36,7 +36,7 @@ TEST(TestSendPanasonic64, SendDataOnly) {
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s129600", irsend.outputStr());
"m432s116208", irsend.outputStr());
irsend.reset();
irsend.sendPanasonic64(0x40040190ED7C);
@@ -48,7 +48,7 @@ TEST(TestSendPanasonic64, SendDataOnly) {
"m432s1296m432s432m432s432m432s1296m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s129600", irsend.outputStr());
"m432s102384", irsend.outputStr());
irsend.reset();
irsend.sendPanasonic64(0xFFFFFFFFFFFF);
@@ -60,7 +60,7 @@ TEST(TestSendPanasonic64, SendDataOnly) {
"m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296"
"m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296"
"m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296"
"m432s129600", irsend.outputStr());
"m432s74736", irsend.outputStr());
}
// Test sending with different repeats.
@@ -78,7 +78,7 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
"m432s1296m432s432m432s432m432s1296m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s129600", irsend.outputStr());
"m432s102384", irsend.outputStr());
irsend.reset();
irsend.sendPanasonic64(0x40040190ED7C, PANASONIC_BITS, 1); // 1 repeat.
@@ -90,7 +90,7 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
"m432s1296m432s432m432s432m432s1296m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s129600"
"m432s102384"
"m3456s1728"
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s432m432s432"
@@ -98,7 +98,7 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
"m432s1296m432s432m432s432m432s1296m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s129600", irsend.outputStr());
"m432s102384", irsend.outputStr());
irsend.sendPanasonic64(0x40040190ED7C, PANASONIC_BITS, 2); // 2 repeats.
EXPECT_EQ(
@@ -109,7 +109,7 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
"m432s1296m432s432m432s432m432s1296m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s129600"
"m432s102384"
"m3456s1728"
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s432m432s432"
@@ -117,7 +117,7 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
"m432s1296m432s432m432s432m432s1296m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s129600"
"m432s102384"
"m3456s1728"
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s432m432s432"
@@ -125,7 +125,7 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
"m432s1296m432s432m432s432m432s1296m432s432m432s432m432s432m432s432"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s432m432s1296"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s129600", irsend.outputStr());
"m432s102384", irsend.outputStr());
}
// Test sending an atypical data size.
@@ -138,7 +138,7 @@ TEST(TestSendPanasonic64, SendUnusualSize) {
EXPECT_EQ(
"m3456s1728"
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
"m432s129600", irsend.outputStr());
"m432s150768", irsend.outputStr());
irsend.reset();
irsend.sendPanasonic64(0x1234567890ABCDEF, 64);
@@ -152,7 +152,7 @@ TEST(TestSendPanasonic64, SendUnusualSize) {
"m432s1296m432s432m432s1296m432s432m432s1296m432s432m432s1296m432s1296"
"m432s1296m432s1296m432s432m432s432m432s1296m432s1296m432s432m432s1296"
"m432s1296m432s1296m432s1296m432s432m432s1296m432s1296m432s1296m432s1296"
"m432s129600", irsend.outputStr());
"m432s74736", irsend.outputStr());
}
// Tests for sendPanasonic().
+45 -47
View File
@@ -129,6 +129,12 @@ TEST(TestSendPronto, NonRepeatingCode) {
irsend.reset();
irsend.sendPronto(pronto_test, 108);
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(0x10, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_EQ(
"m2400s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
@@ -142,18 +148,18 @@ TEST(TestSendPronto, NonRepeatingCode) {
"m2400s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m600s600m600s600", irsend.outputStr());
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_12_BITS, irsend.capture.bits);
EXPECT_EQ(0x10, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
// Now try repeating it.
// As it has no repeat sequence, we shouldn't repeat it. (I think)
irsend.reset();
irsend.sendPronto(pronto_test, 108, 3);
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(0x10, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_EQ(
"m2400s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
@@ -167,12 +173,6 @@ TEST(TestSendPronto, NonRepeatingCode) {
"m2400s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m600s600m600s600", irsend.outputStr());
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_12_BITS, irsend.capture.bits);
EXPECT_EQ(0x10, irsend.capture.value);
EXPECT_EQ(0x1, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
}
// Test sending a Pronto code that only has a repeat sequence (Sony).
@@ -195,22 +195,28 @@ TEST(TestSendPronto, RepeatSequenceOnlyForSony) {
irsend.reset();
irsend.sendPronto(pronto_test, 46);
irsend.makeDecodeResult();
EXPECT_EQ(
"m2400s600"
"m600s600m1200s600m1200s600m1200s600m600s600m1200s600m600s600m600s600"
"m1200s600m600s600m1200s600m1200s600m1200s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s25350", irsend.outputStr());
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_20_BITS, irsend.capture.bits);
EXPECT_EQ(0x74B92, irsend.capture.value);
EXPECT_EQ(0x1A, irsend.capture.address);
EXPECT_EQ(0x24AE, irsend.capture.command);
EXPECT_EQ(
"m2400s600"
"m600s600m1200s600m1200s600m1200s600m600s600m1200s600m600s600m600s600"
"m1200s600m600s600m1200s600m1200s600m1200s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s25350", irsend.outputStr());
// Send the Pronto code with 2 repeats.
irsend.reset();
irsend.sendPronto(pronto_test, 46, SONY_MIN_REPEAT);
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(0x74B92, irsend.capture.value);
EXPECT_EQ(0x1A, irsend.capture.address);
EXPECT_EQ(0x24AE, irsend.capture.command);
EXPECT_EQ(
"m2400s600"
"m600s600m1200s600m1200s600m1200s600m600s600m1200s600m600s600m600s600"
@@ -224,13 +230,6 @@ TEST(TestSendPronto, RepeatSequenceOnlyForSony) {
"m600s600m1200s600m1200s600m1200s600m600s600m1200s600m600s600m600s600"
"m1200s600m600s600m1200s600m1200s600m1200s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s25350", irsend.outputStr());
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(SONY, irsend.capture.decode_type);
EXPECT_EQ(SONY_20_BITS, irsend.capture.bits);
EXPECT_EQ(0x74B92, irsend.capture.value);
EXPECT_EQ(0x1A, irsend.capture.address);
EXPECT_EQ(0x24AE, irsend.capture.command);
}
// Test sending a Pronto code that only has a repeat sequence (Panasonic).
@@ -260,6 +259,12 @@ TEST(TestSendPronto, RepeatSequenceOnlyForPanasonic) {
irsend.reset();
irsend.sendPronto(pronto_test, 104);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(0x400401007C7D, irsend.capture.value);
EXPECT_EQ(0x4004, irsend.capture.address);
EXPECT_EQ(0x1007C7D, irsend.capture.command);
EXPECT_EQ(
"m3456s1701"
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
@@ -269,13 +274,6 @@ TEST(TestSendPronto, RepeatSequenceOnlyForPanasonic) {
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s432"
"m432s432m432s1296m432s1296m432s1296m432s1296m432s1296m432s432m432s1296"
"m432s73224", irsend.outputStr());
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
EXPECT_EQ(PANASONIC_BITS, irsend.capture.bits);
EXPECT_EQ(0x400401007C7D, irsend.capture.value);
EXPECT_EQ(0x4004, irsend.capture.address);
EXPECT_EQ(0x1007C7D, irsend.capture.command);
}
@@ -303,6 +301,12 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
irsend.reset();
irsend.sendPronto(pronto_test, 76);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(0x18E710EF, irsend.capture.value);
EXPECT_EQ(0x18, irsend.capture.address);
EXPECT_EQ(0x8, irsend.capture.command);
EXPECT_EQ(
"m8892s4446"
"m546s546m546s546m546s546m546s1664m546s1664m546s546m546s546m546s546"
@@ -310,17 +314,17 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
"m546s546m546s546m546s546m546s1664m546s546m546s546m546s546m546s546"
"m546s1664m546s1664m546s1664m546s546m546s1664m546s1664m546s1664m546s1664"
"m546s39858", irsend.outputStr());
// Send it again with a single repeat.
irsend.reset();
irsend.sendPronto(pronto_test, 76, 1);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(0x18E710EF, irsend.capture.value);
EXPECT_EQ(0x18, irsend.capture.address);
EXPECT_EQ(0x8, irsend.capture.command);
// Send it again with a single repeat.
irsend.reset();
irsend.sendPronto(pronto_test, 76, 1);
irsend.makeDecodeResult();
EXPECT_EQ(
"m8892s4446"
"m546s546m546s546m546s546m546s1664m546s1664m546s546m546s546m546s546"
@@ -329,17 +333,17 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
"m546s1664m546s1664m546s1664m546s546m546s1664m546s1664m546s1664m546s1664"
"m546s39858"
"m8892s2210m546s95212", irsend.outputStr());
// Send it again with a two repeats.
irsend.reset();
irsend.sendPronto(pronto_test, 76, 2);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(0x18E710EF, irsend.capture.value);
EXPECT_EQ(0x18, irsend.capture.address);
EXPECT_EQ(0x8, irsend.capture.command);
// Send it again with a two repeats.
irsend.reset();
irsend.sendPronto(pronto_test, 76, 2);
irsend.makeDecodeResult();
EXPECT_EQ(
"m8892s4446"
"m546s546m546s546m546s546m546s1664m546s1664m546s546m546s546m546s546"
@@ -349,10 +353,4 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
"m546s39858"
"m8892s2210m546s95212"
"m8892s2210m546s95212", irsend.outputStr());
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(NEC, irsend.capture.decode_type);
EXPECT_EQ(NEC_BITS, irsend.capture.bits);
EXPECT_EQ(0x18E710EF, irsend.capture.value);
EXPECT_EQ(0x18, irsend.capture.address);
EXPECT_EQ(0x8, irsend.capture.command);
}
+18 -18
View File
@@ -80,52 +80,52 @@ TEST(TestSendRC5, SendDataOnly) {
irsend.sendRC5(0x0, RC5_BITS);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s889m889s889m889s889m889"
"s889m889s889m889s889m889s889m889s889m889s889m889s114667",
"s889m889s889m889s889m889s889m889s889m889s889m889s90664",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x1AAA, RC5_BITS);
EXPECT_EQ(
"m889s889m889s889m1778s1778m1778s1778m1778s1778"
"m1778s1778m1778s1778m1778s114667", irsend.outputStr());
"m1778s1778m1778s1778m1778s90664", irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x175, RC5_BITS);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s113778", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s89775", irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x3FFF, RC5_BITS);
EXPECT_EQ(
"m889s889m889s889m889s889m889s889m889s889m889s889m889s889"
"m889s889m889s889m889s889m889s889m889s889m889s889m889s113778",
"m889s889m889s889m889s889m889s889m889s889m889s889m889s89775",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x0, RC5X_BITS);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s889m889s889m889s889m889"
"s889m889s889m889s889m889s889m889s889m889s889m889s114667",
"s889m889s889m889s889m889s889m889s889m889s889m889s90664",
irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x1AAA, RC5X_BITS);
EXPECT_EQ(
"m1778s1778m1778s1778m1778s1778m1778"
"s1778m1778s1778m1778s1778m1778s114667", irsend.outputStr());
"s1778m1778s1778m1778s1778m1778s90664", irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x175, RC5X_BITS);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s113778", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s89775", irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x3FFF, RC5X_BITS);
EXPECT_EQ(
"m1778s1778m889s889m889s889m889s889m889s889m889s889m889"
"s889m889s889m889s889m889s889m889s889m889s889m889s113778",
"s889m889s889m889s889m889s889m889s889m889s889m889s89775",
irsend.outputStr());
}
@@ -138,37 +138,37 @@ TEST(TestSendRC5, SendWithRepeats) {
irsend.sendRC5(0x175, RC5_BITS, 1);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s114667"
"m889s889m889s889m1778s1778m1778s1778m889s90664"
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s113778", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s88886", irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x175, RC5_BITS, 2);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s114667"
"m889s889m889s889m1778s1778m1778s1778m889s90664"
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s114667"
"m889s889m889s889m1778s1778m1778s1778m889s89775"
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s113778", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s88886", irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x175, RC5X_BITS, 1);
EXPECT_EQ(
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s114667"
"m889s889m889s889m1778s1778m1778s1778m889s90664"
"m889s889m1778s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s113778", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s88886", irsend.outputStr());
irsend.reset();
irsend.sendRC5(0x1175, RC5X_BITS, 2);
EXPECT_EQ(
"m1778s889m889s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s114667"
"m889s889m889s889m1778s1778m1778s1778m889s90664"
"m1778s889m889s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s114667"
"m889s889m889s889m1778s1778m1778s1778m889s89775"
"m1778s889m889s889m889s889m889s1778m1778s1778"
"m889s889m889s889m1778s1778m1778s1778m889s113778", irsend.outputStr());
"m889s889m889s889m1778s1778m1778s1778m889s88886", irsend.outputStr());
}
// Tests for decodeRC5().
+8 -8
View File
@@ -16,13 +16,13 @@ TEST(TestSendRCMM, SendDataOnly) {
EXPECT_EQ("m416s277"
"m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s27778", irsend.outputStr());
"m166s19600", irsend.outputStr());
irsend.reset();
irsend.sendRCMM(0x28e0a600UL, 32);
EXPECT_EQ("m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s27778", irsend.outputStr());
"m166s17160", irsend.outputStr());
}
// Test sending with different repeats.
@@ -35,19 +35,19 @@ TEST(TestSendRCMM, SendWithRepeats) {
EXPECT_EQ("m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s27778"
"m166s17160"
"m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s27778"
"m166s17160"
"m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s27778", irsend.outputStr());
"m166s17160", irsend.outputStr());
}
// Test sending an atypical data size.
TEST(TestSendRCMM, SendUsualSize) {
TEST(TestSendRCMM, SendUnusualSize) {
IRsendTest irsend(4);
irsend.begin();
@@ -55,13 +55,13 @@ TEST(TestSendRCMM, SendUsualSize) {
irsend.sendRCMM(0xE0, 8);
EXPECT_EQ("m416s277"
"m166s777m166s611m166s277m166s277"
"m166s27778", irsend.outputStr());
"m166s24313", irsend.outputStr());
irsend.reset();
irsend.sendRCMM(0x28e0a60000UL, 40);
EXPECT_EQ("m416s277"
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
"m166s277m166s277m166s277m166s277m166s27778", irsend.outputStr());
"m166s277m166s277m166s277m166s277m166s15388", irsend.outputStr());
}
// Tests for decodeRCMM().
+6 -6
View File
@@ -18,7 +18,7 @@ TEST(TestSendSamsung, SendDataOnly) {
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s108080",
"m560s560m560s1680m560s1680m560s560m560s47040",
irsend.outputStr());
irsend.reset();
@@ -36,13 +36,13 @@ TEST(TestSendSamsung, SendWithRepeats) {
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s108080"
"m560s560m560s1680m560s1680m560s560m560s47040"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s108080"
"m560s560m560s1680m560s1680m560s560m560s47040"
, irsend.outputStr());
irsend.sendSAMSUNG(0xE0E09966, SAMSUNG_BITS, 2); // 2 repeats.
EXPECT_EQ("m4480s4480"
@@ -50,19 +50,19 @@ TEST(TestSendSamsung, SendWithRepeats) {
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s108080"
"m560s560m560s1680m560s1680m560s560m560s47040"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s108080"
"m560s560m560s1680m560s1680m560s560m560s47040"
"m4480s4480"
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
"m560s560m560s560m560s1680m560s560m560s1680m560s1680m560s560"
"m560s560m560s1680m560s1680m560s560m560s108080"
"m560s560m560s1680m560s1680m560s560m560s47040"
, irsend.outputStr());
}
+3 -3
View File
@@ -34,7 +34,7 @@ TEST(TestEncodeSanyoLC7461, SendDataOnly) {
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s108080", irsend.outputStr());
"m560s1680m560s1680m560s23520", irsend.outputStr());
}
// Test sending with different repeats.
@@ -51,8 +51,8 @@ TEST(TestEncodeSanyoLC7461, SendWithRepeats) {
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
"m560s1680m560s1680m560s108080"
"m8960s2240m560s108080", irsend.outputStr());
"m560s1680m560s1680m560s23520"
"m8960s2240m560s96320", irsend.outputStr());
}
// Tests for decodeSanyoLC7461().
@@ -17,8 +17,8 @@ TEST(TestSendSherwood, SendDataOnly) {
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680"
"m560s1680m560s560m560s1680m560s1680m560s1680m560s108080"
"m8960s2240m560s108080", irsend.outputStr());
"m560s1680m560s560m560s1680m560s1680m560s1680m560s42560"
"m8960s2240m560s96320", irsend.outputStr());
}
// Test sending typical data with extra repeats.
@@ -32,9 +32,9 @@ TEST(TestSendSherwood, SendDataWithRepeats) {
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680"
"m560s1680m560s560m560s1680m560s1680m560s1680m560s108080"
"m8960s2240m560s108080"
"m8960s2240m560s108080", irsend.outputStr());
"m560s1680m560s560m560s1680m560s1680m560s1680m560s42560"
"m8960s2240m560s96320"
"m8960s2240m560s96320", irsend.outputStr());
}
// Test sending typical data with explicit no repeats.
@@ -49,8 +49,8 @@ TEST(TestSendSherwood, SendDataWithZeroRepeats) {
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
"m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680"
"m560s1680m560s560m560s1680m560s1680m560s1680m560s108080"
"m8960s2240m560s108080", irsend.outputStr());
"m560s1680m560s560m560s1680m560s1680m560s1680m560s42560"
"m8960s2240m560s96320", irsend.outputStr());
}
// Test that a typical Sherwood send decodes as the appropriate NEC value.
+19 -19
View File
@@ -16,49 +16,49 @@ TEST(TestSendSony, SendDataOnly) {
// We expect three 20-bit commands to be sent.
EXPECT_EQ("m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s45600"
"m600s600m600s600m600s600m600s600m600s18600"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s45600"
"m600s600m600s600m600s600m600s600m600s18600"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m600s600m600s600m600s600m600s45600", irsend.outputStr());
"m600s600m600s600m600s600m600s600m600s18600", irsend.outputStr());
irsend.reset();
irsend.sendSony(0x240C, SONY_20_BITS);
// We expect three 20-bit commands to be sent.
EXPECT_EQ("m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s45600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s45600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s45600", irsend.outputStr());
"m600s600m1200s600m1200s600m600s600m600s16200", irsend.outputStr());
irsend.reset();
irsend.sendSony(0x240C, SONY_15_BITS);
// We expect three 15-bit commands to be sent.
EXPECT_EQ("m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600"
"m600s45600"
"m600s22200"
"m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600"
"m600s45600"
"m600s22200"
"m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600"
"m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600"
"m600s45600", irsend.outputStr());
"m600s22200", irsend.outputStr());
irsend.reset();
irsend.sendSony(0xA90, SONY_12_BITS);
// We expect three 15-bit commands to be sent.
EXPECT_EQ("m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600"
"m600s600m1200s600m600s600m600s600m600s600m600s45600"
"m600s600m1200s600m600s600m600s600m600s600m600s25800"
"m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600"
"m600s600m1200s600m600s600m600s600m600s600m600s45600"
"m600s600m1200s600m600s600m600s600m600s600m600s25800"
"m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600"
"m600s600m1200s600m600s600m600s600m600s600m600s45600",
"m600s600m1200s600m600s600m600s600m600s600m600s25800",
irsend.outputStr());
}
@@ -71,27 +71,27 @@ TEST(TestSendSony, SendWithDiffRepeats) {
irsend.sendSony(0x240C, SONY_20_BITS, 0); // Send a command with 0 repeats.
EXPECT_EQ("m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s45600", irsend.outputStr());
"m600s600m1200s600m1200s600m600s600m600s16200", irsend.outputStr());
irsend.sendSony(0x240C, SONY_20_BITS, 1); // Send a command with 1 repeat.
EXPECT_EQ("m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s45600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s45600", irsend.outputStr());
"m600s600m1200s600m1200s600m600s600m600s16200", irsend.outputStr());
irsend.sendSony(0x240C, SONY_20_BITS, 3); // Send a command with 3 repeats.
EXPECT_EQ("m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s45600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s45600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s45600"
"m600s600m1200s600m1200s600m600s600m600s16200"
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
"m600s600m1200s600m1200s600m600s600m600s45600", irsend.outputStr());
"m600s600m1200s600m1200s600m600s600m600s16200", irsend.outputStr());
}
// Tests for encodeSony().
@@ -0,0 +1,658 @@
// Copyright 2017 David Conran
#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.
// Test sending typical data only.
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};
irsend.reset();
irsend.sendToshibaAC(toshiba_code);
EXPECT_EQ(
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s7048"
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s7048", irsend.outputStr());
}
// Test sending with repeats.
TEST(TestSendToshibaAC, SendWithRepeats) {
IRsendTest irsend(4);
irsend.begin();
irsend.reset();
uint8_t toshiba_code[TOSHIBA_AC_STATE_LENGTH] = {
0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00};
irsend.sendToshibaAC(toshiba_code, TOSHIBA_AC_STATE_LENGTH, 0);
EXPECT_EQ(
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s7048", irsend.outputStr());
irsend.reset();
irsend.sendToshibaAC(toshiba_code, TOSHIBA_AC_STATE_LENGTH, 2);
EXPECT_EQ(
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s7048"
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s7048"
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s7048", irsend.outputStr());
}
// Test sending atypical sizes.
TEST(TestSendToshibaAC, SendUnexpectedSizes) {
IRsendTest irsend(4);
irsend.begin();
uint8_t toshiba_short_code[8] = {0x01, 0x02, 0x03, 0x04,
0x05, 0x06, 0x07, 0x08};
uint8_t toshiba_long_code[10] = {0x01, 0x02, 0x03, 0x04, 0x05,
0x06, 0x07, 0x08, 0x09, 0x0A};
irsend.reset();
irsend.sendToshibaAC(toshiba_short_code, TOSHIBA_AC_STATE_LENGTH - 1);
ASSERT_EQ("", irsend.outputStr());
irsend.reset();
irsend.sendToshibaAC(toshiba_long_code, TOSHIBA_AC_STATE_LENGTH + 1);
ASSERT_EQ(
"m4400s4300"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623m543s1623"
"m543s472m543s472m543s472m543s472m543s1623m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s1623m543s472m543s1623m543s472"
"m543s7048"
"m4400s4300"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623m543s1623"
"m543s472m543s472m543s472m543s472m543s1623m543s472m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s1623m543s472m543s1623m543s472"
"m543s7048", irsend.outputStr());
}
// Tests for IRToshibaAC class.
TEST(TestToshibaACClass, Power) {
IRToshibaAC toshiba(0);
toshiba.begin();
toshiba.on();
EXPECT_TRUE(toshiba.getPower());
toshiba.off();
EXPECT_FALSE(toshiba.getPower());
toshiba.setPower(true);
EXPECT_TRUE(toshiba.getPower());
toshiba.setPower(false);
EXPECT_FALSE(toshiba.getPower());
}
TEST(TestToshibaACClass, Temperature) {
IRToshibaAC toshiba(0);
toshiba.begin();
toshiba.setTemp(0);
EXPECT_EQ(TOSHIBA_AC_MIN_TEMP, toshiba.getTemp());
toshiba.setTemp(255);
EXPECT_EQ(TOSHIBA_AC_MAX_TEMP, toshiba.getTemp());
toshiba.setTemp(TOSHIBA_AC_MIN_TEMP);
EXPECT_EQ(TOSHIBA_AC_MIN_TEMP, toshiba.getTemp());
toshiba.setTemp(TOSHIBA_AC_MAX_TEMP);
EXPECT_EQ(TOSHIBA_AC_MAX_TEMP, toshiba.getTemp());
toshiba.setTemp(TOSHIBA_AC_MIN_TEMP - 1);
EXPECT_EQ(TOSHIBA_AC_MIN_TEMP, toshiba.getTemp());
toshiba.setTemp(TOSHIBA_AC_MAX_TEMP + 1);
EXPECT_EQ(TOSHIBA_AC_MAX_TEMP, toshiba.getTemp());
toshiba.setTemp(17);
EXPECT_EQ(17, toshiba.getTemp());
toshiba.setTemp(21);
EXPECT_EQ(21, toshiba.getTemp());
toshiba.setTemp(25);
EXPECT_EQ(25, toshiba.getTemp());
toshiba.setTemp(30);
EXPECT_EQ(30, toshiba.getTemp());
}
TEST(TestToshibaACClass, OperatingMode) {
IRToshibaAC toshiba(0);
toshiba.begin();
toshiba.setMode(TOSHIBA_AC_AUTO);
EXPECT_EQ(TOSHIBA_AC_AUTO, toshiba.getMode());
toshiba.setMode(TOSHIBA_AC_COOL);
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
toshiba.setMode(TOSHIBA_AC_HEAT);
EXPECT_EQ(TOSHIBA_AC_HEAT, toshiba.getMode());
toshiba.setMode(TOSHIBA_AC_DRY);
EXPECT_EQ(TOSHIBA_AC_DRY, toshiba.getMode());
toshiba.setMode(TOSHIBA_AC_HEAT + 1);
EXPECT_EQ(TOSHIBA_AC_AUTO, toshiba.getMode());
toshiba.setMode(255);
EXPECT_EQ(TOSHIBA_AC_AUTO, 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.setPower(false);
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
EXPECT_EQ(TOSHIBA_AC_HEAT, 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(255);
EXPECT_EQ(TOSHIBA_AC_FAN_MAX, toshiba.getFan());
toshiba.setFan(TOSHIBA_AC_FAN_MAX);
EXPECT_EQ(TOSHIBA_AC_FAN_MAX, toshiba.getFan());
toshiba.setFan(TOSHIBA_AC_FAN_MAX - 1);
EXPECT_EQ(TOSHIBA_AC_FAN_MAX - 1, toshiba.getFan());
toshiba.setFan(1);
EXPECT_EQ(1, toshiba.getFan());
toshiba.setFan(2);
EXPECT_EQ(2, toshiba.getFan());
toshiba.setFan(3);
EXPECT_EQ(3, toshiba.getFan());
toshiba.setFan(4);
EXPECT_EQ(4, toshiba.getFan());
toshiba.setFan(TOSHIBA_AC_FAN_MAX + 1);
EXPECT_EQ(TOSHIBA_AC_FAN_MAX, 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};
// Verify the starting state.
EXPECT_STATE_EQ(initial_state, toshiba.getRaw(), TOSHIBA_AC_BITS);
EXPECT_TRUE(toshiba.getPower());
EXPECT_EQ(TOSHIBA_AC_AUTO, toshiba.getMode());
EXPECT_EQ(TOSHIBA_AC_FAN_AUTO, toshiba.getFan());
// Change some settings.
toshiba.setMode(TOSHIBA_AC_COOL);
toshiba.setFan(TOSHIBA_AC_FAN_MAX);
toshiba.setTemp(TOSHIBA_AC_MIN_TEMP);
// 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());
// Retrieve the modified state.
EXPECT_STATE_EQ(modified_state, toshiba.getRaw(), TOSHIBA_AC_BITS);
// 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);
}
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};
EXPECT_EQ(0x01, toshiba.calcChecksum(initial_state));
EXPECT_EQ(0xC0, toshiba.calcChecksum(modified_state));
// Check we can call it without instantiating the object.
EXPECT_EQ(0x01, IRToshibaAC::calcChecksum(initial_state));
// Use different lengths.
EXPECT_EQ(0x01, IRToshibaAC::calcChecksum(initial_state,
TOSHIBA_AC_STATE_LENGTH - 1));
EXPECT_EQ(0xFF, IRToshibaAC::calcChecksum(initial_state, 3));
// Minimum length that actually means anything.
EXPECT_EQ(0xF2, IRToshibaAC::calcChecksum(initial_state, 2));
// Technically, there is no such thing as a checksum for a length of < 2
// But test it anyway
EXPECT_EQ(0x00, IRToshibaAC::calcChecksum(initial_state, 1));
EXPECT_EQ(0x00, IRToshibaAC::calcChecksum(initial_state, 0));
// Validity tests.
EXPECT_TRUE(IRToshibaAC::validChecksum(initial_state));
EXPECT_TRUE(IRToshibaAC::validChecksum(modified_state));
EXPECT_FALSE(IRToshibaAC::validChecksum(invalid_state));
EXPECT_FALSE(IRToshibaAC::validChecksum(initial_state, 0));
EXPECT_FALSE(IRToshibaAC::validChecksum(initial_state, 1));
EXPECT_FALSE(IRToshibaAC::validChecksum(initial_state, 2));
}
TEST(TestToshibaACClass, HumanReadableOutput) {
IRToshibaAC toshiba(0);
toshiba.begin();
uint8_t initial_state[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};
toshiba.setRaw(initial_state);
EXPECT_EQ("Power: On, Mode: 0 (AUTO), Temp: 17C, Fan: 0 (AUTO)",
toshiba.toString());
toshiba.setRaw(modified_state);
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 17C, Fan: 5 (MAX)",
toshiba.toString());
toshiba.off();
toshiba.setTemp(25);
toshiba.setFan(3);
toshiba.setMode(TOSHIBA_AC_DRY);
EXPECT_EQ("Power: Off, Mode: 2 (DRY), Temp: 25C, Fan: 3",
toshiba.toString());
}
TEST(TestToshibaACClass, MessageConstuction) {
IRToshibaAC toshiba(0);
IRsendTest irsend(4);
toshiba.begin();
irsend.begin();
toshiba.setFan(1);
toshiba.setMode(TOSHIBA_AC_COOL);
toshiba.setTemp(27);
toshiba.on();
// Check everything for kicks.
EXPECT_EQ(1, toshiba.getFan());
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
EXPECT_EQ(27, toshiba.getTemp());
EXPECT_TRUE(toshiba.getPower());
irsend.reset();
irsend.sendToshibaAC(toshiba.getRaw());
EXPECT_EQ(
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s1623m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s1623m543s1623m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s7048"
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s1623m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s1623m543s1623m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s7048", irsend.outputStr());
// Turn off the power and re-check.
toshiba.setPower(false);
// Check everything for kicks.
EXPECT_EQ(1, toshiba.getFan());
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
EXPECT_EQ(27, toshiba.getTemp());
EXPECT_FALSE(toshiba.getPower());
irsend.reset();
irsend.sendToshibaAC(toshiba.getRaw());
EXPECT_EQ(
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s1623m543s472m543s472m543s472m543s1623m543s1623m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s1623m543s472"
"m543s7048"
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s1623m543s472m543s472m543s472m543s1623m543s1623m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s1623m543s472"
"m543s7048", irsend.outputStr());
// Turn the power back on, and check nothing changed.
toshiba.on();
EXPECT_EQ(1, toshiba.getFan());
EXPECT_EQ(TOSHIBA_AC_COOL, toshiba.getMode());
EXPECT_EQ(27, toshiba.getTemp());
EXPECT_TRUE(toshiba.getPower());
irsend.reset();
irsend.sendToshibaAC(toshiba.getRaw());
EXPECT_EQ(
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s1623m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s1623m543s1623m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s7048"
"m4400s4300"
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s1623"
"m543s1623m543s1623m543s1623m543s1623m543s1623m543s1623m543s472m543s472"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s1623m543s472m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s472m543s1623m543s472m543s472m543s472m543s472m543s472m543s1623"
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s472"
"m543s1623m543s1623m543s1623m543s472m543s472m543s472m543s472m543s472"
"m543s7048", irsend.outputStr());
}
// Decoding a message we entirely constructed based solely on a given state.
TEST(TestDecodeToshibaAC, SyntheticExample) {
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
uint8_t expectedState[TOSHIBA_AC_STATE_LENGTH] = {
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);
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
}
// Test decoding against captures from a real Toshiba A/C remote.
// Recorded by @mwildbolz
TEST(TestDecodeToshibaAC, RealExamples) {
IRToshibaAC toshiba(0);
IRsendTest irsend(4);
IRrecv irrecv(4);
irsend.begin();
uint16_t rawData1[295] = {
4442, 4292, 612, 1544, 616, 1544, 616, 1544, 612, 1548, 610, 468,
612, 468, 662, 1494, 640, 438, 616, 464, 614, 464, 616, 464,
612, 468, 610, 1544, 616, 1544, 616, 468, 612, 1544, 616, 464,
694, 386, 616, 464, 612, 468, 612, 468, 636, 444, 610, 1546,
616, 1544, 612, 1546, 614, 1546, 616, 1546, 740, 1420, 612, 1544,
616, 1546, 616, 464, 610, 468, 610, 470, 612, 468, 610, 468, 610,
470, 636, 438, 616, 464, 616, 464, 616, 1546, 636, 442, 612, 1546,
614, 1544, 616, 464, 614, 464, 610, 468, 612, 468, 612, 468,
612, 468, 636, 440, 614, 464, 616, 464, 616, 464, 612, 468,
636, 442, 638, 442, 662, 418, 610, 464, 616, 464, 616, 464,
610, 468, 612, 468, 636, 444, 610, 468, 638, 438, 614, 1546,
612, 1548, 612, 470, 610, 468, 636, 442, 612, 468, 612, 1544,
612, 7396, 4442, 4292, 610, 1546, 616, 1544, 612, 1548, 612, 1546,
616, 464, 616, 464, 616, 1544, 612, 468, 662, 418, 610, 468,
638, 442, 638, 438, 616, 1546, 616, 1544, 612, 468, 610, 1546,
616, 464, 616, 464, 642, 438, 616, 464, 612, 468, 610, 470,
610, 1546, 616, 1544, 612, 1546, 616, 1546, 614, 1546, 612, 1550,
610, 1544, 616, 1546, 614, 464, 642, 438, 610, 468, 612, 468,
612, 468, 612, 468, 610, 468, 638, 438, 614, 464, 616, 1544,
636, 444, 636, 1520, 616, 1544, 616, 464, 616, 464, 612, 468,
612, 468, 612, 468, 612, 468, 612, 464, 612, 470, 636, 442,
638, 442, 612, 470, 692, 384, 614, 464, 616, 464, 612, 468,
610, 468, 612, 468, 610, 470, 610, 464, 616, 464, 616, 464,
616, 464, 610, 1550, 610, 1546, 640, 444, 688, 386, 616, 464,
612, 468, 612, 1544, 642};
irsend.reset();
irsend.sendRaw(rawData1, 295, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(TOSHIBA_AC, irsend.capture.decode_type);
ASSERT_EQ(TOSHIBA_AC_BITS, 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());
uint16_t rawData2[295] = {
4500, 4236, 636, 1520, 642, 1520, 640, 1520, 664, 1492, 642, 440,
668, 412, 642, 1518, 638, 438, 666, 414, 640, 438, 642, 438,
638, 442, 642, 1516, 640, 1520, 642, 438, 642, 1520, 636, 438,
668, 412, 640, 440, 666, 412, 642, 438, 668, 412, 640, 1516,
668, 1492, 642, 1520, 666, 1494, 638, 1520, 642, 1520, 668, 1490,
666, 1494, 642, 438, 638, 438, 668, 412, 668, 412, 642, 438,
642, 438, 664, 412, 642, 438, 642, 438, 642, 1518, 642, 434,
668, 412, 642, 438, 668, 412, 692, 388, 666, 412, 642, 434,
642, 438, 642, 1518, 668, 412, 668, 412, 640, 438, 638, 438,
642, 438, 640, 438, 668, 1492, 642, 440, 666, 412, 640, 438,
642, 438, 642, 434, 668, 412, 668, 412, 666, 414, 666, 1494,
640, 438, 642, 434, 668, 412, 642, 438, 642, 438, 668, 412,
668, 414, 640, 7362, 4474, 4262, 642, 1518, 638, 1520, 640, 1520,
668, 1494, 640, 434, 642, 438, 640, 1520, 642, 438, 642, 438,
642, 438, 642, 438, 642, 434, 668, 1494, 642, 1518, 638, 442,
638, 1520, 642, 438, 642, 438, 668, 414, 664, 408, 642, 438,
668, 412, 642, 1520, 666, 1494, 642, 1514, 642, 1518, 642, 1520,
636, 1520, 668, 1494, 666, 1494, 638, 438, 666, 414, 640, 440,
666, 412, 668, 412, 668, 412, 642, 434, 668, 412, 668, 412,
668, 1494, 642, 438, 642, 434, 642, 438, 642, 438, 642, 438,
642, 438, 642, 434, 646, 434, 642, 1518, 668, 412, 642, 438,
642, 434, 666, 414, 640, 438, 642, 438, 642, 1518, 642, 438,
642, 434, 668, 412, 642, 438, 642, 438, 642, 438, 642, 438,
642, 438, 640, 1520, 636, 438, 642, 438, 642, 438, 666, 414,
668, 412, 642, 440, 640, 438, 640};
irsend.reset();
irsend.sendRaw(rawData2, 295, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(TOSHIBA_AC, irsend.capture.decode_type);
ASSERT_EQ(TOSHIBA_AC_BITS, 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());
uint16_t rawData3[295] = {
4474, 4262, 642, 1514, 642, 1520, 642, 1520, 642, 1514,
642, 438, 642, 438, 642, 1520, 636, 438, 642, 438, 642, 438,
642, 438, 642, 438, 640, 1520, 638, 1520, 642, 438, 640, 1520,
642, 438, 642, 434, 642, 438, 642, 438, 642, 438, 668, 414,
636, 1520, 642, 1520, 642, 1514, 642, 1520, 642, 1520, 640, 1518,
638, 1520, 666, 1494, 642, 438, 642, 434, 642, 438, 640, 438,
642, 438, 642, 440, 640, 434, 642, 438, 642, 438, 642, 1520,
642, 438, 642, 1514, 642, 1520, 640, 1520, 636, 438, 642, 438,
642, 438, 666, 414, 642, 1520, 636, 1520, 642, 438, 642, 438,
640, 438, 642, 434, 642, 1518, 642, 1520, 642, 438, 642, 434,
640, 438, 642, 438, 642, 438, 642, 440, 642, 438, 668, 408,
642, 1520, 642, 438, 642, 1520, 638, 1518, 642, 438, 642, 438,
640, 1520, 640, 438, 642, 7362, 4474, 4262, 642, 1518, 638, 1520,
640, 1520, 642, 1520, 638, 438, 642, 438, 642, 1518, 642, 438,
638, 438, 642, 438, 642, 438, 642, 438, 642, 1514, 642, 1520,
642, 438, 666, 1490, 642, 438, 642, 438, 642, 440, 640, 438,
642, 434, 640, 438, 642, 1520, 642, 1520, 636, 1520, 642, 1520,
642, 1514, 642, 1518, 642, 1518, 640, 1516, 642, 438, 642, 438,
642, 438, 640, 438, 638, 442, 642, 434, 642, 440, 640, 438,
642, 438, 642, 1518, 642, 438, 642, 1514, 642, 1520, 642, 1518,
642, 438, 642, 432, 642, 438, 642, 438, 642, 1520, 642, 1514,
642, 438, 642, 438, 642, 438, 642, 438, 642, 1514, 642, 1520,
642, 438, 642, 438, 638, 438, 642, 438, 642, 438, 640, 440,
642, 438, 640, 434, 642, 1520, 642, 438, 640, 1520, 668, 1490,
666, 414, 640, 438, 642, 1520, 642, 438, 636};
irsend.reset();
irsend.sendRaw(rawData3, 295, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(TOSHIBA_AC, irsend.capture.decode_type);
ASSERT_EQ(TOSHIBA_AC_BITS, 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());
uint16_t rawData4[295] = {
4474, 4262, 636, 1520, 640, 1520, 640, 1520, 638, 1518, 642, 438,
642, 438, 642, 1520, 636, 438, 642, 438, 642, 438, 642, 438,
636, 444, 636, 1520, 640, 1520, 642, 438, 638, 1524, 638, 438,
640, 438, 642, 438, 640, 438, 642, 438, 638, 438, 642, 1518,
642, 1520, 666, 1494, 636, 1520, 640, 1520, 640, 1520, 636, 1524,
638, 1520, 640, 440, 640, 438, 642, 438, 636, 444, 636, 438,
642, 438, 640, 440, 640, 438, 642, 438, 642, 1518, 638, 438,
642, 1518, 642, 438, 640, 1520, 636, 444, 636, 438, 640, 438,
642, 438, 668, 1494, 640, 438, 642, 1518, 636, 444, 636, 438,
640, 1520, 642, 1518, 642, 1520, 636, 444, 636, 438, 642, 438,
642, 438, 640, 440, 640, 438, 640, 440, 640, 438, 640, 1518,
642, 1520, 636, 1524, 636, 1518, 642, 438, 642, 1518, 642, 1518,
640, 438, 642, 7364, 4472, 4262, 642, 1518, 642, 1518, 638, 1518,
642, 1520, 642, 438, 642, 438, 640, 1520, 636, 440, 640, 438,
642, 438, 640, 438, 642, 438, 642, 1518, 636, 1524, 636, 438,
640, 1520, 642, 438, 642, 438, 640, 438, 636, 444, 636, 438,
668, 412, 642, 1518, 642, 1520, 642, 1520, 636, 1518, 642, 1518,
642, 1520, 636, 1520, 668, 1494, 642, 438, 636, 444, 664, 412,
642, 438, 668, 412, 642, 438, 636, 442, 638, 442, 638, 438,
642, 1518, 642, 438, 642, 1518, 638, 438, 642, 1518, 642, 440,
640, 438, 636, 444, 636, 444, 636, 1520, 642, 438, 642, 1520,
636, 444, 636, 438, 642, 1520, 640, 1520, 636, 1520, 668, 412,
642, 438, 642, 438, 642, 438, 638, 442, 636, 438, 642, 438,
668, 412, 640, 1520, 638, 1524, 636, 1520, 642, 1520, 636, 444,
638, 1522, 638, 1518, 640, 438, 642};
irsend.reset();
irsend.sendRaw(rawData4, 295, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(TOSHIBA_AC, irsend.capture.decode_type);
ASSERT_EQ(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());
// 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());
}
+13 -11
View File
@@ -19,7 +19,7 @@ TEST(TestSendWhynter, SendDataOnly) {
"m750s750m750s750m750s750m750s750m750s750m750s750m750s750m750s750"
"m750s750m750s750m750s750m750s750m750s750m750s750m750s750m750s750"
"m750s750m750s750m750s750m750s750m750s750m750s750m750s750m750s750"
"m750s108000", irsend.outputStr());
"m750s52050", irsend.outputStr());
irsend.reset();
irsend.sendWhynter(0xFFFFFFFF);
@@ -29,7 +29,7 @@ TEST(TestSendWhynter, SendDataOnly) {
"m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150"
"m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150"
"m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150"
"m750s108000", irsend.outputStr());
"m750s12200", irsend.outputStr());
irsend.reset();
irsend.sendWhynter(0x87654321);
@@ -39,7 +39,7 @@ TEST(TestSendWhynter, SendDataOnly) {
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
"m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150"
"m750s750m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150"
"m750s108000", irsend.outputStr());
"m750s33850", irsend.outputStr());
}
// Test sending with different repeats.
@@ -55,7 +55,7 @@ TEST(TestSendWhynter, SendWithRepeats) {
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
"m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150"
"m750s750m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150"
"m750s108000", irsend.outputStr());
"m750s33850", irsend.outputStr());
irsend.reset();
irsend.sendWhynter(0x87654321, WHYNTER_BITS, 1); // 1 repeat.
@@ -65,13 +65,15 @@ TEST(TestSendWhynter, SendWithRepeats) {
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
"m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150"
"m750s750m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150"
"m750s108000"
"m750s33850"
"m750s750m2850s2850"
"m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150m750s2150"
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
"m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150"
"m750s750m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150"
"m750s108000", irsend.outputStr());
"m750s33850", irsend.outputStr());
irsend.reset();
irsend.sendWhynter(0x87654321, WHYNTER_BITS, 2); // 2 repeats.
EXPECT_EQ(
"m750s750m2850s2850"
@@ -79,19 +81,19 @@ TEST(TestSendWhynter, SendWithRepeats) {
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
"m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150"
"m750s750m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150"
"m750s108000"
"m750s33850"
"m750s750m2850s2850"
"m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150m750s2150"
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
"m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150"
"m750s750m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150"
"m750s108000"
"m750s33850"
"m750s750m2850s2850"
"m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150m750s2150"
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
"m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150"
"m750s750m750s750m750s2150m750s750m750s750m750s750m750s750m750s2150"
"m750s108000", irsend.outputStr());
"m750s33850", irsend.outputStr());
}
// Test sending an atypical data size.
@@ -104,7 +106,7 @@ TEST(TestSendWhynter, SendUnusualSize) {
EXPECT_EQ(
"m750s750m2850s2850"
"m750s750m750s750m750s750m750s750m750s750m750s750m750s750m750s750"
"m750s108000", irsend.outputStr());
"m750s88050", irsend.outputStr());
irsend.reset();
irsend.sendWhynter(0x1234567890ABCDEF, 64);
@@ -118,7 +120,7 @@ TEST(TestSendWhynter, SendUnusualSize) {
"m750s2150m750s750m750s2150m750s750m750s2150m750s750m750s2150m750s2150"
"m750s2150m750s2150m750s750m750s750m750s2150m750s2150m750s750m750s2150"
"m750s2150m750s2150m750s2150m750s750m750s2150m750s2150m750s2150m750s2150"
"m750s108000", irsend.outputStr());
"m750s12200", irsend.outputStr());
}
// Tests for decodeWhynter().