Files
IRremoteESP8266/test/ir_EliteScreens_test.cpp
David Conran b77b0e1ae6 Add support for Elite Screens protocol. (#1310)
* Add support for Elite Screens protocol.
* A constant bit time 32-bit protocol with a single repeat.
* Add `sendElitescreens()` & `decodeElitescreens()`
* Unit test coverage including real & synthetic examples.
* decoding confirmed to be working.
See https://github.com/crankyoldgit/IRremoteESP8266/issues/1306#issuecomment-716120736

Fixes #1306
2020-10-26 12:38:34 +10:00

141 lines
5.0 KiB
C++

// Copyright 2017 David Conran
#include "IRac.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Housekeeping tests
TEST(TestUtils, Housekeeping) {
ASSERT_EQ("ELITESCREENS", typeToString(decode_type_t::ELITESCREENS));
ASSERT_EQ(decode_type_t::ELITESCREENS, strToDecodeType("ELITESCREENS"));
ASSERT_FALSE(hasACState(decode_type_t::ELITESCREENS));
ASSERT_FALSE(IRac::isProtocolSupported(decode_type_t::ELITESCREENS));
ASSERT_EQ(kEliteScreensBits,
IRsendTest::defaultBits(decode_type_t::ELITESCREENS));
ASSERT_EQ(kEliteScreensDefaultRepeat,
IRsendTest::minRepeats(decode_type_t::ELITESCREENS));
}
// Tests for sendElitescreens().
// Test sending typical data only.
TEST(TestSendElitescreens, SendDataOnly) {
IRsendTest irsend(kGpioUnused);
irsend.begin();
irsend.reset();
irsend.sendElitescreens(0xFEA3387); // STOP command
EXPECT_EQ(
"f38000d50"
"m1214s470m1214s470m1214s470m1214s470"
"m470s1214m470s1214m470s1214m470s1214"
"m470s1214m470s1214m470s1214m1214s470"
"m470s1214m1214s470m470s1214m1214s470"
"m1214s470m1214s470m470s1214m470s1214"
"m1214s470m1214s470m470s1214m470s1214"
"m470s1214m1214s470m1214s470m1214s470"
"m1214s470m470s1214m470s1214m470"
"s30414"
"m1214s470m1214s470m1214s470m1214s470"
"m470s1214m470s1214m470s1214m470s1214"
"m470s1214m470s1214m470s1214m1214s470"
"m470s1214m1214s470m470s1214m1214s470"
"m1214s470m1214s470m470s1214m470s1214"
"m1214s470m1214s470m470s1214m470s1214"
"m470s1214m1214s470m1214s470m1214s470"
"m1214s470m470s1214m470s1214m470"
"s30414",
irsend.outputStr());
}
// Tests for decodeElitescreens().
// Decode a 'real' example
TEST(TestDecodeElitescreens, RealExample) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
irsend.begin();
// From https://github.com/crankyoldgit/IRremoteESP8266/issues/1306#issuecomment-715913084
// STOP (111100000010 0xF02)
const uint16_t rawData[127] = {
1278, 456, 1248, 486, 1226, 452, 1252, 454, // 0 0 0 0 0x0
474, 1220, 474, 1222, 480, 1214, 476, 1222, // 1 1 1 1 0xF
472, 1224, 478, 1216, 476, 1220, 1256, 480, // 1 1 1 0 0xE
450, 1216, 1248, 488, 442, 1222, 1252, 486, // 1 0 1 0 0xA
1226, 478, 1224, 482, 448, 1220, 472, 1222, // 0 0 1 1 0x3
1254, 482, 1220, 486, 444, 1222, 480, 1218, // 0 0 1 1 0x3
474, 1220, 1254, 482, 1222, 484, 1218, 488, // 1 0 0 0 0x8
1224, 482, 450, 1218, 474, 1220, 470, // 0 1 1 1 0x7
30482,
1246, 460, 1274, 460, 1220, 456, 1246, 488,
452, 1214, 478, 1218, 474, 1220, 470, 1228,
476, 1220, 472, 1222, 480, 1214, 1248, 486,
476, 1190, 1274, 460, 480, 1186, 1278, 460,
1252, 426, 1276, 456, 474, 1194, 478, 1216,
1280, 456, 1246, 460, 482, 1186, 474, 1224,
478, 1216, 1282, 454, 1248, 458, 1244, 462,
1252, 456, 474, 1192, 480, 1216, 476}; // UNKNOWN 148A4DFF
irsend.reset();
irsend.sendRaw(rawData, 127, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(ELITESCREENS, irsend.capture.decode_type);
EXPECT_EQ(kEliteScreensBits, irsend.capture.bits);
EXPECT_EQ(0xFEA3387, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
}
// Decode a Synthetic example
TEST(TestDecodeElitescreens, SyntheticExample) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
irsend.begin();
irsend.reset();
irsend.sendElitescreens(0xFEA3387);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(ELITESCREENS, irsend.capture.decode_type);
EXPECT_EQ(kEliteScreensBits, irsend.capture.bits);
EXPECT_EQ(0xFEA3387, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
}
// Decode a 'real' example with no repeat.
TEST(TestDecodeElitescreens, RealExampleNoRepeat) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
irsend.begin();
// From https://github.com/crankyoldgit/IRremoteESP8266/issues/1306#issuecomment-715901468
// UP
const uint16_t rawData[63] = {
1250, 450, 1250, 450, 1250, 500, 1200, 500, 450, 1250, 450, 1200, 500, 1200,
500, 1200, 500, 1200, 500, 1200, 1250, 450, 500, 1200, 450, 1250, 1250, 450,
450, 1250, 1250, 450, 1250, 450, 1250, 450, 500, 1200, 1250, 450, 1250, 450,
1250, 450, 500, 1200, 1250, 450, 1250, 450, 500, 1200, 1250, 450, 500, 1200,
1250, 450, 500, 1200, 500, 1200, 1250}; // Protocol=UNKNOWN Data=0x2D8CB141
irsend.reset();
irsend.sendRaw(rawData, 63, 38000);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(ELITESCREENS, irsend.capture.decode_type);
EXPECT_EQ(kEliteScreensBits, irsend.capture.bits);
EXPECT_EQ(0xFDA2256, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_FALSE(irsend.capture.repeat);
}