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:
1 parent
9b258723a8
commit
b12ee19979
130 files changed
+16548
-1693
No files matched your search
@@ -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);
|
||||
}
|
||||
@@ -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_
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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_
|
||||
@@ -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));
|
||||
}
|
||||
@@ -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 $@
|
||||
@@ -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);
|
||||
}
|
||||
@@ -101,7 +101,7 @@ TEST(TestSendCoolix, SendWithRepeats) {
|
||||
}
|
||||
|
||||
// Test sending an atypical data size.
|
||||
TEST(TestSendCoolix, SendUsualSize) {
|
||||
TEST(TestSendCoolix, SendUnusualSize) {
|
||||
IRsendTest irsend(4);
|
||||
irsend.begin();
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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().
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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().
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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));
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
@@ -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().
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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().
|
||||
|
||||
|
||||
@@ -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().
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
@@ -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().
|
||||
|
||||
Reference in new issue
Block a user