Tasmota/lib/lib_basic/IRremoteESP8266-2.7.13/test/ir_Symphony_test.cpp

199 lines
8.2 KiB
C++

// Copyright 2020 David Conran
#include "IRac.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for sendSymphony().
// Test sending typical data only.
TEST(TestSendSymphony, SendDataOnly) {
IRsendTest irsend(kGpioUnused);
irsend.begin();
irsend.sendSymphony(0xD90);
EXPECT_EQ(
"f38000d50"
"m1250s400m1250s400m400s1250m1250s400m1250s400m400s1250m400s1250m1250s400"
"m400s1250m400s1250m400s1250"
"m400s7850"
"m1250s400m1250s400m400s1250m1250s400m1250s400m400s1250m400s1250m1250s400"
"m400s1250m400s1250m400s1250"
"m400s7850"
"m1250s400m1250s400m400s1250m1250s400m1250s400m400s1250m400s1250m1250s400"
"m400s1250m400s1250m400s1250"
"m400s7850"
"m1250s400m1250s400m400s1250m1250s400m1250s400m400s1250m400s1250m1250s400"
"m400s1250m400s1250m400s1250"
"m400s7850",
irsend.outputStr());
}
// Tests for decodeSymphony().
// Decode normal Symphony messages.
TEST(TestDecodeSymphony, SyntheticSelfDecode) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
irsend.begin();
// Real-life Symphony code from an actual capture/decode.
irsend.reset();
irsend.sendSymphony(0x123);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(decode_type_t::SYMPHONY, irsend.capture.decode_type);
EXPECT_EQ(kSymphonyBits, irsend.capture.bits);
EXPECT_EQ(0x123, irsend.capture.value);
EXPECT_EQ(0, irsend.capture.address);
EXPECT_EQ(0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
}
// Decode a real Symphony message.
TEST(TestDecodeSymphony, RealMessageDecode) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
irsend.begin();
// Real-life Symphony code from an actual capture/decode.
// Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1057#issue-577216614
irsend.reset();
const uint16_t button_1[95] = {
1296, 412, 1294, 386, 420, 1224, 1322, 390, 1290, 390, 420, 1224, 452,
1220, 1314, 394, 420, 1222, 482, 1190, 480, 1192, 452, 7960,
1290, 420, 1290, 390, 418, 1226, 1318, 394, 1262, 416, 420, 1224, 454,
1220, 1292, 416, 422, 1222, 450, 1222, 452, 1218, 454, 8208,
1296, 414, 1292, 386, 418, 1226, 1292, 422, 1260, 420, 424, 1218, 454,
1226, 1312, 390, 420, 1224, 454, 1220, 482, 1186, 454, 7960,
1318, 392, 1264, 416, 392, 1252, 1318, 394, 1288, 394, 418, 1224, 452,
1224, 1292, 422, 414, 1222, 458, 1214, 450, 1222, 454};
irsend.sendRaw(button_1, 95, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(decode_type_t::SYMPHONY, irsend.capture.decode_type);
EXPECT_EQ(kSymphonyBits, irsend.capture.bits);
EXPECT_EQ(0xD90, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
// Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1057#issuecomment-596038442
irsend.reset();
const uint16_t power[23] = {
1308, 368, 1310, 368, 448, 1222, 1310, 372, 1308, 400, 442, 1198, 472,
1198, 1284, 396, 444, 1224, 470, 1200, 470, 1198, 472};
irsend.sendRaw(power, 23, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decodeSymphony(&irsend.capture));
EXPECT_EQ(decode_type_t::SYMPHONY, irsend.capture.decode_type);
EXPECT_EQ(kSymphonyBits, irsend.capture.bits);
EXPECT_EQ(0xD90, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
irsend.reset();
const uint16_t swing[23] = {
1290, 418, 1286, 392, 422, 1248, 1284, 400, 1294, 386, 422, 1248, 422,
1250, 444, 1228, 424, 1248, 446, 1226, 1258, 420, 446};
irsend.sendRaw(swing, 23, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(decode_type_t::SYMPHONY, irsend.capture.decode_type);
EXPECT_EQ(kSymphonyBits, irsend.capture.bits);
EXPECT_EQ(0xD82, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
}
// Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1057#issuecomment-596543641
TEST(TestDecodeSymphony, RealMessageSentViaLibrary) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
irsend.begin();
irsend.reset();
// Generated by the library/ESP8266.
const uint16_t rawdata_lib[47] = {
1222, 430, 1250, 436, 410, 1242, 1274, 446, 1274, 412, 414, 1266, 410,
1264, 1252, 436, 436, 1240, 410, 1270, 438, 1242, 410, 8012, 1254, 434,
1258, 432, 438, 1240, 1276, 416, 1252, 434, 438, 1234, 412, 1270, 1250,
442, 412, 1264, 438, 1238, 410, 1270, 438};
irsend.sendRaw(rawdata_lib, 47, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(decode_type_t::SYMPHONY, irsend.capture.decode_type);
EXPECT_EQ(kSymphonyBits, irsend.capture.bits);
EXPECT_EQ(0xD90, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
irsend.reset();
// Generated by the real remote.
const uint16_t rawdata_remote[47] = {
1286, 396, 1286, 396, 446, 1226, 1288, 400, 1294, 388, 444, 1228, 446,
1226, 1286, 396, 444, 1226, 448, 1226, 468, 1204, 448, 7968, 1286, 396,
1286, 396, 470, 1202, 1286, 400, 1286, 396, 446, 1224, 448, 1226, 1288,
396, 446, 1226, 472, 1200, 448, 1226, 472};
irsend.sendRaw(rawdata_remote, 47, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(decode_type_t::SYMPHONY, irsend.capture.decode_type);
EXPECT_EQ(kSymphonyBits, irsend.capture.bits);
EXPECT_EQ(0xD90, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
}
// Decode a real SM5021 generated message.
// Note: This used to fail because it had a "long" mark before the gap in mesg.
TEST(TestDecodeSymphony, Issue1105) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
irsend.begin();
// Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1105#issuecomment-625327833
irsend.reset();
uint16_t rawData[191] = {
1324, 372, 1322, 398, 448, 1218, 476, 1216, 478, 1216, 478, 1218, 478,
1218, 476, 1218, 476, 1220, 474, 1220, 474, 1220, 1346, 7128, 1320, 402,
1290, 404, 440, 1252, 442, 1254, 440, 1254, 440, 1254, 440, 1254, 440,
1254, 440, 1254, 442, 1254, 440, 1254, 1288, 7186, 1288, 408, 1286, 408,
438, 1254, 440, 1254, 440, 1254, 440, 1254, 440, 1254, 440, 1256, 440,
1254, 440, 1254, 440, 1254, 1288, 7186, 1288, 408, 1286, 408, 438, 1254,
440, 1256, 440, 1254, 440, 1254, 440, 1254, 440, 1254, 438, 1256, 438,
1256, 440, 1254, 1288, 7188, 1288, 408, 1286, 408, 438, 1256, 438, 1256,
440, 1254, 438, 1256, 438, 1256, 438, 1256, 438, 1256, 438, 1256, 440,
1254, 1288, 7188, 1286, 408, 1286, 408, 440, 1254, 438, 1256, 438, 1256,
438, 1256, 440, 1254, 438, 1254, 440, 1256, 438, 1256, 440, 1256, 438,
8038, 1284, 408, 1286, 408, 438, 1282, 412, 1282, 414, 1280, 414, 1280,
414, 1282, 414, 1280, 412, 1276, 412, 1286, 414, 1282, 412, 8062, 1260,
434, 1262, 432, 414, 1280, 414, 1282, 412, 1282, 412, 1282, 412, 1282,
414, 1280, 414, 1282, 412, 1282, 412, 1282, 412}; // UNKNOWN 827AA7B
irsend.sendRaw(rawData, 191, 38000);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(decode_type_t::SYMPHONY, irsend.capture.decode_type);
EXPECT_EQ(kSymphonyBits, irsend.capture.bits);
EXPECT_EQ(0xC01, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
}
TEST(TestUtils, Housekeeping) {
ASSERT_EQ("SYMPHONY", typeToString(decode_type_t::SYMPHONY));
ASSERT_EQ(decode_type_t::SYMPHONY, strToDecodeType("SYMPHONY"));
ASSERT_FALSE(hasACState(decode_type_t::SYMPHONY));
ASSERT_FALSE(IRac::isProtocolSupported(decode_type_t::SYMPHONY));
ASSERT_EQ(kSymphonyBits, IRsendTest::defaultBits(decode_type_t::SYMPHONY));
ASSERT_EQ(kSymphonyDefaultRepeat,
IRsendTest::minRepeats(decode_type_t::SYMPHONY));
}